# elementor/3.32.2/modules/global-classes/global-classes-changes-resolver.php

Elementor Website Builder – more than just a page builder, version 3.32.2. 64 lines.

- Page: https://pluginprobe.com/plugins/elementor/3.32.2/code/modules/global-classes/global-classes-changes-resolver.php
- Raw: https://pluginprobe.com/plugins/elementor/3.32.2/raw/modules/global-classes/global-classes-changes-resolver.php
- Modified: 2025-06-10T09:36:30+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/elementor/3.32.2/code/modules/global-classes/global-classes-changes-resolver.php#L10-L20`.

```php
<?php

namespace Elementor\Modules\GlobalClasses;

use Elementor\Core\Utils\Collection;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

class Global_Classes_Changes_Resolver {
	private Global_Classes_Repository $repository;

	private Collection $added;

	private Collection $deleted;

	private Collection $modified;

	public function __construct( Global_Classes_Repository $repository, array $changes ) {
		$this->repository = $repository;
		$this->added = Collection::make( $changes['added'] ?? [] );
		$this->deleted = Collection::make( $changes['deleted'] ?? [] );
		$this->modified = Collection::make( $changes['modified'] ?? [] );
	}

	public static function make( Global_Classes_Repository $repository, array $changes ): self {
		return new self( $repository, $changes );
	}

	public function resolve_items( array $payload ) {
		$touched = $this->added->merge( $this->modified )->values();

		$items_to_save = Collection::make( $payload )->only( $touched );

		return $this->repository
			->all()
			->get_items()
			->except( $this->deleted->values() )
			->merge( $items_to_save )
			->all();
	}

	public function resolve_order( array $payload ) {
		$payload = Collection::make( $payload );

		$current_order = $this->repository->all()->get_order();

		$missing_in_current_order = $payload
			->filter( fn( $item ) => ! $this->added->contains( $item ) )
			->diff( $current_order );

		$payload = $payload->filter( fn( $item ) => ! $missing_in_current_order->contains( $item ) );

		$missing_in_payload = $current_order
			->filter( fn( $item ) => ! $this->deleted->contains( $item ) )
			->diff( $payload );

		return $missing_in_payload
			->merge( $payload )
			->all();
	}
}

```
