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