PluginProbe
Elementor Website Builder – more than just a page builder / 4.1.0-beta1
Elementor Website Builder – more than just a page builder v4.1.0-beta1
4.3.3 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 All 456 releases
← All changes | modules/global-classes/global-class-post.php +33 -148 4.3.3 → 4.1.0-beta1 View file →
@@ -3,11 +3,8 @@
3 3 namespace Elementor\Modules\GlobalClasses;
4 4
5 5 use Elementor\Modules\AtomicWidgets\PropTypeMigrations\Migrations_Orchestrator;
6 6 use Elementor\Modules\GlobalClasses\Concerns\Has_Preview_Context;
7 -use Elementor\Plugin;
8 -use Elementor\Core\Kits\Documents\Kit;
9 -use Elementor\Modules\GlobalClasses\Utils\Global_Class_Data_Normalizer;
10 7 use WP_Post;
11 8
12 9 if ( ! defined( 'ABSPATH' ) ) {
13 10 exit; // Exit if accessed directly.
@@ -19,9 +16,8 @@
19 16 const META_KEY_VERSION = '_elementor_version';
20 17 const META_KEY_ID = '_elementor_global_class_id';
21 18 const META_KEY_DATA = '_elementor_global_class_data';
22 19 const META_KEY_DATA_PREVIEW = '_elementor_global_class_data_preview';
23 - const META_KEY_EDITED = '_elementor_global_class_edited';
24 20
25 21 protected array $context_keys = [
26 22 'data' => [
27 23 'frontend' => self::META_KEY_DATA,
@@ -35,9 +31,9 @@
35 31 $this->post = $post;
36 32 }
37 33
38 34 public static function from_post( WP_Post $post, bool $is_preview = false ): self {
39 - return ( new static( $post ) )->set_preview( $is_preview );
35 + return ( new self( $post ) )->set_preview( $is_preview );
40 36 }
41 37
42 38 public static function from_post_id( int $post_id, bool $is_preview = false ): ?self {
43 39 $post = get_post( $post_id );
@@ -45,25 +41,25 @@
45 41 if ( ! $post || Global_Class_Post_Type::CPT !== $post->post_type ) {
46 42 return null;
47 43 }
48 44
49 - return ( new static( $post ) )->set_preview( $is_preview );
45 + return ( new self( $post ) )->set_preview( $is_preview );
50 46 }
51 47
52 - public static function find_by_class_id( string $class_id, bool $is_preview = false, ?Kit $kit = null ): ?self {
53 - $kit = $kit ?? Plugin::$instance->kits_manager->get_active_kit();
48 + public static function find_by_class_id( string $class_id, bool $is_preview = false ): ?self {
49 + $posts = get_posts( [
50 + 'post_type' => Global_Class_Post_Type::CPT,
51 + 'post_status' => 'publish',
52 + 'posts_per_page' => 1,
53 + 'meta_key' => self::META_KEY_ID,
54 + 'meta_value' => $class_id,
55 + ] );
54 56
55 - if ( ! $kit ) {
57 + if ( empty( $posts ) ) {
56 58 return null;
57 59 }
58 60
59 - $post_id = Global_Classes_Post_IDs::make( $kit )->get_post_id( $class_id );
60 -
61 - if ( ! $post_id ) {
62 - return null;
63 - }
64 -
65 - return self::from_post_id( $post_id, $is_preview );
61 + return ( new self( $posts[0] ) )->set_preview( $is_preview );
66 62 }
67 63
68 64 public function get_post_id(): int {
69 65 return $this->post->ID;
@@ -82,8 +78,12 @@
82 78 public function get_label(): string {
83 79 return $this->post->post_title;
84 80 }
85 81
82 + public function get_order(): int {
83 + return (int) $this->post->menu_order;
84 + }
85 +
86 86 public function get_data( bool $skip_migration = false ): array {
87 87 $data = $this->get_context_data();
88 88 $meta_key = $this->get_context_key( 'data' );
89 89
@@ -100,8 +100,12 @@
100 100 return $data;
101 101 }
102 102
103 103 private function migrate_data( array &$data, string $meta_key ): void {
104 + if ( ! Migrations_Orchestrator::is_active() ) {
105 + return;
106 + }
107 +
104 108 $post_id = $this->post->ID;
105 109
106 110 Migrations_Orchestrator::make()->migrate(
107 111 $data,
@@ -116,59 +120,22 @@
116 120
117 121 public function to_array( bool $skip_migration = false ): array {
118 122 $data = $this->get_data( $skip_migration );
119 123
120 - $class_id = $this->get_class_id();
124 + $result = [
125 + 'id' => $this->get_class_id(),
126 + 'label' => $this->get_label(),
127 + 'type' => $data['type'] ?? 'class',
128 + 'variants' => $data['variants'] ?? [],
129 + ];
121 130
122 - return Global_Class_Data_Normalizer::normalize_style(
123 - $class_id,
124 - array_merge( $data, [ 'label' => $this->get_label() ] )
125 - );
126 - }
127 -
128 - public function was_edited(): bool {
129 - $last_edited = $this->get_last_edited_timestamp();
130 - $creation = $this->get_creation_timestamp();
131 -
132 - return $last_edited > $creation;
133 - }
134 -
135 - public function has_edit_timestamp(): bool {
136 - return $this->get_last_edited_timestamp() > 0;
137 - }
138 -
139 - private function get_creation_timestamp(): int {
140 - $dt = get_post_datetime( $this->post, 'date', 'gmt' );
141 -
142 - if ( $dt ) {
143 - return (int) $dt->format( 'U' );
131 + if ( array_key_exists( 'sync_to_v3', $data ) ) {
132 + $result['sync_to_v3'] = (bool) $data['sync_to_v3'];
144 133 }
145 134
146 - return (int) strtotime( (string) $this->post->post_date );
135 + return $result;
147 136 }
148 137
149 - private function get_last_edited_timestamp(): int {
150 - $raw = get_post_meta( $this->post->ID, self::META_KEY_EDITED, true );
151 -
152 - if ( self::is_timestamp( $raw ) ) {
153 - return (int) $raw;
154 - }
155 -
156 - return 0;
157 - }
158 -
159 - private static function is_timestamp( $value ): bool {
160 - if ( ! is_numeric( $value ) ) {
161 - return false;
162 - }
163 -
164 - return (int) $value > 0;
165 - }
166 -
167 - protected function get_current_timestamp(): int {
168 - return (int) time();
169 - }
170 -
171 138 public function update_label( string $label ): bool {
172 139 $result = wp_update_post( [
173 140 'ID' => $this->post->ID,
174 141 'post_title' => $label,
@@ -173,12 +140,8 @@
173 140 'ID' => $this->post->ID,
174 141 'post_title' => $label,
175 142 ] );
176 143
177 - if ( ! is_wp_error( $result ) && ! $this->is_preview() ) {
178 - update_post_meta( $this->post->ID, self::META_KEY_EDITED, $this->get_current_timestamp() );
179 - }
180 -
181 144 return ! is_wp_error( $result );
182 145 }
183 146
184 147 private function get_context_data(): array {
@@ -192,20 +155,8 @@
192 155
193 156 return is_array( $data ) ? $data : [];
194 157 }
195 158
196 - private function get_preview_data(): array {
197 - $data = get_post_meta( $this->post->ID, self::META_KEY_DATA_PREVIEW, true );
198 -
199 - return is_array( $data ) ? $data : [];
200 - }
201 -
202 - private function get_version(): string {
203 - $version = get_post_meta( $this->post->ID, self::META_KEY_VERSION, true );
204 -
205 - return is_string( $version ) ? $version : '';
206 - }
207 -
208 159 public function update_data(
209 160 array $data,
210 161 string $version = ELEMENTOR_VERSION
211 162 ): bool {
@@ -218,12 +169,8 @@
218 169 }
219 170
220 171 update_post_meta( $this->post->ID, self::META_KEY_VERSION, $version );
221 172
222 - if ( ! $this->is_preview() ) {
223 - update_post_meta( $this->post->ID, self::META_KEY_EDITED, $this->get_current_timestamp() );
224 - }
225 -
226 173 return false !== $result;
227 174 }
228 175
229 176 public static function create(
@@ -229,9 +176,9 @@
229 176 public static function create(
230 177 string $class_id,
231 178 string $label,
232 179 array $data,
233 - ?Kit $kit = null,
180 + int $order = 0,
234 181 string $version = ELEMENTOR_VERSION
235 182 ): ?self {
236 183 $post_id = wp_insert_post( [
237 184 'post_type' => Global_Class_Post_Type::CPT,
@@ -236,8 +183,9 @@
236 183 $post_id = wp_insert_post( [
237 184 'post_type' => Global_Class_Post_Type::CPT,
238 185 'post_title' => $label,
239 186 'post_status' => 'publish',
187 + 'menu_order' => $order,
240 188 ] );
241 189
242 190 if ( is_wp_error( $post_id ) || ! $post_id ) {
243 191 return null;
@@ -242,27 +190,13 @@
242 190 if ( is_wp_error( $post_id ) || ! $post_id ) {
243 191 return null;
244 192 }
245 193
246 - $normalized_data = Global_Class_Data_Normalizer::normalize_style_fields( $data );
247 -
248 194 update_post_meta( $post_id, self::META_KEY_ID, $class_id );
249 - update_post_meta( $post_id, self::META_KEY_DATA, $normalized_data );
195 + update_post_meta( $post_id, self::META_KEY_DATA, $data );
250 196 update_post_meta( $post_id, self::META_KEY_VERSION, $version );
251 197
252 - $kit = $kit ?? Plugin::$instance->kits_manager->get_active_kit();
253 -
254 - if ( $kit ) {
255 - Global_Classes_Post_IDs::make( $kit )->set( $class_id, (int) $post_id );
256 - }
257 -
258 - $instance = self::from_post_id( $post_id );
259 -
260 - if ( $instance ) {
261 - update_post_meta( $post_id, self::META_KEY_EDITED, $instance->get_creation_timestamp() );
262 - }
263 -
264 - return $instance;
198 + return self::from_post_id( $post_id );
265 199 }
266 200
267 201 public function delete(): bool {
268 202 $result = wp_delete_post( $this->post->ID, true );
@@ -267,55 +201,6 @@
267 201 public function delete(): bool {
268 202 $result = wp_delete_post( $this->post->ID, true );
269 203
270 204 return false !== $result;
271 - }
272 -
273 - public function clone( Kit $target_kit ): ?self {
274 - return self::clone_to_kit( $this->get_class_id(), $this, $target_kit );
275 - }
276 -
277 - public static function clone_to_other_kit( string $style_id, Kit $source_kit, Kit $target_kit ): ?self {
278 - $source_post = self::find_by_class_id( $style_id, false, $source_kit );
279 -
280 - if ( ! $source_post ) {
281 - return null;
282 - }
283 -
284 - return self::clone_to_kit( $style_id, $source_post, $target_kit );
285 - }
286 -
287 - private static function clone_to_kit( string $style_id, self $source_post, Kit $target_kit ): ?self {
288 - $new_post_id = wp_insert_post( [
289 - 'post_type' => Global_Class_Post_Type::CPT,
290 - 'post_title' => $source_post->get_label(),
291 - 'post_status' => 'publish',
292 - ] );
293 -
294 - if ( is_wp_error( $new_post_id ) || ! $new_post_id ) {
295 - return null;
296 - }
297 -
298 - update_post_meta( $new_post_id, self::META_KEY_ID, $style_id );
299 - update_post_meta( $new_post_id, self::META_KEY_VERSION, $source_post->get_version() );
300 -
301 - $frontend_data = $source_post->get_frontend_data();
302 - $preview_data = $source_post->get_preview_data();
303 - $last_edited_timestamp = get_post_meta( $source_post->get_post_id(), self::META_KEY_EDITED, true );
304 -
305 - if ( ! empty( $frontend_data ) ) {
306 - update_post_meta( $new_post_id, self::META_KEY_DATA, $frontend_data );
307 - }
308 -
309 - if ( ! empty( $preview_data ) ) {
310 - update_post_meta( $new_post_id, self::META_KEY_DATA_PREVIEW, $preview_data );
311 - }
312 -
313 - if ( $last_edited_timestamp ) {
314 - update_post_meta( $new_post_id, self::META_KEY_EDITED, $last_edited_timestamp );
315 - }
316 -
317 - Global_Classes_Post_IDs::make( $target_kit )->set( $style_id, (int) $new_post_id );
318 -
319 - return self::from_post_id( $new_post_id );
320 205 }
321 206 }