PluginProbe
Elementor Website Builder – more than just a page builder / 4.1.0-beta2
Elementor Website Builder – more than just a page builder v4.1.0-beta2
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 4.0.8 All 454 releases
elementor / modules / global-classes / import-export-customization / runners / export.php

export.php in Elementor Website Builder – more than just a page builder 4.1.0-beta2, at modules/global-classes/import-export-customization/runners/export.php

114 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\Modules\GlobalClasses\ImportExportCustomization\Runners;
4
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;
8 use Elementor\Modules\GlobalClasses\Global_Classes_Parser;
9 use Elementor\Modules\GlobalClasses\Global_Classes_Repository;
10 use Elementor\Modules\GlobalClasses\ImportExportCustomization\Import_Export_Customization;
11 use Elementor\Modules\GlobalClasses\Module as Global_Classes_Module;
12 use Elementor\Plugin;
13
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit;
16 }
17
18 class Export extends Export_Runner_Base {
19 const ORDER_FILE = 'order.json';
20
21 public static function get_name(): string {
22 return 'global-classes';
23 }
24
25 public function should_export( array $data ): bool {
26 return (
27 isset( $data['include'] ) &&
28 in_array( 'settings', $data['include'], true ) &&
29 $this->is_classes_enabled( $data )
30 );
31 }
32
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 {
51 $kit = Plugin::$instance->kits_manager->get_active_kit();
52
53 if ( ! $kit ) {
54 return $this->empty_result();
55 }
56
57 $repository = Global_Classes_Repository::make( $kit );
58 $labels_by_id = [];
59 $files = [];
60
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 }
67
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();
81 }
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
88 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 )->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 ],
102 ],
103 $sanitized_order
104 );
105 }
106
107 private function empty_result(): array {
108 return [
109 'manifest' => [],
110 'files' => [],
111 ];
112 }
113 }
114