function ModuleAdminLinksHelper::getModuleAdminLinks

Same name and namespace in other branches
  1. 11.x core/modules/system/src/ModuleAdminLinksHelper.php \Drupal\system\ModuleAdminLinksHelper::getModuleAdminLinks()

Generates a list of admin tasks offered by a specified module.

Parameters

string $module: The module name.

Return value

array An array of task links.

File

core/modules/system/src/ModuleAdminLinksHelper.php, line 43

Class

ModuleAdminLinksHelper
Provides a helper for generating module admin links.

Namespace

Drupal\system

Code

public function getModuleAdminLinks(string $module) : array {
    // Cache the menu tree as it is expensive to load.
    
    /** @var \Drupal\Core\Menu\MenuLinkTreeElement[]|false $menuTree */
    $cacheItem = $this->memoryCache
        ->get(self::ADMIN_LINKS_MENU_TREE);
    if ($cacheItem) {
        $menuTree = $cacheItem->data;
    }
    else {
        $parameters = (new MenuTreeParameters())->setRoot('system.admin')
            ->excludeRoot()
            ->onlyEnabledLinks();
        $menuTree = $this->menuLinkTree
            ->load('system.admin', $parameters);
        $manipulators = [
            [
                'callable' => 'menu.default_tree_manipulators:checkAccess',
            ],
            [
                'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
            ],
            [
                'callable' => 'menu.default_tree_manipulators:flatten',
            ],
        ];
        $menuTree = $this->menuLinkTree
            ->transform($menuTree, $manipulators);
        $this->memoryCache
            ->set(self::ADMIN_LINKS_MENU_TREE, $menuTree);
    }
    $admin_tasks = [];
    foreach ($menuTree as $element) {
        if (!$element->access
            ->isAllowed()) {
            // @todo Bubble cacheability metadata of both accessible and
            //   inaccessible links. Currently made impossible by the way admin
            //   tasks are rendered. See https://www.drupal.org/node/2488958
            continue;
        }
        $link = $element->link;
        if ($link->getProvider() !== $module) {
            continue;
        }
        $admin_tasks[] = [
            'title' => $link->getTitle(),
            'description' => $link->getDescription(),
            'url' => $link->getUrlObject(),
        ];
    }
    return $admin_tasks;
}

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