improvements-2.x-dev/src/ImprovementsDrushCommands.php
src/ImprovementsDrushCommands.php
<?php namespace Drupal\improvements; use Consolidation\AnnotatedCommand\CommandData; use Consolidation\AnnotatedCommand\CommandResult; use Drupal\search\SearchPageRepositoryInterface; use Drush\Commands\DrushCommands; use Drush\Utils\StringUtils; use Symfony\Component\HttpFoundation\HeaderUtils; use Symfony\Component\HttpFoundation\Request; class ImprovementsDrushCommands extends DrushCommands { /** * @command improvements:route-info * @aliases route-info,ri * @param string $path Path */ public function routeInfo(string $path): void { $request = Request::create($path); $router = \Drupal::service('router.no_access_checks'); try { $route = $router->matchRequest($request); $this->io()->text(print_r($route, TRUE)); } catch (\Exception $e) { $this->io()->error('No route has been found.'); } } /** * @command improvements:search-index * @aliases search-index */ public function searchIndex(): void { while (($remaining = $this->getSearchRemaining()) > 0) { $this->io()->text('Remaining: ' . $remaining); search_cron(); } $this->io()->success('Indexing is complete.'); } /** * Return seach remaining. */ protected function getSearchRemaining(): int { $remaining = 0; $search_page_repository = \Drupal::service('search.search_page_repository'); /** @var $search_page_repository SearchPageRepositoryInterface */ foreach ($search_page_repository->getIndexableSearchPages() as $search_page) { if ($search_page->isIndexable() && ($search_page_status = $search_page->getPlugin()->indexStatus())) { $remaining += $search_page_status['remaining']; } } return $remaining; } /** * @command improvements:entity-query * @aliases entity-query * @param string $entity_type Entity type id * @param string $conditions Conditions in uri format * @param string $no_result_message No result message */ public function entityQuery(string $entity_type, string $conditions, string $no_result_message = 'none'): void { $query = \Drupal::entityQuery($entity_type); $query->accessCheck(FALSE); $parsed_conditions = HeaderUtils::parseQuery($conditions); foreach ($parsed_conditions as $name => $value) { $query->condition($name, (array)$value, 'IN'); } try { $result = $query->execute(); $this->io()->write($result ? implode(',', array_keys($result)) : $no_result_message); } catch (\Exception $exception) { $this->io()->write($no_result_message); throw $exception; } } /** * @hook pre-command queue:run */ public function preQueueRun(CommandData $commandData): void { $queue_name = $commandData->input()->getArgument('name'); $queue = \Drupal::queue($queue_name); \Drupal::logger('drush')->debug('Queue "@name" processing started. Number of items = @number', [ '@name' => $queue_name, '@number' => $queue->numberOfItems(), ]); } /** * @hook post-command queue:run */ public function postQueueRun($result, CommandData $commandData): void { \Drupal::logger('drush')->debug('Queue "@name" processing finished.', [ '@name' => $commandData->input()->getArgument('name'), ]); } /** * @hook pre-command pm:uninstall */ public function prePmUninstall(CommandData $commandData) { $arguments = $commandData->input()->getArguments(); $target_modules = StringUtils::csvToArray($arguments['modules']); $exists_target_modules = array_filter($target_modules, function ($module) { return \Drupal::moduleHandler()->moduleExists($module); }); if (!$exists_target_modules) { $this->logger()->warning(dt('No modules to uninstall.')); return CommandResult::exitCode(0); } return null; } }