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