Commit fc31a089 authored by Srishti Bankar's avatar Srishti Bankar Committed by Tim Plunkett
Browse files

Issue #3243019 by srishti.bankar, gaurav.kapoor, tim.plunkett, narendraR:...

Issue #3243019 by srishti.bankar, gaurav.kapoor, tim.plunkett, narendraR: Rewrite BrowserController.php to avoid direct usage of global services
parent 7668798e
Loading
Loading
Loading
Loading
+55 −6
Original line number Diff line number Diff line
@@ -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.
@@ -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.
   *
@@ -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>',
@@ -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(),
          ],
        ],
      ],
@@ -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) {
+3 −0
Original line number Diff line number Diff line
@@ -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');
  }

}