/**
* {@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();
}
}