public function processRemoveFieldDefinition(FormActionEvent $event) { /** @var \eZ\Publish\API\Repository\Values\ContentType\ContentTypeDraft $contentTypeDraft */ $contentTypeDraft = $event->getData()->contentTypeDraft; // Accessing FieldDefinition user selection through the form and not the data, // as "selected" is not a property of FieldDefinitionData. /** @var \Symfony\Component\Form\FormInterface $fieldDefForm */ foreach ($event->getForm()->get('fieldDefinitionsData') as $fieldDefForm) { if ($fieldDefForm->get('selected')->getData() === true) { $this->contentTypeService->removeFieldDefinition($contentTypeDraft, $fieldDefForm->getData()->fieldDefinition); } } }
/** * Deletes a field definition from a content type draft * * @param $contentTypeId * @param $fieldDefinitionId * * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException * @return \eZ\Publish\Core\REST\Server\Values\NoContent */ public function removeContentTypeDraftFieldDefinition($contentTypeId, $fieldDefinitionId, Request $request) { $contentTypeDraft = $this->contentTypeService->loadContentTypeDraft($contentTypeId); $fieldDefinition = null; foreach ($contentTypeDraft->getFieldDefinitions() as $fieldDef) { if ($fieldDef->id == $fieldDefinitionId) { $fieldDefinition = $fieldDef; } } if ($fieldDefinition === null) { throw new Exceptions\NotFoundException("Field definition not found: '{$request->getPathInfo()}'."); } $this->contentTypeService->removeFieldDefinition($contentTypeDraft, $fieldDefinition); return new Values\NoContent(); }
/** * Update draft fields with diff data * * @param ContentTypeDraft $draft * @param array $diff * @param array $data */ private function updateDraftFields(ContentTypeDraft $draft, array $diff, array &$data) { // Remove fields which are missing in the new definition foreach ($draft->fieldDefinitions as $fieldDefinition) { if (in_array($fieldDefinition->identifier, $diff['remove'])) { $this->contentTypeService->removeFieldDefinition($draft, $fieldDefinition); } } // Add fields which are missing in the old content type $fieldStructs = $data['field_definitions']; //$this->getFieldDefinitionCreateStructs($data); foreach ($fieldStructs as $fieldStruct) { if (in_array($fieldStruct->identifier, $diff['add'])) { $this->contentTypeService->addFieldDefinition($draft, $fieldStruct); } } }
/** * Remove a field definition from an existing Type. * * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If the given field definition does not belong to the given type * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to edit a content type * * @param \eZ\Publish\API\Repository\Values\ContentType\ContentTypeDraft $contentTypeDraft * @param \eZ\Publish\API\Repository\Values\ContentType\FieldDefinition $fieldDefinition */ public function removeFieldDefinition(ContentTypeDraft $contentTypeDraft, FieldDefinition $fieldDefinition) { $returnValue = $this->service->removeFieldDefinition($contentTypeDraft, $fieldDefinition); $this->signalDispatcher->emit(new RemoveFieldDefinitionSignal(array('contentTypeDraftId' => $contentTypeDraft->id, 'fieldDefinitionId' => $fieldDefinition->id))); return $returnValue; }