← All changes
|
modules/global-classes/import-export-utils/import-utils.php
+29
-17
4.2.4
→
4.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, |