PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.0-beta3
Elementor Website Builder – more than just a page builder v4.3.0-beta3
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 / app / modules / import-export-customization / runners / export / site-settings.php

site-settings.php in Elementor Website Builder – more than just a page builder 4.3.0-beta3, at app/modules/import-export-customization/runners/export/site-settings.php

204 lines 5.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\App\Modules\ImportExportCustomization\Runners\Export;
3
4 use Elementor\Modules\AtomicWidgets\Module as Atomic_Widgets_Module;
5 use Elementor\Modules\Variables\Module as Variables_Module;
6 use Elementor\Plugin;
7
8 class Site_Settings extends Export_Runner_Base {
9 const ALLOWED_SETTINGS = [
10 'theme',
11 'globalColors',
12 'globalFonts',
13 'themeStyleSettings',
14 'generalSettings',
15 'experiments',
16 'customCode',
17 'customIcons',
18 'customFonts',
19 'classes',
20 'variables',
21 ];
22
23 public static function get_name(): string {
24 return 'site-settings';
25 }
26
27 public function should_export( array $data ) {
28 return (
29 isset( $data['include'] ) &&
30 in_array( 'settings', $data['include'], true )
31 );
32 }
33
34 public function export( array $data ) {
35 $customization = $data['customization']['settings'] ?? null;
36 if ( $customization ) {
37 return $this->export_customization( $data, $customization );
38 }
39
40 return $this->export_all( $data );
41 }
42
43 private function export_all( $data, $include_theme = true ) {
44 $kit = Plugin::$instance->kits_manager->get_active_kit();
45 $kit_data = $kit->get_export_data();
46
47 $excluded_kit_settings_keys = [
48 'site_name',
49 'site_description',
50 'site_logo',
51 'site_favicon',
52 ];
53
54 foreach ( $excluded_kit_settings_keys as $setting_key ) {
55 unset( $kit_data['settings'][ $setting_key ] );
56 }
57
58 if ( $include_theme ) {
59 $theme_data = $this->export_theme();
60
61 if ( $theme_data ) {
62 $kit_data['theme'] = $theme_data;
63 $manifest_data['theme'] = $theme_data;
64 }
65 }
66
67 $experiments_data = $this->export_experiments();
68
69 if ( $experiments_data ) {
70 $kit_data['experiments'] = $experiments_data;
71 $manifest_data['experiments'] = array_keys( $experiments_data );
72 }
73
74 $manifest_data['site-settings'] = array_fill_keys( self::ALLOWED_SETTINGS, true );
75
76 if ( ! $include_theme ) {
77 $manifest_data['site-settings']['theme'] = false;
78 }
79
80 if ( $this->is_classes_feature_active() ) {
81 $manifest_data['site-settings']['classesCount'] = $this->get_classes_count();
82 } else {
83 unset( $manifest_data['site-settings']['classes'] );
84 }
85
86 if ( $this->is_variables_feature_active() ) {
87 $manifest_data['site-settings']['variablesCount'] = $this->get_variables_count();
88 } else {
89 unset( $manifest_data['site-settings']['variables'] );
90 }
91
92 return [
93 'files' => [
94 'path' => 'site-settings',
95 'data' => $kit_data,
96 ],
97 'manifest' => [
98 $manifest_data,
99 ],
100 ];
101 }
102
103 public function get_classes_count(): int {
104 $kit = Plugin::$instance->kits_manager->get_active_kit();
105
106 if ( ! $kit ) {
107 return 0;
108 }
109
110 return count( \Elementor\Modules\GlobalClasses\Global_Classes_Order::make( $kit )->set_preview( false )->get_order() );
111 }
112
113 public function get_variables_count(): int {
114 $kit = Plugin::$instance->kits_manager->get_active_kit();
115 $variables_repository = new \Elementor\Modules\Variables\Storage\Variables_Repository( $kit );
116 $collection = $variables_repository->load();
117 $count = 0;
118
119 foreach ( $collection->all() as $variable ) {
120 if ( ! $variable->is_deleted() ) {
121 ++$count;
122 }
123 }
124
125 return $count;
126 }
127
128 public function is_classes_feature_active(): bool {
129 return Plugin::$instance->experiments->is_feature_active( Atomic_Widgets_Module::EXPERIMENT_NAME );
130 }
131
132 public function is_variables_feature_active(): bool {
133 return Plugin::$instance->experiments->is_feature_active( Variables_Module::EXPERIMENT_NAME )
134 && Plugin::$instance->experiments->is_feature_active( Atomic_Widgets_Module::EXPERIMENT_NAME );
135 }
136
137 private function export_customization( $data, $customization ) {
138 $result = apply_filters( 'elementor/import-export-customization/export/site-settings/customization', null, $data, $customization, $this );
139
140 if ( is_array( $result ) ) {
141 return $result;
142 }
143
144 $export_result = $this->export_all( $data, ! empty( $customization['theme'] ) );
145
146 if ( $this->is_classes_feature_active() ) {
147 $include_classes = $customization['classes'] ?? false;
148 $export_result['manifest'][0]['site-settings']['classes'] = (bool) $include_classes;
149
150 if ( ! $include_classes ) {
151 $export_result['manifest'][0]['site-settings']['classesCount'] = 0;
152 }
153 }
154
155 if ( $this->is_variables_feature_active() ) {
156 $include_variables = $customization['variables'] ?? false;
157 $export_result['manifest'][0]['site-settings']['variables'] = (bool) $include_variables;
158
159 if ( ! $include_variables ) {
160 $export_result['manifest'][0]['site-settings']['variablesCount'] = 0;
161 }
162 }
163
164 return $export_result;
165 }
166
167 public function export_theme() {
168 $theme = wp_get_theme();
169
170 if ( empty( $theme ) || empty( $theme->get( 'ThemeURI' ) ) ) {
171 return null;
172 }
173
174 $theme_data['name'] = $theme->get( 'Name' );
175 $theme_data['theme_uri'] = $theme->get( 'ThemeURI' );
176 $theme_data['version'] = $theme->get( 'Version' );
177 $theme_data['slug'] = $theme->get_stylesheet();
178
179 return $theme_data;
180 }
181
182 public function export_experiments() {
183 $features = Plugin::$instance->experiments->get_features();
184
185 if ( empty( $features ) ) {
186 return null;
187 }
188
189 $experiments_data = [];
190
191 foreach ( $features as $feature_name => $feature ) {
192 $experiments_data[ $feature_name ] = [
193 'name' => $feature_name,
194 'title' => $feature['title'],
195 'state' => $feature['state'],
196 'default' => $feature['default'],
197 'release_status' => $feature['release_status'],
198 ];
199 }
200
201 return empty( $experiments_data ) ? null : $experiments_data;
202 }
203 }
204