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'])) {
$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 (is_array($array['types'])) {
@ -171,6 +186,18 @@ class InfoParser {
) {
$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)) {
$this->cache->set($fileCacheKey, json_encode($array));

View File

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

View File

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