← All changes
|
modules/global-classes/import-export-customization/runners/export.php
+20
-76
4.2.1
→
3.35.0-dev2
View file →
| @@ -2,112 +2,56 @@ | ||
| 2 | 2 | |
| 3 | 3 | namespace Elementor\Modules\GlobalClasses\ImportExportCustomization\Runners; |
| 4 | 4 | |
| 5 | 5 | use Elementor\App\Modules\ImportExportCustomization\Runners\Export\Export_Runner_Base; |
| 6 | -use Elementor\Modules\AtomicWidgets\Module as Atomic_Widgets_Module; | |
| 7 | -use Elementor\Modules\GlobalClasses\Global_Classes_Order; | |
| 6 | +use Elementor\Modules\GlobalClasses\Global_Classes_Repository; | |
| 8 | 7 | use Elementor\Modules\GlobalClasses\Global_Classes_Parser; |
| 9 | -use Elementor\Modules\GlobalClasses\Global_Classes_Repository; | |
| 10 | 8 | use Elementor\Modules\GlobalClasses\ImportExportCustomization\Import_Export_Customization; |
| 11 | -use Elementor\Modules\GlobalClasses\Module as Global_Classes_Module; | |
| 12 | 9 | use Elementor\Plugin; |
| 13 | 10 | |
| 14 | 11 | if ( ! defined( 'ABSPATH' ) ) { |
| 15 | - exit; | |
| 12 | + exit; // Exit if accessed directly. | |
| 16 | 13 | } |
| 17 | 14 | |
| 18 | 15 | class Export extends Export_Runner_Base { |
| 19 | - const ORDER_FILE = 'order.json'; | |
| 20 | - | |
| 21 | 16 | public static function get_name(): string { |
| 22 | 17 | return 'global-classes'; |
| 23 | 18 | } |
| 24 | 19 | |
| 25 | - public function should_export( array $data ): bool { | |
| 20 | + public function should_export( array $data ) { | |
| 21 | + // Same as the site-settings runner. | |
| 26 | 22 | return ( |
| 27 | 23 | isset( $data['include'] ) && |
| 28 | - in_array( 'settings', $data['include'], true ) && | |
| 29 | - $this->is_classes_enabled( $data ) | |
| 24 | + in_array( 'settings', $data['include'], true ) | |
| 30 | 25 | ); |
| 31 | 26 | } |
| 32 | 27 | |
| 33 | - private function is_classes_enabled( array $data ): bool { | |
| 34 | - if ( ! $this->is_feature_active() ) { | |
| 35 | - return false; | |
| 36 | - } | |
| 37 | - | |
| 38 | - if ( isset( $data['customization']['settings']['classes'] ) ) { | |
| 39 | - return (bool) $data['customization']['settings']['classes']; | |
| 40 | - } | |
| 41 | - | |
| 42 | - return true; | |
| 43 | - } | |
| 44 | - | |
| 45 | - private function is_feature_active(): bool { | |
| 46 | - return Plugin::$instance->experiments->is_feature_active( Global_Classes_Module::NAME ) | |
| 47 | - && Plugin::$instance->experiments->is_feature_active( Atomic_Widgets_Module::EXPERIMENT_NAME ); | |
| 48 | - } | |
| 49 | - | |
| 50 | - public function export( array $data ): array { | |
| 28 | + public function export( array $data ) { | |
| 51 | 29 | $kit = Plugin::$instance->kits_manager->get_active_kit(); |
| 52 | 30 | |
| 53 | 31 | if ( ! $kit ) { |
| 54 | - return $this->empty_result(); | |
| 32 | + return [ | |
| 33 | + 'manifest' => [], | |
| 34 | + 'files' => [], | |
| 35 | + ]; | |
| 55 | 36 | } |
| 56 | 37 | |
| 57 | - $repository = Global_Classes_Repository::make( $kit ); | |
| 58 | - $labels_by_id = []; | |
| 59 | - $files = []; | |
| 38 | + $global_classes = Global_Classes_Repository::make()->all()->get(); | |
| 60 | 39 | |
| 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 | - } | |
| 40 | + $global_classes_result = Global_Classes_Parser::make()->parse( $global_classes ); | |
| 67 | 41 | |
| 68 | - $class_id = $class_data['id']; | |
| 69 | - | |
| 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 | - ); | |
| 78 | - | |
| 79 | - if ( empty( $files ) ) { | |
| 80 | - return $this->empty_result(); | |
| 42 | + if ( ! $global_classes_result->is_valid() ) { | |
| 43 | + return [ | |
| 44 | + 'manifest' => [], | |
| 45 | + 'files' => [], | |
| 46 | + ]; | |
| 81 | 47 | } |
| 82 | 48 | |
| 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 | - | |
| 88 | 49 | return [ |
| 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 )->set_preview( false )->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 ], | |
| 50 | + 'files' => [ | |
| 51 | + 'path' => Import_Export_Customization::FILE_NAME, | |
| 52 | + 'data' => $global_classes_result->unwrap(), | |
| 102 | 53 | ], |
| 103 | - $sanitized_order | |
| 104 | - ); | |
| 105 | - } | |
| 106 | - | |
| 107 | - private function empty_result(): array { | |
| 108 | - return [ | |
| 109 | 54 | 'manifest' => [], |
| 110 | - 'files' => [], | |
| 111 | 55 | ]; |
| 112 | 56 | } |
| 113 | 57 | } |