Builds API Relation object from provided SPI Relation object.
public buildRelationDomainObject ( eZ\Publish\SPI\Persistence\Content\Relation $spiRelation, eZ\Publish\API\Repository\Values\Content\ContentInfo $sourceContentInfo, eZ\Publish\API\Repository\Values\Content\ContentInfo $destinationContentInfo ) : eZ\Publish\API\Repository\Values\Content\Relation | ||
$spiRelation | eZ\Publish\SPI\Persistence\Content\Relation | |
$sourceContentInfo | eZ\Publish\API\Repository\Values\Content\ContentInfo | |
$destinationContentInfo | eZ\Publish\API\Repository\Values\Content\ContentInfo | |
return | eZ\Publish\API\Repository\Values\Content\Relation |
/** * Adds a relation of type common. * * The source of the relation is the content and version * referenced by $versionInfo. * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to edit this version * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException if the version is not a draft * * @param \eZ\Publish\API\Repository\Values\Content\VersionInfo $sourceVersion * @param \eZ\Publish\API\Repository\Values\Content\ContentInfo $destinationContent the destination of the relation * * @return \eZ\Publish\API\Repository\Values\Content\Relation the newly created relation */ public function addRelation(APIVersionInfo $sourceVersion, ContentInfo $destinationContent) { $sourceVersion = $this->loadVersionInfoById($sourceVersion->contentInfo->id, $sourceVersion->versionNo); if ($sourceVersion->status !== APIVersionInfo::STATUS_DRAFT) { throw new BadStateException('$sourceVersion', 'Relations of type common can only be added to versions of status draft'); } if (!$this->repository->canUser('content', 'edit', $sourceVersion)) { throw new UnauthorizedException('content', 'edit', array('contentId' => $sourceVersion->contentInfo->id)); } $sourceContentInfo = $sourceVersion->getContentInfo(); $this->repository->beginTransaction(); try { $spiRelation = $this->persistenceHandler->contentHandler()->addRelation(new SPIRelationCreateStruct(array('sourceContentId' => $sourceContentInfo->id, 'sourceContentVersionNo' => $sourceVersion->versionNo, 'sourceFieldDefinitionId' => null, 'destinationContentId' => $destinationContent->id, 'type' => APIRelation::COMMON))); $this->repository->commit(); } catch (Exception $e) { $this->repository->rollback(); throw $e; } return $this->domainMapper->buildRelationDomainObject($spiRelation, $sourceContentInfo, $destinationContent); }