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