public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('contentTypeGroupId', 'hidden', ['constraints' => new Callback(function ($contentTypeGroupId, ExecutionContextInterface $context) { try { $this->contentTypeService->loadContentTypeGroup($contentTypeGroupId); } catch (NotFoundException $e) { $context->buildViolation('content_type.error.content_type_group.not_found')->setParameter('%id%', $contentTypeGroupId)->addViolation(); } })])->add('create', 'submit', ['label' => 'content_type.create']); }
public function processUpdate(FormActionEvent $event) { /** @var \EzSystems\RepositoryForms\Data\ContentTypeGroup\ContentTypeGroupUpdateData|\EzSystems\RepositoryForms\Data\ContentTypeGroup\ContentTypeGroupCreateData $data */ $data = $event->getData(); if ($data->isNew()) { $contentTypeGroup = $this->contentTypeService->createContentTypeGroup($data); } else { $this->contentTypeService->updateContentTypeGroup($data->contentTypeGroup, $data); $contentTypeGroup = $this->contentTypeService->loadContentTypeGroup($data->getId()); } $data->setContentTypeGroup($contentTypeGroup); }
public function createContentTypeAction(Request $request, $contentTypeGroupId, $languageCode = null) { $createForm = $this->createForm(new ContentTypeCreateType($this->contentTypeService), ['contentTypeGroupId' => $contentTypeGroupId]); $createForm->handleRequest($request); if ($createForm->isValid()) { $languageCode = $languageCode ?: $this->prioritizedLanguages[0]; $contentTypeGroup = $this->contentTypeService->loadContentTypeGroup($createForm->getData()['contentTypeGroupId']); $contentTypeCreateStruct = new ContentTypeCreateStruct(['identifier' => '__new__' . md5(microtime(true)), 'mainLanguageCode' => $languageCode, 'names' => [$languageCode => 'New ContentType']]); $contentTypeDraft = $this->contentTypeService->createContentType($contentTypeCreateStruct, [$contentTypeGroup]); return $this->redirectToRouteAfterFormPost('admin_contenttypeUpdate', ['contentTypeId' => $contentTypeDraft->id, 'languageCode' => $languageCode]); } // Form validation failed. Send errors as notifications. foreach ($createForm->getErrors(true) as $error) { $this->notifyErrorPlural($error->getMessageTemplate(), $error->getMessagePluralization(), $error->getMessageParameters(), 'ezrepoforms_content_type'); } return $this->redirectToRouteAfterFormPost('admin_contenttypeGroupView', ['contentTypeGroupId' => $contentTypeGroupId]); }
/** * Removes the given group from the content type and returns the updated group list * * @param $contentTypeId * @param $contentTypeGroupId * * @throws \eZ\Publish\Core\REST\Server\Exceptions\ForbiddenException * @throws \eZ\Publish\Core\REST\Common\Exceptions\NotFoundException * @return \eZ\Publish\Core\REST\Server\Values\ContentTypeGroupRefList */ public function unlinkContentTypeFromGroup($contentTypeId, $contentTypeGroupId) { $contentType = $this->contentTypeService->loadContentType($contentTypeId); $contentTypeGroup = $this->contentTypeService->loadContentTypeGroup($contentTypeGroupId); $existingContentTypeGroups = $contentType->getContentTypeGroups(); $contentTypeInGroup = false; foreach ($existingContentTypeGroups as $existingGroup) { if ($existingGroup->id == $contentTypeGroup->id) { $contentTypeInGroup = true; break; } } if (!$contentTypeInGroup) { throw new Exceptions\NotFoundException('Content type is not in the given group'); } if (count($existingContentTypeGroups) == 1) { throw new ForbiddenException('Content type cannot be unlinked from the only remaining group'); } $this->contentTypeService->unassignContentTypeGroup($contentType, $contentTypeGroup); $contentType = $this->contentTypeService->loadContentType($contentTypeId); return new Values\ContentTypeGroupRefList($contentType, $contentType->getContentTypeGroups()); }
/** * Get a Content Type Group object by id * * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException If group can not be found * * @param mixed $contentTypeGroupId * * @return \eZ\Publish\API\Repository\Values\ContentType\ContentTypeGroup */ public function loadContentTypeGroup($contentTypeGroupId) { return $this->service->loadContentTypeGroup($contentTypeGroupId); }