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