PluginProbe
Elementor Website Builder – more than just a page builder / 4.1.4
Elementor Website Builder – more than just a page builder v4.1.4
4.3.1 4.3.0 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 All 454 releases
← All changes | modules/global-classes/import-export-utils/import-utils.php +16 -34 4.3.14.1.4 View file →
@@ -2,16 +2,14 @@
2 2
3 3 namespace Elementor\Modules\GlobalClasses\ImportExportUtils;
4 4
5 5 use Elementor\App\Modules\ImportExportCustomization\Utils as ImportExportUtils;
6 -use Elementor\Core\Kits\Documents\Kit;
7 -use Elementor\Modules\AtomicWidgets\Parsers\Style_Parser;
8 -use Elementor\Modules\AtomicWidgets\PropTypeMigrations\Migrations_Orchestrator;
9 -use Elementor\Modules\AtomicWidgets\Styles\Style_Schema;
10 -use Elementor\Modules\DesignSystemSync\Classes\Global_Classes_Sync_Map;
11 6 use Elementor\Modules\GlobalClasses\Global_Class_Post;
12 7 use Elementor\Modules\GlobalClasses\Global_Classes_Repository;
13 8 use Elementor\Modules\GlobalClasses\Global_Classes_REST_API;
9 +use Elementor\Modules\AtomicWidgets\Parsers\Style_Parser;
10 +use Elementor\Modules\AtomicWidgets\Styles\Style_Schema;
11 +use Elementor\Modules\AtomicWidgets\PropTypeMigrations\Migrations_Orchestrator;
14 12 use Elementor\Plugin;
15 13
16 14 if ( ! defined( 'ABSPATH' ) ) {
17 15 exit;
@@ -47,8 +45,11 @@
47 45 }
48 46
49 47 $conflict_resolution = $options['conflict_resolution'] ?? self::DEFAULT_CONFLICT_RESOLUTION;
50 48
49 + $classes_repository = Global_Classes_Repository::make( $active_kit );
50 + $classes_repository->set_preview( false );
51 +
51 52 $imported_classes_order = json_decode( file_get_contents( $order_file ), true );
52 53
53 54 if ( ! is_array( $imported_classes_order ) ) {
54 55 throw new \Exception( 'Invalid file: order.json is not valid JSON.' );
@@ -61,9 +62,9 @@
61 62 global $wpdb;
62 63 $wpdb->query( 'START TRANSACTION' );
63 64
64 65 try {
65 - [ 'result' => $result, 'changes' => $changes ] = self::do_import( $active_kit, $classes_dir, $imported_classes_order, $conflict_resolution );
66 + [ 'result' => $result, 'changes' => $changes ] = self::do_import( $classes_repository, $classes_dir, $imported_classes_order, $conflict_resolution );
66 67 $wpdb->query( 'COMMIT' );
67 68 } catch ( \Throwable $e ) {
68 69 $wpdb->query( 'ROLLBACK' );
69 70 throw $e;
@@ -79,9 +80,9 @@
79 80 return $result;
80 81 }
81 82
82 83 private static function do_import(
83 - Kit $active_kit,
84 + Global_Classes_Repository $classes_repository,
84 85 string $classes_dir,
85 86 array $imported_classes_order,
86 87 string $conflict_resolution
87 88 ): array {
@@ -88,35 +89,23 @@
88 89 $added_classes_order = [];
89 90 $added_classes_labels = [];
90 91 $modified_classes = [];
91 92 $deleted_classes = [];
92 - $touched_sync_items = [];
93 93
94 - $classes_repository_preview = Global_Classes_Repository::make( $active_kit )->set_preview( true );
95 - $classes_repository_frontend = Global_Classes_Repository::make( $active_kit )->set_preview( false );
96 -
97 - $previous_preview_order = $classes_repository_preview->get_order();
98 - $previous_frontend_order = $classes_repository_frontend->get_order();
99 - $order_set = array_flip( array_unique( array_merge( $previous_preview_order, $previous_frontend_order ) ) );
94 + $previous_order = $classes_repository->get_order();
95 + $order_set = array_flip( $previous_order );
100 96 $style_parser = Style_Parser::make( Style_Schema::get() );
101 97 $classes_dir = rtrim( $classes_dir, '/' );
102 98
103 99 if ( 'override-all' === $conflict_resolution ) {
104 - $deleted_classes = array_unique( array_merge( $previous_preview_order, $previous_frontend_order ) );
105 - $classes_repository_preview->delete_all();
106 - $classes_repository_frontend->delete_all();
107 - $previous_preview_order = [];
108 - $previous_frontend_order = [];
100 + $deleted_classes = $previous_order;
101 + $classes_repository->delete_all();
102 + $previous_order = [];
109 103 $order_set = [];
110 104 }
111 105
112 - $all_labels = array_merge(
113 - $classes_repository_frontend->all_labels(),
114 - $classes_repository_preview->all_labels()
115 - );
106 + $label_to_id_map = self::build_label_to_id_map_from_labels( $classes_repository->all_labels() );
116 107
117 - $label_to_id_map = self::build_label_to_id_map_from_labels( $all_labels );
118 -
119 108 $result = self::EMPTY_RESULT;
120 109
121 110 foreach ( $imported_classes_order as $import_entry ) {
122 111 [ 'is_valid' => $is_valid, 'error' => $validation_error ] = self::validate_class_entry( $import_entry );
@@ -173,9 +162,8 @@
173 162 if ( 'replace' === $action ) {
174 163 $existing_id = $label_to_id_map[ strtolower( $import_entry['label'] ) ];
175 164 self::replace_existing_class( $existing_id, $sanitized_item );
176 165
177 - $touched_sync_items[ $existing_id ] = [ 'sync_to_v3' => ! empty( $sanitized_item['sync_to_v3'] ) ];
178 166 $modified_classes[] = $existing_id;
179 167 $result['replaced'][] = [
180 168 'import_entry' => $import_entry,
181 169 'result_entry' => [
@@ -200,9 +188,8 @@
200 188 $sanitized_item['id'] = $new_id;
201 189 }
202 190
203 191 self::create_new_class( $sanitized_item );
204 - $touched_sync_items[ $new_id ] = [ 'sync_to_v3' => ! empty( $sanitized_item['sync_to_v3'] ) ];
205 192 $order_set[ $new_id ] = true;
206 193 $added_classes_order[] = $new_id;
207 194 $added_classes_labels[ $new_id ] = $sanitized_item['label'];
208 195 $label_to_id_map[ strtolower( $sanitized_item['label'] ) ] = $new_id;
@@ -228,15 +215,10 @@
228 215 $changes = null;
229 216 $has_changes = ! empty( $added_classes_order ) || ! empty( $modified_classes ) || ! empty( $deleted_classes );
230 217
231 218 if ( $has_changes ) {
232 - $new_preview_order = array_merge( $added_classes_order, $previous_preview_order );
233 - $new_frontend_order = array_merge( $added_classes_order, $previous_frontend_order );
234 -
235 - $classes_repository_preview->update_order_and_labels( $new_preview_order, $added_classes_labels );
236 - $classes_repository_frontend->update_order_and_labels( $new_frontend_order, $added_classes_labels );
237 -
238 - Global_Classes_Sync_Map::make( $active_kit )->apply_changes( $touched_sync_items, $deleted_classes );
219 + $new_order = array_merge( $added_classes_order, $previous_order );
220 + $classes_repository->update_order_and_labels( $new_order, $added_classes_labels );
239 221
240 222 $changes = [
241 223 'added' => $added_classes_order,
242 224 'deleted' => $deleted_classes,