Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2019-03-06 15:16:25 +0300
committerGitHub <noreply@github.com>2019-03-06 15:16:25 +0300
commit3acee4f1b4feed08fee973607a6eb49daecc48fb (patch)
tree688c8d6a6e8545298bf2e939f61982a9ce0c03f3
parent0da0ee1ce4e1e30f2ed7747ba5eca3e750d5abeb (diff)
parent8240309f0864e880a036b1f3afd1cda32b88b107 (diff)
Merge pull request #14416 from nextcloud/backport/14343/stable15
[stable15] Parse multiple navigation items
-rw-r--r--lib/private/App/InfoParser.php16
-rw-r--r--lib/private/NavigationManager.php6
-rw-r--r--tests/data/app/navigation-one-item.json85
-rw-r--r--tests/data/app/navigation-one-item.xml74
-rw-r--r--tests/data/app/navigation-two-items.json91
-rw-r--r--tests/data/app/navigation-two-items.xml80
-rw-r--r--tests/lib/App/InfoParserTest.php16
-rw-r--r--tests/lib/NavigationManagerTest.php20
8 files changed, 370 insertions, 18 deletions
diff --git a/lib/private/App/InfoParser.php b/lib/private/App/InfoParser.php
index e0ed63fc784..ef96156dfed 100644
--- a/lib/private/App/InfoParser.php
+++ b/lib/private/App/InfoParser.php
@@ -52,7 +52,7 @@ class InfoParser {
return null;
}
- if(!is_null($this->cache)) {
+ if ($this->cache !== null) {
$fileCacheKey = $file . filemtime($file);
if ($cachedValue = $this->cache->get($fileCacheKey)) {
return json_decode($cachedValue, true);
@@ -205,13 +205,25 @@ class InfoParser {
$array['settings']['personal-section'] = [$array['settings']['personal-section']];
}
- if(!is_null($this->cache)) {
+ if (isset($array['navigations']['navigation']) && $this->isNavigationItem($array['navigations']['navigation'])) {
+ $array['navigations']['navigation'] = [$array['navigations']['navigation']];
+ }
+
+ if ($this->cache !== null) {
$this->cache->set($fileCacheKey, json_encode($array));
}
return $array;
}
/**
+ * @param $data
+ * @return bool
+ */
+ private function isNavigationItem($data): bool {
+ return isset($data['name'], $data['route']);
+ }
+
+ /**
* @param \SimpleXMLElement $xml
* @return array
*/
diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php
index 1874cd0e4ff..2c41fbd88c2 100644
--- a/lib/private/NavigationManager.php
+++ b/lib/private/NavigationManager.php
@@ -271,10 +271,10 @@ class NavigationManager implements INavigationManager {
// load plugins and collections from info.xml
$info = $this->appManager->getAppInfo($app);
- if (empty($info['navigations'])) {
+ if (!isset($info['navigations']['navigation'])) {
continue;
}
- foreach ($info['navigations'] as $nav) {
+ foreach ($info['navigations']['navigation'] as $key => $nav) {
if (!isset($nav['name'])) {
continue;
}
@@ -286,7 +286,7 @@ class NavigationManager implements INavigationManager {
continue;
}
$l = $this->l10nFac->get($app);
- $id = isset($nav['id']) ? $nav['id'] : $app;
+ $id = $nav['id'] ?? $app . ($key === 0 ? '' : $key);
$order = isset($nav['order']) ? $nav['order'] : 100;
$type = isset($nav['type']) ? $nav['type'] : 'link';
$route = $nav['route'] !== '' ? $this->urlGenerator->linkToRoute($nav['route']) : '';
diff --git a/tests/data/app/navigation-one-item.json b/tests/data/app/navigation-one-item.json
new file mode 100644
index 00000000000..c9002da6b0d
--- /dev/null
+++ b/tests/data/app/navigation-one-item.json
@@ -0,0 +1,85 @@
+{
+ "id": "activity",
+ "name": "Activity",
+ "summary": "This application enables users to view actions related to their files in Nextcloud.",
+ "description": "\n\t\tThis application enables users to view actions related to their files in Nextcloud.\n\t\tOnce enabled, users will see a new icon \u201cActivity\u201d in their apps menu.\n\t\tWhen clicked, a new page appears for users to track the activity related to files \u2013 from new files, to deleted files, move, rename, updates and shared activity.\n\t\tThe user can configure their individual activity settings in their personal menu.\n\t\tThis sets the type of activity to record, as well as whether to the user sees their own activities,\n\t\twhether these are only available online, and whether they get an email digest on a regular basis.\n\t\tMore information is available in the Activity documentation.\n\t",
+ "version": "2.9.0",
+ "licence": "agpl",
+ "author": [
+ "Frank Karlitschek",
+ "Joas Schilling"
+ ],
+ "default_enable": "",
+ "types": [
+ "filesystem"
+ ],
+ "documentation": {
+ "admin": "https:\/\/docs.nextcloud.org\/server\/14\/admin_manual\/configuration_server\/activity_configuration.html"
+ },
+ "category": [
+ "monitoring",
+ "social"
+ ],
+ "website": "https:\/\/github.com\/nextcloud\/activity\/",
+ "bugs": "https:\/\/github.com\/nextcloud\/activity\/issues",
+ "repository": "https:\/\/github.com\/nextcloud\/activity.git",
+ "dependencies": {
+ "nextcloud": {
+ "@attributes": {
+ "min-version": "16",
+ "max-version": "16"
+ }
+ }
+ },
+ "background-jobs": [
+ "OCA\\Activity\\BackgroundJob\\EmailNotification",
+ "OCA\\Activity\\BackgroundJob\\ExpireActivities"
+ ],
+ "commands": {
+ "command": "OCA\\Activity\\Command\\SendEmails"
+ },
+ "settings": {
+ "admin": [
+ "OCA\\Activity\\Settings\\Admin"
+ ],
+ "admin-section": [
+ "OCA\\Activity\\Settings\\AdminSection"
+ ],
+ "personal": [
+ "OCA\\Activity\\Settings\\Personal"
+ ],
+ "personal-section": [
+ "OCA\\Activity\\Settings\\PersonalSection"
+ ]
+ },
+ "activity": {
+ "filters": [
+ "OCA\\Activity\\Filter\\AllFilter",
+ "OCA\\Activity\\Filter\\SelfFilter",
+ "OCA\\Activity\\Filter\\ByFilter"
+ ],
+ "settings": [],
+ "providers": []
+ },
+ "navigations": {
+ "navigation": [
+ {
+ "name": "Activity",
+ "route": "activity.Activities.showList",
+ "icon": "activity.svg",
+ "order": "1"
+ }
+ ]
+ },
+ "info": [],
+ "remote": [],
+ "public": [],
+ "repair-steps": {
+ "install": [],
+ "pre-migration": [],
+ "post-migration": [],
+ "live-migration": [],
+ "uninstall": []
+ },
+ "two-factor-providers": []
+} \ No newline at end of file
diff --git a/tests/data/app/navigation-one-item.xml b/tests/data/app/navigation-one-item.xml
new file mode 100644
index 00000000000..a03e5c8ffbf
--- /dev/null
+++ b/tests/data/app/navigation-one-item.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
+ <id>activity</id>
+ <name>Activity</name>
+ <summary>This application enables users to view actions related to their files in Nextcloud.</summary>
+ <description>
+ This application enables users to view actions related to their files in Nextcloud.
+ Once enabled, users will see a new icon “Activity” in their apps menu.
+ When clicked, a new page appears for users to track the activity related to files – from new files, to deleted files, move, rename, updates and shared activity.
+ The user can configure their individual activity settings in their personal menu.
+ This sets the type of activity to record, as well as whether to the user sees their own activities,
+ whether these are only available online, and whether they get an email digest on a regular basis.
+ More information is available in the Activity documentation.
+ </description>
+
+ <version>2.9.0</version>
+ <licence>agpl</licence>
+ <author>Frank Karlitschek</author>
+ <author>Joas Schilling</author>
+
+ <default_enable/>
+ <types>
+ <filesystem/>
+ </types>
+
+ <documentation>
+ <admin>https://docs.nextcloud.org/server/14/admin_manual/configuration_server/activity_configuration.html</admin>
+ </documentation>
+
+ <category>monitoring</category>
+ <category>social</category>
+
+ <website>https://github.com/nextcloud/activity/</website>
+ <bugs>https://github.com/nextcloud/activity/issues</bugs>
+ <repository>https://github.com/nextcloud/activity.git</repository>
+
+ <dependencies>
+ <nextcloud min-version="16" max-version="16"/>
+ </dependencies>
+
+ <background-jobs>
+ <job>OCA\Activity\BackgroundJob\EmailNotification</job>
+ <job>OCA\Activity\BackgroundJob\ExpireActivities</job>
+ </background-jobs>
+
+ <commands>
+ <command>OCA\Activity\Command\SendEmails</command>
+ </commands>
+
+ <settings>
+ <admin>OCA\Activity\Settings\Admin</admin>
+ <admin-section>OCA\Activity\Settings\AdminSection</admin-section>
+ <personal>OCA\Activity\Settings\Personal</personal>
+ <personal-section>OCA\Activity\Settings\PersonalSection</personal-section>
+ </settings>
+
+ <activity>
+ <filters>
+ <filter>OCA\Activity\Filter\AllFilter</filter>
+ <filter>OCA\Activity\Filter\SelfFilter</filter>
+ <filter>OCA\Activity\Filter\ByFilter</filter>
+ </filters>
+ </activity>
+
+ <navigations>
+ <navigation>
+ <name>Activity</name>
+ <route>activity.Activities.showList</route>
+ <icon>activity.svg</icon>
+ <order>1</order>
+ </navigation>
+ </navigations>
+</info>
diff --git a/tests/data/app/navigation-two-items.json b/tests/data/app/navigation-two-items.json
new file mode 100644
index 00000000000..a7579217238
--- /dev/null
+++ b/tests/data/app/navigation-two-items.json
@@ -0,0 +1,91 @@
+{
+ "id": "activity",
+ "name": "Activity",
+ "summary": "This application enables users to view actions related to their files in Nextcloud.",
+ "description": "\n\t\tThis application enables users to view actions related to their files in Nextcloud.\n\t\tOnce enabled, users will see a new icon \u201cActivity\u201d in their apps menu.\n\t\tWhen clicked, a new page appears for users to track the activity related to files \u2013 from new files, to deleted files, move, rename, updates and shared activity.\n\t\tThe user can configure their individual activity settings in their personal menu.\n\t\tThis sets the type of activity to record, as well as whether to the user sees their own activities,\n\t\twhether these are only available online, and whether they get an email digest on a regular basis.\n\t\tMore information is available in the Activity documentation.\n\t",
+ "version": "2.9.0",
+ "licence": "agpl",
+ "author": [
+ "Frank Karlitschek",
+ "Joas Schilling"
+ ],
+ "default_enable": "",
+ "types": [
+ "filesystem"
+ ],
+ "documentation": {
+ "admin": "https:\/\/docs.nextcloud.org\/server\/14\/admin_manual\/configuration_server\/activity_configuration.html"
+ },
+ "category": [
+ "monitoring",
+ "social"
+ ],
+ "website": "https:\/\/github.com\/nextcloud\/activity\/",
+ "bugs": "https:\/\/github.com\/nextcloud\/activity\/issues",
+ "repository": "https:\/\/github.com\/nextcloud\/activity.git",
+ "dependencies": {
+ "nextcloud": {
+ "@attributes": {
+ "min-version": "16",
+ "max-version": "16"
+ }
+ }
+ },
+ "background-jobs": [
+ "OCA\\Activity\\BackgroundJob\\EmailNotification",
+ "OCA\\Activity\\BackgroundJob\\ExpireActivities"
+ ],
+ "commands": {
+ "command": "OCA\\Activity\\Command\\SendEmails"
+ },
+ "settings": {
+ "admin": [
+ "OCA\\Activity\\Settings\\Admin"
+ ],
+ "admin-section": [
+ "OCA\\Activity\\Settings\\AdminSection"
+ ],
+ "personal": [
+ "OCA\\Activity\\Settings\\Personal"
+ ],
+ "personal-section": [
+ "OCA\\Activity\\Settings\\PersonalSection"
+ ]
+ },
+ "activity": {
+ "filters": [
+ "OCA\\Activity\\Filter\\AllFilter",
+ "OCA\\Activity\\Filter\\SelfFilter",
+ "OCA\\Activity\\Filter\\ByFilter"
+ ],
+ "settings": [],
+ "providers": []
+ },
+ "navigations": {
+ "navigation": [
+ {
+ "name": "Activity",
+ "route": "activity.Activities.showList",
+ "icon": "activity.svg",
+ "order": "1"
+ },
+ {
+ "name": "Activity-Test",
+ "route": "activity.Activities.showList",
+ "icon": "activity.svg",
+ "order": "2"
+ }
+ ]
+ },
+ "info": [],
+ "remote": [],
+ "public": [],
+ "repair-steps": {
+ "install": [],
+ "pre-migration": [],
+ "post-migration": [],
+ "live-migration": [],
+ "uninstall": []
+ },
+ "two-factor-providers": []
+} \ No newline at end of file
diff --git a/tests/data/app/navigation-two-items.xml b/tests/data/app/navigation-two-items.xml
new file mode 100644
index 00000000000..fba60a2871d
--- /dev/null
+++ b/tests/data/app/navigation-two-items.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0"?>
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
+ <id>activity</id>
+ <name>Activity</name>
+ <summary>This application enables users to view actions related to their files in Nextcloud.</summary>
+ <description>
+ This application enables users to view actions related to their files in Nextcloud.
+ Once enabled, users will see a new icon “Activity” in their apps menu.
+ When clicked, a new page appears for users to track the activity related to files – from new files, to deleted files, move, rename, updates and shared activity.
+ The user can configure their individual activity settings in their personal menu.
+ This sets the type of activity to record, as well as whether to the user sees their own activities,
+ whether these are only available online, and whether they get an email digest on a regular basis.
+ More information is available in the Activity documentation.
+ </description>
+
+ <version>2.9.0</version>
+ <licence>agpl</licence>
+ <author>Frank Karlitschek</author>
+ <author>Joas Schilling</author>
+
+ <default_enable/>
+ <types>
+ <filesystem/>
+ </types>
+
+ <documentation>
+ <admin>https://docs.nextcloud.org/server/14/admin_manual/configuration_server/activity_configuration.html</admin>
+ </documentation>
+
+ <category>monitoring</category>
+ <category>social</category>
+
+ <website>https://github.com/nextcloud/activity/</website>
+ <bugs>https://github.com/nextcloud/activity/issues</bugs>
+ <repository>https://github.com/nextcloud/activity.git</repository>
+
+ <dependencies>
+ <nextcloud min-version="16" max-version="16"/>
+ </dependencies>
+
+ <background-jobs>
+ <job>OCA\Activity\BackgroundJob\EmailNotification</job>
+ <job>OCA\Activity\BackgroundJob\ExpireActivities</job>
+ </background-jobs>
+
+ <commands>
+ <command>OCA\Activity\Command\SendEmails</command>
+ </commands>
+
+ <settings>
+ <admin>OCA\Activity\Settings\Admin</admin>
+ <admin-section>OCA\Activity\Settings\AdminSection</admin-section>
+ <personal>OCA\Activity\Settings\Personal</personal>
+ <personal-section>OCA\Activity\Settings\PersonalSection</personal-section>
+ </settings>
+
+ <activity>
+ <filters>
+ <filter>OCA\Activity\Filter\AllFilter</filter>
+ <filter>OCA\Activity\Filter\SelfFilter</filter>
+ <filter>OCA\Activity\Filter\ByFilter</filter>
+ </filters>
+ </activity>
+
+ <navigations>
+ <navigation>
+ <name>Activity</name>
+ <route>activity.Activities.showList</route>
+ <icon>activity.svg</icon>
+ <order>1</order>
+ </navigation>
+ <navigation>
+ <name>Activity-Test</name>
+ <route>activity.Activities.showList</route>
+ <icon>activity.svg</icon>
+ <order>2</order>
+ </navigation>
+ </navigations>
+</info>
diff --git a/tests/lib/App/InfoParserTest.php b/tests/lib/App/InfoParserTest.php
index 5a3847a71e8..b72a869e02c 100644
--- a/tests/lib/App/InfoParserTest.php
+++ b/tests/lib/App/InfoParserTest.php
@@ -47,12 +47,14 @@ class InfoParserTest extends TestCase {
$this->parserTest($expectedJson, $xmlFile, self::$cache);
}
- function providesInfoXml() {
- return array(
- array('expected-info.json', 'valid-info.xml'),
- array(null, 'invalid-info.xml'),
- array('expected-info.json', 'valid-info.xml'),
- array(null, 'invalid-info.xml'),
- );
+ public function providesInfoXml(): array {
+ return [
+ ['expected-info.json', 'valid-info.xml'],
+ [null, 'invalid-info.xml'],
+ ['expected-info.json', 'valid-info.xml'],
+ [null, 'invalid-info.xml'],
+ ['navigation-one-item.json', 'navigation-one-item.xml'],
+ ['navigation-two-items.json', 'navigation-two-items.xml'],
+ ];
}
}
diff --git a/tests/lib/NavigationManagerTest.php b/tests/lib/NavigationManagerTest.php
index 8bc1c372ac8..8c451109ef9 100644
--- a/tests/lib/NavigationManagerTest.php
+++ b/tests/lib/NavigationManagerTest.php
@@ -301,7 +301,9 @@ class NavigationManagerTest extends TestCase {
['logout' => $defaults['logout']]
),
['navigations' => [
- ['route' => 'test.page.index', 'name' => 'Test']
+ 'navigation' => [
+ ['route' => 'test.page.index', 'name' => 'Test']
+ ]
]]
],
'minimalistic-settings' => [
@@ -320,9 +322,11 @@ class NavigationManagerTest extends TestCase {
['logout' => $defaults['logout']]
),
['navigations' => [
- ['route' => 'test.page.index', 'name' => 'Test', 'type' => 'settings']
- ]
- ]],
+ 'navigation' => [
+ ['route' => 'test.page.index', 'name' => 'Test', 'type' => 'settings']
+ ],
+ ]]
+ ],
'admin' => [
array_merge(
['settings' => $defaults['settings']],
@@ -340,7 +344,9 @@ class NavigationManagerTest extends TestCase {
['logout' => $defaults['logout']]
),
['navigations' => [
- ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']
+ 'navigation' => [
+ ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index', 'name' => 'Test']
+ ],
]],
true
],
@@ -351,7 +357,9 @@ class NavigationManagerTest extends TestCase {
['logout' => $defaults['logout']]
),
['navigations' => [
- ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index']
+ 'navigation' => [
+ ['@attributes' => ['role' => 'admin'], 'route' => 'test.page.index']
+ ],
]],
true
],