Browse Source

Simplified

main
astanley 3 months ago
parent
commit
5394ff5566
  1. 2
      roblib_alter_solr.services.yml
  2. 25
      src/EventSubscriber/RoblibAlterSolrSubscriber.php

2
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 }

25
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);
}
}
}
}

Loading…
Cancel
Save