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