PluginProbe
Elementor Website Builder – more than just a page builder / 4.1.0-dev3
Elementor Website Builder – more than just a page builder v4.1.0-dev3
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 4.1.0-dev2 All 455 releases
← All changes | core/common/modules/events-manager/module.php +27 -6 4.2.0-beta2 → 4.1.0-dev3 View file →
@@ -17,9 +17,9 @@
17 17
18 18 class Module extends BaseModule {
19 19
20 20 const EXPERIMENT_NAME = 'editor_events';
21 - const DEFAULT_SESSION_RECORDING_PERCENT = 0;
21 +
22 22 const REMOTE_MIXPANEL_CONFIG_URL = 'https://assets.elementor.com/mixpanel/v1/mixpanel.json';
23 23
24 24 public function get_name() {
25 25 return 'events-manager';
@@ -31,10 +31,9 @@
31 31 ! Tracker::has_terms_changed( '2025-07-07' ) &&
32 32 Plugin::$instance->experiments->is_feature_active( self::EXPERIMENT_NAME );
33 33
34 34 $is_flags_enabled = false;
35 - $session_recording_percent = self::DEFAULT_SESSION_RECORDING_PERCENT;
36 - $debug = ( defined( 'ELEMENTOR_EDITOR_EVENTS_DEBUG' ) && ELEMENTOR_EDITOR_EVENTS_DEBUG ) ?? false;
35 + $session_recording_events = [];
37 36
38 37 if ( $can_send_events ) {
39 38 $mixpanel_config = self::get_remote_mixpanel_config();
40 39 $has_config = EditorAssetsAPI::has_valid_nested_array( $mixpanel_config, [ 0 ] );
@@ -42,15 +41,28 @@
42 41 if ( $has_config ) {
43 42 $is_flags_enabled = (bool) ( $mixpanel_config[0]['flags'] ?? false );
44 43
45 44 $session_replays = $mixpanel_config[0]['sessionReplays'] ?? [];
46 - $session_recording_percent = $session_replays['recordSessionsPercent'] ?? null;
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 + }
47 60 }
48 61 }
49 62
50 63 $settings = [
51 64 'can_send_events' => $can_send_events,
52 - 'debug' => $debug,
53 65 'elementor_version' => ELEMENTOR_VERSION,
54 66 'site_url' => hash( 'sha256', get_site_url() ),
55 67 'wp_version' => get_bloginfo( 'version' ),
56 68 'user_agent' => esc_html( Utils::get_super_global_value( $_SERVER, 'HTTP_USER_AGENT' ) ),
@@ -60,9 +72,9 @@
60 72 'subscription' => self::get_subscription(),
61 73 'token' => ELEMENTOR_EDITOR_EVENTS_MIXPANEL_TOKEN,
62 74 'flags_enabled' => $is_flags_enabled,
63 75 'user_id' => self::get_user_id(),
64 - 'session_recording_percent' => $session_recording_percent,
76 + 'session_recording_events' => $session_recording_events,
65 77 ];
66 78
67 79 return $settings;
68 80 }
@@ -109,8 +121,17 @@
109 121 ] );
110 122
111 123 return $editor_assets_api->get_assets_data();
112 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 +
113 134 private static function get_user_id() {
114 135 $user_common_data = get_user_option( Common_App::OPTION_CONNECT_COMMON_DATA_KEY );
115 136
116 137 if ( ! is_array( $user_common_data ) ) {