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