PluginProbe
Elementor Website Builder – more than just a page builder / 4.2.0
Elementor Website Builder – more than just a page builder v4.2.0
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 4.0.7 All 451 releases
elementor / modules / variables / utils / template-library-variables-element-transformer.php

template-library-variables-element-transformer.php in Elementor Website Builder – more than just a page builder 4.2.0, at modules/variables/utils/template-library-variables-element-transformer.php

128 lines 4.4 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\Variables\Utils;
4
5 use Elementor\Core\Utils\Template_Library_Element_Iterator;
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit;
9 }
10
11 class Template_Library_Variables_Element_Transformer {
12
13 public static function rewrite_elements_variable_ids( array $elements, array $id_map ): array {
14 if ( empty( $elements ) || empty( $id_map ) ) {
15 return $elements;
16 }
17
18 $variable_types_map = array_fill_keys( Variable_Type_Keys::get_all(), true );
19
20 return Template_Library_Element_Iterator::iterate(
21 $elements,
22 function ( $element_data ) use ( $id_map, $variable_types_map ) {
23 return self::rewrite_variable_ids_in_element( $element_data, $id_map, $variable_types_map );
24 }
25 );
26 }
27
28 public static function flatten_elements_variables( array $elements, array $global_variables, ?array $only_ids = null ): array {
29 $variable_data = $global_variables['data'] ?? [];
30
31 if ( empty( $elements ) || empty( $variable_data ) ) {
32 return $elements;
33 }
34
35 $variable_types_map = array_fill_keys( Variable_Type_Keys::get_all(), true );
36 $ids_to_flatten = null !== $only_ids ? array_fill_keys( $only_ids, true ) : null;
37
38 return Template_Library_Element_Iterator::iterate(
39 $elements,
40 function ( $element_data ) use ( $variable_data, $variable_types_map, $ids_to_flatten ) {
41 return self::flatten_variable_refs_in_element( $element_data, $variable_data, $variable_types_map, $ids_to_flatten );
42 }
43 );
44 }
45
46 private static function rewrite_variable_ids_in_element( array $element_data, array $id_map, array $variable_types_map ): array {
47 if ( ! empty( $element_data['settings'] ) && is_array( $element_data['settings'] ) ) {
48 $element_data['settings'] = self::rewrite_variable_ids_recursive( $element_data['settings'], $id_map, $variable_types_map );
49 }
50
51 if ( ! empty( $element_data['styles'] ) && is_array( $element_data['styles'] ) ) {
52 $element_data['styles'] = self::rewrite_variable_ids_recursive( $element_data['styles'], $id_map, $variable_types_map );
53 }
54
55 return $element_data;
56 }
57
58 private static function rewrite_variable_ids_recursive( $data, array $id_map, array $variable_types_map ) {
59 if ( ! is_array( $data ) ) {
60 return $data;
61 }
62
63 if ( isset( $data['$$type'], $variable_types_map[ $data['$$type'] ] ) ) {
64 if ( isset( $data['value'] ) && is_string( $data['value'] ) && isset( $id_map[ $data['value'] ] ) ) {
65 $data['value'] = $id_map[ $data['value'] ];
66 }
67 return $data;
68 }
69
70 foreach ( $data as $key => $value ) {
71 if ( is_array( $value ) ) {
72 $data[ $key ] = self::rewrite_variable_ids_recursive( $value, $id_map, $variable_types_map );
73 }
74 }
75
76 return $data;
77 }
78
79 private static function flatten_variable_refs_in_element( array $element_data, array $variable_data, array $variable_types_map, ?array $ids_to_flatten ): array {
80 if ( ! empty( $element_data['settings'] ) && is_array( $element_data['settings'] ) ) {
81 $element_data['settings'] = self::flatten_variable_refs_recursive( $element_data['settings'], $variable_data, $variable_types_map, $ids_to_flatten );
82 }
83
84 if ( ! empty( $element_data['styles'] ) && is_array( $element_data['styles'] ) ) {
85 $element_data['styles'] = self::flatten_variable_refs_recursive( $element_data['styles'], $variable_data, $variable_types_map, $ids_to_flatten );
86 }
87
88 return $element_data;
89 }
90
91 private static function flatten_variable_refs_recursive( $data, array $variable_data, array $variable_types_map, ?array $ids_to_flatten = null ) {
92 if ( ! is_array( $data ) ) {
93 return $data;
94 }
95
96 if ( isset( $data['$$type'], $variable_types_map[ $data['$$type'] ] ) ) {
97 $var_id = $data['value'] ?? null;
98
99 if ( is_string( $var_id ) && isset( $variable_data[ $var_id ] ) ) {
100 if ( null !== $ids_to_flatten && ! isset( $ids_to_flatten[ $var_id ] ) ) {
101 return $data;
102 }
103
104 $variable = $variable_data[ $var_id ];
105 $resolved_value = $variable['value'] ?? null;
106 $resolved_type = Variable_Type_Keys::get_resolved_type( $data['$$type'] );
107
108 if ( null !== $resolved_value && null !== $resolved_type ) {
109 return [
110 '$$type' => $resolved_type,
111 'value' => Variable_Type_Keys::convert_value_for_resolved_type( $resolved_type, $resolved_value ),
112 ];
113 }
114 }
115
116 return $data;
117 }
118
119 foreach ( $data as $key => $value ) {
120 if ( is_array( $value ) ) {
121 $data[ $key ] = self::flatten_variable_refs_recursive( $value, $variable_data, $variable_types_map, $ids_to_flatten );
122 }
123 }
124
125 return $data;
126 }
127 }
128