/** * Copy Content with Fields and Versions from $contentId in $version. * * Copies all fields from $contentId in $versionNo (or all versions if null) * to a new object which is returned. Version numbers are maintained. * * @todo Should relations be copied? Which ones? * * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException If content or version is not found * * @param mixed $contentId * @param mixed|null $versionNo Copy all versions if left null * * @return \eZ\Publish\SPI\Persistence\Content */ public function copy($contentId, $versionNo = null) { $currentVersionNo = isset($versionNo) ? $versionNo : $this->loadContentInfo($contentId)->currentVersionNo; // Copy content in given version or current version $createStruct = $this->mapper->createCreateStructFromContent($this->load($contentId, $currentVersionNo)); $content = $this->internalCreate($createStruct, $currentVersionNo); $contentType = $this->contentTypeHandler->load($createStruct->typeId); // If version was not passed also copy other versions if (!isset($versionNo)) { foreach ($this->listVersions($contentId) as $versionInfo) { if ($versionInfo->versionNo === $currentVersionNo) { continue; } $versionContent = $this->load($contentId, $versionInfo->versionNo); $versionContent->versionInfo->contentInfo->id = $content->versionInfo->contentInfo->id; $versionContent->versionInfo->modificationDate = $createStruct->modified; $versionContent->versionInfo->creationDate = $createStruct->modified; $versionContent->versionInfo->id = $this->contentGateway->insertVersion($versionContent->versionInfo, $versionContent->fields); $this->fieldHandler->createNewFields($versionContent, $contentType); // Create names foreach ($versionContent->versionInfo->names as $language => $name) { $this->contentGateway->setName($content->versionInfo->contentInfo->id, $versionInfo->versionNo, $name, $language); } } } return $content; }
/** * Sets the content object name * * @param int $contentId * @param int $version * @param string $name * @param string $language * * @return void */ public function setName($contentId, $version, $name, $language) { try { return $this->innerGateway->setName($contentId, $version, $name, $language); } catch (DBALException $e) { throw new RuntimeException('Database error', 0, $e); } catch (PDOException $e) { throw new RuntimeException('Database error', 0, $e); } }