PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.1
Elementor Website Builder – more than just a page builder v4.0.1
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 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / modules / global-classes / import-export-customization / runners / import.php

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

157 lines 4.3 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\Import\Import_Runner_Base;
6 use Elementor\App\Modules\ImportExportCustomization\Utils as ImportExportUtils;
7 use Elementor\Modules\AtomicWidgets\Utils\Utils;
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\Plugin;
12
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 class Import extends Import_Runner_Base {
18 public static function get_name(): string {
19 return 'global-classes';
20 }
21
22 public function should_import( array $data ): bool {
23 return (
24 isset( $data['include'] ) &&
25 in_array( 'settings', $data['include'], true ) &&
26 ! empty( $data['extracted_directory_path'] ) &&
27 $this->is_classes_enabled( $data )
28 );
29 }
30
31 private function is_classes_enabled( array $data ): bool {
32 if ( isset( $data['customization']['settings']['classes'] ) ) {
33 return (bool) $data['customization']['settings']['classes'];
34 }
35
36 return true;
37 }
38
39 public function import( array $data, array $imported_data ): array {
40 $kit = Plugin::$instance->kits_manager->get_active_kit();
41
42 $file_name = Import_Export_Customization::FILE_NAME;
43 $global_classes = ImportExportUtils::read_json_file( "{$data['extracted_directory_path']}/{$file_name}.json" );
44
45 if ( ! $kit || ! $global_classes ) {
46 return [];
47 }
48
49 $global_classes_result = Global_Classes_Parser::make()->parse( $global_classes );
50
51 if ( ! $global_classes_result->is_valid() ) {
52 return [];
53 }
54
55 $imported_classes = $global_classes_result->unwrap();
56 $repository = Global_Classes_Repository::make();
57
58 $override_all = ! empty( $data['customization']['settings']['classesOverrideAll'] );
59
60 if ( $override_all ) {
61 $repository->put(
62 $imported_classes['items'],
63 $imported_classes['order']
64 );
65
66 return $imported_classes;
67 }
68
69 $existing_classes = $this->get_existing_classes( $repository, $imported_data );
70 $merged = $this->merge_classes( $existing_classes, $imported_classes );
71
72 $repository->put(
73 $merged['items'],
74 $merged['order']
75 );
76
77 return $imported_classes;
78 }
79
80 private function get_existing_classes( Global_Classes_Repository $repository, array $imported_data ): array {
81 $existing = $repository->all()->get();
82
83 if ( ! empty( $existing['items'] ) ) {
84 return $existing;
85 }
86
87 $was_new_kit_created = ! empty( $imported_data['site-settings']['imported_kit_id'] );
88
89 if ( ! $was_new_kit_created ) {
90 return $existing;
91 }
92
93 $previous_kit_id = Plugin::$instance->kits_manager->get_previous_id();
94
95 if ( ! $previous_kit_id ) {
96 return $existing;
97 }
98
99 $previous_kit = Plugin::$instance->kits_manager->get_kit( $previous_kit_id );
100
101 return Global_Classes_Repository::make( $previous_kit )->all()->get();
102 }
103
104 private function merge_classes( array $existing, array $imported ): array {
105 $existing_items = $existing['items'] ?? [];
106 $existing_order = $existing['order'] ?? [];
107 $existing_labels = $this->get_existing_labels( $existing_items );
108
109 $imported_items = $imported['items'] ?? [];
110 $imported_order = $imported['order'] ?? [];
111
112 foreach ( $imported_order as $imported_id ) {
113 if ( ! isset( $imported_items[ $imported_id ] ) ) {
114 continue;
115 }
116
117 $imported_class = $imported_items[ $imported_id ];
118
119 $id_exists = array_key_exists( $imported_id, $existing_items );
120 $new_id = $id_exists
121 ? $this->generate_unique_id( array_keys( $existing_items ) )
122 : $imported_id;
123
124 $original_label = $imported_class['label'] ?? $imported_id;
125 $new_label = ImportExportUtils::resolve_label_conflict( $original_label, $existing_labels );
126 $existing_labels[] = strtolower( $new_label );
127
128 $imported_class['id'] = $new_id;
129 $imported_class['label'] = $new_label;
130
131 $existing_items[ $new_id ] = $imported_class;
132 $existing_order[] = $new_id;
133 }
134
135 return [
136 'items' => $existing_items,
137 'order' => $existing_order,
138 ];
139 }
140
141 private function get_existing_labels( array $items ): array {
142 $labels = [];
143
144 foreach ( $items as $item ) {
145 if ( isset( $item['label'] ) ) {
146 $labels[] = strtolower( $item['label'] );
147 }
148 }
149
150 return $labels;
151 }
152
153 private function generate_unique_id( array $existing_ids ): string {
154 return Utils::generate_id( 'g-', $existing_ids );
155 }
156 }
157