/** * Register a menu. * * @param \Caffeinated\Menus\Builder|\Caffeinated\Menus\Item $menuBuilder * @param \Yajra\CMS\Entities\Menu $menu * @return \Caffeinated\Menus\Builder|bool * @throws \Laracasts\Presenter\Exceptions\PresenterException */ protected function registerMenu($menuBuilder, Menu $menu) { if (!$menuBuilder) { return false; } if (!$menu->published) { return false; } if ($menu->requiresAuthentication() && !auth()->check()) { return false; } if (count($menu->permissions)) { if ($menu->authorization === 'can') { foreach ($menu->permissions as $permission) { if (!currentUser()->can($permission->slug)) { return false; } } } else { $permissions = $menu->permissions->pluck('slug')->toArray(); if (!currentUser()->canAtLeast($permissions)) { return false; } } } $item = $menuBuilder->add($menu->title, url($menu->present()->url))->attribute('target', $menu->present()->target)->attribute('title', $menu->present()->linkTitle); if ($menu->present()->linkStyle) { $item->attribute('style', $menu->present()->linkStyle); } if ($menu->isActive()) { session()->flash('active_menu', $menu); } return $item; }
/** * Build a level of menu * * @param array $config * @param Caffeinated\Menus\Builder $menu * @param string|null $namespace * @return void */ public function build(array $config, Builder $menu, $namespace = null) { foreach ($config as $key => $value) { $route = null; if (isset($value['route'])) { $route = ['route' => $value['route']]; } if (isset($value['url'])) { $route = $value['url']; } if ($namespace) { $menu->get(strtolower($namespace))->add($key, $route)->data('permissions', isset($value['permissions']) ? $value['permissions'] : null); } else { $menu->add($key, $route)->data('permissions', isset($value['permissions']) ? $value['permissions'] : null); } if (isset($value['children'])) { $this->build($value['children'], $menu, $key); } } }
public function active($pattern = null) { if (!is_null($pattern)) { $pattern = ltrim(preg_replace('/\\/\\*/', '(/.*)?', $pattern), '/'); if (preg_match("@^{$pattern}\\z@", Request::path())) { $this->activate(); } return $this; } $this->attributes['class'] = $this->builder->formatGroupClass(['class' => 'active'], $this->attributes); return $this; }