aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/appinfo/info.xml12
-rw-r--r--apps/files/lib/App.php10
-rw-r--r--apps/files/tests/Controller/ViewControllerTest.php10
-rw-r--r--core/css/header.scss22
-rw-r--r--core/templates/layout.user.php38
-rw-r--r--lib/private/NavigationManager.php190
-rw-r--r--lib/private/Server.php8
-rw-r--r--lib/private/TemplateLayout.php6
-rw-r--r--lib/private/legacy/app.php110
-rw-r--r--settings/img/apps.svg5
-rw-r--r--settings/js/apps.js8
-rw-r--r--tests/lib/NavigationManagerTest.php110
12 files changed, 279 insertions, 250 deletions
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index 8b5678b331a..c49ec7aa407 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -55,10 +55,12 @@
<command>OCA\Files\Command\ScanAppData</command>
</commands>
- <navigation>
- <name>Files</name>
- <route>files.view.index</route>
- <order>0</order>
- </navigation>
+ <navigations>
+ <navigation>
+ <name>Files</name>
+ <route>files.view.index</route>
+ <order>0</order>
+ </navigation>
+ </navigations>
</info>
diff --git a/apps/files/lib/App.php b/apps/files/lib/App.php
index add27a2d2df..34d3ab4384c 100644
--- a/apps/files/lib/App.php
+++ b/apps/files/lib/App.php
@@ -40,7 +40,15 @@ class App {
public static function getNavigationManager() {
// TODO: move this into a service in the Application class
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->clear(false);
}
return self::$navigationManager;
}
diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php
index 1d8c2956551..2e497405a4d 100644
--- a/apps/files/tests/Controller/ViewControllerTest.php
+++ b/apps/files/tests/Controller/ViewControllerTest.php
@@ -134,6 +134,7 @@ class ViewControllerTest extends TestCase {
'name' => \OC::$server->getL10N('files')->t('All files'),
'active' => false,
'icon' => '',
+ 'type' => 'link',
],
[
'id' => 'recent',
@@ -143,6 +144,7 @@ class ViewControllerTest extends TestCase {
'name' => \OC::$server->getL10N('files')->t('Recent'),
'active' => false,
'icon' => '',
+ 'type' => 'link',
],
[
'id' => 'favorites',
@@ -152,6 +154,7 @@ class ViewControllerTest extends TestCase {
'name' => null,
'active' => false,
'icon' => '',
+ 'type' => 'link',
],
[
'id' => 'sharingin',
@@ -161,6 +164,7 @@ class ViewControllerTest extends TestCase {
'name' => \OC::$server->getL10N('files_sharing')->t('Shared with you'),
'active' => false,
'icon' => '',
+ 'type' => 'link',
],
[
'id' => 'sharingout',
@@ -170,6 +174,7 @@ class ViewControllerTest extends TestCase {
'name' => \OC::$server->getL10N('files_sharing')->t('Shared with others'),
'active' => false,
'icon' => '',
+ 'type' => 'link',
],
[
'id' => 'sharinglinks',
@@ -179,6 +184,7 @@ class ViewControllerTest extends TestCase {
'name' => \OC::$server->getL10N('files_sharing')->t('Shared by link', []),
'active' => false,
'icon' => '',
+ 'type' => 'link',
],
[
'id' => 'systemtagsfilter',
@@ -188,6 +194,7 @@ class ViewControllerTest extends TestCase {
'name' => \OC::$server->getL10N('systemtags')->t('Tags'),
'active' => false,
'icon' => '',
+ 'type' => 'link',
],
[
'id' => 'trashbin',
@@ -197,7 +204,8 @@ class ViewControllerTest extends TestCase {
'name' => \OC::$server->getL10N('files_trashbin')->t('Deleted files'),
'active' => false,
'icon' => '',
- ],
+ 'type' => 'link',
+ ],
]);
$expected = new Http\TemplateResponse(
diff --git a/core/css/header.scss b/core/css/header.scss
index 3de0c50bcd3..6f41dd8154f 100644
--- a/core/css/header.scss
+++ b/core/css/header.scss
@@ -318,28 +318,6 @@ nav {
}
/* Apps management */
-.apps-management {
- min-height: initial;
- height: initial;
- margin: 0;
- a {
- svg,
- span {
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)';
- opacity: .3;
- }
- /* icon opacity and hover effect */
- &:hover svg,
- &:focus svg,
- &.active svg,
- &:hover span,
- &:focus span,
- &.active span {
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';
- opacity: 1;
- }
- }
-}
#apps {
max-height: calc(100vh - 100px);
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index a7da4a39dd7..46a5c0211a5 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -61,7 +61,6 @@
<div id="appmenu">
<ul>
- <?php $headerIconCount = 8; ?>
<?php foreach($_['headernavigation'] as $entry): ?>
<li data-id="<?php p($entry['id']); ?>">
<a href="<?php print_unescaped($entry['href']); ?>" tabindex="3"
@@ -74,22 +73,12 @@
</a>
</li>
<?php endforeach; ?>
- <li id="more-apps" class="menutoggle<?php if (!(count($_['navigation']) > $headerIconCount || (OC_User::isAdminUser(OC_User::getUser()) && count($_['navigation'])>=$headerIconCount))): ?> hidden<?php endif; ?>">
+ <li id="more-apps" class="menutoggle<?php if (count($_['navigation']) <= 8): ?> hidden<?php endif; ?>">
<a href="#">
<div class="icon-more-white"></div>
<span><?php p($l->t('More apps')); ?></span>
</a>
</li>
- <?php if(OC_User::isAdminUser(OC_User::getUser())): ?>
- <li <?php if(count($_['navigation'])>$headerIconCount-1): ?> class="hidden apps-management"<?php else: ?> class="apps-management" <?php endif; ?>>
- <a href="<?php print_unescaped(\OC::$server->getURLGenerator()->linkToRoute('settings.AppSettings.viewApps')); ?>" tabindex="4"
- <?php if( $_['appsmanagement_active'] ): ?> class="active"<?php endif; ?>>
- <img src="<?php print_unescaped(image_path('settings', 'apps.svg') . '?v=' . $_['versionHash']); ?>" />
- <div class="icon-loading-dark" style="display:none;"></div>
- <span><?php p($l->t('Apps')); ?></span>
- </a>
- </li>
- <?php endif; ?>
</ul>
</div>
@@ -115,25 +104,6 @@
</a>
</li>
<?php endforeach; ?>
- <?php
- /* show "More apps" link to app administration directly in app navigation, as last entry */
- if(OC_User::isAdminUser(OC_User::getUser())):
- ?>
- <li class="apps-management">
- <a href="<?php print_unescaped(\OC::$server->getURLGenerator()->linkToRoute('settings.AppSettings.viewApps')); ?>" tabindex="4"
- <?php if( $_['appsmanagement_active'] ): ?> class="active"<?php endif; ?>>
- <svg width="32" height="32" viewBox="0 0 32 32" class="app-icon">
- <defs><filter id="invert-appsmanagement"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter></defs>
- <image x="0" y="0" width="32" height="32" preserveAspectRatio="xMinYMin meet" filter="url(#invert-appsmanagement)" xlink:href="<?php print_unescaped(image_path('settings', 'apps.svg') . '?v=' . $_['versionHash']); ?>"></image>
- </svg>
- <div class="icon-loading-dark" style="display:none;"></div>
- <span>
- <?php p($l->t('Apps')); ?>
- </span>
- </a>
- </li>
- <?php endif; ?>
-
</ul>
</div>
</div></nav>
@@ -173,12 +143,6 @@
</a>
</li>
<?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>
</div>
diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php
index f7bc02943a3..300c24ff940 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,29 +91,40 @@ 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;
+ });
}
/**
* removes all the entries
*/
- public function clear() {
+ public function clear($loadDefaultLinks = true) {
$this->entries = [];
$this->closureEntries = [];
- $this->init = false;
+ $this->init = !$loadDefaultLinks;
}
/**
@@ -134,49 +151,127 @@ class NavigationManager implements INavigationManager {
return;
}
$this->init = true;
- if (is_null($this->appManager)) {
+
+ $l = $this->l10nFac->get('lib');
+ if ($this->config->getSystemValue('knowledgebaseenabled', true)) {
+ $this->add([
+ 'type' => 'settings',
+ 'id' => 'help',
+ 'order' => 5,
+ 'href' => $this->urlGenerator->linkToRoute('settings_help'),
+ 'name' => $l->t('Help'),
+ 'icon' => $this->urlGenerator->imagePath('settings', 'help.svg'),
+ ]);
+ }
+
+ if ($this->userSession->isLoggedIn()) {
+ if ($this->isAdmin()) {
+ // App management
+ $this->add([
+ 'type' => 'settings',
+ 'id' => 'core_apps',
+ 'order' => 3,
+ 'href' => $this->urlGenerator->linkToRoute('settings.AppSettings.viewApps'),
+ 'icon' => $this->urlGenerator->imagePath('settings', 'apps.svg'),
+ 'name' => $l->t('Apps'),
+ ]);
+ }
+
+ // 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' => 4,
+ '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) {
// load plugins and collections from info.xml
$info = $this->appManager->getAppInfo($app);
- if (!isset($info['navigation'])) {
- continue;
- }
- $nav = $info['navigation'];
- if (!isset($nav['name'])) {
+ if (empty($info['navigations'])) {
continue;
}
- if (!isset($nav['route'])) {
- continue;
- }
- $role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all';
- if ($role === 'admin' && !$this->isAdmin()) {
- continue;
- }
- $l = $this->l10nFac->get($app);
- $order = isset($nav['order']) ? $nav['order'] : 100;
- $route = $this->urlGenerator->linkToRoute($nav['route']);
- $icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg';
- foreach ([$icon, "$app.svg"] as $i) {
- try {
- $icon = $this->urlGenerator->imagePath($app, $i);
- break;
- } catch (\RuntimeException $ex) {
- // no icon? - ignore it then
+ foreach ($info['navigations'] as $nav) {
+ if (!isset($nav['name'])) {
+ continue;
+ }
+ if (!isset($nav['route'])) {
+ continue;
+ }
+ $role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all';
+ if ($role === 'admin' && !$this->isAdmin()) {
+ continue;
+ }
+ $l = $this->l10nFac->get($app);
+ $id = isset($nav['id']) ? $nav['id'] : $app;
+ $order = isset($nav['order']) ? $nav['order'] : 100;
+ $type = isset($nav['type']) ? $nav['type'] : 'link';
+ $route = $this->urlGenerator->linkToRoute($nav['route']);
+ $icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg';
+ foreach ([$icon, "$app.svg"] as $i) {
+ try {
+ $icon = $this->urlGenerator->imagePath($app, $i);
+ break;
+ } catch (\RuntimeException $ex) {
+ // no icon? - ignore it then
+ }
+ }
+ if ($icon === null) {
+ $icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
}
- }
- if (is_null($icon)) {
- $icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
- }
- $this->add([
- 'id' => $app,
- 'order' => $order,
- 'href' => $route,
- 'icon' => $icon,
- 'name' => $l->t($nav['name']),
- ]);
+ $this->add([
+ 'id' => $id,
+ 'order' => $order,
+ 'href' => $route,
+ 'icon' => $icon,
+ 'type' => $type,
+ 'name' => $l->t($nav['name']),
+ ]);
+ }
}
}
@@ -188,4 +283,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/TemplateLayout.php b/lib/private/TemplateLayout.php
index 956cba40086..6dc925f8f8c 100644
--- a/lib/private/TemplateLayout.php
+++ b/lib/private/TemplateLayout.php
@@ -95,14 +95,8 @@ class TemplateLayout extends \OC_Template {
}
}
$userDisplayName = \OC_User::getDisplayName();
- $appsMgmtActive = strpos(\OC::$server->getRequest()->getRequestUri(), \OC::$server->getURLGenerator()->linkToRoute('settings.AppSettings.viewApps')) === 0;
- if ($appsMgmtActive) {
- $l = \OC::$server->getL10N('lib');
- $this->assign('application', $l->t('Apps'));
- }
$this->assign('user_displayname', $userDisplayName);
$this->assign('user_uid', \OC_User::getUser());
- $this->assign('appsmanagement_active', $appsMgmtActive);
if (\OC_User::getUser() === false) {
$this->assign('userAvatarSet', false);
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 5343e7ad172..68a8383afbf 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -457,83 +457,8 @@ 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;
- if(OC_User::isAdminUser(OC_User::getUser())) {
- $headerIconCount--;
- }
usort($list, function($a, $b) {
if (isset($a['order']) && isset($b['order'])) {
return ($a['order'] < $b['order']) ? -1 : 1;
@@ -556,6 +481,11 @@ class OC_App {
}
unset($navEntry);
+ if (count($list) <= 8) {
+ return $list;
+ }
+
+ $headerIconCount = 7;
if($activeAppIndex > ($headerIconCount-1)) {
$active = $list[$activeAppIndex];
$lastInHeader = $list[$headerIconCount-1];
@@ -576,10 +506,6 @@ class OC_App {
}
public static function proceedAppNavigation($entries) {
- $headerIconCount = 8;
- if(OC_User::isAdminUser(OC_User::getUser())) {
- $headerIconCount--;
- }
$activeAppIndex = -1;
$list = self::proceedNavigation($entries);
@@ -592,6 +518,13 @@ class OC_App {
$navEntry['active'] = false;
}
}
+
+
+ if (count($list) <= 8) {
+ return $list;
+ }
+
+ $headerIconCount = 7;
// move active item to last position
if($activeAppIndex > ($headerIconCount-1)) {
$active = $list[$activeAppIndex];
@@ -789,8 +722,7 @@ class OC_App {
*/
public static function getNavigation() {
$entries = OC::$server->getNavigationManager()->getAll();
- $navigation = self::proceedNavigation($entries);
- return $navigation;
+ return self::proceedNavigation($entries);
}
/**
@@ -805,8 +737,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);
}
/**
diff --git a/settings/img/apps.svg b/settings/img/apps.svg
index d1509ea3a37..b6e545799a3 100644
--- a/settings/img/apps.svg
+++ b/settings/img/apps.svg
@@ -1 +1,4 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1"><path d="M14 6v8H6v4h8v8h4v-8h8v-4h-8V6h-4z" fill="#FFF"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1">
+ <path d="m7 2v5h-5v2h5v5h2v-5h5v-2h-5v-5z"/>
+</svg>
diff --git a/settings/js/apps.js b/settings/js/apps.js
index d2f26578a7c..215b3c2c92e 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -530,21 +530,17 @@ OC.Settings.Apps = OC.Settings.Apps || {
}
previousEntry = entry;
// do not show apps from #appmenu in #navigation
- if(i < 7) {
+ if(i <= 7) {
$('#navigation li').eq(i).addClass('in-header');
} else {
$('#navigation li').eq(i).removeClass('in-header');
}
}
-
-
- if (navEntries.length > 7) {
+ if (navEntries.length > 8) {
$('#more-apps').show();
- $('.apps-management').hide();
} else {
$('#more-apps').hide();
- $('.apps-management').show();
}
}
});
diff --git a/tests/lib/NavigationManagerTest.php b/tests/lib/NavigationManagerTest.php
index 64fec802eca..0871a9a0910 100644
--- a/tests/lib/NavigationManagerTest.php
+++ b/tests/lib/NavigationManagerTest.php
@@ -14,7 +14,7 @@ namespace Test;
use OC\App\AppManager;
use OC\NavigationManager;
-use OCP\App\IAppManager;
+use OCP\IConfig;
use OCP\IGroupManager;
use OCP\IL10N;
use OCP\IURLGenerator;
@@ -23,13 +23,41 @@ use OCP\IUserSession;
use OCP\L10N\IFactory;
class NavigationManagerTest extends TestCase {
+ /** @var AppManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $appManager;
+ /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */
+ protected $urlGenerator;
+ /** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */
+ protected $l10nFac;
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ protected $userSession;
+ /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */
+ protected $groupManager;
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
+ protected $config;
+
/** @var \OC\NavigationManager */
protected $navigationManager;
protected function setUp() {
parent::setUp();
- $this->navigationManager = new NavigationManager();
+ $this->appManager = $this->createMock(AppManager::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->l10nFac = $this->createMock(IFactory::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->groupManager = $this->createMock(IGroupManager::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->navigationManager = new NavigationManager(
+ $this->appManager,
+ $this->urlGenerator,
+ $this->l10nFac,
+ $this->userSession,
+ $this->groupManager,
+ $this->config
+ );
+
+ $this->navigationManager->clear(false);
}
public function addArrayData() {
@@ -41,6 +69,7 @@ class NavigationManagerTest extends TestCase {
'order' => 1,
'icon' => 'optional',
'href' => 'url',
+ 'type' => 'settings',
],
[
'id' => 'entry id',
@@ -49,6 +78,7 @@ class NavigationManagerTest extends TestCase {
'icon' => 'optional',
'href' => 'url',
'active' => false,
+ 'type' => 'settings',
],
],
[
@@ -67,6 +97,7 @@ class NavigationManagerTest extends TestCase {
'icon' => '',
'href' => 'url',
'active' => false,
+ 'type' => 'link',
],
],
];
@@ -79,15 +110,15 @@ class NavigationManagerTest extends TestCase {
* @param array $expectedEntry
*/
public function testAddArray(array $entry, array $expectedEntry) {
- $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists');
+ $this->assertEmpty($this->navigationManager->getAll('all'), 'Expected no navigation entry exists');
$this->navigationManager->add($entry);
- $navigationEntries = $this->navigationManager->getAll();
- $this->assertEquals(1, sizeof($navigationEntries), 'Expected that 1 navigation entry exists');
+ $navigationEntries = $this->navigationManager->getAll('all');
+ $this->assertCount(1, $navigationEntries, 'Expected that 1 navigation entry exists');
$this->assertEquals($expectedEntry, $navigationEntries[0]);
- $this->navigationManager->clear();
- $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
+ $this->navigationManager->clear(false);
+ $this->assertEmpty($this->navigationManager->getAll('all'), 'Expected no navigation entry exists after clear()');
}
/**
@@ -109,18 +140,18 @@ class NavigationManagerTest extends TestCase {
$this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by add()');
- $navigationEntries = $this->navigationManager->getAll();
+ $navigationEntries = $this->navigationManager->getAll('all');
$this->assertEquals(1, $testAddClosureNumberOfCalls, 'Expected that the closure is called by getAll()');
- $this->assertEquals(1, sizeof($navigationEntries), 'Expected that 1 navigation entry exists');
+ $this->assertCount(1, $navigationEntries, 'Expected that 1 navigation entry exists');
$this->assertEquals($expectedEntry, $navigationEntries[0]);
- $navigationEntries = $this->navigationManager->getAll();
+ $navigationEntries = $this->navigationManager->getAll('all');
$this->assertEquals(1, $testAddClosureNumberOfCalls, 'Expected that the closure is only called once for getAll()');
- $this->assertEquals(1, sizeof($navigationEntries), 'Expected that 1 navigation entry exists');
+ $this->assertCount(1, $navigationEntries, 'Expected that 1 navigation entry exists');
$this->assertEquals($expectedEntry, $navigationEntries[0]);
- $this->navigationManager->clear();
- $this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
+ $this->navigationManager->clear(false);
+ $this->assertEmpty($this->navigationManager->getAll('all'), 'Expected no navigation entry exists after clear()');
}
public function testAddArrayClearGetAll() {
@@ -134,7 +165,7 @@ class NavigationManagerTest extends TestCase {
$this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists');
$this->navigationManager->add($entry);
- $this->navigationManager->clear();
+ $this->navigationManager->clear(false);
$this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
}
@@ -160,7 +191,7 @@ class NavigationManagerTest extends TestCase {
});
$this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by add()');
- $this->navigationManager->clear();
+ $this->navigationManager->clear(false);
$this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by clear()');
$this->assertEmpty($this->navigationManager->getAll(), 'Expected no navigation entry exists after clear()');
$this->assertEquals(0, $testAddClosureNumberOfCalls, 'Expected that the closure is not called by getAll()');
@@ -169,35 +200,29 @@ class NavigationManagerTest extends TestCase {
/**
* @dataProvider providesNavigationConfig
*/
- public function testWithAppManager($expected, $config, $isAdmin = false) {
+ public function testWithAppManager($expected, $navigation, $isAdmin = false) {
- $appManager = $this->createMock(AppManager::class);
- $urlGenerator = $this->createMock(IURLGenerator::class);
- $l10nFac = $this->createMock(IFactory::class);
- $userSession = $this->createMock(IUserSession::class);
- $groupManager = $this->createMock(IGroupManager::class);
$l = $this->createMock(IL10N::class);
$l->expects($this->any())->method('t')->willReturnCallback(function($text, $parameters = []) {
return vsprintf($text, $parameters);
});
- $appManager->expects($this->once())->method('getInstalledApps')->willReturn(['test']);
- $appManager->expects($this->once())->method('getAppInfo')->with('test')->willReturn($config);
- $l10nFac->expects($this->exactly(count($expected)))->method('get')->with('test')->willReturn($l);
- $urlGenerator->expects($this->any())->method('imagePath')->willReturnCallback(function($appName, $file) {
+ $this->appManager->expects($this->once())->method('getInstalledApps')->willReturn(['test']);
+ $this->appManager->expects($this->once())->method('getAppInfo')->with('test')->willReturn($navigation);
+ $this->l10nFac->expects($this->exactly(count($expected) + 1))->method('get')->willReturn($l);
+ $this->urlGenerator->expects($this->any())->method('imagePath')->willReturnCallback(function($appName, $file) {
return "/apps/$appName/img/$file";
});
- $urlGenerator->expects($this->exactly(count($expected)))->method('linkToRoute')->willReturnCallback(function($route) {
+ $this->urlGenerator->expects($this->exactly(count($expected)))->method('linkToRoute')->willReturnCallback(function() {
return "/apps/test/";
});
$user = $this->createMock(IUser::class);
$user->expects($this->any())->method('getUID')->willReturn('user001');
- $userSession->expects($this->any())->method('getUser')->willReturn($user);
- $groupManager->expects($this->any())->method('isAdmin')->willReturn($isAdmin);
-
- $navigationManager = new NavigationManager($appManager, $urlGenerator, $l10nFac, $userSession, $groupManager);
+ $this->userSession->expects($this->any())->method('getUser')->willReturn($user);
+ $this->groupManager->expects($this->any())->method('isAdmin')->willReturn($isAdmin);
- $entries = $navigationManager->getAll();
+ $this->navigationManager->clear();
+ $entries = $this->navigationManager->getAll('all');
$this->assertEquals($expected, $entries);
}
@@ -209,18 +234,29 @@ class NavigationManagerTest extends TestCase {
'href' => '/apps/test/',
'icon' => '/apps/test/img/app.svg',
'name' => 'Test',
- 'active' => false
- ]], ['navigation' => ['route' => 'test.page.index', 'name' => 'Test']]],
+ 'active' => false,
+ 'type' => 'link',
+ ]], ['navigations' => [['route' => 'test.page.index', 'name' => 'Test']]]],
+ 'minimalistic-settings' => [[[
+ 'id' => 'test',
+ 'order' => 100,
+ 'href' => '/apps/test/',
+ 'icon' => '/apps/test/img/app.svg',
+ 'name' => 'Test',
+ 'active' => false,
+ 'type' => 'settings',
+ ]], ['navigations' => [['route' => 'test.page.index', 'name' => 'Test', 'type' => 'settings']]]],
'no admin' => [[[
'id' => 'test',
'order' => 100,
'href' => '/apps/test/',
'icon' => '/apps/test/img/app.svg',
'name' => 'Test',
- 'active' => false
- ]], ['navigation' => ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']], true],
- 'no name' => [[], ['navigation' => ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index']], true],
- 'admin' => [[], ['navigation' => ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']]]
+ 'active' => false,
+ 'type' => 'link',
+ ]], ['navigations' => [['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']]], true],
+ 'no name' => [[], ['navigations' => [['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index']]], true],
+ 'admin' => [[], ['navigations' => [['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']]]]
];
}
}