From 8b6ae8676529a8c4430f5d1d2307b7c5cde7b9a2 Mon Sep 17 00:00:00 2001 From: astanley Date: Thu, 22 Jan 2026 15:11:45 -0400 Subject: [PATCH] added config --- caption_linker.links.menu.yml | 7 ++++ caption_linker.module | 42 +++++++++++++++++---- caption_linker.routing.yml | 7 ++++ src/Form/CaptionLinkerSettingsForm.php | 52 ++++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 7 deletions(-) create mode 100644 caption_linker.links.menu.yml create mode 100644 caption_linker.routing.yml create mode 100644 src/Form/CaptionLinkerSettingsForm.php diff --git a/caption_linker.links.menu.yml b/caption_linker.links.menu.yml new file mode 100644 index 0000000..85f9f09 --- /dev/null +++ b/caption_linker.links.menu.yml @@ -0,0 +1,7 @@ +caption_linker.caption_linker_settings: + title: 'Caption Linker settings' + description: 'Configure Caption Linker.' + parent: system.admin_config_system + route_name: caption_linker.caption_linker_settings + weight: 100 + diff --git a/caption_linker.module b/caption_linker.module index 28c44cd..aedeba6 100644 --- a/caption_linker.module +++ b/caption_linker.module @@ -2,6 +2,7 @@ /** * @file + * Caption Linker module hooks. */ use Drupal\Core\Entity\EntityInterface; @@ -12,18 +13,42 @@ use Drupal\node\NodeInterface; * Implements hook_entity_insert(). */ function caption_linker_entity_insert(EntityInterface $entity): void { - if ($entity instanceof MediaInterface) { - _caption_linker_link_caption_if_possible($entity); - } + _caption_linker_handle_media_change($entity); } /** * Implements hook_entity_update(). */ function caption_linker_entity_update(EntityInterface $entity): void { - if ($entity instanceof MediaInterface) { - _caption_linker_link_caption_if_possible($entity); + _caption_linker_handle_media_change($entity); +} + +/** + * Shared handler for media insert/update. + */ +function _caption_linker_handle_media_change(EntityInterface $entity): void { + if (!$entity instanceof MediaInterface) { + return; } + + if (!_caption_linker_is_hook_enabled()) { + return; + } + + _caption_linker_link_caption_if_possible($entity); +} + +/** + * Returns TRUE if caption linking via hooks is enabled in config. + */ +function _caption_linker_is_hook_enabled(): bool { + static $enabled; + + if (!isset($enabled)) { + $enabled = (bool) \Drupal::config('caption_linker.settings')->get('use_hook'); + } + + return $enabled; } /** @@ -32,11 +57,14 @@ function caption_linker_entity_update(EntityInterface $entity): void { function _caption_linker_link_caption_if_possible(MediaInterface $media): void { /** @var \Drupal\islandora\IslandoraUtils $islandora_utils */ $islandora_utils = \Drupal::service('islandora.utils'); + /** @var \Drupal\caption_linker\Service\CaptionLinker $caption_linker */ $caption_linker = \Drupal::service('caption_linker.caption_linker'); $node = $islandora_utils->getParentNode($media); - if ($node instanceof NodeInterface) { - $caption_linker->linkCaption($node); + if (!$node instanceof NodeInterface) { + return; } + + $caption_linker->linkCaption($node); } diff --git a/caption_linker.routing.yml b/caption_linker.routing.yml new file mode 100644 index 0000000..94310a0 --- /dev/null +++ b/caption_linker.routing.yml @@ -0,0 +1,7 @@ +caption_linker.caption_linker_settings: + path: '/admin/config/system/caption-linker-settings' + defaults: + _title: 'Caption Linker settings' + _form: 'Drupal\caption_linker\Form\CaptionLinkerSettingsForm' + requirements: + _permission: 'administer site configuration' diff --git a/src/Form/CaptionLinkerSettingsForm.php b/src/Form/CaptionLinkerSettingsForm.php new file mode 100644 index 0000000..2873625 --- /dev/null +++ b/src/Form/CaptionLinkerSettingsForm.php @@ -0,0 +1,52 @@ +config('caption_linker.settings'); + $use_hook = $config->get('use_hook'); + $form['use_hook'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Automatically link captions to Audio or Video Media'), + '#description' => $this->t("If checked, a media tagged Transcript will be automatically linked to an AblePlayer Audio or Video Media."), + '#default_value' => $use_hook, + ]; + + return parent::buildForm($form, $form_state); + } + + public function submitForm(array &$form, FormStateInterface $form_state) { + $use_hook = $form_state->getValue('use_hook'); + $this->config('caption_linker.settings') + ->set('use_hook', $use_hook) + ->save(); + } + +}