From fc4d40d39eee0b4b8e70140b1a03849851a0c97e Mon Sep 17 00:00:00 2001 From: Paul Pound <ppound@upei.ca> Date: Mon, 24 Feb 2025 15:00:16 -0400 Subject: [PATCH] first commit --- roblib_alter_solr.info.yml | 7 ++++ services.yml | 5 +++ src/Event/SolrDocumentAlterSubscriber.php | 41 +++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 roblib_alter_solr.info.yml create mode 100644 services.yml create mode 100644 src/Event/SolrDocumentAlterSubscriber.php diff --git a/roblib_alter_solr.info.yml b/roblib_alter_solr.info.yml new file mode 100644 index 0000000..ee1c6d7 --- /dev/null +++ b/roblib_alter_solr.info.yml @@ -0,0 +1,7 @@ +name: Roblib Alter Solr +type: module +description: Handles Solr document events. +core_version_requirement: ^10 +dependencies: + - search_api + - search_api_solr diff --git a/services.yml b/services.yml new file mode 100644 index 0000000..29fa2d1 --- /dev/null +++ b/services.yml @@ -0,0 +1,5 @@ +services: + roblib_alter_solr.event_subscriber: + class: Drupal\roblib_alter_solr\EventSubscriber\SolrDocumentAlterSubscriber + tags: + - { name: alterSolrDocument } diff --git a/src/Event/SolrDocumentAlterSubscriber.php b/src/Event/SolrDocumentAlterSubscriber.php new file mode 100644 index 0000000..e3468b3 --- /dev/null +++ b/src/Event/SolrDocumentAlterSubscriber.php @@ -0,0 +1,41 @@ +<?php + +namespace Drupal\my_module; + +use Drupal\search_api\IndexInterface; +use Drupal\search_api\Item\ItemInterface; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Drupal\search_api_solr\Event\SolrDocumentAlterEvent; + +/** + * Provides a Solr document alter event subscriber. + */ +class SolrDocumentAlterSubscriber implements EventSubscriberInterface { + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events[SolrDocumentAlterEvent::class][] = ['alterSolrDocument', 800]; // Priority 800 (adjust as needed) + return $events; + } + + /** + * Alters the Solr document before it is sent to Solr. + * + * @param \Drupal\search_api_solr\Event\SolrDocumentAlterEvent $event + * The Solr document alter event. + */ + public function alterSolrDocument(SolrDocumentAlterEvent $event) { + $solrDocument = $event->getSolrDocument(); + $item = $event->getItem(); + $index = $event->getIndex(); + + if ($item->hasField('field_geo_area_name')) { + $value = $item->getField('field_geo_area_name')->getValue(); + $solrDocument->addField('dc.coverage', $value); + } + + } + +}