/** * 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()); }
/** * Unassign a content type from a group. * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to link a content type * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If the content type is not assigned this the given group. * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException If $contentTypeGroup is the last group assigned to the content type * * @param \eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType * @param \eZ\Publish\API\Repository\Values\ContentType\ContentTypeGroup $contentTypeGroup */ public function unassignContentTypeGroup(ContentType $contentType, ContentTypeGroup $contentTypeGroup) { $returnValue = $this->service->unassignContentTypeGroup($contentType, $contentTypeGroup); $this->signalDispatcher->emit(new UnassignContentTypeGroupSignal(array('contentTypeId' => $contentType->id, 'contentTypeGroupId' => $contentTypeGroup->id))); return $returnValue; }