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