From 9edca39b49f6b7fcfc4e43b61b88204222ad5e91 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Mon, 15 Aug 2016 20:03:19 +0200 Subject: attempt to remove section and settings entries when an app got disabled --- lib/private/Settings/Manager.php | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'lib/private/Settings') diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 1304a60949e..8fdc7fefbb3 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -93,6 +93,25 @@ class Manager implements IManager { } } + /** + * attempts to remove an apps section and/or settings entry. A listener is + * added centrally making sure that this method is called ones an app was + * disabled. + * + * @param string $appId + * @since 9.1.0 + */ + public function onAppDisabled($appId) { + $appInfo = \OC_App::getAppInfo($appId); // hello static legacy + + if(isset($appInfo['settings'][IManager::KEY_ADMIN_SECTION])) { + $this->remove(self::TABLE_ADMIN_SECTIONS, $appInfo['settings'][IManager::KEY_ADMIN_SECTION]); + } + if(isset($settings['settings'][IManager::KEY_ADMIN_SETTINGS])) { + $this->remove(self::TABLE_ADMIN_SETTINGS, $appInfo['settings'][IManager::KEY_ADMIN_SETTINGS]); + } + } + /** * @param string $sectionClassName */ @@ -222,6 +241,20 @@ class Manager implements IManager { return (bool) $row; } + /** + * deletes an settings or admin entry from the given table + * + * @param $table + * @param $className + */ + private function remove($table, $className) { + $query = $this->dbc->getQueryBuilder(); + $query->delete($table) + ->where($query->expr()->eq('class', $query->createNamedParameter($className))); + + $query->execute(); + } + private function setupAdminSettings($settingsClassName) { if(!class_exists($settingsClassName)) { $this->log->debug('Could not find admin section class ' . $settingsClassName); -- cgit v1.2.3