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/database/migrations/migrate-to-posts.php +54 -29 4.3.3 → 4.1.0-beta1 View file →
@@ -2,17 +2,13 @@
2 2
3 3 namespace Elementor\Modules\GlobalClasses\Database\Migrations;
4 4
5 5 use Elementor\Core\Database\Base_Migration;
6 -use Elementor\Core\Kits\Documents\Kit;
7 -use Elementor\Core\Kits\Concerns\Has_Kit_Dependency;
6 +use Elementor\Modules\GlobalClasses\Concerns\Has_Kit_Dependency;
8 7 use Elementor\Modules\GlobalClasses\Global_Class_Post_Type;
8 +use Elementor\Modules\GlobalClasses\Global_Classes_Relations;
9 9 use Elementor\Modules\GlobalClasses\Global_Classes_Order;
10 -use Elementor\Modules\GlobalClasses\Global_Classes_Post_IDs;
11 -use Elementor\Modules\GlobalClasses\Global_Classes_Relations;
12 10 use Elementor\Modules\GlobalClasses\Global_Classes_Repository;
13 -use Elementor\Modules\GlobalClasses\Utils\Global_Class_Data_Normalizer;
14 -use Elementor\Modules\GlobalClasses\Utils\Kit_Utils;
15 11 use Elementor\Plugin;
16 12
17 13 if ( ! defined( 'ABSPATH' ) ) {
18 14 exit; // Exit if accessed directly.
@@ -21,34 +17,44 @@
21 17 class Migrate_To_Posts extends Base_Migration {
22 18 use Has_Kit_Dependency;
23 19
24 20 public function up() {
25 - Global_Class_Post_Type::ensure_registered();
21 + $this->ensure_cpt_registered();
26 22
27 - $active_kit = $this->get_kit();
23 + $migrated = $this->migrate_global_classes_to_posts();
28 24
29 - foreach ( Kit_Utils::get_all_kit_documents() as $kit ) {
30 - $migrated = $this->migrate_kit( $kit );
25 + if ( ! $migrated ) {
26 + return;
27 + }
31 28
32 - if ( $migrated && $active_kit && $kit->get_id() === $active_kit->get_id() ) {
33 - self::run_document_tracking( $kit );
34 - }
35 - }
29 + $this->update_document_tracking();
36 30
37 31 // We'll comment it out for now as we may prefer to avoid data restoration upon downgrading
38 32 // $this->cleanup_kit_meta();
39 33 }
40 34
41 - public static function migrate_kit( Kit $kit ): bool {
42 - $global_classes = self::get_aggregate_global_classes( $kit );
35 + private function ensure_cpt_registered(): void {
36 + if ( ! post_type_exists( Global_Class_Post_Type::CPT ) ) {
37 + ( new Global_Class_Post_Type() )->register_post_type();
38 + }
39 + }
43 40
41 + private function migrate_global_classes_to_posts(): bool {
42 + $kit = $this->get_kit();
43 +
44 + if ( ! $kit ) {
45 + return false;
46 + }
47 +
48 + $global_classes = $kit->get_json_meta( Global_Classes_Repository::META_KEY_FRONTEND );
49 +
44 50 if ( empty( $global_classes ) || empty( $global_classes['items'] ) ) {
45 51 return false;
46 52 }
47 53
48 - $existing_order = Global_Classes_Order::make( $kit )->set_preview( false )->get_order();
54 + $existing_posts = $this->get_existing_class_posts();
49 55
50 - if ( ! empty( $existing_order ) ) {
56 + if ( ! empty( $existing_posts ) ) {
51 57 return false;
52 58 }
53 59
54 60 $raw_items = $global_classes['items'];
@@ -53,9 +59,9 @@
53 59
54 60 $raw_items = $global_classes['items'];
55 61 $order = $global_classes['order'] ?? array_keys( $raw_items );
56 62
57 - $items = Global_Class_Data_Normalizer::normalize_styles( $raw_items );
63 + $items = $this->normalize_items( $raw_items );
58 64
59 65 Global_Classes_Repository::make( $kit )->put( $items, $order );
60 66
61 67 return true;
@@ -60,27 +66,46 @@
60 66
61 67 return true;
62 68 }
63 69
64 - public static function get_aggregate_global_classes( ?Kit $kit = null ): array {
65 - $empty_result = [
66 - 'items' => [],
67 - 'order' => [],
68 - ];
70 + private function normalize_items( array $raw_items ): array {
71 + $items = [];
69 72
70 - if ( ! $kit ) {
71 - return $empty_result;
73 + foreach ( $raw_items as $class_id => $class_data ) {
74 + $item = [
75 + 'id' => $class_id,
76 + 'label' => $class_data['label'] ?? $class_id,
77 + 'type' => $class_data['type'] ?? 'class',
78 + 'variants' => $class_data['variants'] ?? [],
79 + ];
80 +
81 + if ( array_key_exists( 'sync_to_v3', $class_data ) ) {
82 + $item['sync_to_v3'] = (bool) $class_data['sync_to_v3'];
83 + }
84 +
85 + $items[ $class_id ] = $item;
72 86 }
73 87
74 - return $kit->get_json_meta( Global_Classes_Repository::META_KEY_FRONTEND ) ?? $empty_result;
88 + return $items;
75 89 }
76 90
77 - public static function run_document_tracking( ?Kit $kit ): void {
91 + private function get_existing_class_posts(): array {
92 + return get_posts( [
93 + 'post_type' => Global_Class_Post_Type::CPT,
94 + 'post_status' => 'publish',
95 + 'posts_per_page' => -1,
96 + 'fields' => 'ids',
97 + ] );
98 + }
99 +
100 + private function update_document_tracking(): void {
101 + $kit = $this->get_kit();
102 +
78 103 if ( ! $kit ) {
79 104 return;
80 105 }
81 106
82 - $valid_class_ids = Global_Classes_Order::make( $kit )->set_preview( false )->get_order();
107 + $valid_class_ids = Global_Classes_Order::make( $kit )->get_order();
83 108
84 109 if ( empty( $valid_class_ids ) ) {
85 110 return;
86 111 }