PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.0-beta3
Elementor Website Builder – more than just a page builder v4.3.0-beta3
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 4.1.0-beta1 4.1.0-dev1 All 452 releases
elementor / modules / global-classes / database / migrations / migrate-to-posts.php

migrate-to-posts.php in Elementor Website Builder – more than just a page builder 4.3.0-beta3, at modules/global-classes/database/migrations/migrate-to-posts.php

113 lines 3.1 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\Database\Migrations;
4
5 use Elementor\Core\Database\Base_Migration;
6 use Elementor\Core\Kits\Documents\Kit;
7 use Elementor\Core\Kits\Concerns\Has_Kit_Dependency;
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;
11 use Elementor\Modules\GlobalClasses\Global_Classes_Relations;
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;
15 use Elementor\Plugin;
16
17 if ( ! defined( 'ABSPATH' ) ) {
18 exit; // Exit if accessed directly.
19 }
20
21 class Migrate_To_Posts extends Base_Migration {
22 use Has_Kit_Dependency;
23
24 public function up() {
25 Global_Class_Post_Type::ensure_registered();
26
27 $active_kit = $this->get_kit();
28
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 }
35 }
36
37 // We'll comment it out for now as we may prefer to avoid data restoration upon downgrading
38 // $this->cleanup_kit_meta();
39 }
40
41 public static function migrate_kit( Kit $kit ): bool {
42 $global_classes = self::get_aggregate_global_classes( $kit );
43
44 if ( empty( $global_classes ) || empty( $global_classes['items'] ) ) {
45 return false;
46 }
47
48 $existing_order = Global_Classes_Order::make( $kit )->set_preview( false )->get_order();
49
50 if ( ! empty( $existing_order ) ) {
51 return false;
52 }
53
54 $raw_items = $global_classes['items'];
55 $order = $global_classes['order'] ?? array_keys( $raw_items );
56
57 $items = Global_Class_Data_Normalizer::normalize_styles( $raw_items );
58
59 Global_Classes_Repository::make( $kit )->put( $items, $order );
60
61 return true;
62 }
63
64 public static function get_aggregate_global_classes( ?Kit $kit = null ): array {
65 $empty_result = [
66 'items' => [],
67 'order' => [],
68 ];
69
70 if ( ! $kit ) {
71 return $empty_result;
72 }
73
74 return $kit->get_json_meta( Global_Classes_Repository::META_KEY_FRONTEND ) ?? $empty_result;
75 }
76
77 public static function run_document_tracking( ?Kit $kit ): void {
78 if ( ! $kit ) {
79 return;
80 }
81
82 $valid_class_ids = Global_Classes_Order::make( $kit )->set_preview( false )->get_order();
83
84 if ( empty( $valid_class_ids ) ) {
85 return;
86 }
87
88 $relations = new Global_Classes_Relations();
89
90 Plugin::$instance->db->iterate_elementor_documents(
91 function ( $document ) use ( $relations, $valid_class_ids ) {
92 $post_id = $document->get_main_id();
93 $used_class_ids = $relations->collect_class_ids_from_post( $post_id, $valid_class_ids );
94
95 if ( ! empty( $used_class_ids ) ) {
96 $relations->set_styles_for_post( $post_id, $used_class_ids );
97 }
98 }
99 );
100 }
101
102 private function cleanup_kit_meta(): void {
103 $kit = Plugin::$instance->kits_manager->get_active_kit();
104
105 if ( ! $kit ) {
106 return;
107 }
108
109 $kit->delete_meta( Global_Classes_Repository::META_KEY_FRONTEND );
110 $kit->delete_meta( Global_Classes_Repository::META_KEY_PREVIEW );
111 }
112 }
113