attempt to remove section and settings entries when an app got disabled
This commit is contained in:
parent
436e6c1078
commit
1e62bd3d92
|
@ -723,6 +723,7 @@ class OC {
|
||||||
self::registerLogRotate();
|
self::registerLogRotate();
|
||||||
self::registerEncryptionWrapper();
|
self::registerEncryptionWrapper();
|
||||||
self::registerEncryptionHooks();
|
self::registerEncryptionHooks();
|
||||||
|
self::registerSettingsHooks();
|
||||||
|
|
||||||
//make sure temporary files are cleaned up
|
//make sure temporary files are cleaned up
|
||||||
$tmpManager = \OC::$server->getTempManager();
|
$tmpManager = \OC::$server->getTempManager();
|
||||||
|
@ -801,6 +802,14 @@ class OC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function registerSettingsHooks() {
|
||||||
|
$dispatcher = \OC::$server->getEventDispatcher();
|
||||||
|
$dispatcher->addListener(OCP\App\ManagerEvent::EVENT_APP_DISABLE, function($event) {
|
||||||
|
/** @var \OCP\App\ManagerEvent $event */
|
||||||
|
\OC::$server->getSettingsManager()->onAppDisabled($event->getAppID());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private static function registerEncryptionWrapper() {
|
private static function registerEncryptionWrapper() {
|
||||||
$manager = self::$server->getEncryptionManager();
|
$manager = self::$server->getEncryptionManager();
|
||||||
\OCP\Util::connectHook('OC_Filesystem', 'preSetup', $manager, 'setupStorage');
|
\OCP\Util::connectHook('OC_Filesystem', 'preSetup', $manager, 'setupStorage');
|
||||||
|
|
|
@ -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
|
* @param string $sectionClassName
|
||||||
*/
|
*/
|
||||||
|
@ -222,6 +241,20 @@ class Manager implements IManager {
|
||||||
return (bool) $row;
|
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) {
|
private function setupAdminSettings($settingsClassName) {
|
||||||
if(!class_exists($settingsClassName)) {
|
if(!class_exists($settingsClassName)) {
|
||||||
$this->log->debug('Could not find admin section class ' . $settingsClassName);
|
$this->log->debug('Could not find admin section class ' . $settingsClassName);
|
||||||
|
|
|
@ -50,6 +50,20 @@ interface IManager {
|
||||||
*/
|
*/
|
||||||
public function setupSettings(array $settings);
|
public function setupSettings(array $settings);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* What this does not help with is when applications change their settings
|
||||||
|
* or section classes during their life time. New entries will be added,
|
||||||
|
* but inactive ones will still reside in the database.
|
||||||
|
*
|
||||||
|
* @param string $appId
|
||||||
|
* @since 9.1.0
|
||||||
|
*/
|
||||||
|
public function onAppDisabled($appId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a list of the admin sections
|
* returns a list of the admin sections
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue