← All changes
|
modules/global-classes/global-classes-repository.php
+16
-3
4.3.0-beta1
→
4.3.2
View file →
| @@ -143,11 +143,9 @@ | ||
| 143 | 143 | $labels->set_labels( $final_label_map ); |
| 144 | 144 | |
| 145 | 145 | if ( ! $is_preview ) { |
| 146 | 146 | Global_Classes_Sync_Map::make( $this->get_kit() )->apply_changes( $touched_items, $to_delete ); |
| 147 | - Global_Classes_Order::make( $this->get_kit() ) | |
| 148 | - ->set_preview( true ) | |
| 149 | - ->set_order( $order ); | |
| 147 | + $this->propagate_order_to_preview( $order, $to_delete ); | |
| 150 | 148 | |
| 151 | 149 | $this->bulk_clear_preview_meta( array_values( $to_update ) ); |
| 152 | 150 | $this->clear_preview_labels_for_ids( array_merge( |
| 153 | 151 | array_values( $to_create ), |
| @@ -173,8 +171,23 @@ | ||
| 173 | 171 | $to_delete, |
| 174 | 172 | $affected_post_ids |
| 175 | 173 | ); |
| 176 | 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 ); | |
| 177 | 190 | } |
| 178 | 191 | |
| 179 | 192 | public function each_item( callable $cb, bool $skip_migration = false, int $batch_size = self::READ_BATCH_SIZE ): void { |
| 180 | 193 | $order = Global_Classes_Order::make( $this->get_kit() )->get_order(); |