/** * Update content type definition and returns a draft * * @param array $data * @return \eZ\Publish\API\Repository\Values\ContentType\ContentTypeDraft */ private function getUpdatedDraft(array &$data) { $contentType = $this->contentTypeService->loadContentTypeByIdentifier($data['identifier']); $draft = $this->contentTypeService->createContentTypeDraft($contentType); // Update content type $struct = $this->contentTypeService->newContentTypeUpdateStruct($data); $this->fillValueObject($struct, $data); $diff = $this->diff->diff($contentType->fieldDefinitions, $data['field_definitions'], 'identifier'); // @todo: introduce field updates (now only remove and add are supported) $this->updateDraftFields($draft, $diff, $data); $this->contentTypeService->updateContentTypeDraft($draft, $struct); return $draft; }
public function processDefaultAction(FormActionEvent $event) { // Don't update anything if we just want to cancel the draft. if ($event->getClickedButton() === 'removeDraft') { return; } // Always update FieldDefinitions and ContentTypeDraft /** @var \EzSystems\RepositoryForms\Data\ContentTypeData $contentTypeData */ $contentTypeData = $event->getData(); $contentTypeDraft = $contentTypeData->contentTypeDraft; foreach ($contentTypeData->fieldDefinitionsData as $fieldDefData) { $this->contentTypeService->updateFieldDefinition($contentTypeDraft, $fieldDefData->fieldDefinition, $fieldDefData); } $this->contentTypeService->updateContentTypeDraft($contentTypeDraft, $contentTypeData); }
/** * Updates meta data of a draft. This method does not handle field definitions * * @param $contentTypeId * * @throws \eZ\Publish\Core\REST\Server\Exceptions\ForbiddenException * @return \eZ\Publish\Core\REST\Server\Values\RestContentType */ public function updateContentTypeDraft($contentTypeId, Request $request) { $contentTypeDraft = $this->contentTypeService->loadContentTypeDraft($contentTypeId); $contentTypeUpdateStruct = $this->inputDispatcher->parse(new Message(array('Content-Type' => $request->headers->get('Content-Type')), $request->getContent())); try { $this->contentTypeService->updateContentTypeDraft($contentTypeDraft, $contentTypeUpdateStruct); } catch (InvalidArgumentException $e) { throw new ForbiddenException($e->getMessage()); } return new Values\RestContentType($this->contentTypeService->loadContentTypeDraft($contentTypeDraft->id)); }
/** * Update a Content Type object * * Does not update fields (fieldDefinitions), use {@link updateFieldDefinition()} to update them. * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to update a content type * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If the given identifier or remoteId already exists. * * @param \eZ\Publish\API\Repository\Values\ContentType\ContentTypeDraft $contentTypeDraft * @param \eZ\Publish\API\Repository\Values\ContentType\ContentTypeUpdateStruct $contentTypeUpdateStruct */ public function updateContentTypeDraft(ContentTypeDraft $contentTypeDraft, ContentTypeUpdateStruct $contentTypeUpdateStruct) { $returnValue = $this->service->updateContentTypeDraft($contentTypeDraft, $contentTypeUpdateStruct); $this->signalDispatcher->emit(new UpdateContentTypeDraftSignal(array('contentTypeDraftId' => $contentTypeDraft->id))); return $returnValue; }