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
← All changes | modules/global-classes/import-export-utils/import-utils.php +29 -17 4.2.44.3.0-beta3 View file →
@@ -2,15 +2,16 @@
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;
6 10 use Elementor\Modules\DesignSystemSync\Classes\Global_Classes_Sync_Map;
7 11 use Elementor\Modules\GlobalClasses\Global_Class_Post;
8 12 use Elementor\Modules\GlobalClasses\Global_Classes_Repository;
9 13 use Elementor\Modules\GlobalClasses\Global_Classes_REST_API;
10 -use Elementor\Modules\AtomicWidgets\Parsers\Style_Parser;
11 -use Elementor\Modules\AtomicWidgets\Styles\Style_Schema;
12 -use Elementor\Modules\AtomicWidgets\PropTypeMigrations\Migrations_Orchestrator;
13 14 use Elementor\Plugin;
14 15
15 16 if ( ! defined( 'ABSPATH' ) ) {
16 17 exit;
@@ -46,11 +47,8 @@
46 47 }
47 48
48 49 $conflict_resolution = $options['conflict_resolution'] ?? self::DEFAULT_CONFLICT_RESOLUTION;
49 50
50 - $classes_repository = Global_Classes_Repository::make( $active_kit );
51 - $classes_repository->set_preview( false );
52 -
53 51 $imported_classes_order = json_decode( file_get_contents( $order_file ), true );
54 52
55 53 if ( ! is_array( $imported_classes_order ) ) {
56 54 throw new \Exception( 'Invalid file: order.json is not valid JSON.' );
@@ -63,9 +61,9 @@
63 61 global $wpdb;
64 62 $wpdb->query( 'START TRANSACTION' );
65 63
66 64 try {
67 - [ 'result' => $result, 'changes' => $changes ] = self::do_import( $classes_repository, $classes_dir, $imported_classes_order, $conflict_resolution );
65 + [ 'result' => $result, 'changes' => $changes ] = self::do_import( $active_kit, $classes_dir, $imported_classes_order, $conflict_resolution );
68 66 $wpdb->query( 'COMMIT' );
69 67 } catch ( \Throwable $e ) {
70 68 $wpdb->query( 'ROLLBACK' );
71 69 throw $e;
@@ -81,9 +79,9 @@
81 79 return $result;
82 80 }
83 81
84 82 private static function do_import(
85 - Global_Classes_Repository $classes_repository,
83 + Kit $active_kit,
86 84 string $classes_dir,
87 85 array $imported_classes_order,
88 86 string $conflict_resolution
89 87 ): array {
@@ -92,22 +90,33 @@
92 90 $modified_classes = [];
93 91 $deleted_classes = [];
94 92 $touched_sync_items = [];
95 93
96 - $previous_order = $classes_repository->get_order();
97 - $order_set = array_flip( $previous_order );
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 ) ) );
98 100 $style_parser = Style_Parser::make( Style_Schema::get() );
99 101 $classes_dir = rtrim( $classes_dir, '/' );
100 102
101 103 if ( 'override-all' === $conflict_resolution ) {
102 - $deleted_classes = $previous_order;
103 - $classes_repository->delete_all();
104 - $previous_order = [];
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 = [];
105 109 $order_set = [];
106 110 }
107 111
108 - $label_to_id_map = self::build_label_to_id_map_from_labels( $classes_repository->all_labels() );
112 + $all_labels = array_merge(
113 + $classes_repository_frontend->all_labels(),
114 + $classes_repository_preview->all_labels()
115 + );
109 116
117 + $label_to_id_map = self::build_label_to_id_map_from_labels( $all_labels );
118 +
110 119 $result = self::EMPTY_RESULT;
111 120
112 121 foreach ( $imported_classes_order as $import_entry ) {
113 122 [ 'is_valid' => $is_valid, 'error' => $validation_error ] = self::validate_class_entry( $import_entry );
@@ -219,12 +228,15 @@
219 228 $changes = null;
220 229 $has_changes = ! empty( $added_classes_order ) || ! empty( $modified_classes ) || ! empty( $deleted_classes );
221 230
222 231 if ( $has_changes ) {
223 - $new_order = array_merge( $added_classes_order, $previous_order );
224 - $classes_repository->update_order_and_labels( $new_order, $added_classes_labels );
232 + $new_preview_order = array_merge( $added_classes_order, $previous_preview_order );
233 + $new_frontend_order = array_merge( $added_classes_order, $previous_frontend_order );
225 234
226 - Global_Classes_Sync_Map::make()->apply_changes( $touched_sync_items, $deleted_classes );
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 );
227 239
228 240 $changes = [
229 241 'added' => $added_classes_order,
230 242 'deleted' => $deleted_classes,