From bed8266e8ca87722f07dbb7c169b4ff34b4bb10b Mon Sep 17 00:00:00 2001 From: gggeek Date: Wed, 2 May 2018 23:54:27 +0100 Subject: [PATCH] Fun with interfaces; allow more reference resolving in ContentType defs --- Core/Executor/ContentTypeManager.php | 9 +++++++++ Core/Executor/RepositoryExecutor.php | 2 +- Core/ReferenceResolver/ChainResolver.php | 4 ++-- WHATSNEW.md | 16 ++++++++++++++-- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Core/Executor/ContentTypeManager.php b/Core/Executor/ContentTypeManager.php index d397cf4d..490d04a9 100644 --- a/Core/Executor/ContentTypeManager.php +++ b/Core/Executor/ContentTypeManager.php @@ -100,6 +100,10 @@ protected function create($step) $maxFieldDefinitionPos = 0; $fieldDefinitions = array(); foreach ($step->dsl['attributes'] as $position => $attribute) { + // allow easy reuse of attribute defs by storing them in references + if (is_string($attribute)) { + $attribute = $this->referenceResolver->resolveReference($attribute); + } $fieldDefinition = $this->createFieldDefinition($contentTypeService, $attribute, $contentTypeIdentifier, $lang); $maxFieldDefinitionPos = $fieldDefinition->position > $maxFieldDefinitionPos ? $fieldDefinition->position : $maxFieldDefinitionPos; $fieldDefinitions[] = $fieldDefinition; @@ -205,6 +209,11 @@ protected function update($step) $newFieldDefinitions = array(); foreach ($step->dsl['attributes'] as $attribute) { + // allow easy reuse of attribute defs by storing them in references + if (is_string($attribute)) { + $attribute = $this->referenceResolver->resolveReference($attribute); + } + $existingFieldDefinition = $this->contentTypeHasFieldDefinition($contentType, $attribute['identifier']); if ($existingFieldDefinition) { diff --git a/Core/Executor/RepositoryExecutor.php b/Core/Executor/RepositoryExecutor.php index e762e109..e72374db 100644 --- a/Core/Executor/RepositoryExecutor.php +++ b/Core/Executor/RepositoryExecutor.php @@ -235,7 +235,7 @@ protected function getCollectionName($collection) /** * Courtesy code to avoid reimplementing it in every subclass - * @deprecated will be moved into the reference resolver classes + * @todo will be moved into the reference resolver classes */ protected function resolveReferencesRecursively($match) { diff --git a/Core/ReferenceResolver/ChainResolver.php b/Core/ReferenceResolver/ChainResolver.php index d9774307..b41849dd 100644 --- a/Core/ReferenceResolver/ChainResolver.php +++ b/Core/ReferenceResolver/ChainResolver.php @@ -4,12 +4,12 @@ use Kaliop\eZMigrationBundle\API\ReferenceResolverInterface; use Kaliop\eZMigrationBundle\API\ReferenceBagInterface; -use Kaliop\eZMigrationBundle\API\ReferenceResolverBagInterface; +use Kaliop\eZMigrationBundle\API\EmbeddedReferenceResolverBagInterface; use Kaliop\eZMigrationBundle\API\EnumerableReferenceResolverInterface; use Kaliop\eZMigrationBundle\API\EmbeddedReferenceResolverInterface; use Kaliop\eZMigrationBundle\API\Exception\ReferenceUnresolvedException; -class ChainResolver implements ReferenceResolverBagInterface, EnumerableReferenceResolverInterface, EmbeddedReferenceResolverInterface +class ChainResolver implements EmbeddedReferenceResolverBagInterface, EnumerableReferenceResolverInterface { /** @var ReferenceResolverInterface[] $resolvers */ protected $resolvers = array(); diff --git a/WHATSNEW.md b/WHATSNEW.md index 9c0cfb7f..6723f228 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -18,8 +18,20 @@ Version 4.8 ``` match: - remote_content_id: "something [reference:myref] different" - # we get remote_content_id = "something 99 different" + remote_content_id: "something [reference:myref] times different" + # we get remote_content_id = "something 99 times different" + ``` + +* New: when creating and updating ContentType definitions, it is possible to use a reference to define each field. The + value of the reference must be an array with all the usual keys: 'name', 'searchable', etc... + This makes it easy to define multiple ContentTypes sharing fields with the same definition such as f.e. the 'title' + + ``` + attributes: + title: "reference:title_field_definition" + body: + name: Body + ... ```