PluginProbe
Elementor Website Builder – more than just a page builder / 4.1.0-beta1
Elementor Website Builder – more than just a page builder v4.1.0-beta1
4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 All 456 releases
← All changes | core/common/modules/events-manager/module.php +44 -3 4.0.9 → 4.1.0-beta1 View file →
@@ -3,8 +3,9 @@
3 3 namespace Elementor\Core\Common\Modules\EventsManager;
4 4
5 5 use Elementor\Core\Base\Module as BaseModule;
6 6 use Elementor\Core\Common\Modules\Connect\Apps\Base_App;
7 +use Elementor\Core\Common\Modules\Connect\Apps\Common_App;
7 8 use Elementor\Core\Experiments\Manager as Experiments_Manager;
8 9 use Elementor\Includes\EditorAssetsAPI;
9 10 use Elementor\Utils;
10 11 use Elementor\Plugin;
@@ -30,14 +31,34 @@
30 31 ! Tracker::has_terms_changed( '2025-07-07' ) &&
31 32 Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME );
32 33
33 34 $is_flags_enabled = false;
35 + $session_recording_events = [];
34 36
35 37 if ( $can_send_events ) {
36 38 $mixpanel_config = self::get_remote_mixpanel_config();
37 - $is_flags_enabled = EditorAssetsAPI::has_valid_nested_array( $mixpanel_config, [ 0 ] )
38 - ? (bool) ( $mixpanel_config[0]['flags'] ?? false )
39 - : false;
39 + $has_config = EditorAssetsAPI::has_valid_nested_array( $mixpanel_config, [ 0 ] );
40 +
41 + if ( $has_config ) {
42 + $is_flags_enabled = (bool) ( $mixpanel_config[0]['flags'] ?? false );
43 +
44 + $session_replays = $mixpanel_config[0]['sessionReplays'] ?? [];
45 + $is_session_replays_enabled = (bool) ( $session_replays['enabled'] ?? false );
46 + $raw_events = $session_replays['events'] ?? null;
47 + $events_map = is_array( $raw_events ) ? $raw_events : [];
48 +
49 + if ( $is_session_replays_enabled ) {
50 + $session_recording_events = array_values( array_filter(
51 + self::get_session_recording_events(),
52 + function ( $pair ) use ( $events_map ) {
53 + if ( ! isset( $pair['start'] ) ) {
54 + return false;
55 + }
56 + return (bool) ( $events_map[ $pair['start'] ] ?? false );
57 + }
58 + ) );
59 + }
60 + }
40 61 }
41 62
42 63 $settings = [
43 64 'can_send_events' => $can_send_events,
@@ -50,8 +71,10 @@
50 71 'subscription_id' => self::get_subscription_id(),
51 72 'subscription' => self::get_subscription(),
52 73 'token' => ELEMENTOR_EDITOR_EVENTS_MIXPANEL_TOKEN,
53 74 'flags_enabled' => $is_flags_enabled,
75 + 'user_id' => self::get_user_id(),
76 + 'session_recording_events' => $session_recording_events,
54 77 ];
55 78
56 79 return $settings;
57 80 }
@@ -97,6 +120,24 @@
97 120 EditorAssetsAPI::ASSETS_DATA_KEY => 'mixpanel',
98 121 ] );
99 122
100 123 return $editor_assets_api->get_assets_data();
124 + }
125 +
126 + private static function get_session_recording_events(): array {
127 + return [
128 + // Each entry defines a recording window: recording starts when 'start' fires
129 + // and stops when 'end' fires. 'end' is optional — omit or set to null to record indefinitely.
130 + [ 'start' => 'editor_loaded' ],
131 + ];
132 + }
133 +
134 + private static function get_user_id() {
135 + $user_common_data = get_user_option( Common_App::OPTION_CONNECT_COMMON_DATA_KEY );
136 +
137 + if ( ! is_array( $user_common_data ) ) {
138 + return null;
139 + }
140 +
141 + return Common_App::get_connect_user_id_from_access_token( $user_common_data['access_token'] ?? null );
101 142 }
102 143 }