PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.2
Elementor Website Builder – more than just a page builder v4.3.2
4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 All 455 releases
← 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 }