diff --git a/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml b/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml index 7b006bae4fbdf3b72756a45408b7213290f32929..f42e394e18b710e8e9cbfaf49d78f080001c0290 100644 --- a/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml +++ b/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml @@ -90,3 +90,10 @@ admin_toolbar_tools.settings: description: 'Configure the Admin Toolbar Tools module.' route_name: admin_toolbar_tools.settings parent: system.admin_config_ui + +system.run_reindex_site: + title: 'Re-index Site' + route_name: admin_toolbar.run.reindex.site + menu_name: admin + parent: admin_toolbar_tools.help + weight: -9 diff --git a/admin_toolbar_tools/admin_toolbar_tools.routing.yml b/admin_toolbar_tools/admin_toolbar_tools.routing.yml index e5a0bfd5dc64c7482e5ab3fcac4923d161c823b1..ca9d57d339af4679d63fd46a45f16a37d02d86a3 100644 --- a/admin_toolbar_tools/admin_toolbar_tools.routing.yml +++ b/admin_toolbar_tools/admin_toolbar_tools.routing.yml @@ -95,3 +95,12 @@ admin_toolbar_tools.settings: _title: 'Admin Toolbar Tools settings' requirements: _permission: 'administer site configuration' + +admin_toolbar.run.reindex.site: + path: '/reindex-site' + defaults: + _controller: '\Drupal\admin_toolbar_tools\Controller\ToolbarController::runReindexSite' + _title: 'Re-index Site' + requirements: + _permission: 'administer site configuration' + _csrf_token: 'TRUE' diff --git a/admin_toolbar_tools/src/Controller/ToolbarController.php b/admin_toolbar_tools/src/Controller/ToolbarController.php index 169a719e0d8f109e574b52a8eb4f2c347ce7ec93..e4488e59d03f6b4206afb633f286457cf1ce0900 100644 --- a/admin_toolbar_tools/src/Controller/ToolbarController.php +++ b/admin_toolbar_tools/src/Controller/ToolbarController.php @@ -13,6 +13,7 @@ use Drupal\Core\Menu\MenuLinkManagerInterface; use Drupal\Core\Plugin\CachedDiscoveryClearerInterface; use Drupal\Core\Template\TwigEnvironment; use Drupal\Core\Theme\Registry; +use Drupal\search\SearchPageRepositoryInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RequestStack; @@ -108,6 +109,13 @@ class ToolbarController extends ControllerBase { */ protected $themeRegistry; + /** + * The search page repository service. + * + * @var \Drupal\search\SearchPageRepositoryInterface + */ + protected SearchPageRepositoryInterface $searchPageRepository; + /** * Constructs a ToolbarController object. * @@ -135,6 +143,8 @@ class ToolbarController extends ControllerBase { * A TwigEnvironment instance. * @param \Drupal\Core\Theme\Registry $theme_registry * The theme.registry service. + * @param \Drupal\search\SearchPageRepositoryInterface $searchPageRepository + * The search page repository service. */ public function __construct( CronInterface $cron, @@ -149,7 +159,9 @@ class ToolbarController extends ControllerBase { CacheBackendInterface $cache_menu, TwigEnvironment $twig, // phpcs:ignore Drupal.Functions.MultiLineFunctionDeclaration.MissingTrailingComma - Registry $theme_registry + Registry $theme_registry, + SearchPageRepositoryInterface $search_page_repository, + ) { $this->cron = $cron; $this->menuLinkManager = $menuLinkManager; @@ -163,6 +175,7 @@ class ToolbarController extends ControllerBase { $this->cacheMenu = $cache_menu; $this->twig = $twig; $this->themeRegistry = $theme_registry; + $this->searchPageRepository = $search_page_repository; } /** @@ -181,7 +194,8 @@ class ToolbarController extends ControllerBase { $container->get('plugin.cache_clearer'), $container->get('cache.menu'), $container->get('twig'), - $container->get('theme.registry') + $container->get('theme.registry'), + $container->get('search.search_page_repository') ); } @@ -293,4 +307,18 @@ class ToolbarController extends ControllerBase { return new RedirectResponse($this->reloadPage()); } +/** + * Reindexes all active search pages. + */ +public function runReindexSite() { + // Ask each active search page to mark itself for re-index. + foreach ($this->searchPageRepository->getIndexableSearchPages() as $entity) { + $entity->getPlugin()->markForReindex(); + } + // Run the cron to process the reindexing. + $this->cron->run(); + $this->messenger()->addMessage($this->t('All search indexes have been rebuilt.')); + return new RedirectResponse($this->reloadPage()); +} + }