You are here

public function SystemController::overview in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/system/src/Controller/SystemController.php \Drupal\system\Controller\SystemController::overview()

Provide the administration overview page.

Parameters

string $link_id: The ID of the administrative path link for which to display child links.

Return value

array A renderable array of the administration overview page.

1 string reference to 'SystemController::overview'
system.routing.yml in core/modules/system/system.routing.yml
core/modules/system/system.routing.yml

File

core/modules/system/src/Controller/SystemController.php, line 120

Class

SystemController
Returns responses for System routes.

Namespace

Drupal\system\Controller

Code

public function overview($link_id) {

  // Check for status report errors.
  if ($this
    ->currentUser()
    ->hasPermission('administer site configuration') && $this->systemManager
    ->checkRequirements()) {
    $this
      ->messenger()
      ->addError($this
      ->t('One or more problems were detected with your Drupal installation. Check the <a href=":status">status report</a> for more information.', [
      ':status' => Url::fromRoute('system.status')
        ->toString(),
    ]));
  }

  // Load all menu links below it.
  $parameters = new MenuTreeParameters();
  $parameters
    ->setRoot($link_id)
    ->excludeRoot()
    ->setTopLevelOnly()
    ->onlyEnabledLinks();
  $tree = $this->menuLinkTree
    ->load(NULL, $parameters);
  $manipulators = [
    [
      'callable' => 'menu.default_tree_manipulators:checkAccess',
    ],
    [
      'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
    ],
  ];
  $tree = $this->menuLinkTree
    ->transform($tree, $manipulators);
  $tree_access_cacheability = new CacheableMetadata();
  $blocks = [];
  foreach ($tree as $key => $element) {
    $tree_access_cacheability = $tree_access_cacheability
      ->merge(CacheableMetadata::createFromObject($element->access));

    // Only render accessible links.
    if (!$element->access
      ->isAllowed()) {
      continue;
    }
    $link = $element->link;
    $block['title'] = $link
      ->getTitle();
    $block['description'] = $link
      ->getDescription();
    $block['content'] = [
      '#theme' => 'admin_block_content',
      '#content' => $this->systemManager
        ->getAdminBlock($link),
    ];
    if (!empty($block['content']['#content'])) {
      $blocks[$key] = $block;
    }
  }
  if ($blocks) {
    ksort($blocks);
    $build = [
      '#theme' => 'admin_page',
      '#blocks' => $blocks,
    ];
    $tree_access_cacheability
      ->applyTo($build);
    return $build;
  }
  else {
    $build = [
      '#markup' => $this
        ->t('You do not have any administrative items.'),
    ];
    $tree_access_cacheability
      ->applyTo($build);
    return $build;
  }
}