From 029bbcfe5dd6abe510bcda8717ed36d4fc61269e Mon Sep 17 00:00:00 2001 From: dannylamb Date: Wed, 1 Apr 2020 10:26:08 -0600 Subject: [PATCH] Reindexing parents of extracted text when updated (#767) --- .../islandora_text_extraction.module | 22 +++++++ .../islandora_text_extraction.services.yml | 8 +++ .../src/SearchReindexer.php | 65 +++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 modules/islandora_text_extraction/islandora_text_extraction.services.yml create mode 100644 modules/islandora_text_extraction/src/SearchReindexer.php diff --git a/modules/islandora_text_extraction/islandora_text_extraction.module b/modules/islandora_text_extraction/islandora_text_extraction.module index 2b2c1a5d..a9440c90 100644 --- a/modules/islandora_text_extraction/islandora_text_extraction.module +++ b/modules/islandora_text_extraction/islandora_text_extraction.module @@ -44,6 +44,28 @@ function islandora_text_extraction_media_presave(MediaInterface $media) { } } +/** + * Implements hook_media_insert(). + */ +function islandora_text_extraction_media_insert(MediaInterface $media) { + if ($media->bundle() != 'extracted_text') { + return; + } + + \Drupal::service('islandora_text_extraction.search_reindexer')->reindexParent($media); +} + +/** + * Implements hook_media_update(). + */ +function islandora_text_extraction_media_update(MediaInterface $media) { + if ($media->bundle() != 'extracted_text') { + return; + } + + \Drupal::service('islandora_text_extraction.search_reindexer')->reindexParent($media); +} + /** * Implements hook_form_form_id_alter(). */ diff --git a/modules/islandora_text_extraction/islandora_text_extraction.services.yml b/modules/islandora_text_extraction/islandora_text_extraction.services.yml new file mode 100644 index 00000000..72d63bdf --- /dev/null +++ b/modules/islandora_text_extraction/islandora_text_extraction.services.yml @@ -0,0 +1,8 @@ +services: + logger.channel.islandora_text_extraction: + parent: logger.channel_base + arguments: ['islandora_text_extraction'] + islandora_text_extraction.search_reindexer: + class: Drupal\islandora_text_extraction\SearchReindexer + arguments: ['@islandora.utils', '@logger.channel.islandora_text_extraction'] + diff --git a/modules/islandora_text_extraction/src/SearchReindexer.php b/modules/islandora_text_extraction/src/SearchReindexer.php new file mode 100644 index 00000000..791cf9e9 --- /dev/null +++ b/modules/islandora_text_extraction/src/SearchReindexer.php @@ -0,0 +1,65 @@ +utils = $utils; + $this->logger = $logger; + } + + /** + * Reindexes parent node for a media. No-op if parent does not exist. + * + * @param Drupal\media\MediaInterface $media + * Media whose parent you want to reindex. + */ + public function reindexParent(MediaInterface $media) { + $parent = $this->utils->getParentNode($media); + + if ($parent === NULL) { + return; + } + + $this->logger->debug( + "Re-indexing parent node @nid for extracted text @mid using the search_api", + ['@nid' => $parent->id(), '@mid' => $media->id()] + ); + + $parent->original = $parent; + search_api_entity_update($parent); + } + +}