/** * 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( APIContentTypeDraft $contentTypeDraft, APIFieldDefinition $fieldDefinition ) { if ( $this->repository->hasAccess( 'class', 'update' ) !== true ) throw new UnauthorizedException( 'ContentType', 'update' ); $loadedFieldDefinition = $this->loadContentTypeDraft( $contentTypeDraft->id )->getFieldDefinition( $fieldDefinition->identifier ); if ( empty( $loadedFieldDefinition ) || $loadedFieldDefinition->id != $fieldDefinition->id ) { throw new InvalidArgumentException( "\$fieldDefinition", "The given FieldDefinition does not belong to the ContentType" ); } $this->repository->beginTransaction(); try { $this->contentTypeHandler->removeFieldDefinition( $contentTypeDraft->id, SPIContentType::STATUS_DRAFT, $fieldDefinition->id ); $this->repository->commit(); } catch ( Exception $e ) { $this->repository->rollback(); throw $e; } }
/** * Removes a field definition from an existing Type. * * This method creates a new status of the Type with the field definition * referred to by $fieldDefinitionId removed. It does not update existing * content objects depending on the field (default) values. * * @param mixed $contentTypeId * @param mixed $fieldDefinitionId * @return boolean */ public function removeFieldDefinition($contentTypeId, $status, $fieldDefinitionId) { $this->clearCache(); return $this->innerHandler->removeFieldDefinition($contentTypeId, $status, $fieldDefinitionId); }