/** * Creates a draft from an existing content type. * * This is a complete copy of the content * type which has the state STATUS_DRAFT. * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to edit a content type * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException If there is already a draft assigned to another user * * @param \eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType * * @return \eZ\Publish\API\Repository\Values\ContentType\ContentTypeDraft */ public function createContentTypeDraft(APIContentType $contentType) { if ($this->repository->hasAccess('class', 'create') !== true) { throw new UnauthorizedException('ContentType', 'create'); } try { $this->contentTypeHandler->load($contentType->id, SPIContentType::STATUS_DRAFT); throw new BadStateException("\$contentType", "Draft of the ContentType already exists"); } catch (APINotFoundException $e) { $this->repository->beginTransaction(); try { $spiContentType = $this->contentTypeHandler->createDraft($this->repository->getCurrentUser()->id, $contentType->id); $this->repository->commit(); } catch (Exception $e) { $this->repository->rollback(); throw $e; } } return $this->buildContentTypeDraftDomainObject($spiContentType); }
/** * Creates a draft from an existing content type. * * This is a complete copy of the content * type which has the state STATUS_DRAFT. * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to edit a content type * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException If there is already a draft assigned to another user * * @param \eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType * * @return \eZ\Publish\API\Repository\Values\ContentType\ContentTypeDraft */ public function createContentTypeDraft(APIContentType $contentType) { if ($this->repository->hasAccess('class', 'create') !== true) { throw new UnauthorizedException('ContentType', 'create'); } try { $this->contentTypeHandler->load($contentType->id, SPIContentType::STATUS_DRAFT); throw new BadStateException('$contentType', 'Draft of the ContentType already exists'); } catch (APINotFoundException $e) { $this->repository->beginTransaction(); try { $spiContentType = $this->contentTypeHandler->createDraft($this->repository->getCurrentUserReference()->getUserId(), $contentType->id); $this->repository->commit(); } catch (Exception $e) { $this->repository->rollback(); throw $e; } } return $this->contentTypeDomainMapper->buildContentTypeDraftDomainObject($spiContentType, array_map(function ($id) { return $this->contentTypeHandler->loadGroup($id); }, $spiContentType->groupIds)); }
/** * Creates a draft of existing defined content type * * Updates modified date, sets $modifierId and status to Type::STATUS_DRAFT on the new returned draft. * * @param mixed $modifierId * @param mixed $contentTypeId * @return \eZ\Publish\SPI\Persistence\Content\Type * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException If type with defined status is not found */ public function createDraft($modifierId, $contentTypeId) { $this->clearCache(); return $this->innerHandler->createDraft($modifierId, $contentTypeId); }