PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.9
Elementor Website Builder – more than just a page builder v4.0.9
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 4.0.7 All 451 releases
elementor / modules / global-classes / global-classes-changes-resolver.php

global-classes-changes-resolver.php in Elementor Website Builder – more than just a page builder 4.0.9, at modules/global-classes/global-classes-changes-resolver.php

64 lines 1.7 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;
4
5 use Elementor\Core\Utils\Collection;
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit; // Exit if accessed directly.
9 }
10
11 class Global_Classes_Changes_Resolver {
12 private Global_Classes_Repository $repository;
13
14 private Collection $added;
15
16 private Collection $deleted;
17
18 private Collection $modified;
19
20 public function __construct( Global_Classes_Repository $repository, array $changes ) {
21 $this->repository = $repository;
22 $this->added = Collection::make( $changes['added'] ?? [] );
23 $this->deleted = Collection::make( $changes['deleted'] ?? [] );
24 $this->modified = Collection::make( $changes['modified'] ?? [] );
25 }
26
27 public static function make( Global_Classes_Repository $repository, array $changes ): self {
28 return new self( $repository, $changes );
29 }
30
31 public function resolve_items( array $payload ) {
32 $touched = $this->added->merge( $this->modified )->values();
33
34 $items_to_save = Collection::make( $payload )->only( $touched );
35
36 return $this->repository
37 ->all()
38 ->get_items()
39 ->except( $this->deleted->values() )
40 ->merge( $items_to_save )
41 ->all();
42 }
43
44 public function resolve_order( array $payload ) {
45 $payload = Collection::make( $payload );
46
47 $current_order = $this->repository->all()->get_order();
48
49 $missing_in_current_order = $payload
50 ->filter( fn( $item ) => ! $this->added->contains( $item ) )
51 ->diff( $current_order );
52
53 $payload = $payload->filter( fn( $item ) => ! $missing_in_current_order->contains( $item ) );
54
55 $missing_in_payload = $current_order
56 ->filter( fn( $item ) => ! $this->deleted->contains( $item ) )
57 ->diff( $payload );
58
59 return $missing_in_payload
60 ->merge( $payload )
61 ->all();
62 }
63 }
64