�PNG  IHDR22?�� pHYs  �� OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*! J�!��Q�EEȠ�����Q, � ��!���������{�kּ������>���� �H3Q5� �B�������.@� $p�d!s�#�~<<+"��x� �M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH���� � 0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4���������x����6��_-��"bb���ϫp@�t~��,/��;�m��%�h^ �u��f�@����W�p�~<�5�j>{�-�]c�K'Xt����o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A��,���� �`6�B$��BB d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(�� A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=� �C��7�F� �dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8, �c˱"� ���V����cϱw�E� 6wB aAHXLXN�H� $4� 7 �Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[ �b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w ��Ljg(�gw��L�Ӌ�T071���oUX*�*|�� �J�&�*/T����ު U�U�T��^S}�FU3S� Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k ��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN �(���~���)�)�4L�1e\k����X�H�Q�G�6������E�Y��A�J'\'Gg����S�Sݧ �M=:��.�k���Dw�n��^��Lo��y���}/�T�m���G X� $� �<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��= ���Z~s�r:V:ޚΜ�?}����/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z���������ۯ�6�i�ܟ�4�)�Y3s���C�Q��? ��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�������!h�쐭!��Α�i�P~���a�a��~ '���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl������� �{�/�]py�����.,:�@L�N8��A*��%�w%� y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y- �B��TZ(�*�geWf�͉�9���+��̳�ې7�����ᒶ��KW-X潬j9�������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n �ڴ �V����E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa��n��{��4���[���>ɾ�UUM�f�e�I���?�������m]�Nmq����#�׹���=TR��+�G�����w- 6 U����#pDy��� �� :�v�{���vg/jB��F�S��[b[�O�>����z�G��499�?r����C�d�&����ˮ/~�����јѡ�򗓿m|������������x31^�V���w�w��O�| (�h���SЧ��������c3-� cHRMz%������u0�`:�o�_�F5IDATx��ytUս�?�;���fN$$��@B�!�k��� -*�gE���j�O�kQ�ʠ`U�B_ �AÐ0%�Ȕ�@r3ޛ;߳��$�@��v����^�s����������$��ߢ !�W��5�̱'-٘������4�>�Rƫ$�G��0U�H}�_ _� #��k�MJ/=�9Du *ڲ�k�PQ;0��j|�*�$�^컂脛y���>�z×� B��� ��(�:$�ʔ_�6��C!B����MVx��a��ζyY����j��ƋY2�9�F�{r��r�딟F��Q��hY6��� x��[l��RC��������nt@��;P��3��� F�w��7��:�P���ɋ'���mj���Bƪ�$�Q�L��y��߷g��\���z����v5�p�v$�v櫻�`6~K �Y�X����,�:��"�o�e0II"(��,������l_�C���/4�+f�E�!q��:����u����c��樼.UE�@� �]K�W���$-�h]�JG���Dz)�`��.�A/ ���mᏣc�3jK� �!�>���$�Q�!�_�? \�C2(E �M$Z I{�U���s�ǣ���=��@Բe ޻��W�����@ �w����}�9v,)��.}*|"�s��di���,���G�]W�AC�������|<����[��ߕ������K�*�G nߴ!��‹��J�!��6(L�a)��Am��������;adf��:�xm��nh�;֦I��(���o�C~ډa?�=��s����h��E������xp����)���_���t��W�����´;8���`dz=(��@@�+,�;�`�fhl��XȌ�3,uI�~z(J����� �ZX�A����H'�À�㜦�82|��a�n�z2��I���� ���EY�h�ε<�0�q�{��C��v�˅��?"@��χ�x�WS+��N�~�KQ�J�8ل�� _.W��� !TU{�����,��"�� �;�������HI S� ��))�o�1�H�D� ���� (� ;����"Ҕ��,���� �F=���O��&�Ph>�`���y��߲ &S��P�<��'��1s�1cĂ�N����2)����@�u��tv��<�+�-&�����h��[!FSG���' � z z0��<����8d&�����E0�,��<��"!P�b4��� �{S�����X����.�囤���T��hEF��X�q0"-<����h���]�Py*����F⩍��@v�˂�Y08�� .q��a��s����(!<̫1�3�L�H��7sYW�`��qtu�\7��?�@�Y�� %Ka�x�GZ�*W�P��y�����N0r9��Z�c�%���q,��k�����!!,��>���IB��� �x1�Xu�Y���v-���ֺ��N������JP��a�2`�e5��w��u;�6�i���̃��(K���ťa��(l51��JL��O'%���]���ٖ뿉!��{*�p+f ���i8��D�ȑ���ܩ�M��V��ӟz��x�7Z�1i}�^͜���6e����x��)u�d�ˏ�V�eG�\�X1�����=n�U'�~Y����L�\,�(d!x ,�:�TW8� M`r���@��r+v�Q0��>^;˴�VbF��('����� �*O��i��j�Ӆ����^�S3&� ���{������.ی�� N;��NU%d0�Ce\r"�C�b��&t7N�7��� �ȪD�[%l�۪�$��'m?�A9tI�9>��NVL ��� 6v~M�����ъ�B���0����9$&=ώm��W�0���L���&��E���f�f��'+�9��hv��7,���M��6�D�&�^� �����8 D֮�����o��k^z��O��hP�8q�5d*��YVq3�{��������#LX4�?��jP=3�~�؅c�ݰ�̱�ұ��8̲��2�G�����j��έ�9��w7���U�X�w�85C��?!I&���o&����L���I#�^�eV�,�^t5�k� �xs˛\��U�8��."���{���ǵ�l4��ݼ�;��r"���G�/~���gJV�N糦��ZZ^k+NN�D��I$�=OE�z����|*�*{��%k���G��>�`9��b;�s���8,�qs��c��.b��q�%�>r��n�R�Ƨ�%�,�A��le#�8���}; 21�0�b�&�QX�f���q�00����$>�h�N�'�a3��A���/�r ��L5�8�GԲ'�����w;��c#�q1���h$*��V^�k��QĽ�b:i������� ����H F#�_���,��]g����Ը����`RUU���� ��"�qD���>-��ϤI�~��3�̴�����NZ[[555�eeek7�m����YF#[��Đ��R��i��L�H�r ��@��J-�Pŝ��_|�-��6y��ks�V�U~��6���w.����(��0A� 4��f��� /���C�xŊ�ٳ����z=6�����rg���mKo��o�/����a�g���?'9%9��P��斓��~���L{�� �H��{AW��B��$����v�1b�&Mb�ر��ر#�0`�`xMBp! )Z�Nmo�mZ�g�}�eذaWTVV ���'99��C5��&�&+5�bT>|8��PUUETT����&���t��~TE%��'������b�tEGG;RSS�S�N�v��ѯ��t����u1@�ޚ"f��͈���r'L�Ph��m��ƌ�74o��`�x�q�P���NRSS�X,�����l&&&��MFFA!-��`��ҷ�n��Yuu�����x<I�LB%����KԒ50�!�3�bz�����ʸKL���;---�l6[��`��������Ȏ;�����egg4��!D�T��jWujyZ��������K����%����p�^���X,6��sV=�ܖ����6�3�X ���4ҿ��A2�&����_k�;d�� �VfOIEND�B`� 0x0x
PHP 8.1.34
Preview: tracker.php Size: 17.00 KB
/home2/astrociv/www/jarogoldtour.in/wp-content/plugins/elementor/includes/tracker.php
<?php
namespace Elementor;

use Elementor\Core\Common\Modules\EventTracker\DB as Events_DB_Manager;
use Elementor\Core\Experiments\Experiments_Reporter;
use Elementor\Modules\System_Info\Module as System_Info_Module;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Elementor tracker.
 *
 * Elementor tracker handler class is responsible for sending non-sensitive plugin
 * data to Elementor servers for users that actively allowed data tracking.
 *
 * @since 1.0.0
 */
class Tracker {

	/**
	 * API URL.
	 *
	 * Holds the URL of the Tracker API.
	 *
	 * @since 1.0.0
	 * @access private
	 *
	 * @var string API URL.
	 */
	private static $api_url = 'https://my.elementor.com/api/v1/tracker/';

	private static $notice_shown = false;

	const LAST_TERMS_UPDATED = '2025-07-07';

	/**
	 * Init.
	 *
	 * Initialize Elementor tracker.
	 *
	 * @since 1.0.0
	 * @access public
	 * @static
	 */
	public static function init() {
		add_action( 'elementor/tracker/send_event', [ __CLASS__, 'send_tracking_data' ] );
		add_action( 'admin_init', [ __CLASS__, 'handle_tracker_actions' ] );

		add_action( 'update_option_elementor_allow_tracking', [ __CLASS__, 'set_last_update_time' ] );
	}

	/**
	 * Check for settings opt-in.
	 *
	 * Checks whether the site admin has opted-in for data tracking, or not.
	 *
	 * @since 1.0.0
	 * @access public
	 * @static
	 *
	 * @param string $new_value Allowed tracking value.
	 *
	 * @return string Return `yes` if tracking allowed, `no` otherwise.
	 */
	public static function check_for_settings_optin( $new_value ) {
		$old_value = get_option( 'elementor_allow_tracking', 'no' );
		if ( $old_value !== $new_value && 'yes' === $new_value ) {
			Plugin::$instance->custom_tasks->add_tasks_requested_to_run( [
				'opt_in_recalculate_usage',
				'opt_in_send_tracking_data',
			] );
		}

		self::set_last_update_time();

		if ( empty( $new_value ) ) {
			$new_value = 'no';
		}

		return $new_value;
	}

	/**
	 * Send tracking data.
	 *
	 * Decide whether to send tracking data, or not.
	 *
	 * @since 1.0.0
	 * @access public
	 * @static
	 *
	 * @param bool $override
	 */
	public static function send_tracking_data( $override = false ) {
		// Don't trigger this on AJAX Requests.
		if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
			return;
		}

		if ( ! self::is_allow_track() ) {
			return;
		}

		$last_send = self::get_last_send_time();

		/**
		 * Tracker override send.
		 *
		 * Filters whether to override sending tracking data or not.
		 *
		 * @since 1.0.0
		 *
		 * @param bool $override Whether to override default setting or not.
		 */
		$override = apply_filters( 'elementor/tracker/send_override', $override );

		if ( ! $override ) {
			$last_send_interval = strtotime( '-1 week' );

			/**
			 * Tracker last send interval.
			 *
			 * Filters the interval of between two tracking requests.
			 *
			 * @since 1.0.0
			 *
			 * @param int $last_send_interval A date/time string. Default is `strtotime( '-1 week' )`.
			 */
			$last_send_interval = apply_filters( 'elementor/tracker/last_send_interval', $last_send_interval );

			// Send a maximum of once per week by default.
			if ( $last_send && $last_send > $last_send_interval ) {
				return;
			}
		} elseif ( $last_send && $last_send > strtotime( '-1 hours' ) ) {
			return;
		}

		// Update time first before sending to ensure it is set.
		update_option( 'elementor_tracker_last_send', time() );

		$params = self::get_tracking_data( empty( $last_send ) );

		// Tracking data is used for System Info reports, and events should not be included in System Info reports,
		// so it is added here.
		$params['analytics_events'] = self::get_events();

		add_filter( 'https_ssl_verify', '__return_false' );

		wp_safe_remote_post(
			self::$api_url,
			[
				'timeout' => 25,
				'blocking' => false,
				'body' => [
					'data' => wp_json_encode( $params ),
				],
			]
		);

		// After sending the event tracking data, we reset the events table.
		Events_DB_Manager::reset_table();
	}

	/**
	 * Is allow track.
	 *
	 * Checks whether the site admin has opted-in for data tracking, or not.
	 *
	 * @since 1.0.0
	 * @access public
	 * @static
	 */
	public static function is_allow_track() {
		return 'yes' === get_option( 'elementor_allow_tracking', 'no' );
	}

	public static function get_last_update_time() {
		return get_option( 'elementor_allow_tracking_last_update', false );
	}

	public static function set_last_update_time(): void {
		update_option( 'elementor_allow_tracking_last_update', gmdate( 'U' ) );
	}

	public static function has_terms_changed( $terms_updated = self::LAST_TERMS_UPDATED ): bool {
		if ( ! self::is_allow_track() ) {
			return false;
		}

		$last_update_time = self::get_last_update_time();
		if ( $last_update_time ) {
			$terms_updated_timestamp = strtotime( $terms_updated . ' UTC' );

			return $last_update_time < $terms_updated_timestamp;
		}

		return true;
	}

	/**
	 * Handle tracker actions.
	 *
	 * Check if the user opted-in or opted-out and update the database.
	 *
	 * Fired by `admin_init` action.
	 *
	 * @since 1.0.0
	 * @access public
	 * @static
	 */
	public static function handle_tracker_actions() {
		if ( ! isset( $_GET['elementor_tracker'] ) ) {
			return;
		}

		if ( 'opt_into' === $_GET['elementor_tracker'] ) {
			check_admin_referer( 'opt_into' );

			self::set_opt_in( true );
		}

		if ( 'opt_out' === $_GET['elementor_tracker'] ) {
			check_admin_referer( 'opt_out' );

			self::set_opt_in( false );
		}

		wp_safe_redirect( remove_query_arg( 'elementor_tracker' ) );
		exit;
	}

	/**
	 * @since 2.2.0
	 * @access public
	 * @static
	 */
	public static function is_notice_shown() {
		return self::$notice_shown;
	}

	public static function set_opt_in( $value ) {
		if ( $value ) {
			update_option( 'elementor_allow_tracking', 'yes' );
			self::set_last_update_time();

			self::send_tracking_data( true );
		} else {
			update_option( 'elementor_allow_tracking', 'no' );
			update_option( 'elementor_tracker_notice', '1' );
		}
	}

	/**
	 * Get system reports data.
	 *
	 * Retrieve the data from system reports.
	 *
	 * @since 2.0.0
	 * @access private
	 * @static
	 *
	 * @return array The data from system reports.
	 */
	private static function get_system_reports_data() {
		$reports = Plugin::$instance->system_info->load_reports( System_Info_Module::get_allowed_reports() );

		// The log report should not be sent with the usage data - it is not used and causes bloat.
		if ( isset( $reports['log'] ) ) {
			unset( $reports['log'] );
		}

		$system_reports = [];
		foreach ( $reports as $report_key => $report_details ) {
			$system_reports[ $report_key ] = [];
			foreach ( $report_details['report']->get_report() as $sub_report_key => $sub_report_details ) {
				$system_reports[ $report_key ][ $sub_report_key ] = $sub_report_details['value'];
			}
		}
		return $system_reports;
	}

	/**
	 * Get last send time.
	 *
	 * Retrieve the last time tracking data was sent.
	 *
	 * @since 2.0.0
	 * @access private
	 * @static
	 *
	 * @return int|false The last time tracking data was sent, or false if
	 *                   tracking data never sent.
	 */
	private static function get_last_send_time() {
		$last_send_time = get_option( 'elementor_tracker_last_send', false );

		/**
		 * Tracker last send time.
		 *
		 * Filters the last time tracking data was sent.
		 *
		 * @since 1.0.0
		 *
		 * @param int|false $last_send_time The last time tracking data was sent,
		 *                                  or false if tracking data never sent.
		 */
		$last_send_time = apply_filters( 'elementor/tracker/last_send_time', $last_send_time );

		return $last_send_time;
	}

	/**
	 * Get non elementor post usages.
	 *
	 * Retrieve the number of posts that not using elementor.

	 * @return array The number of posts using not used by Elementor grouped by post types
	 *               and post status.
	 */
	public static function get_non_elementor_posts_usage() {
		global $wpdb;

		$usage = [];

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.DirectQuery
		$results = $wpdb->get_results(
			"SELECT `post_type`, `post_status`, COUNT(`ID`) `hits`
				FROM {$wpdb->posts} `p`
				LEFT JOIN {$wpdb->postmeta} `pm` ON(`p`.`ID` = `pm`.`post_id` AND  `meta_key` = '_elementor_edit_mode' )
				WHERE `post_type` != 'elementor_library' AND `meta_value` IS NULL
				GROUP BY `post_type`, `post_status`;"
		);

		if ( $results ) {
			foreach ( $results as $result ) {
				$usage[ $result->post_type ][ $result->post_status ] = $result->hits;
			}
		}

		return $usage;
	}

	/**
	 * Get posts usage.
	 *
	 * Retrieve the number of posts using Elementor.
	 *
	 * @since 2.0.0
	 * @access public
	 * @static
	 *
	 * @return array The number of posts using Elementor grouped by post types
	 *               and post status.
	 */
	public static function get_posts_usage() {
		global $wpdb;

		$usage = [];

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.DirectQuery
		$results = $wpdb->get_results(
			"SELECT `post_type`, `post_status`, COUNT(`ID`) `hits`
				FROM {$wpdb->posts} `p`
				LEFT JOIN {$wpdb->postmeta} `pm` ON(`p`.`ID` = `pm`.`post_id`)
				WHERE `post_type` != 'elementor_library'
					AND `meta_key` = '_elementor_edit_mode' AND `meta_value` = 'builder'
				GROUP BY `post_type`, `post_status`;"
		);

		if ( $results ) {
			foreach ( $results as $result ) {
				$usage[ $result->post_type ][ $result->post_status ] = (int) $result->hits;
			}
		}

		return $usage;
	}

	/**
	 * Get library usage.
	 *
	 * Retrieve the number of Elementor library items saved.
	 *
	 * @since 2.0.0
	 * @access public
	 * @static
	 *
	 * @return array The number of Elementor library items grouped by post types
	 *               and meta value.
	 */
	public static function get_library_usage() {
		global $wpdb;

		$usage = [];

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.DirectQuery
		$results = $wpdb->get_results(
			"SELECT `meta_value`, COUNT(`ID`) `hits`
				FROM {$wpdb->posts} `p`
				LEFT JOIN {$wpdb->postmeta} `pm` ON(`p`.`ID` = `pm`.`post_id`)
				WHERE `post_type` = 'elementor_library'
					AND `meta_key` = '_elementor_template_type'
				GROUP BY `post_type`, `meta_value`;"
		);

		if ( $results ) {
			foreach ( $results as $result ) {
				$usage[ $result->meta_value ] = $result->hits;
			}
		}

		return $usage;
	}

	/**
	 * Get usage of general settings.
	 * 'Elementor->Settings->General'.
	 *
	 * @return array
	 */
	public static function get_settings_general_usage() {
		return self::get_tracking_data_from_settings( 'general' );
	}

	/**
	 * Get usage of advanced settings.
	 * 'Elementor->Settings->Advanced'.
	 *
	 * @return array
	 */
	public static function get_settings_advanced_usage() {
		return self::get_tracking_data_from_settings( 'advanced' );
	}

	/**
	 * Get usage of performance settings.
	 * 'Elementor->Settings->Performance'.
	 *
	 * @return array
	 */
	public static function get_settings_performance_usage() {
		return self::get_tracking_data_from_settings( 'performance' );
	}

	/**
	 * Get usage of experiments settings.
	 *
	 * 'Elementor->Settings->Experiments'.
	 *
	 * @return array
	 */
	public static function get_settings_experiments_usage() {
		$system_info = Plugin::$instance->system_info;

		/**
		 * @var $experiments_report Experiments_Reporter
		 */
		$experiments_report = $system_info->create_reporter( [
			'class_name' => Experiments_Reporter::class,
		] );

		return $experiments_report->get_experiments()['value'];
	}

	/**
	 * Get usage of general tools.
	 * 'Elementor->Tools->General'.
	 *
	 * @return array
	 */
	public static function get_tools_general_usage() {
		return self::get_tracking_data_from_tools( 'general' );
	}

	/**
	 * Get usage of 'version control' tools.
	 * 'Elementor->Tools->Version Control'.
	 *
	 * @return array
	 */
	public static function get_tools_version_control_usage() {
		return self::get_tracking_data_from_tools( 'versions' );
	}

	/**
	 * Get usage of 'maintenance' tools.
	 * 'Elementor->Tools->Maintenance'.
	 *
	 * @return array
	 */
	public static function get_tools_maintenance_usage() {
		return self::get_tracking_data_from_tools( 'maintenance_mode' );
	}

	/**
	 * Get library usage extend.
	 *
	 * Retrieve the number of Elementor library items saved.
	 *
	 * @return array The number of Elementor library items grouped by post types, post status
	 *               and meta value.
	 */
	public static function get_library_usage_extend() {
		global $wpdb;

		$usage = [];

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.DirectQuery
		$results = $wpdb->get_results(
			"SELECT `meta_value`, COUNT(`ID`) `hits`, `post_status`
				FROM {$wpdb->posts} `p`
				LEFT JOIN {$wpdb->postmeta} `pm` ON(`p`.`ID` = `pm`.`post_id`)
				WHERE `post_type` = 'elementor_library'
					AND `meta_key` = '_elementor_template_type'
				GROUP BY `post_type`, `meta_value`, `post_status`;"
		);

		if ( $results ) {
			foreach ( $results as $result ) {
				if ( empty( $usage[ $result->meta_value ] ) ) {
					$usage[ $result->meta_value ] = [];
				}

				if ( empty( $usage[ $result->meta_value ][ $result->post_status ] ) ) {
					$usage[ $result->meta_value ][ $result->post_status ] = 0;
				}

				$usage[ $result->meta_value ][ $result->post_status ] += $result->hits;
			}
		}

		return $usage;
	}

	public static function get_events() {
		global $wpdb;
		$table_name = $wpdb->prefix . Events_DB_Manager::TABLE_NAME;

		// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.DirectQuery
		$results = $wpdb->get_results( "SELECT event_data FROM {$table_name}" );

		$events_data = [];

		foreach ( $results as $event ) {
			// Results are stored in the database as a JSON string. Since all tracking data is encoded right before
			// being sent, it is now decoded.
			$events_data[] = json_decode( $event->event_data, true );
		}

		return $events_data;
	}

	/**
	 * Get the tracking data
	 *
	 * Retrieve tracking data and apply filter
	 *
	 * @access public
	 * @static
	 *
	 * @param bool $is_first_time
	 *
	 * @return array
	 */
	public static function get_tracking_data( $is_first_time = false ) {
		$params = [
			'system' => self::get_system_reports_data(),
			'site_lang' => get_bloginfo( 'language' ),
			'email' => get_option( 'admin_email' ),
			'usages' => [
				'posts' => self::get_posts_usage(),
				'non-elementor-posts' => self::get_non_elementor_posts_usage(),
				'library' => self::get_library_usage(),
				'settings' => [
					'general' => self::get_settings_general_usage(),
					'advanced' => self::get_settings_advanced_usage(),
					'experiments' => self::get_settings_experiments_usage(),
				],
				'tools' => [
					'general' => self::get_tools_general_usage(),
					'version' => self::get_tools_version_control_usage(),
					'maintenance' => self::get_tools_maintenance_usage(),
				],
				'library-details' => self::get_library_usage_extend(),
			],
			'is_first_time' => $is_first_time,
			'install_time' => Plugin::instance()->get_install_time(),
		];

		$site_key = Api::get_site_key();
		if ( ! empty( $site_key ) ) {
			$params['site_key'] = $site_key;
		}

		$allowed_usage_time = self::get_last_update_time();
		if ( ! empty( $allowed_usage_time ) ) {
			$params['allowed_usage_time'] = $allowed_usage_time;
		}

		/**
		 * Tracker send tracking data params.
		 *
		 * Filters the data parameters when sending tracking request.
		 *
		 * @param array $params Variable to encode as JSON.
		 *
		 * @since 1.0.0
		 */
		$params = apply_filters( 'elementor/tracker/send_tracking_data_params', $params );

		return $params;
	}

	/**
	 * @param string $tab_name
	 * @return array
	 */
	private static function get_tracking_data_from_settings( $tab_name ) {
		return self::get_tracking_data_from_settings_page(
			Plugin::$instance->settings->get_tabs(),
			$tab_name
		);
	}

	/**
	 * @param string $tab_name
	 * @return array
	 */
	private static function get_tracking_data_from_tools( $tab_name ) {
		return self::get_tracking_data_from_settings_page(
			Plugin::$instance->tools->get_tabs(),
			$tab_name
		);
	}

	private static function get_tracking_data_from_settings_page( $tabs, $tab_name ) {
		$result = [];

		if ( empty( $tabs[ $tab_name ] ) ) {
			return $result;
		}

		$tab = $tabs[ $tab_name ];

		foreach ( $tab['sections'] as $section_name => $section ) {
			foreach ( $section['fields'] as $field_name => $field ) {
				// Skips fields with '_' prefix.
				if ( '_' === $field_name[0] ) {
					continue;
				}

				$default_value = null;
				$args = $field['field_args'];
				switch ( $args['type'] ) {
					case 'checkbox':
						$default_value = $args['value'];
						break;

					case 'select':
					case 'checkbox_list_cpt':
						$default_value = $args['std'];
						break;

					case 'checkbox_list_roles':
						$default_value = null;
						break;

					// 'raw_html' is used as action and not as data.
					case 'raw_html':
						continue 2; // Skip fields loop.

					default:
						trigger_error( 'Invalid type: \'' . $args['type'] . '\'' ); // phpcs:ignore
				}

				$result[ $field_name ] = get_option( 'elementor_' . $field_name, $default_value );
			}
		}

		return $result;
	}
}

Directory Contents

Dirs: 11 × Files: 22
Name Size Perms Modified Actions
- drwxr-xr-x 2026-09-08 12:22:12
Edit Download
base DIR
- drwxr-xr-x 2026-09-08 12:22:12
Edit Download
controls DIR
- drwxr-xr-x 2026-09-08 12:22:12
Edit Download
- drwxr-xr-x 2026-09-08 12:22:12
Edit Download
elements DIR
- drwxr-xr-x 2026-09-08 12:22:12
Edit Download
- drwxr-xr-x 2026-09-08 12:22:12
Edit Download
libraries DIR
- drwxr-xr-x 2026-09-08 12:21:46
Edit Download
managers DIR
- drwxr-xr-x 2026-09-08 12:22:13
Edit Download
settings DIR
- drwxr-xr-x 2026-09-08 12:22:13
Edit Download
- drwxr-xr-x 2026-09-08 12:22:13
Edit Download
widgets DIR
- drwxr-xr-x 2026-09-08 12:22:13
Edit Download
8.67 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
9.79 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
2.99 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
10.96 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
2.70 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
15.89 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
4.11 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
9.57 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
62.53 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
40.02 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
2.57 KB lrw-r--r-- 2026-09-08 12:22:12
Edit Download
11.16 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
2.81 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
15.61 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
8.21 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
4.16 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
7.81 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
8.91 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
17.00 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
3.44 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
9.99 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
25.20 KB lrw-r--r-- 2026-09-08 12:22:13
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).
© 2026 0xNothings — Secure File Manager. All rights reserved. Built with ❤️ & Tailwind x Dark UI