diff --git a/src/Entity/Facet.php b/src/Entity/Facet.php index 6959a01..b20bd1c 100644 --- a/src/Entity/Facet.php +++ b/src/Entity/Facet.php @@ -533,6 +533,13 @@ class Facet extends ConfigEntityBase implements FacetInterface { /** * {@inheritdoc} */ + public function getDataDefinition() { + return $this->getFacetSource()->getDataDefinition($this->field_identifier); + } + + /** + * {@inheritdoc} + */ public function setExclude($exclude) { return $this->exclude = $exclude; } diff --git a/src/FacetInterface.php b/src/FacetInterface.php index a1b33fa..5573f6b 100644 --- a/src/FacetInterface.php +++ b/src/FacetInterface.php @@ -206,6 +206,14 @@ interface FacetInterface extends ConfigEntityInterface { public function getHardLimit(); /** + * Returns the data definition from the facet field. + * + * @return \Drupal\Core\TypedData\DataDefinitionInterface + * A typed data definition. + */ + public function getDataDefinition(); + + /** * Returns the value of the exclude boolean. * * This will return true when the current facet's value should be exclusive diff --git a/src/FacetSource/FacetSourcePluginBase.php b/src/FacetSource/FacetSourcePluginBase.php index 2d24cb5..14317fb 100644 --- a/src/FacetSource/FacetSourcePluginBase.php +++ b/src/FacetSource/FacetSourcePluginBase.php @@ -4,7 +4,6 @@ namespace Drupal\facets\FacetSource; use Drupal\Core\Plugin\PluginBase; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; -use Drupal\facets\Exception\Exception; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Facets\FacetInterface; use Drupal\Core\Form\FormStateInterface; @@ -147,16 +146,4 @@ abstract class FacetSourcePluginBase extends PluginBase implements FacetSourcePl $this->facet->setFieldIdentifier($field_identifier); } - /** - * {@inheritdoc} - */ - public function getDataDefinition($field_name) { - $dataDefinitions = $this->getDataDefinitions(); - if (isset($dataDefinitions[$field_name])) { - return $dataDefinitions[$field_name]; - } - - throw new Exception("Field with name {$field_name} does not have a definition"); - } - } diff --git a/src/FacetSource/FacetSourcePluginInterface.php b/src/FacetSource/FacetSourcePluginInterface.php index ec2d757..d88d3e5 100644 --- a/src/FacetSource/FacetSourcePluginInterface.php +++ b/src/FacetSource/FacetSourcePluginInterface.php @@ -98,25 +98,8 @@ interface FacetSourcePluginInterface extends PluginFormInterface, DependentPlugi public function getSearchKeys(); /** - * Returns an array of data definitions for all fields for this facet source. - * - * For search api this means that we load the index and call its getFields() - * method to find all fields and return the typed data objects for all fields. - * For core search, the approach is different but we'll also return the typed - * data objects for all fields. - * - * @return \Drupal\Core\TypedData\DataDefinitionInterface[] - * An array of typed data definitions. - */ - public function getDataDefinitions(); - - /** * Returns a single field's data definition from the facet source. * - * Uses ::getDataDefinitions internally to select one of the fields. - * - * @see ::getDataDefinitions - * * @return \Drupal\Core\TypedData\DataDefinitionInterface * A typed data definition. */ diff --git a/src/Plugin/facets/facet_source/SearchApiDisplay.php b/src/Plugin/facets/facet_source/SearchApiDisplay.php index c171fa6..47404c5 100644 --- a/src/Plugin/facets/facet_source/SearchApiDisplay.php +++ b/src/Plugin/facets/facet_source/SearchApiDisplay.php @@ -5,6 +5,7 @@ namespace Drupal\facets\Plugin\facets\facet_source; use Drupal\Component\Plugin\DependentPluginInterface; use Drupal\Core\Extension\ModuleHandler; use Drupal\Core\Form\FormStateInterface; +use Drupal\facets\Exception\Exception; use Drupal\facets\Exception\InvalidQueryTypeException; use Drupal\facets\FacetInterface; use Drupal\facets\FacetSource\FacetSourcePluginBase; @@ -363,14 +364,12 @@ class SearchApiDisplay extends FacetSourcePluginBase implements SearchApiFacetSo /** * {@inheritdoc} */ - public function getDataDefinitions() { - $c = $this->getIndex()->getFields(); - $b = true; - - return array_map(function ($item) { - /** @var \Drupal\search_api\Item\FieldInterface $item */ - return $item->getDataDefinition(); - }, $this->getIndex()->getFields()); + public function getDataDefinition($field_name) { + $field = $this->getIndex()->getField($field_name); + if ($field) { + return $field->getDataDefinition(); + } + throw new Exception("Field with name {$field_name} does not have a definition"); } } diff --git a/src/Plugin/facets/processor/TranslateEntityProcessor.php b/src/Plugin/facets/processor/TranslateEntityProcessor.php index 4e11e27..9aee99a 100644 --- a/src/Plugin/facets/processor/TranslateEntityProcessor.php +++ b/src/Plugin/facets/processor/TranslateEntityProcessor.php @@ -81,14 +81,14 @@ class TranslateEntityProcessor extends ProcessorPluginBase implements BuildProce public function build(FacetInterface $facet, array $results) { $language_interface = $this->languageManager->getCurrentLanguage(); - /** @var \Drupal\Core\TypedData\DataDefinitionInterface $field_definition */ - $field_definition = $facet->getFacetSource() - ->getDataDefinition($facet->getFieldIdentifier()); + /** @var \Drupal\Core\TypedData\DataDefinitionInterface $data_definition */ + $data_definition = $facet->getDataDefinition(); $property = NULL; - foreach ($field_definition->getPropertyDefinitions() as $k => $definition) { + foreach ($data_definition->getPropertyDefinitions() as $k => $definition) { if ($definition instanceof DataReferenceDefinitionInterface && $definition->getDataType() === 'entity_reference') { $property = $k; + break; } } @@ -96,7 +96,7 @@ class TranslateEntityProcessor extends ProcessorPluginBase implements BuildProce throw new InvalidProcessorException("Field doesn't have an entity definition, so this processor doesn't work."); } - $entity_type = $field_definition + $entity_type = $data_definition ->getPropertyDefinition($property) ->getTargetDefinition() ->getEntityTypeId(); diff --git a/tests/src/Kernel/Entity/FacetFacetSourceTest.php b/tests/src/Kernel/Entity/FacetFacetSourceTest.php index c512fd0..24b6233 100644 --- a/tests/src/Kernel/Entity/FacetFacetSourceTest.php +++ b/tests/src/Kernel/Entity/FacetFacetSourceTest.php @@ -134,7 +134,6 @@ class FacetFacetSourceTest extends EntityKernelTestBase { /** * Test the data definitions. * - * @covers \Drupal\facets\FacetSource\FacetSourcePluginInterface::getDataDefinitions * @covers \Drupal\facets\FacetSource\FacetSourcePluginInterface::getDataDefinition */ public function testDataDefinitions() { @@ -143,19 +142,9 @@ class FacetFacetSourceTest extends EntityKernelTestBase { $display_name = 'search_api:views_page__search_api_test_view__page_1'; $entity->setFacetSourceId($display_name); - // Test that ::getDataDefinitions returns an array with the defined fields, - // check on a couple of the fields. - $dataDefinitions = $entity->getFacetSource()->getDataDefinitions(); - $this->assertInternalType('array', $dataDefinitions); - $this->assertArrayHasKey('name', $dataDefinitions); - $this->assertArrayHasKey('type', $dataDefinitions); - $this->assertArrayHasKey('category', $dataDefinitions); - $this->assertInstanceOf(DataDefinitionInterface::class, $dataDefinitions['name']); - $this->assertInstanceOf(DataDefinitionInterface::class, $dataDefinitions['type']); - $this->assertInstanceOf(DataDefinitionInterface::class, $dataDefinitions['category']); - - // Check the return value of ::getDataDefinition. $this->assertInstanceOf(DataDefinitionInterface::class, $entity->getFacetSource()->getDataDefinition('id')); + $this->assertInstanceOf(DataDefinitionInterface::class, $entity->getFacetSource()->getDataDefinition('name')); + $this->assertInstanceOf(DataDefinitionInterface::class, $entity->getFacetSource()->getDataDefinition('category')); // When trying to get a field that doesn't exist, an error should be thrown. $this->setExpectedException(Exception::class);