public static function Amswap::preRender in Admin Menu Swap 8
Pre-render callback to replace the default menu with a role specific menu.
Parameters
array $element: The administration toolbar.
Return value
array The altered element.
File
- src/
Render/ Element/ Amswap.php, line 30
Class
- Amswap
- Provides a pre-render callback for the administration menu.
Namespace
Drupal\amswap\Render\ElementCode
public static function preRender(array $element) {
$parameters = new MenuTreeParameters();
$parameters
->onlyEnabledLinks();
$toolbar_menu_tree = \Drupal::service('toolbar.menu_tree');
$current_user = \Drupal::currentUser();
$role_menu_pairs = \Drupal::config('amswap.amswapconfig')
->get('role_menu_pairs');
$menu_specified = FALSE;
$trees = [];
if (is_array($role_menu_pairs) || is_object($role_menu_pairs)) {
foreach ($role_menu_pairs as $pair) {
// If the specified role matches the users current role
if (in_array($pair['role'], $current_user
->getRoles(), FALSE)) {
$parameters
->setMinDepth(1)
->setMaxDepth(4);
$trees[] = $toolbar_menu_tree
->load($pair['menu'], $parameters);
$menu_specified = TRUE;
}
}
}
if (!$menu_specified) {
// Return un-altered
return $element;
}
// Add manipulators
$manipulators = [
[
'callable' => 'menu.default_tree_manipulators:checkAccess',
],
[
'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
],
];
if (function_exists('toolbar_tools_menu_navigation_links')) {
// If Admin Toolbar module is installed, use its toolbar manipulation function
$manipulators[] = [
'callable' => 'toolbar_tools_menu_navigation_links',
];
}
else {
// Otherwise use Toolbar module's toolbar manipulation function
$manipulators[] = [
'callable' => 'toolbar_menu_navigation_links',
];
}
$element['administration_menu'] = [];
foreach ($trees as $tree) {
$tree = $toolbar_menu_tree
->transform($tree, $manipulators);
$element['administration_menu'] = NestedArray::mergeDeep($toolbar_menu_tree
->build($tree), $element['administration_menu']);
}
return $element;
}