public function MenuLinkTreeManipulators::filterByCurrentLanguage in Menu Manipulator 8.2
Same name and namespace in other branches
- 8 src/Menu/MenuLinkTreeManipulators.php \Drupal\menu_manipulator\Menu\MenuLinkTreeManipulators::filterByCurrentLanguage()
- 3.0.x src/Menu/MenuLinkTreeManipulators.php \Drupal\menu_manipulator\Menu\MenuLinkTreeManipulators::filterByCurrentLanguage()
- 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\MenuCode
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;
}