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