Allow multiple settings and sections per app

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2017-10-04 16:35:10 +02:00
parent 060eac40d8
commit 6292f665d7
No known key found for this signature in database
GPG Key ID: E166FD8976B3BAC8
4 changed files with 67 additions and 18 deletions

View File

@ -122,6 +122,21 @@ class InfoParser {
if (!array_key_exists('providers', $array['activity'])) { if (!array_key_exists('providers', $array['activity'])) {
$array['activity']['providers'] = []; $array['activity']['providers'] = [];
} }
if (!array_key_exists('settings', $array)) {
$array['settings'] = [];
}
if (!array_key_exists('admin', $array['settings'])) {
$array['settings']['admin'] = [];
}
if (!array_key_exists('admin-section', $array['settings'])) {
$array['settings']['admin-section'] = [];
}
if (!array_key_exists('personal', $array['settings'])) {
$array['settings']['personal'] = [];
}
if (!array_key_exists('personal-section', $array['settings'])) {
$array['settings']['personal-section'] = [];
}
if (array_key_exists('types', $array)) { if (array_key_exists('types', $array)) {
if (is_array($array['types'])) { if (is_array($array['types'])) {
@ -171,6 +186,18 @@ class InfoParser {
) { ) {
$array['collaboration']['collaborators']['searchPlugins'] = $array['collaboration']['collaborators']['searchPlugins']['searchPlugin']; $array['collaboration']['collaborators']['searchPlugins'] = $array['collaboration']['collaborators']['searchPlugins']['searchPlugin'];
} }
if (isset($array['settings']['admin']) && !is_array($array['settings']['admin'])) {
$array['settings']['admin'] = [$array['settings']['admin']];
}
if (isset($array['settings']['admin-section']) && !is_array($array['settings']['admin-section'])) {
$array['settings']['admin-section'] = [$array['settings']['admin-section']];
}
if (isset($array['settings']['personal']) && !is_array($array['settings']['personal'])) {
$array['settings']['personal'] = [$array['settings']['personal']];
}
if (isset($array['settings']['personal-section']) && !is_array($array['settings']['personal-section'])) {
$array['settings']['personal-section'] = [$array['settings']['personal-section']];
}
if(!is_null($this->cache)) { if(!is_null($this->cache)) {
$this->cache->set($fileCacheKey, json_encode($array)); $this->cache->set($fileCacheKey, json_encode($array));

View File

@ -127,18 +127,26 @@ class Manager implements IManager {
* @inheritdoc * @inheritdoc
*/ */
public function setupSettings(array $settings) { public function setupSettings(array $settings) {
if (isset($settings[IManager::KEY_ADMIN_SECTION])) { if (!empty($settings[IManager::KEY_ADMIN_SECTION])) {
$this->setupSectionEntry($settings[IManager::KEY_ADMIN_SECTION], 'admin'); foreach ($settings[IManager::KEY_ADMIN_SECTION] as $className) {
$this->setupSectionEntry($className, 'admin');
}
} }
if (isset($settings[IManager::KEY_ADMIN_SETTINGS])) { if (!empty($settings[IManager::KEY_ADMIN_SETTINGS])) {
$this->setupSettingsEntry($settings[IManager::KEY_ADMIN_SETTINGS], 'admin'); foreach ($settings[IManager::KEY_ADMIN_SETTINGS] as $className) {
$this->setupSettingsEntry($className, 'admin');
}
} }
if (isset($settings[IManager::KEY_PERSONAL_SECTION])) { if (!empty($settings[IManager::KEY_PERSONAL_SECTION])) {
$this->setupSectionEntry($settings[IManager::KEY_PERSONAL_SECTION], 'personal'); foreach ($settings[IManager::KEY_PERSONAL_SECTION] as $className) {
$this->setupSectionEntry($className, 'personal');
}
} }
if (isset($settings[IManager::KEY_PERSONAL_SETTINGS])) { if (!empty($settings[IManager::KEY_PERSONAL_SETTINGS])) {
$this->setupSettingsEntry($settings[IManager::KEY_PERSONAL_SETTINGS], 'personal'); foreach ($settings[IManager::KEY_PERSONAL_SETTINGS] as $className) {
$this->setupSettingsEntry($className, 'personal');
}
} }
} }
@ -153,18 +161,26 @@ class Manager implements IManager {
public function onAppDisabled($appId) { public function onAppDisabled($appId) {
$appInfo = \OC_App::getAppInfo($appId); // hello static legacy $appInfo = \OC_App::getAppInfo($appId); // hello static legacy
if (isset($appInfo['settings'][IManager::KEY_ADMIN_SECTION])) { if (!empty($appInfo['settings'][IManager::KEY_ADMIN_SECTION])) {
$this->mapper->remove(Mapper::TABLE_ADMIN_SECTIONS, trim($appInfo['settings'][IManager::KEY_ADMIN_SECTION], '\\')); foreach ($appInfo['settings'][IManager::KEY_ADMIN_SECTION] as $className) {
$this->mapper->remove(Mapper::TABLE_ADMIN_SECTIONS, trim($className, '\\'));
}
} }
if (isset($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS])) { if (!empty($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS])) {
$this->mapper->remove(Mapper::TABLE_ADMIN_SETTINGS, trim($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS], '\\')); foreach ($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS] as $className) {
$this->mapper->remove(Mapper::TABLE_ADMIN_SETTINGS, trim($className, '\\'));
}
} }
if (isset($appInfo['settings'][IManager::KEY_PERSONAL_SECTION])) { if (!empty($appInfo['settings'][IManager::KEY_PERSONAL_SECTION])) {
$this->mapper->remove(Mapper::TABLE_PERSONAL_SECTIONS, trim($appInfo['settings'][IManager::KEY_PERSONAL_SECTION], '\\')); foreach ($appInfo['settings'][IManager::KEY_PERSONAL_SECTION] as $className) {
$this->mapper->remove(Mapper::TABLE_PERSONAL_SECTIONS, trim($className, '\\'));
}
} }
if (isset($appInfo['settings'][IManager::KEY_PERSONAL_SETTINGS])) { if (!empty($appInfo['settings'][IManager::KEY_PERSONAL_SETTINGS])) {
$this->mapper->remove(Mapper::TABLE_PERSONAL_SETTINGS, trim($appInfo['settings'][IManager::KEY_PERSONAL_SETTINGS], '\\')); foreach ($appInfo['settings'][IManager::KEY_PERSONAL_SETTINGS] as $className) {
$this->mapper->remove(Mapper::TABLE_PERSONAL_SETTINGS, trim($className, '\\'));
}
} }
} }

View File

@ -81,5 +81,11 @@
"filters": [], "filters": [],
"settings": [], "settings": [],
"providers": [] "providers": []
},
"settings": {
"admin": [],
"admin-section": [],
"personal": [],
"personal-section": []
} }
} }

View File

@ -147,7 +147,7 @@ class ManagerTest extends TestCase {
->method('add'); ->method('add');
$this->manager->setupSettings([ $this->manager->setupSettings([
$type => $className, $type => [$className],
]); ]);
} }
@ -174,7 +174,7 @@ class ManagerTest extends TestCase {
->method('update'); ->method('update');
$this->manager->setupSettings([ $this->manager->setupSettings([
$type => 'OCA\Files\Settings\Admin', $type => ['OCA\Files\Settings\Admin'],
]); ]);
} }