/** * {@inheritDoc} * * @api */ public function restore($removeExisting, $version, $absPath = null) { if ($this->objectManager->hasPendingChanges()) { throw new InvalidItemStateException('You may not call restore when there pending unsaved changes'); } if (is_string($version)) { if (!is_string($absPath)) { throw new InvalidArgumentException('To restore version by version name you need to specify the path to the node you want to restore to this name'); } $vh = $this->getVersionHistory($absPath); $version = $vh->getVersion($version); $versionPath = $version->getPath(); $nodePath = $absPath; } elseif (is_array($version)) { // @codeCoverageIgnoreStart throw new NotImplementedException('TODO: implement restoring a list of versions'); // @codeCoverageIgnoreEnd } elseif ($version instanceof VersionInterface && is_string($absPath)) { // @codeCoverageIgnoreStart throw new NotImplementedException('TODO: implement restoring a version to a specified path'); // @codeCoverageIgnoreEnd } elseif ($version instanceof VersionInterface) { $versionPath = $version->getPath(); $nodePath = $this->objectManager->getNodeByIdentifier($version->getContainingHistory()->getVersionableIdentifier())->getPath(); } else { throw new InvalidArgumentException(); } $this->objectManager->restore($removeExisting, $versionPath, $nodePath); $version->setCachedPredecessorsDirty(); if ($history = $this->objectManager->getCachedNode(PathHelper::getParentPath($version->getPath()), 'Version\\VersionHistory')) { $history->notifyHistoryChanged(); } }