function SystemController::overview

Same name in other branches
  1. 8.9.x core/modules/system/src/Controller/SystemController.php \Drupal\system\Controller\SystemController::overview()
  2. 10 core/modules/system/src/Controller/SystemController.php \Drupal\system\Controller\SystemController::overview()
  3. 11.x 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 122

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;
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.