Manage the right side menu via the navigation manager as well
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
ec330c7ac4
commit
054e161eb5
|
@ -40,7 +40,15 @@ class App {
|
||||||
public static function getNavigationManager() {
|
public static function getNavigationManager() {
|
||||||
// TODO: move this into a service in the Application class
|
// TODO: move this into a service in the Application class
|
||||||
if (self::$navigationManager === null) {
|
if (self::$navigationManager === null) {
|
||||||
self::$navigationManager = new \OC\NavigationManager();
|
self::$navigationManager = new \OC\NavigationManager(
|
||||||
|
\OC::$server->getAppManager(),
|
||||||
|
\OC::$server->getURLGenerator(),
|
||||||
|
\OC::$server->getL10NFactory(),
|
||||||
|
\OC::$server->getUserSession(),
|
||||||
|
\OC::$server->getGroupManager(),
|
||||||
|
\OC::$server->getConfig()
|
||||||
|
);
|
||||||
|
self::$navigationManager->noDefaultLinks();
|
||||||
}
|
}
|
||||||
return self::$navigationManager;
|
return self::$navigationManager;
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,12 +144,6 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
<li>
|
|
||||||
<a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>>
|
|
||||||
<img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg') . '?v=' . $_['versionHash']); ?>">
|
|
||||||
<?php p($l->t('Log out'));?>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -27,7 +27,9 @@
|
||||||
namespace OC;
|
namespace OC;
|
||||||
|
|
||||||
use OC\App\AppManager;
|
use OC\App\AppManager;
|
||||||
|
use OC\Group\Manager;
|
||||||
use OCP\App\IAppManager;
|
use OCP\App\IAppManager;
|
||||||
|
use OCP\IConfig;
|
||||||
use OCP\IGroupManager;
|
use OCP\IGroupManager;
|
||||||
use OCP\INavigationManager;
|
use OCP\INavigationManager;
|
||||||
use OCP\IURLGenerator;
|
use OCP\IURLGenerator;
|
||||||
|
@ -52,19 +54,23 @@ class NavigationManager implements INavigationManager {
|
||||||
private $l10nFac;
|
private $l10nFac;
|
||||||
/** @var IUserSession */
|
/** @var IUserSession */
|
||||||
private $userSession;
|
private $userSession;
|
||||||
/** @var IGroupManager */
|
/** @var IGroupManager|Manager */
|
||||||
private $groupManager;
|
private $groupManager;
|
||||||
|
/** @var IConfig */
|
||||||
|
private $config;
|
||||||
|
|
||||||
public function __construct(IAppManager $appManager = null,
|
public function __construct(IAppManager $appManager,
|
||||||
IURLGenerator $urlGenerator = null,
|
IURLGenerator $urlGenerator,
|
||||||
IFactory $l10nFac = null,
|
IFactory $l10nFac,
|
||||||
IUserSession $userSession = null,
|
IUserSession $userSession,
|
||||||
IGroupManager$groupManager = null) {
|
IGroupManager $groupManager,
|
||||||
|
IConfig $config) {
|
||||||
$this->appManager = $appManager;
|
$this->appManager = $appManager;
|
||||||
$this->urlGenerator = $urlGenerator;
|
$this->urlGenerator = $urlGenerator;
|
||||||
$this->l10nFac = $l10nFac;
|
$this->l10nFac = $l10nFac;
|
||||||
$this->userSession = $userSession;
|
$this->userSession = $userSession;
|
||||||
$this->groupManager = $groupManager;
|
$this->groupManager = $groupManager;
|
||||||
|
$this->config = $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -85,20 +91,42 @@ class NavigationManager implements INavigationManager {
|
||||||
if(!isset($entry['icon'])) {
|
if(!isset($entry['icon'])) {
|
||||||
$entry['icon'] = '';
|
$entry['icon'] = '';
|
||||||
}
|
}
|
||||||
|
if(!isset($entry['type'])) {
|
||||||
|
$entry['type'] = 'link';
|
||||||
|
}
|
||||||
$this->entries[] = $entry;
|
$this->entries[] = $entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns all the added Menu entries
|
* returns all the added Menu entries
|
||||||
|
* @param string $type
|
||||||
* @return array an array of the added entries
|
* @return array an array of the added entries
|
||||||
*/
|
*/
|
||||||
public function getAll() {
|
public function getAll($type = 'link') {
|
||||||
$this->init();
|
$this->init();
|
||||||
foreach ($this->closureEntries as $c) {
|
foreach ($this->closureEntries as $c) {
|
||||||
$this->add($c());
|
$this->add($c());
|
||||||
}
|
}
|
||||||
$this->closureEntries = array();
|
$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;
|
return;
|
||||||
}
|
}
|
||||||
$this->init = true;
|
$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;
|
return;
|
||||||
}
|
}
|
||||||
foreach ($this->appManager->getInstalledApps() as $app) {
|
foreach ($this->appManager->getInstalledApps() as $app) {
|
||||||
|
@ -166,7 +269,7 @@ class NavigationManager implements INavigationManager {
|
||||||
// no icon? - ignore it then
|
// no icon? - ignore it then
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_null($icon)) {
|
if ($icon === null) {
|
||||||
$icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
|
$icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,17 +281,6 @@ class NavigationManager implements INavigationManager {
|
||||||
'name' => $l->t($nav['name']),
|
'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() {
|
private function isAdmin() {
|
||||||
|
@ -199,4 +291,11 @@ class NavigationManager implements INavigationManager {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function isSubadmin() {
|
||||||
|
$user = $this->userSession->getUser();
|
||||||
|
if ($user !== null) {
|
||||||
|
return $this->groupManager->getSubAdmin()->isSubAdmin($user);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
return new \OC\Authentication\TwoFactorAuth\Manager($c->getAppManager(), $c->getSession(), $c->getConfig(), $c->getActivityManager(), $c->getLogger());
|
||||||
});
|
});
|
||||||
|
|
||||||
$this->registerService(\OCP\INavigationManager::class, function (Server $c) {
|
$this->registerAlias(\OCP\INavigationManager::class, \OC\NavigationManager::class);
|
||||||
return new \OC\NavigationManager($c->getAppManager(),
|
|
||||||
$c->getURLGenerator(),
|
|
||||||
$c->getL10NFactory(),
|
|
||||||
$c->getUserSession(),
|
|
||||||
$c->getGroupManager());
|
|
||||||
});
|
|
||||||
$this->registerAlias('NavigationManager', \OCP\INavigationManager::class);
|
$this->registerAlias('NavigationManager', \OCP\INavigationManager::class);
|
||||||
|
|
||||||
$this->registerService(\OC\AllConfig::class, function (Server $c) {
|
$this->registerService(\OC\AllConfig::class, function (Server $c) {
|
||||||
|
|
|
@ -457,77 +457,6 @@ class OC_App {
|
||||||
$appManager->disableApp($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
|
// This is private as well. It simply works, so don't ask for more details
|
||||||
private static function proceedNavigation($list) {
|
private static function proceedNavigation($list) {
|
||||||
$headerIconCount = 8;
|
$headerIconCount = 8;
|
||||||
|
@ -783,8 +712,7 @@ class OC_App {
|
||||||
*/
|
*/
|
||||||
public static function getNavigation() {
|
public static function getNavigation() {
|
||||||
$entries = OC::$server->getNavigationManager()->getAll();
|
$entries = OC::$server->getNavigationManager()->getAll();
|
||||||
$navigation = self::proceedNavigation($entries);
|
return self::proceedNavigation($entries);
|
||||||
return $navigation;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -799,8 +727,20 @@ class OC_App {
|
||||||
*/
|
*/
|
||||||
public static function getHeaderNavigation() {
|
public static function getHeaderNavigation() {
|
||||||
$entries = OC::$server->getNavigationManager()->getAll();
|
$entries = OC::$server->getNavigationManager()->getAll();
|
||||||
$navigation = self::proceedAppNavigation($entries);
|
return self::proceedAppNavigation($entries);
|
||||||
return $navigation;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue