PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.0-dev3
Elementor Website Builder – more than just a page builder v4.0.0-dev3
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 4.0.8 4.1.0-beta1 4.1.0-dev1 All 452 releases
elementor / modules / usage / calculators / legacy-element-usage-calculator.php

legacy-element-usage-calculator.php in Elementor Website Builder – more than just a page builder 4.0.0-dev3, at modules/usage/calculators/legacy-element-usage-calculator.php

114 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\Modules\Usage\Calculators;
4
5 use Elementor\Core\DynamicTags\Manager;
6 use Elementor\Modules\Usage\Contracts\Element_Usage_Calculator;
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit; // Exit if accessed directly.
10 }
11
12 class Legacy_Element_Usage_Calculator implements Element_Usage_Calculator {
13
14 const GENERAL_TAB = 'general';
15
16 public function can_calculate( array $element, $element_instance ): bool {
17 return true;
18 }
19
20 public function calculate( array $element, $element_instance, array $existing_usage ): array {
21 $type = $element['widgetType'] ?? $element['elType'];
22
23 if ( ! isset( $existing_usage[ $type ] ) ) {
24 $existing_usage[ $type ] = [
25 'count' => 0,
26 'control_percent' => 0,
27 'controls' => [],
28 ];
29 }
30
31 $existing_usage[ $type ]['count']++;
32
33 if ( ! $element_instance ) {
34 return $existing_usage;
35 }
36
37 $element_controls = $element_instance->get_controls();
38
39 if ( isset( $element['settings'] ) ) {
40 $settings_controls = $element['settings'];
41 $element_ref = &$existing_usage[ $type ];
42
43 $settings_controls = $this->add_general_controls( $settings_controls, $element_ref );
44
45 $changed_controls_count = $this->add_controls( $settings_controls, $element_controls, $element_ref );
46
47 $percent = ! empty( $element_controls ) ? $changed_controls_count / ( count( $element_controls ) / 100 ) : 0;
48
49 $existing_usage[ $type ]['control_percent'] = (int) round( $percent );
50 }
51
52 return $existing_usage;
53 }
54
55 private function increase_controls_count( array &$element_ref, string $tab, string $section, string $control, int $count ): void {
56 if ( ! isset( $element_ref['controls'][ $tab ] ) ) {
57 $element_ref['controls'][ $tab ] = [];
58 }
59
60 if ( ! isset( $element_ref['controls'][ $tab ][ $section ] ) ) {
61 $element_ref['controls'][ $tab ][ $section ] = [];
62 }
63
64 if ( ! isset( $element_ref['controls'][ $tab ][ $section ][ $control ] ) ) {
65 $element_ref['controls'][ $tab ][ $section ][ $control ] = 0;
66 }
67
68 $element_ref['controls'][ $tab ][ $section ][ $control ] += $count;
69 }
70
71 private function add_controls( array $settings_controls, array $element_controls, array &$element_ref ): int {
72 $changed_controls_count = 0;
73
74 foreach ( $settings_controls as $control => $value ) {
75 if ( empty( $element_controls[ $control ] ) ) {
76 continue;
77 }
78
79 $control_config = $element_controls[ $control ];
80
81 if ( ! isset( $control_config['section'], $control_config['default'] ) ) {
82 continue;
83 }
84
85 $tab = $control_config['tab'];
86 $section = $control_config['section'];
87
88 if ( $value !== $control_config['default'] ) {
89 $this->increase_controls_count( $element_ref, $tab, $section, $control, 1 );
90
91 ++$changed_controls_count;
92 }
93 }
94
95 return $changed_controls_count;
96 }
97
98 private function add_general_controls( array $settings_controls, array &$element_ref ): array {
99 if ( ! empty( $settings_controls[ Manager::DYNAMIC_SETTING_KEY ] ) ) {
100 $settings_controls = array_merge( $settings_controls, $settings_controls[ Manager::DYNAMIC_SETTING_KEY ] );
101
102 $this->increase_controls_count(
103 $element_ref,
104 self::GENERAL_TAB,
105 Manager::DYNAMIC_SETTING_KEY,
106 'count',
107 count( $settings_controls[ Manager::DYNAMIC_SETTING_KEY ] )
108 );
109 }
110
111 return $settings_controls;
112 }
113 }
114