summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2017-03-26 19:40:41 +0200
committerJoas Schilling <coding@schilljs.com>2017-03-26 19:40:41 +0200
commit054e161eb5f4a5c5c13ee322ae8e93ce66f01b13 (patch)
tree1633a3b70ba9309e737b422da6878f5299c7d1dd /lib
parentec330c7ac4d7d3a145dc06414e5707243f1057d7 (diff)
downloadnextcloud-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.php141
-rw-r--r--lib/private/Server.php8
-rw-r--r--lib/private/legacy/app.php90
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);
}
/**