← All changes
|
modules/global-classes/global-classes-repository.php
+17
-12
4.2.4
→
4.3.2
View file →
| @@ -2,9 +2,9 @@ | ||
| 2 | 2 | namespace Elementor\Modules\GlobalClasses; |
| 3 | 3 | |
| 4 | 4 | use Elementor\Core\Kits\Documents\Kit; |
| 5 | 5 | use Elementor\Modules\DesignSystemSync\Classes\Global_Classes_Sync_Map; |
| 6 | -use Elementor\Modules\GlobalClasses\Concerns\Has_Kit_Dependency; | |
| 6 | +use Elementor\Core\Kits\Concerns\Has_Kit_Dependency; | |
| 7 | 7 | use Elementor\Modules\GlobalClasses\Concerns\Has_Preview_Context; |
| 8 | 8 | use Elementor\Modules\GlobalClasses\Utils\Global_Class_Data_Normalizer; |
| 9 | 9 | |
| 10 | 10 | if ( ! defined( 'ABSPATH' ) ) { |
| @@ -83,16 +83,8 @@ | ||
| 83 | 83 | } |
| 84 | 84 | |
| 85 | 85 | $labels->set_labels( $existing_labels ); |
| 86 | 86 | |
| 87 | - if ( ! $this->is_preview() ) { | |
| 88 | - Global_Classes_Order::make( $this->get_kit() ) | |
| 89 | - ->set_preview( true ) | |
| 90 | - ->set_order( $order ); | |
| 91 | - | |
| 92 | - $this->clear_preview_labels_for_ids( array_keys( $new_labels ) ); | |
| 93 | - } | |
| 94 | - | |
| 95 | 87 | $this->cache = null; |
| 96 | 88 | } |
| 97 | 89 | |
| 98 | 90 | private function labels(): Global_Classes_Labels { |
| @@ -151,11 +143,9 @@ | ||
| 151 | 143 | $labels->set_labels( $final_label_map ); |
| 152 | 144 | |
| 153 | 145 | if ( ! $is_preview ) { |
| 154 | 146 | Global_Classes_Sync_Map::make( $this->get_kit() )->apply_changes( $touched_items, $to_delete ); |
| 155 | - Global_Classes_Order::make( $this->get_kit() ) | |
| 156 | - ->set_preview( true ) | |
| 157 | - ->set_order( $order ); | |
| 147 | + $this->propagate_order_to_preview( $order, $to_delete ); | |
| 158 | 148 | |
| 159 | 149 | $this->bulk_clear_preview_meta( array_values( $to_update ) ); |
| 160 | 150 | $this->clear_preview_labels_for_ids( array_merge( |
| 161 | 151 | array_values( $to_create ), |
| @@ -181,8 +171,23 @@ | ||
| 181 | 171 | $to_delete, |
| 182 | 172 | $affected_post_ids |
| 183 | 173 | ); |
| 184 | 174 | } |
| 175 | + } | |
| 176 | + | |
| 177 | + private function propagate_order_to_preview( array $published_order, array $deleted_ids ): void { | |
| 178 | + $preview_order = Global_Classes_Order::make( $this->get_kit() )->set_preview( true ); | |
| 179 | + $existing_order = $preview_order->get_order(); | |
| 180 | + $unpublished_ids = array_flip( array_diff( $existing_order, $published_order, $deleted_ids ) ); | |
| 181 | + $merged_order = $published_order; | |
| 182 | + | |
| 183 | + foreach ( $existing_order as $position => $id ) { | |
| 184 | + if ( isset( $unpublished_ids[ $id ] ) ) { | |
| 185 | + array_splice( $merged_order, min( $position, count( $merged_order ) ), 0, [ $id ] ); | |
| 186 | + } | |
| 187 | + } | |
| 188 | + | |
| 189 | + $preview_order->set_order( $merged_order ); | |
| 185 | 190 | } |
| 186 | 191 | |
| 187 | 192 | public function each_item( callable $cb, bool $skip_migration = false, int $batch_size = self::READ_BATCH_SIZE ): void { |
| 188 | 193 | $order = Global_Classes_Order::make( $this->get_kit() )->get_order(); |