Loading src/Controller/BrowserController.php +55 −6 Original line number Diff line number Diff line Loading @@ -5,6 +5,9 @@ namespace Drupal\project_browser\Controller; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Extension\InfoParserException; use Drupal\Core\Extension\ModuleExtensionList; use Drupal\Core\Extension\ModuleHandlerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RequestStack; /** * Defines a controller to provide the Project Browser UI. Loading @@ -14,6 +17,54 @@ use Drupal\Core\Extension\ModuleExtensionList; */ class BrowserController extends ControllerBase { /** * The module handler. * * @var \Drupal\Core\Extension\ModuleHandlerInterface */ protected $moduleHandler; /** * The module extension list. * * @var \Drupal\Core\Extension\ModuleExtensionList */ protected $moduleList; /** * The request stack. * * @var \Symfony\Component\HttpFoundation\RequestStack */ protected $requestStack; /** * Build the project browser controller. * * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler * The module handler. * @param \Drupal\Core\Extension\ModuleExtensionList $module_list * The module extension list. * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack * The request stack. */ public function __construct(ModuleHandlerInterface $module_handler, ModuleExtensionList $module_list, RequestStack $request_stack) { $this->moduleHandler = $module_handler; $this->moduleList = $module_list; $this->requestStack = $request_stack; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('module_handler'), $container->get('extension.list.module'), $container->get('request_stack') ); } /** * Builds the browse page. * Loading @@ -22,7 +73,7 @@ class BrowserController extends ControllerBase { */ public function browse() { $modules_status = $this->getModuleStatuses(); $module_handler = \Drupal::service('module_handler'); $request = $this->requestStack->getCurrentRequest(); return [ '#markup' => '<div id="project-browser"></div>', Loading @@ -35,8 +86,8 @@ class BrowserController extends ControllerBase { 'modules' => $modules_status, 'drupal_version' => \Drupal::VERSION, 'drupal_core_compatibility' => \Drupal::CORE_COMPATIBILITY, 'module_path' => $module_handler->getModule('project_browser')->getPath(), 'origin_url' => \Drupal::request()->getSchemeAndHttpHost() . \Drupal::request()->getBaseUrl(), 'module_path' => $this->moduleHandler->getModule('project_browser')->getPath(), 'origin_url' => $request->getSchemeAndHttpHost() . $request->getBaseUrl(), ], ], ], Loading @@ -50,13 +101,11 @@ class BrowserController extends ControllerBase { * An array of module statues, keyed by machine name. */ protected function getModuleStatuses(): array { /** @var \Drupal\Core\Extension\ModuleExtensionList $module_service */ $module_service = \Drupal::service('extension.list.module'); // Sort all modules by their names. try { // The module list needs to be reset so that it can re-scan and include // any new modules that may have been added directly into the filesystem. $modules = $module_service->reset()->getList(); $modules = $this->moduleList->reset()->getList(); uasort($modules, [ModuleExtensionList::class, 'sortByName']); } catch (InfoParserException $e) { Loading tests/src/FunctionalJavascript/ProjectBrowserUiTest.php +3 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,9 @@ class ProjectBrowserUiTest extends WebDriverTestBase { $assert_session->waitForElement('css', '#project-browser .grid'); $grid_text = $this->getSession()->getPage()->find('css', '#project-browser .toggle-buttons .grid-button')->getText(); $this->assertEquals('Grid', $grid_text); $assert_session->waitForElementVisible('css', '#project-browser .project'); $assert_session->elementsCount('css', '#project-browser .project', 12); $assert_session->pageTextNotContains('No records available'); } } Loading
src/Controller/BrowserController.php +55 −6 Original line number Diff line number Diff line Loading @@ -5,6 +5,9 @@ namespace Drupal\project_browser\Controller; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Extension\InfoParserException; use Drupal\Core\Extension\ModuleExtensionList; use Drupal\Core\Extension\ModuleHandlerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RequestStack; /** * Defines a controller to provide the Project Browser UI. Loading @@ -14,6 +17,54 @@ use Drupal\Core\Extension\ModuleExtensionList; */ class BrowserController extends ControllerBase { /** * The module handler. * * @var \Drupal\Core\Extension\ModuleHandlerInterface */ protected $moduleHandler; /** * The module extension list. * * @var \Drupal\Core\Extension\ModuleExtensionList */ protected $moduleList; /** * The request stack. * * @var \Symfony\Component\HttpFoundation\RequestStack */ protected $requestStack; /** * Build the project browser controller. * * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler * The module handler. * @param \Drupal\Core\Extension\ModuleExtensionList $module_list * The module extension list. * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack * The request stack. */ public function __construct(ModuleHandlerInterface $module_handler, ModuleExtensionList $module_list, RequestStack $request_stack) { $this->moduleHandler = $module_handler; $this->moduleList = $module_list; $this->requestStack = $request_stack; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('module_handler'), $container->get('extension.list.module'), $container->get('request_stack') ); } /** * Builds the browse page. * Loading @@ -22,7 +73,7 @@ class BrowserController extends ControllerBase { */ public function browse() { $modules_status = $this->getModuleStatuses(); $module_handler = \Drupal::service('module_handler'); $request = $this->requestStack->getCurrentRequest(); return [ '#markup' => '<div id="project-browser"></div>', Loading @@ -35,8 +86,8 @@ class BrowserController extends ControllerBase { 'modules' => $modules_status, 'drupal_version' => \Drupal::VERSION, 'drupal_core_compatibility' => \Drupal::CORE_COMPATIBILITY, 'module_path' => $module_handler->getModule('project_browser')->getPath(), 'origin_url' => \Drupal::request()->getSchemeAndHttpHost() . \Drupal::request()->getBaseUrl(), 'module_path' => $this->moduleHandler->getModule('project_browser')->getPath(), 'origin_url' => $request->getSchemeAndHttpHost() . $request->getBaseUrl(), ], ], ], Loading @@ -50,13 +101,11 @@ class BrowserController extends ControllerBase { * An array of module statues, keyed by machine name. */ protected function getModuleStatuses(): array { /** @var \Drupal\Core\Extension\ModuleExtensionList $module_service */ $module_service = \Drupal::service('extension.list.module'); // Sort all modules by their names. try { // The module list needs to be reset so that it can re-scan and include // any new modules that may have been added directly into the filesystem. $modules = $module_service->reset()->getList(); $modules = $this->moduleList->reset()->getList(); uasort($modules, [ModuleExtensionList::class, 'sortByName']); } catch (InfoParserException $e) { Loading
tests/src/FunctionalJavascript/ProjectBrowserUiTest.php +3 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,9 @@ class ProjectBrowserUiTest extends WebDriverTestBase { $assert_session->waitForElement('css', '#project-browser .grid'); $grid_text = $this->getSession()->getPage()->find('css', '#project-browser .toggle-buttons .grid-button')->getText(); $this->assertEquals('Grid', $grid_text); $assert_session->waitForElementVisible('css', '#project-browser .project'); $assert_session->elementsCount('css', '#project-browser .project', 12); $assert_session->pageTextNotContains('No records available'); } }