Neos\Neos\Ui\Domain\Model\ChangeCollection::compress PHP Method

compress() public method

Reduce this collection to a minimal set of changes with the same outcome
public compress ( ) : ChangeCollection
return ChangeCollection
    public function compress()
    {
        $compressedChangeCollection = new ChangeCollection();
        while ($change = array_shift($this->changes)) {
            if ($subsequentChange = array_shift($this->changes)) {
                if ($change->canMerge($subsequentChange)) {
                    $change = $change->merge($subsequentChange);
                } else {
                    array_unshift($this->changes, $subsequentChange);
                }
            }
            $compressedChangeCollection->add($change);
        }
        return $compressedChangeCollection;
    }

Usage Example

 /**
  * Apply a set of changes to the system
  *
  * @param ChangeCollection $changes
  * @return void
  */
 public function changeAction(ChangeCollection $changes)
 {
     try {
         $count = $changes->count();
         $changes->compress()->apply();
         $success = new Info();
         $success->setMessage(sprintf('%d change(s) successfully applied.', $count));
         $this->feedbackCollection->add($success);
         $this->persistenceManager->persistAll();
     } catch (\Exception $e) {
         $error = new Error();
         $error->setMessage($e->getMessage());
         $this->feedbackCollection->add($error);
     }
     $this->view->assign('value', $this->feedbackCollection);
 }