/** * Returns an array of domain fields created from given array of SPI fields * * @param \eZ\Publish\SPI\Persistence\Content\Field[] $spiFields * @param \eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType * * @return array */ public function buildDomainFields(array $spiFields, ContentType $contentType) { $fieldIdentifierMap = array(); foreach ($contentType->getFieldDefinitions() as $fieldDefinitions) { $fieldIdentifierMap[$fieldDefinitions->id] = $fieldDefinitions->identifier; } /** @var \eZ\Publish\Core\Repository\FieldTypeService $fieldTypeService */ $fieldTypeService = $this->repository->getFieldTypeService(); $fields = array(); foreach ($spiFields as $spiField) { $fields[] = new Field(array("id" => $spiField->id, "value" => $fieldTypeService->buildFieldType($spiField->type)->fromPersistenceValue($spiField->value), "languageCode" => $spiField->languageCode, "fieldDefIdentifier" => $fieldIdentifierMap[$spiField->fieldDefinitionId])); } return $fields; }
/** * This method returns the content type field definitions from this type * * @return \eZ\Publish\API\Repository\Values\ContentType\FieldDefinition[] */ public function getFieldDefinitions() { return $this->innerContentType->getFieldDefinitions(); }
/** * Checks if fields are given, if not - returns all of them. * * @param \eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType * @param string $fields * * @return array|null */ protected function prepareFields(ContentType $contentType, $fields = null) { if (null !== $fields) { return explode(',', $fields); } $fields = array(); $contentFields = $contentType->getFieldDefinitions(); foreach ($contentFields as $field) { $fields[] = $field->identifier; } return $fields; }
/** * Creates a list of all fields, while missing non-required fields are * completed * * @param ContentType $contentType * @param array $fields * @param array $languageCodes * @param string $mainLanguageCode * * @return \eZ\Publish\API\Repository\Values\Content\Field[] */ private function createCompleteFields(ContentType $contentType, array $fields, array $languageCodes, $mainLanguageCode) { $allFields = array(); foreach ($contentType->getFieldDefinitions() as $fieldDefinition) { if ($fieldDefinition->isTranslatable) { foreach ($languageCodes as $languageCode) { if (isset($fields[$fieldDefinition->identifier][$languageCode])) { $field = $fields[$fieldDefinition->identifier][$languageCode]; $fieldId = $this->getFieldId($field->id); // Existing translatable field $allFields[$fieldId] = $this->cloneField($field, array('id' => $fieldId)); } else { $fieldId = $this->getFieldId(); // Missing translatable field $allFields[$fieldId] = new FieldStub(array('id' => $fieldId, 'value' => 'Pseudo default value from memory stuff.', 'languageCode' => $languageCode, 'fieldDefIdentifier' => $fieldDefinition->identifier)); } } } else { if (isset($fields[$fieldDefinition->identifier][$mainLanguageCode])) { $field = $fields[$fieldDefinition->identifier][$mainLanguageCode]; $fieldId = $this->getFieldId($field->id); // Existing non-translatable field $allFields[$fieldId] = $this->cloneField($field, array('id' => $fieldId)); } else { $fieldId = $this->getFieldId(); // Missing non-translatable field $allFields[$fieldId] = new FieldStub(array('id' => $fieldId, 'value' => 'Pseudo default value from memory stuff.', 'languageCode' => null, 'fieldDefIdentifier' => $fieldDefinition->identifier)); } } } return $allFields; }