age[ $doc_name ][ $element_type ]['controls'][ $tab ][ $section ];
$section_ref[ $control ] -= $count;
if ( 0 === $section_ref[ $control ] ) {
unset( $section_ref[ $control ] );
}
}
}
}
}
}
}
update_option( self::OPTION_NAME, $global_usage, false );
$document->delete_meta( self::META_KEY );
}
/**
* Get elements usage.
*
* Get's the current elements usage by passed elements array parameter.
*
* @param array $elements
*
* @return array
*/
private function get_elements_usage( $elements ) {
$usage = [];
Plugin::$instance->db->iterate_data( $elements, function ( $element ) use ( &$usage ) {
if ( empty( $element['widgetType'] ) ) {
$type = $element['elType'];
$element_instance = Plugin::$instance->elements_manager->get_element_types( $type );
} else {
$type = $element['widgetType'];
$element_instance = Plugin::$instance->widgets_manager->get_widget_types( $type );
}
if ( ! isset( $usage[ $type ] ) ) {
$usage[ $type ] = [
'count' => 0,
'control_percent' => 0,
'controls' => [],
];
}
$usage[ $type ]['count']++;
if ( ! $element_instance ) {
return $element;
}
$element_controls = $element_instance->get_controls();
if ( isset( $element['settings'] ) ) {
$settings_controls = $element['settings'];
$element_ref = &$usage[ $type ];
// Add dynamic values.
$settings_controls = $this->add_general_controls( $settings_controls, $element_ref );
$changed_controls_count = $this->add_controls( $settings_controls, $element_controls, $element_ref );
$percent = $changed_controls_count / ( count( $element_controls ) / 100 );
$usage[ $type ] ['control_percent'] = (int) round( $percent );
}
return $element;
} );
return $usage;
}
/**
* Save document usage.
*
* Save requested document usage, and update global.
*
* @param Document $document
*/
private function save_document_usage( Document $document ) {
if ( ! $document::get_property( 'is_editable' ) && ! $document->is_built_with_elementor() ) {
return;
}
// Get data manually to avoid conflict with `\Elementor\Core\Base\Document::get_elements_data... convert_to_elementor`.
$data = $document->get_json_meta( '_elementor_data' );
if ( ! empty( $data ) ) {
try {
$usage = $this->get_elements_usage( $document->get_elements_raw_data( $data ) );
$document->update_meta( self::META_KEY, $usage );
$this->add_to_global( $document->get_name(), $usage );
} catch ( \Exception $exception ) {
Plugin::$instance->logger->get_logger()->error( $exception->getMessage(), [
'document_id' => $document->get_id(),
'document_name' => $document->get_name(),
] );
return;
};
}
}
public static function get_settings_usage() {
$usage = [];
$settings_tab = Plugin::$instance->settings->get_tabs();
$settings = array_merge(
$settings_tab[ Settings::TAB_GENERAL ]['sections'],
$settings_tab[ Settings::TAB_ADVANCED ]['sections']
);
foreach ( $settings as $setting_data ) {
foreach ( $setting_data['fields'] as $field_name => $field_data ) {
$is_hidden_field = ( empty( $field_data['field_args']['type'] ) || 'hidden' === $field_data['field_args']['type'] );
if ( $is_hidden_field ) {
continue;
}
$setting_value = get_option( 'elementor_' . $field_name );
if ( empty( $setting_value ) ) {
continue;
}
$is_default_value = ( ! empty( $field_data['field_args']['std'] ) && $setting_value === $field_data['field_args']['std'] );
if ( $is_default_value ) {
continue;
}
$usage[ $field_name ] = $setting_value;
}
}
$usage = apply_filters( 'elementor/system-info/usage/settings', $usage );
return $usage;
}
/**
* Add system info report.
*/
public function add_system_info_report() {
System_Info::add_report( 'usage', [
'file_name' => __DIR__ . '/usage-reporter.php',
'class_name' => __NAMESPACE__ . '\Usage_Reporter',
] );
System_Info::add_report( 'settings', [
'file_name' => __DIR__ . '/settings-reporter.php',
'class_name' => __NAMESPACE__ . '\Settings_Reporter',
] );
}
/**
* Usage module constructor.
*
* Initializing Elementor usage module.
*
* @access public
*/
public function __construct() {
if ( ! Tracker::is_allow_track() ) {
return;
}
add_action( 'transition_post_status', [ $this, 'on_status_change' ], 10, 3 );
add_action( 'before_delete_post', [ $this, 'on_before_delete_post' ] );
add_action( 'elementor/document/before_save', [ $this, 'before_document_save' ], 10, 2 );
add_action( 'elementor/document/after_save', [ $this, 'after_document_save' ] );
add_filter( 'elementor/tracker/send_tracking_data_params', [ $this, 'add_tracking_data' ] );
add_action( 'admin_init', [ $this, 'add_system_info_report' ], 50 );
}
}
Fatal error: Uncaught Error: Class 'Elementor\Modules\Usage\Module' not found in /home/rahjooian/public_html/wp-content/plugins/elementor/core/modules-manager.php:53
Stack trace:
#0 /home/rahjooian/public_html/wp-content/plugins/elementor/includes/plugin.php(730): Elementor\Core\Modules_Manager->__construct()
#1 /home/rahjooian/public_html/wp-content/plugins/elementor/includes/plugin.php(647): Elementor\Plugin->init_components()
#2 /home/rahjooian/public_html/wp-includes/class-wp-hook.php(324): Elementor\Plugin->init('')
#3 /home/rahjooian/public_html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array)
#4 /home/rahjooian/public_html/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
#5 /home/rahjooian/public_html/wp-settings.php(643): do_action('init')
#6 /home/rahjooian/public_html/wp-config.php(168): require_once('/home/rahjooian...')
#7 /home/rahjooian/public_html/wp-load.php(50): require_once('/home/rahjooian...')
#8 /home/rahjooian/public_html/wp-blog-header.php(13): require_once('/home/rahjoo in /home/rahjooian/public_html/wp-content/plugins/elementor/core/modules-manager.php on line 53