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.