3 namespace wcf\system\menu\user\profile
;
5 use wcf\data\user\profile\menu\item\UserProfileMenuItem
;
6 use wcf\system\cache\builder\UserProfileMenuCacheBuilder
;
7 use wcf\system\event\EventHandler
;
8 use wcf\system\SingletonFactory
;
11 * Builds the user profile menu.
13 * @author Alexander Ebert
14 * @copyright 2001-2019 WoltLab GmbH
15 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16 * @package WoltLabSuite\Core\System\Menu\User\Profile
18 class UserProfileMenu
extends SingletonFactory
22 * @var UserProfileMenuItem
24 public $activeMenuItem;
27 * list of all menu items
28 * @var UserProfileMenuItem[]
35 protected function init()
37 // get menu items from cache
41 $this->checkMenuItems();
44 EventHandler
::getInstance()->fireAction($this, 'init');
48 * Loads cached menu items.
50 protected function loadCache()
52 // call loadCache event
53 EventHandler
::getInstance()->fireAction($this, 'loadCache');
55 $this->menuItems
= UserProfileMenuCacheBuilder
::getInstance()->getData();
59 * Checks the options and permissions of the menu items.
61 protected function checkMenuItems()
63 foreach ($this->menuItems
as $key => $item) {
64 if (!$this->checkMenuItem($item)) {
66 unset($this->menuItems
[$key]);
72 * Checks the options and permissions of given menu item.
74 * @param UserProfileMenuItem $item
77 protected function checkMenuItem(UserProfileMenuItem
$item)
79 return $item->validateOptions() && $item->validatePermissions();
83 * Returns the list of menu items.
85 * @return UserProfileMenuItem[]
87 public function getMenuItems()
89 return $this->menuItems
;
93 * Sets active menu item.
95 * @param string $menuItem
98 public function setActiveMenuItem($menuItem)
100 foreach ($this->menuItems
as $item) {
101 if ($item->menuItem
== $menuItem) {
102 $this->activeMenuItem
= $item;
112 * Returns the first visible menu item.
115 * @return UserProfileMenuItem
117 public function getActiveMenuItem($userID = 0)
119 if (empty($this->menuItems
)) {
123 if ($this->activeMenuItem
=== null) {
124 if (!empty($userID)) {
125 foreach ($this->menuItems
as $menuItem) {
126 if ($menuItem->getContentManager()->isVisible($userID)) {
127 $this->activeMenuItem
= $menuItem;
132 $this->activeMenuItem
= \reset
($this->menuItems
);
136 return $this->activeMenuItem
;
140 * Returns a specific menu item.
142 * @param string $menuItem
143 * @return UserProfileMenuItem|null
145 public function getMenuItem($menuItem)
147 foreach ($this->menuItems
as $item) {
148 if ($item->menuItem
== $menuItem) {