| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugins\CoreHome; |
|
|
| use Piwik\Category\Category; |
| use Piwik\Category\CategoryList; |
| use Piwik\Menu\MenuTop; |
| use Piwik\Piwik; |
| use Piwik\Plugins\UsersManager\UserPreferences; |
| use Piwik\Request; |
|
|
| class Menu extends \Piwik\Plugin\Menu |
| { |
| public function configureTopMenu(MenuTop $menu) |
| { |
| $this->configureReportingGroupMenuItems($menu); |
|
|
| $module = $this->getLoginModule(); |
| if (Piwik::isUserIsAnonymous()) { |
| $menu->registerMenuIcon('Login_LogIn', 'icon-sign-in'); |
| $menu->addItem('Login_LogIn', null, array('module' => $module, 'action' => false), 1000, Piwik::translate('Login_LogIn')); |
| } else { |
| $menu->registerMenuIcon('General_Logout', 'icon-sign-out'); |
| $menu->addItem('General_Logout', null, array('module' => $module, 'action' => 'logout', 'idSite' => null), 1000, Piwik::translate('General_Logout')); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| private function configureReportingGroupMenuItems(MenuTop $menu): void |
| { |
| $idSite = $this->getMenuIdSite(); |
| if (null === $idSite) { |
| return; |
| } |
|
|
| foreach ($this->getReportingMenuGroups() as $group => $order) { |
| $params = $this->urlForModuleActionWithDefaultUserParams('CoreHome', 'index', ['idSite' => $idSite]); |
| if (empty($params)) { |
| continue; |
| } |
|
|
| $url = $this->urlForReportingSection($params, $group); |
|
|
| $menu->addItem($group, null, $url, $order, false, false, false, 'data-reporting-group="' . $group . '"'); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| private function getMenuIdSite(): ?int |
| { |
| $userPreferences = new UserPreferences(); |
| $idSite = (int) $userPreferences->getDefaultWebsiteId(); |
| $idSite = Request::fromRequest()->getIntegerParameter('idSite', $idSite); |
|
|
| if (!$idSite || !Piwik::isUserHasViewAccess($idSite)) { |
| return null; |
| } |
|
|
| return $idSite; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| private function getReportingMenuGroups(): array |
| { |
| $categoryOrderByGroup = []; |
|
|
| foreach (CategoryList::get()->getCategories() as $category) { |
| if (!$category->hasSubCategories()) { |
| continue; |
| } |
|
|
| foreach ($category->getGroups() as $group) { |
| if (Category::DEFAULT_GROUP === $group) { |
| continue; |
| } |
|
|
| $order = (int) $category->getOrder(); |
| if (!isset($categoryOrderByGroup[$group]) || $order < $categoryOrderByGroup[$group]) { |
| $categoryOrderByGroup[$group] = $order; |
| } |
| } |
| } |
|
|
| asort($categoryOrderByGroup); |
|
|
| $groups = []; |
| $order = 2; |
| foreach (array_keys($categoryOrderByGroup) as $group) { |
| $groups[$group] = $order++; |
| } |
|
|
| return $groups; |
| } |
|
|
| private function getLoginModule() |
| { |
| return Piwik::getLoginPluginName(); |
| } |
| } |
|
|