Parse multiple navigation items
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
This commit is contained in:
parent
2083103d0b
commit
36c51bc4f1
8 changed files with 369 additions and 17 deletions
|
@ -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,12 +205,24 @@ 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
|
||||
|
|
|
@ -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 $nav) {
|
||||
if (!isset($nav['name'])) {
|
||||
continue;
|
||||
}
|
||||
|
|
85
tests/data/app/navigation-one-item.json
Normal file
85
tests/data/app/navigation-one-item.json
Normal file
|
@ -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": []
|
||||
}
|
74
tests/data/app/navigation-one-item.xml
Normal file
74
tests/data/app/navigation-one-item.xml
Normal file
|
@ -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>
|
91
tests/data/app/navigation-two-item.json
Normal file
91
tests/data/app/navigation-two-item.json
Normal file
|
@ -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": []
|
||||
}
|
80
tests/data/app/navigation-two-item.xml
Normal file
80
tests/data/app/navigation-two-item.xml
Normal file
|
@ -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>
|
|
@ -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-item.json', 'navigation-two-item.xml'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -296,7 +296,9 @@ class NavigationManagerTest extends TestCase {
|
|||
['logout' => $defaults['logout']]
|
||||
),
|
||||
['navigations' => [
|
||||
['route' => 'test.page.index', 'name' => 'Test']
|
||||
'navigation' => [
|
||||
['route' => 'test.page.index', 'name' => 'Test']
|
||||
]
|
||||
]]
|
||||
],
|
||||
'minimalistic-settings' => [
|
||||
|
@ -315,9 +317,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']],
|
||||
|
@ -335,7 +339,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
|
||||
],
|
||||
|
@ -346,7 +352,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
|
||||
],
|
||||
|
|
Loading…
Reference in a new issue