diff --git a/roblib_alter_solr.services.yml b/roblib_alter_solr.services.yml index 82f65c5..ae15f05 100644 --- a/roblib_alter_solr.services.yml +++ b/roblib_alter_solr.services.yml @@ -1,6 +1,6 @@ services: roblib_alter_solr.event_subscriber: class: Drupal\roblib_alter_solr\EventSubscriber\RoblibAlterSolrSubscriber - arguments: ['@logger.factory', '@config.factory', '@entity_type.manager'] + arguments: ['@logger.factory', '@config.factory', '@entity_type.manager', '@solr_field.manager'] tags: - { name: event_subscriber } diff --git a/src/EventSubscriber/RoblibAlterSolrSubscriber.php b/src/EventSubscriber/RoblibAlterSolrSubscriber.php index 84218a0..f96ef99 100644 --- a/src/EventSubscriber/RoblibAlterSolrSubscriber.php +++ b/src/EventSubscriber/RoblibAlterSolrSubscriber.php @@ -9,7 +9,7 @@ use Drupal\search_api_solr\Event\PostCreateIndexDocumentEvent; use Drupal\Core\Config\ConfigFactory; use Drupal\search_api\Plugin\search_api\data_type\value\TextValue; use Drupal\Core\Entity\EntityTypeManagerInterface; - +use Drupal\search_api_solr\SolrFieldManager; /** * Allows users to combine Solr fields dynamically. */ @@ -36,6 +36,16 @@ final class RoblibAlterSolrSubscriber implements EventSubscriberInterface { */ protected $entityTypeManager; + /** + * The solr field manager + * @var \Drupal\search_api_solr\SolrFieldManager + */ + protected $fieldManager; + + /** + * @var \Drupal\search_api_solr\SolrFieldNamesResolverInterface + */ + protected SolrFieldNamesResolverInterface $fieldNameResolver; /** * Constructs a new RoblibAlterSolrSubscriber. * @@ -46,10 +56,13 @@ final class RoblibAlterSolrSubscriber implements EventSubscriberInterface { * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager * The EntityTypeManager. */ - public function __construct(LoggerChannelFactoryInterface $logger_factory, ConfigFactory $config, EntityTypeManagerInterface $entityTypeManager) { + + + public function __construct(LoggerChannelFactoryInterface $logger_factory, ConfigFactory $config, EntityTypeManagerInterface $entityTypeManager, SolrFieldManager $fieldManager) { $this->logger = $logger_factory->get('roblib_alter_solr'); $this->config = $config->get('roblib_alter_solr.settings'); $this->entityTypeManager = $entityTypeManager; + $this->fieldManager = $fieldManager; } /** @@ -70,7 +83,9 @@ final class RoblibAlterSolrSubscriber implements EventSubscriberInterface { public function onAlterSolrDocument(PostCreateIndexDocumentEvent $event) { $solrDocument = $event->getSolariumDocument(); $item = $event->getSearchApiItem(); - $pairs = $this->config->get('pairs'); + $solr_index =$event->getIndex(); + $defined_fields = $this->fieldManager->getFieldDefinitions($solr_index); + $pairs = $this->config->get('pairs') ?? []; $results = []; foreach ($pairs as $pair) { $dest = $pair['destination']; @@ -108,7 +123,9 @@ final class RoblibAlterSolrSubscriber implements EventSubscriberInterface { $source_values = $source->getValues(); $array_values = array_merge($source_values, $values); $field_name = "sm_{$field_name}"; - $solrDocument->setField($field_name, $array_values); + if (isset($defined_fields[$field_name])) { + $solrDocument->setField($field_name, $array_values); + } } } }