title = $title; } /** * Factory method to easily create a new Item instance * with a given title. * * @param $title * @return Item */ public static function create($title) { return new self($title); } /** * The route to which the rendered item * should point to. * * @param $route * @return $this */ public function route($route) { $this->route = $route; return $this; } /** * A URL to be used if there is no named route * defined for the navigation item or if it is an * external URL. * * If this attribute is set it will have higher * priority than the $route attribute. * * @param $href * @return $this */ public function href($href) { $this->href = $href; return $this; } /** * Sidebar navigation icon. * * @param $icon * @return $this */ public function icon($icon) { $this->icon = $icon; return $this; } /** * The path which indicates when this navigation * item should be marked as active. It can contain * wildcard characters. * * Example: * * 'users*' (the item will be active whenever a current URL start with "user") * * @param $path * @return $this */ public function active($path) { $this->activePath = $path; return $this; } /** * Active path getter. * * @return mixed */ public function getActivePath() { return $this->activePath; } /** * If item has secondary navigation links, this * method will return all the URL patterns when * this navigation item should be expanded. * * @return array|null */ public function getExpandedPath() { if (! $this->children->count()) { return null; } return $this->children->toBase()->map(function (Item $item) { return $item->getActivePath(); })->toArray(); } /** * Returns the "href" attribute (the URL) for the navigation item. * * @return string|null */ public function getHref() { if ($this->href) { return $this->href; } return $this->route ? route($this->route) : null; } /** * Icon getter. * * @return mixed */ public function getIcon() { return $this->icon; } /** * Title getter. * * @return mixed */ public function getTitle() { return $this->title; } /** * Set the permissions required for rendering the * navigation item. * * @param string|array $permissions * @return $this */ public function permissions($permissions) { $this->permissions = $permissions; return $this; } /** * Permissions getter. * * @return mixed */ public function getPermissions() { return $this->permissions; } /** * Checks if item has nested "children" items. * * @return bool */ public function isDropdown() { return $this->children && $this->children->count(); } /** * Get the collection of nested items. * * @return mixed */ public function children() { return $this->children; } /** * Attach an array of children to the item. * * @param array $children * @return $this */ public function addChildren(array $children) { if (is_null($this->children)) { $this->children = new Collection; } foreach ($children as $child) { $this->children->push($child); } return $this; } /** * Check if the specified user can view the item. * * @param User $user * @return bool|mixed */ public function authorize(User $user) { if (is_object($this->permissions) && $this->permissions instanceof Closure) { return call_user_func($this->permissions, $user); } foreach ((array) $this->permissions as $permission) { if (! $user->hasPermission($permission)) { return false; } } return true; } }