Browse Source

Attempt at re-doing DI and creating a schema.

pull/913/head
Rosie Le Faive 2 years ago
parent
commit
387210973f
  1. 32
      src/Plugin/search_api/processor/EntityReferenceWithUri.php

32
src/Plugin/search_api/processor/EntityReferenceWithUri.php

@ -2,6 +2,9 @@
namespace Drupal\islandora\Plugin\search_api\processor;
use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\Component\Plugin\Exception\PluginNotFoundException;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\islandora\Plugin\search_api\processor\Property\EntityReferenceWithUriProperty;
use Drupal\search_api\Datasource\DatasourceInterface;
use Drupal\search_api\Item\ItemInterface;
@ -32,6 +35,13 @@ class EntityReferenceWithUri extends ProcessorPluginBase {
*/
protected IslandoraUtils $utils;
/**
* Entity Type Manager.
*
* @var \Drupal\Core\Entity\EntityTypeManager
*/
protected EntityTypeManager $entityTypeManager;
/**
* Constructor.
*
@ -46,15 +56,19 @@ class EntityReferenceWithUri extends ProcessorPluginBase {
* The plugin implementation definition.
* @param \Drupal\islandora\IslandoraUtils $utils
* Islandora utils.
* @param \Drupal\Core\Entity\EntityTypeManager $entityTypeManager
* Drupal Entity Type Manager.
*/
public function __construct(
array $configuration,
$plugin_id,
$plugin_definition,
IslandoraUtils $utils
IslandoraUtils $utils,
EntityTypeManager $entityTypeManager
) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->utils = $utils;
$this->entityTypeManager = $entityTypeManager;
}
/**
@ -66,6 +80,7 @@ class EntityReferenceWithUri extends ProcessorPluginBase {
$plugin_id,
$plugin_definition,
$container->get('islandora.utils'),
$container->get('entity_type.manager'),
);
}
@ -81,7 +96,7 @@ class EntityReferenceWithUri extends ProcessorPluginBase {
$entity_type = $datasource->getEntityTypeId();
// Get all configured Entity Relation fields for this entity type.
$fields = \Drupal::entityTypeManager()->getStorage('field_config')->loadByProperties([
$fields = $this->entityTypeManager->getStorage('field_config')->loadByProperties([
'entity_type' => $entity_type,
'field_type' => 'entity_reference',
]);
@ -97,7 +112,7 @@ class EntityReferenceWithUri extends ProcessorPluginBase {
'@label' => $field->label(),
'@bundle' => $field->getTargetBundle(),
]),
'description' => $this->t('Index the target entity, but only if the target entity has a taxonomy term.'),
'description' => $this->t('Index the related entity, but only if the target entity has a taxonomy term.'),
'type' => 'string',
'processor_id' => $this->getPluginId(),
'settings' => [
@ -114,6 +129,7 @@ class EntityReferenceWithUri extends ProcessorPluginBase {
/**
* {@inheritdoc}
* @throws \Drupal\search_api\SearchApiException
*/
public function addFieldValues(ItemInterface $item) {
// Skip if no Entity Reference with URI fields are configured.
@ -144,9 +160,13 @@ class EntityReferenceWithUri extends ProcessorPluginBase {
foreach ($content_entity->get($field_name)->getValue() as $values) {
foreach ($values as $value) {
// Load the entity stored in our field.
$target_entity = \Drupal::entityTypeManager()
->getStorage($entity_type)
->load($value);
try {
$target_entity = $this->entityTypeManager
->getStorage($entity_type)
->load($value);
} catch (InvalidPluginDefinitionException $e) {
} catch (PluginNotFoundException $e) {
}
// Load the taxonomy terms on the entity stored in our field.
$referenced_terms = array_merge($referenced_terms, array_filter($target_entity->referencedEntities(), function ($entity) {
if ($entity->getEntityTypeId() != 'taxonomy_term') {

Loading…
Cancel
Save