You are here

public function MenuLinkTreeManipulators::filterByCurrentLanguage in Menu Manipulator 8.2

Same name and namespace in other branches
  1. 8 src/Menu/MenuLinkTreeManipulators.php \Drupal\menu_manipulator\Menu\MenuLinkTreeManipulators::filterByCurrentLanguage()
  2. 3.0.x 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 123

Class

MenuLinkTreeManipulators
Provides a couple of menu link tree manipulators.

Namespace

Drupal\menu_manipulator\Menu

Code

public function filterByCurrentLanguage(array $tree) {
  foreach ($tree as $key => $element) {
    if ($element->link instanceof MenuLinkContent) {
      $link =& $element->link;
      $langcode = $this
        ->getLinkLanguage($link);
      $entity = $this
        ->getLinkEntity($link);
      if ($entity instanceof ContentEntityInterface && method_exists($entity, 'hasTranslation')) {

        // Check language of targeted Entity.
        $access = $entity
          ->hasTranslation($this->langcode);
      }
      else {

        // Check menu link item's language.
        $access = $this->langcode == $langcode;
      }

      // Deny access and stop now.
      if (!$access) {
        $tree[$key]->link = new InaccessibleMenuLink($tree[$key]->link);
        $tree[$key]->access = AccessResult::forbidden();
        $tree[$key]->subtree = [];
        continue;
      }

      // Default access check.
      $tree[$key]->access = parent::menuLinkCheckAccess($element->link);

      // Filter children items recursively.
      if ($element->hasChildren) {
        $element->subtree = $this
          ->filterByCurrentLanguage($element->subtree);
      }
    }
  }
  return $tree;
}