diff --git a/core/modules/help_topics/help_topics.module b/core/modules/help_topics/help_topics.module index 935b6ac7b855c185d2dd4760ba35c6455c7bc0ae..92e23e050762a8be6c48a99ddf1032bca96a08b2 100644 --- a/core/modules/help_topics/help_topics.module +++ b/core/modules/help_topics/help_topics.module @@ -60,45 +60,52 @@ function help_topics_theme() { * Implements hook_modules_uninstalled(). */ function help_topics_modules_uninstalled(array $modules) { - // Early return if search is not installed or if we're uninstalling this - // module. - if (!\Drupal::hasService('plugin.manager.search') || - in_array('help_topics', $modules)) { - return; - } - $search_plugin_manager = \Drupal::service('plugin.manager.search'); - if ($search_plugin_manager->hasDefinition('help_search')) { - // Ensure that topics for extensions that have been uninstalled are removed - // and that the index state variable is updated. - $help_search = $search_plugin_manager->createInstance('help_search'); - $help_search->updateTopicList(); - $help_search->updateIndexState(); - } + _help_topics_search_update($modules); } /** * Implements hook_themes_uninstalled(). */ function help_topics_themes_uninstalled(array $themes) { - // Use the same code as module uninstall to ensure that theme help is removed - // when a theme is uninstalled. - help_topics_modules_uninstalled([]); + _help_topics_search_update(); } /** * Implements hook_modules_installed(). */ function help_topics_modules_installed(array $modules, $is_syncing) { - // Use the same code as module uninstall to ensure that index state is - // updated when a module is installed. - help_topics_modules_uninstalled([]); + _help_topics_search_update(); } /** * Implements hook_themes_installed(). */ function help_topics_themes_installed(array $themes) { - // Use the same code as module uninstall to ensure that index state is - // updated when a theme is installed. - help_topics_modules_uninstalled([]); + _help_topics_search_update(); +} + +/** + * Ensure that search is updated when extensions are installed or uninstalled. + * + * @param string[] $extensions + * (optional) If modules are being uninstalled, the names of the modules + * being uninstalled. For themes being installed/uninstalled, or modules + * being installed, omit this parameter. + */ +function _help_topics_search_update(array $extensions = []): void { + // Early return if search is not installed or if we're uninstalling this + // module. + if (!\Drupal::hasService('plugin.manager.search') || + in_array('help_topics', $extensions)) { + return; + } + + $search_plugin_manager = \Drupal::service('plugin.manager.search'); + if ($search_plugin_manager->hasDefinition('help_search')) { + // Ensure that topics for extensions that have been uninstalled are removed + // and that the index state variable is updated. + $help_search = $search_plugin_manager->createInstance('help_search'); + $help_search->updateTopicList(); + $help_search->updateIndexState(); + } }