← All changes
|
modules/global-classes/import-export-customization/runners/export.php
+49
-21
4.0.9
→
4.1.0-beta1
View file →
| @@ -3,8 +3,9 @@ | ||
| 3 | 3 | namespace Elementor\Modules\GlobalClasses\ImportExportCustomization\Runners; |
| 4 | 4 | |
| 5 | 5 | use Elementor\App\Modules\ImportExportCustomization\Runners\Export\Export_Runner_Base; |
| 6 | 6 | use Elementor\Modules\AtomicWidgets\Module as Atomic_Widgets_Module; |
| 7 | +use Elementor\Modules\GlobalClasses\Global_Classes_Order; | |
| 7 | 8 | use Elementor\Modules\GlobalClasses\Global_Classes_Parser; |
| 8 | 9 | use Elementor\Modules\GlobalClasses\Global_Classes_Repository; |
| 9 | 10 | use Elementor\Modules\GlobalClasses\ImportExportCustomization\Import_Export_Customization; |
| 10 | 11 | use Elementor\Modules\GlobalClasses\Module as Global_Classes_Module; |
| @@ -14,8 +15,10 @@ | ||
| 14 | 15 | exit; |
| 15 | 16 | } |
| 16 | 17 | |
| 17 | 18 | class Export extends Export_Runner_Base { |
| 19 | + const ORDER_FILE = 'order.json'; | |
| 20 | + | |
| 18 | 21 | public static function get_name(): string { |
| 19 | 22 | return 'global-classes'; |
| 20 | 23 | } |
| 21 | 24 | |
| @@ -47,39 +50,64 @@ | ||
| 47 | 50 | public function export( array $data ): array { |
| 48 | 51 | $kit = Plugin::$instance->kits_manager->get_active_kit(); |
| 49 | 52 | |
| 50 | 53 | if ( ! $kit ) { |
| 51 | - return [ | |
| 52 | - 'manifest' => [], | |
| 53 | - 'files' => [], | |
| 54 | - ]; | |
| 54 | + return $this->empty_result(); | |
| 55 | 55 | } |
| 56 | 56 | |
| 57 | - $global_classes = Global_Classes_Repository::make()->all()->get(); | |
| 57 | + $repository = Global_Classes_Repository::make( $kit ); | |
| 58 | + $labels_by_id = []; | |
| 59 | + $files = []; | |
| 58 | 60 | |
| 59 | - $global_classes_result = Global_Classes_Parser::make()->parse( $global_classes ); | |
| 61 | + $skip_migration = true; | |
| 62 | + $repository->each_item( | |
| 63 | + static function ( array $class_data ) use ( &$files, &$labels_by_id ) { | |
| 64 | + if ( empty( $class_data['id'] ) || ! is_string( $class_data['id'] ) ) { | |
| 65 | + return; | |
| 66 | + } | |
| 60 | 67 | |
| 61 | - if ( ! $global_classes_result->is_valid() ) { | |
| 62 | - return [ | |
| 63 | - 'manifest' => [], | |
| 64 | - 'files' => [], | |
| 65 | - ]; | |
| 66 | - } | |
| 68 | + $class_id = $class_data['id']; | |
| 67 | 69 | |
| 68 | - $classes_data = $global_classes_result->unwrap(); | |
| 70 | + $files[] = [ | |
| 71 | + 'path' => Import_Export_Customization::FILE_NAME . '/' . $class_id . '.json', | |
| 72 | + 'data' => wp_json_encode( $class_data ), | |
| 73 | + ]; | |
| 74 | + $labels_by_id[ $class_id ] = $class_data['label'] ?? $class_id; | |
| 75 | + }, | |
| 76 | + $skip_migration | |
| 77 | + ); | |
| 69 | 78 | |
| 70 | - if ( empty( $classes_data['items'] ) ) { | |
| 71 | - return [ | |
| 72 | - 'manifest' => [], | |
| 73 | - 'files' => [], | |
| 74 | - ]; | |
| 79 | + if ( empty( $files ) ) { | |
| 80 | + return $this->empty_result(); | |
| 75 | 81 | } |
| 76 | 82 | |
| 83 | + $files[] = [ | |
| 84 | + 'path' => Import_Export_Customization::FILE_NAME . '/' . self::ORDER_FILE, | |
| 85 | + 'data' => wp_json_encode( $this->build_order_entries( $kit, $labels_by_id ) ), | |
| 86 | + ]; | |
| 87 | + | |
| 77 | 88 | return [ |
| 78 | - 'files' => [ | |
| 79 | - 'path' => Import_Export_Customization::FILE_NAME, | |
| 80 | - 'data' => $classes_data, | |
| 89 | + 'files' => $files, | |
| 90 | + 'manifest' => [], | |
| 91 | + ]; | |
| 92 | + } | |
| 93 | + | |
| 94 | + private function build_order_entries( $kit, array $labels_by_id ): array { | |
| 95 | + $repository_order = Global_Classes_Order::make( $kit )->get_order(); | |
| 96 | + $sanitized_order = Global_Classes_Parser::sanitize_order( $labels_by_id, $repository_order ); | |
| 97 | + | |
| 98 | + return array_map( | |
| 99 | + static fn( string $id ) => [ | |
| 100 | + 'id' => $id, | |
| 101 | + 'label' => $labels_by_id[ $id ], | |
| 81 | 102 | ], |
| 103 | + $sanitized_order | |
| 104 | + ); | |
| 105 | + } | |
| 106 | + | |
| 107 | + private function empty_result(): array { | |
| 108 | + return [ | |
| 82 | 109 | 'manifest' => [], |
| 110 | + 'files' => [], | |
| 83 | 111 | ]; |
| 84 | 112 | } |
| 85 | 113 | } |