diff options
author | Joas Schilling <coding@schilljs.com> | 2017-03-26 19:40:41 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2017-03-26 19:40:41 +0200 |
commit | 054e161eb5f4a5c5c13ee322ae8e93ce66f01b13 (patch) | |
tree | 1633a3b70ba9309e737b422da6878f5299c7d1dd /lib | |
parent | ec330c7ac4d7d3a145dc06414e5707243f1057d7 (diff) | |
download | nextcloud-server-054e161eb5f4a5c5c13ee322ae8e93ce66f01b13.tar.gz nextcloud-server-054e161eb5f4a5c5c13ee322ae8e93ce66f01b13.zip |
Manage the right side menu via the navigation manager as well
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/NavigationManager.php | 141 | ||||
-rw-r--r-- | lib/private/Server.php | 8 | ||||
-rw-r--r-- | lib/private/legacy/app.php | 90 |
3 files changed, 136 insertions, 103 deletions
diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php index 396fc50e79f..439b4795246 100644 --- a/lib/private/NavigationManager.php +++ b/lib/private/NavigationManager.php @@ -27,7 +27,9 @@ namespace OC; use OC\App\AppManager; +use OC\Group\Manager; use OCP\App\IAppManager; +use OCP\IConfig; use OCP\IGroupManager; use OCP\INavigationManager; use OCP\IURLGenerator; @@ -52,19 +54,23 @@ class NavigationManager implements INavigationManager { private $l10nFac; /** @var IUserSession */ private $userSession; - /** @var IGroupManager */ + /** @var IGroupManager|Manager */ private $groupManager; + /** @var IConfig */ + private $config; - public function __construct(IAppManager $appManager = null, - IURLGenerator $urlGenerator = null, - IFactory $l10nFac = null, - IUserSession $userSession = null, - IGroupManager$groupManager = null) { + public function __construct(IAppManager $appManager, + IURLGenerator $urlGenerator, + IFactory $l10nFac, + IUserSession $userSession, + IGroupManager $groupManager, + IConfig $config) { $this->appManager = $appManager; $this->urlGenerator = $urlGenerator; $this->l10nFac = $l10nFac; $this->userSession = $userSession; $this->groupManager = $groupManager; + $this->config = $config; } /** @@ -85,20 +91,42 @@ class NavigationManager implements INavigationManager { if(!isset($entry['icon'])) { $entry['icon'] = ''; } + if(!isset($entry['type'])) { + $entry['type'] = 'link'; + } $this->entries[] = $entry; } /** * returns all the added Menu entries + * @param string $type * @return array an array of the added entries */ - public function getAll() { + public function getAll($type = 'link') { $this->init(); foreach ($this->closureEntries as $c) { $this->add($c()); } $this->closureEntries = array(); - return $this->entries; + + if ($type === 'all') { + return $this->entries; + } + + return array_filter($this->entries, function($entry) use ($type) { + return $entry['type'] === $type; + }); + } + + /** + * Do not load the default links + * This is just a hack for the files app + * @internal + */ + public function noDefaultLinks() { + $this->entries = []; + $this->closureEntries = []; + $this->init = true; } /** @@ -134,7 +162,82 @@ class NavigationManager implements INavigationManager { return; } $this->init = true; - if (is_null($this->appManager)) { + + if ($this->config->getSystemValue('knowledgebaseenabled', true)) { + $l = $this->l10nFac->get('lib'); + $this->add([ + 'type' => 'settings', + 'id' => 'help', + 'order' => 4, + 'href' => $this->urlGenerator->linkToRoute('settings_help'), + 'name' => $l->t('Help'), + 'icon' => $this->urlGenerator->imagePath('settings', 'help.svg'), + ]); + } + + if ($this->userSession->isLoggedIn()) { + if ($this->isAdmin()) { + $l = $this->l10nFac->get('settings'); + // App management + $this->add([ + 'id' => 'core_apps', + 'order' => 9999, + 'href' => $this->urlGenerator->linkToRoute('settings.AppSettings.viewApps'), + 'icon' => $this->urlGenerator->imagePath('settings', 'apps.svg'), + 'name' => $l->t('Apps'), + ]); + } + + $l = $this->l10nFac->get('lib'); + // Personal settings + $this->add([ + 'type' => 'settings', + 'id' => 'personal', + 'order' => 1, + 'href' => $this->urlGenerator->linkToRoute('settings_personal'), + 'name' => $l->t('Personal'), + 'icon' => $this->urlGenerator->imagePath('settings', 'personal.svg'), + ]); + + // Logout + $this->add([ + 'type' => 'settings', + 'id' => 'logout', + 'order' => 99999, + 'href' => $this->urlGenerator->linkToRouteAbsolute( + 'core.login.logout', + ['requesttoken' => \OCP\Util::callRegister()] + ), + 'name' => $l->t('Log out'), + 'icon' => $this->urlGenerator->imagePath('core', 'actions/logout.svg'), + ]); + + if ($this->isSubadmin()) { + // User management + $this->add([ + 'type' => 'settings', + 'id' => 'core_users', + 'order' => 3, + 'href' => $this->urlGenerator->linkToRoute('settings_users'), + 'name' => $l->t('Users'), + 'icon' => $this->urlGenerator->imagePath('settings', 'users.svg'), + ]); + } + + if ($this->isAdmin()) { + // Admin settings + $this->add([ + 'type' => 'settings', + 'id' => 'admin', + 'order' => 2, + 'href' => $this->urlGenerator->linkToRoute('settings.AdminSettings.index'), + 'name' => $l->t('Admin'), + 'icon' => $this->urlGenerator->imagePath('settings', 'admin.svg'), + ]); + } + } + + if ($this->appManager === 'null') { return; } foreach ($this->appManager->getInstalledApps() as $app) { @@ -166,7 +269,7 @@ class NavigationManager implements INavigationManager { // no icon? - ignore it then } } - if (is_null($icon)) { + if ($icon === null) { $icon = $this->urlGenerator->imagePath('core', 'default-app-icon'); } @@ -178,17 +281,6 @@ class NavigationManager implements INavigationManager { 'name' => $l->t($nav['name']), ]); } - - if ($this->isAdmin()) { - $l = $this->l10nFac->get('settings'); - $this->add([ - 'id' => 'core_apps', - 'order' => 9999, - 'href' => $this->urlGenerator->linkToRoute('settings.AppSettings.viewApps'), - 'icon' => $this->urlGenerator->imagePath('settings', 'apps.svg'), - 'name' => $l->t('Apps'), - ]); - } } private function isAdmin() { @@ -199,4 +291,11 @@ class NavigationManager implements INavigationManager { return false; } + private function isSubadmin() { + $user = $this->userSession->getUser(); + if ($user !== null) { + return $this->groupManager->getSubAdmin()->isSubAdmin($user); + } + return false; + } } diff --git a/lib/private/Server.php b/lib/private/Server.php index c21ff650b24..10f9a810de9 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -353,13 +353,7 @@ class Server extends ServerContainer implements IServerContainer { return new \OC\Authentication\TwoFactorAuth\Manager($c->getAppManager(), $c->getSession(), $c->getConfig(), $c->getActivityManager(), $c->getLogger()); }); - $this->registerService(\OCP\INavigationManager::class, function (Server $c) { - return new \OC\NavigationManager($c->getAppManager(), - $c->getURLGenerator(), - $c->getL10NFactory(), - $c->getUserSession(), - $c->getGroupManager()); - }); + $this->registerAlias(\OCP\INavigationManager::class, \OC\NavigationManager::class); $this->registerAlias('NavigationManager', \OCP\INavigationManager::class); $this->registerService(\OC\AllConfig::class, function (Server $c) { diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index 31fa0a9e2da..a68f8605258 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -457,77 +457,6 @@ class OC_App { $appManager->disableApp($app); } - /** - * Returns the Settings Navigation - * - * @return string[] - * - * This function returns an array containing all settings pages added. The - * entries are sorted by the key 'order' ascending. - */ - public static function getSettingsNavigation() { - $l = \OC::$server->getL10N('lib'); - $urlGenerator = \OC::$server->getURLGenerator(); - - $settings = array(); - // by default, settings only contain the help menu - if (\OC::$server->getSystemConfig()->getValue('knowledgebaseenabled', true)) { - $settings = array( - array( - "id" => "help", - "order" => 4, - "href" => $urlGenerator->linkToRoute('settings_help'), - "name" => $l->t("Help"), - "icon" => $urlGenerator->imagePath("settings", "help.svg") - ) - ); - } - - // if the user is logged-in - if (\OC::$server->getUserSession()->isLoggedIn()) { - // personal menu - $settings[] = array( - "id" => "personal", - "order" => 1, - "href" => $urlGenerator->linkToRoute('settings_personal'), - "name" => $l->t("Personal"), - "icon" => $urlGenerator->imagePath("settings", "personal.svg") - ); - - //SubAdmins are also allowed to access user management - $userObject = \OC::$server->getUserSession()->getUser(); - $isSubAdmin = false; - if($userObject !== null) { - $isSubAdmin = \OC::$server->getGroupManager()->getSubAdmin()->isSubAdmin($userObject); - } - if ($isSubAdmin) { - // admin users menu - $settings[] = array( - "id" => "core_users", - "order" => 3, - "href" => $urlGenerator->linkToRoute('settings_users'), - "name" => $l->t("Users"), - "icon" => $urlGenerator->imagePath("settings", "users.svg") - ); - } - - // if the user is an admin - if (OC_User::isAdminUser(OC_User::getUser())) { - // admin settings - $settings[] = array( - "id" => "admin", - "order" => 2, - "href" => $urlGenerator->linkToRoute('settings.AdminSettings.index'), - "name" => $l->t("Admin"), - "icon" => $urlGenerator->imagePath("settings", "admin.svg") - ); - } - } - - $navigation = self::proceedNavigation($settings); - return $navigation; - } - // This is private as well. It simply works, so don't ask for more details private static function proceedNavigation($list) { $headerIconCount = 8; @@ -783,8 +712,7 @@ class OC_App { */ public static function getNavigation() { $entries = OC::$server->getNavigationManager()->getAll(); - $navigation = self::proceedNavigation($entries); - return $navigation; + return self::proceedNavigation($entries); } /** @@ -799,8 +727,20 @@ class OC_App { */ public static function getHeaderNavigation() { $entries = OC::$server->getNavigationManager()->getAll(); - $navigation = self::proceedAppNavigation($entries); - return $navigation; + return self::proceedAppNavigation($entries); + } + + /** + * Returns the Settings Navigation + * + * @return string[] + * + * This function returns an array containing all settings pages added. The + * entries are sorted by the key 'order' ascending. + */ + public static function getSettingsNavigation() { + $entries = OC::$server->getNavigationManager()->getAll('settings'); + return self::proceedNavigation($entries); } /** |