PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.3
Elementor Website Builder – more than just a page builder v4.0.3
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 / global-classes / import-export-customization / runners / import.php

import.php in Elementor Website Builder – more than just a page builder 4.0.3, at modules/global-classes/import-export-customization/runners/import.php

162 lines 4.5 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\GlobalClasses\ImportExportCustomization\Runners;
4
5 use Elementor\App\Modules\ImportExportCustomization\Runners\Import\Import_Runner_Base;
6 use Elementor\App\Modules\ImportExportCustomization\Utils as ImportExportUtils;
7 use Elementor\Modules\AtomicWidgets\Utils\Utils;
8 use Elementor\Modules\GlobalClasses\Global_Classes_Parser;
9 use Elementor\Modules\GlobalClasses\Global_Classes_Repository;
10 use Elementor\Modules\GlobalClasses\ImportExportCustomization\Import_Export_Customization;
11 use Elementor\Plugin;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 class Import extends Import_Runner_Base {
18 public static function get_name(): string {
19 return 'global-classes';
20 }
21
22 public function should_import( array $data ): bool {
23 return (
24 isset( $data['include'] ) &&
25 in_array( 'settings', $data['include'], true ) &&
26 ! empty( $data['extracted_directory_path'] ) &&
27 $this->is_classes_enabled( $data )
28 );
29 }
30
31 private function is_classes_enabled( array $data ): bool {
32 if ( isset( $data['customization']['settings']['classes'] ) ) {
33 return (bool) $data['customization']['settings']['classes'];
34 }
35
36 return true;
37 }
38
39 public function import( array $data, array $imported_data ): array {
40 $kit = Plugin::$instance->kits_manager->get_active_kit();
41
42 $file_name = Import_Export_Customization::FILE_NAME;
43 $global_classes = ImportExportUtils::read_json_file( "{$data['extracted_directory_path']}/{$file_name}.json" );
44
45 if ( ! $kit || ! $global_classes ) {
46 return [];
47 }
48
49 $global_classes['order'] = Global_Classes_Parser::sanitize_order(
50 $global_classes['items'] ?? [],
51 $global_classes['order'] ?? []
52 );
53
54 $global_classes_result = Global_Classes_Parser::make()->parse( $global_classes );
55
56 if ( ! $global_classes_result->is_valid() ) {
57 return [];
58 }
59
60 $imported_classes = $global_classes_result->unwrap();
61 $repository = Global_Classes_Repository::make();
62
63 $override_all = ! empty( $data['customization']['settings']['classesOverrideAll'] );
64
65 if ( $override_all ) {
66 $repository->put(
67 $imported_classes['items'],
68 $imported_classes['order']
69 );
70
71 return $imported_classes;
72 }
73
74 $existing_classes = $this->get_existing_classes( $repository, $imported_data );
75 $merged = $this->merge_classes( $existing_classes, $imported_classes );
76
77 $repository->put(
78 $merged['items'],
79 $merged['order']
80 );
81
82 return $imported_classes;
83 }
84
85 private function get_existing_classes( Global_Classes_Repository $repository, array $imported_data ): array {
86 $existing = $repository->all()->get();
87
88 if ( ! empty( $existing['items'] ) ) {
89 return $existing;
90 }
91
92 $was_new_kit_created = ! empty( $imported_data['site-settings']['imported_kit_id'] );
93
94 if ( ! $was_new_kit_created ) {
95 return $existing;
96 }
97
98 $previous_kit_id = Plugin::$instance->kits_manager->get_previous_id();
99
100 if ( ! $previous_kit_id ) {
101 return $existing;
102 }
103
104 $previous_kit = Plugin::$instance->kits_manager->get_kit( $previous_kit_id );
105
106 return Global_Classes_Repository::make( $previous_kit )->all()->get();
107 }
108
109 private function merge_classes( array $existing, array $imported ): array {
110 $existing_items = $existing['items'] ?? [];
111 $existing_order = $existing['order'] ?? [];
112 $existing_labels = $this->get_existing_labels( $existing_items );
113
114 $imported_items = $imported['items'] ?? [];
115 $imported_order = $imported['order'] ?? [];
116
117 foreach ( $imported_order as $imported_id ) {
118 if ( ! isset( $imported_items[ $imported_id ] ) ) {
119 continue;
120 }
121
122 $imported_class = $imported_items[ $imported_id ];
123
124 $id_exists = array_key_exists( $imported_id, $existing_items );
125 $new_id = $id_exists
126 ? $this->generate_unique_id( array_keys( $existing_items ) )
127 : $imported_id;
128
129 $original_label = $imported_class['label'] ?? $imported_id;
130 $new_label = ImportExportUtils::resolve_label_conflict( $original_label, $existing_labels );
131 $existing_labels[] = strtolower( $new_label );
132
133 $imported_class['id'] = $new_id;
134 $imported_class['label'] = $new_label;
135
136 $existing_items[ $new_id ] = $imported_class;
137 $existing_order[] = $new_id;
138 }
139
140 return [
141 'items' => $existing_items,
142 'order' => $existing_order,
143 ];
144 }
145
146 private function get_existing_labels( array $items ): array {
147 $labels = [];
148
149 foreach ( $items as $item ) {
150 if ( isset( $item['label'] ) ) {
151 $labels[] = strtolower( $item['label'] );
152 }
153 }
154
155 return $labels;
156 }
157
158 private function generate_unique_id( array $existing_ids ): string {
159 return Utils::generate_id( 'g-', $existing_ids );
160 }
161 }
162