You are here

public function MenuLinkTreeManipulators::filterByCurrentLanguage in Menu Manipulator 3.0.x

Same name and namespace in other branches
  1. 8.2 src/Menu/MenuLinkTreeManipulators.php \Drupal\menu_manipulator\Menu\MenuLinkTreeManipulators::filterByCurrentLanguage()
  2. 8 src/Menu/MenuLinkTreeManipulators.php \Drupal\menu_manipulator\Menu\MenuLinkTreeManipulators::filterByCurrentLanguage()
  3. 2.0.x src/Menu/MenuLinkTreeManipulators.php \Drupal\menu_manipulator\Menu\MenuLinkTreeManipulators::filterByCurrentLanguage()

Filter a menu tree by current language MenuLinks.

Parameters

\Drupal\Core\Menu\MenuLinkTreeElement[] $tree: The menu link tree to manipulate.

Return value

\Drupal\Core\Menu\MenuLinkTreeElement[] The manipulated menu link tree.

File

src/Menu/MenuLinkTreeManipulators.php, line 76

Class

MenuLinkTreeManipulators
Provides a menu link tree manipulators.

Namespace

Drupal\menu_manipulator\Menu

Code

public function filterByCurrentLanguage(array $tree) {
  foreach ($tree as $key => $element) {
    if (!$element->link instanceof MenuLinkBase) {
      continue;
    }
    $access = $this
      ->checkLinkAccess($element->link);
    if (!$access) {

      // Deny access and hide children items.
      $tree[$key]->link = new InaccessibleMenuLink($tree[$key]->link);
      $tree[$key]->access = AccessResult::forbidden();
      $tree[$key]->subtree = [];
    }

    // Filter children items recursively.
    if ($element->hasChildren && !empty($tree[$key]->subtree)) {
      $element->subtree = $this
        ->filterByCurrentLanguage($element->subtree);
    }
  }
  return $tree;
}