コード例 #1
0
 /**
  * Publish the content type and update content objects.
  *
  * This method updates content objects, depending on the changed field definitions.
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\BadStateException If the content type has no draft
  * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If the content type has no field definitions
  * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException if the user is not allowed to publish a content type
  *
  * @param \eZ\Publish\API\Repository\Values\ContentType\ContentTypeDraft $contentTypeDraft
  */
 public function publishContentTypeDraft(APIContentTypeDraft $contentTypeDraft)
 {
     if ($this->repository->hasAccess('class', 'update') !== true) {
         throw new UnauthorizedException('ContentType', 'update');
     }
     try {
         $loadedContentTypeDraft = $this->loadContentTypeDraft($contentTypeDraft->id);
     } catch (APINotFoundException $e) {
         throw new BadStateException('$contentTypeDraft', 'The content type does not have a draft.', $e);
     }
     if (count($loadedContentTypeDraft->getFieldDefinitions()) === 0) {
         throw new InvalidArgumentException('$contentTypeDraft', 'The content type draft should have at least one field definition.');
     }
     $this->repository->beginTransaction();
     try {
         if (empty($loadedContentTypeDraft->nameSchema)) {
             $fieldDefinitions = $loadedContentTypeDraft->getFieldDefinitions();
             $this->contentTypeHandler->update($contentTypeDraft->id, $contentTypeDraft->status, $this->contentTypeDomainMapper->buildSPIContentTypeUpdateStruct($loadedContentTypeDraft, new ContentTypeUpdateStruct(array('nameSchema' => '<' . $fieldDefinitions[0]->identifier . '>')), $this->repository->getCurrentUserReference()));
         }
         $this->contentTypeHandler->publish($loadedContentTypeDraft->id);
         $this->repository->commit();
     } catch (Exception $e) {
         $this->repository->rollback();
         throw $e;
     }
 }
コード例 #2
0
 /**
  * Fetches the list of available Field identifiers in the token and returns
  * an array of their current title value.
  *
  * @see \eZ\Publish\Core\Repository\FieldType::getName()
  *
  * @param string[] $schemaIdentifiers
  * @param \eZ\Publish\SPI\Persistence\Content\Type|\eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType
  * @param array $fieldMap
  * @param string $languageCode
  *
  * @throws \eZ\Publish\Core\Base\Exceptions\InvalidArgumentType
  *
  * @return string[] Key is the field identifier, value is the title value
  */
 protected function getFieldTitles(array $schemaIdentifiers, $contentType, array $fieldMap, $languageCode)
 {
     $fieldTitles = array();
     foreach ($schemaIdentifiers as $fieldDefinitionIdentifier) {
         if (isset($fieldMap[$fieldDefinitionIdentifier][$languageCode])) {
             if ($contentType instanceof SPIContentType) {
                 $fieldDefinition = null;
                 foreach ($contentType->fieldDefinitions as $spiFieldDefinition) {
                     if ($spiFieldDefinition->identifier === $fieldDefinitionIdentifier) {
                         $fieldDefinition = $this->contentTypeDomainMapper->buildFieldDefinitionDomainObject($spiFieldDefinition);
                         break;
                     }
                 }
                 if ($fieldDefinition === null) {
                     $fieldTitles[$fieldDefinitionIdentifier] = '';
                     continue;
                 }
             } elseif ($contentType instanceof ContentType) {
                 $fieldDefinition = $contentType->getFieldDefinition($fieldDefinitionIdentifier);
             } else {
                 throw new InvalidArgumentType('$contentType', 'API or SPI variant of ContentType');
             }
             $nameableFieldTypeService = $this->nameableFieldTypeRegistry->getFieldType($fieldDefinition->fieldTypeIdentifier);
             $fieldTitles[$fieldDefinitionIdentifier] = $nameableFieldTypeService->getFieldName($fieldMap[$fieldDefinitionIdentifier][$languageCode], $fieldDefinition, $languageCode);
         }
     }
     return $fieldTitles;
 }