diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-10-23 12:55:28 +0200 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-11-18 14:09:54 +0100 |
commit | 9e327a5890735d2a4dc3b7f88ab5fd571119c21d (patch) | |
tree | cb8118d9115acf0051af5411bb77a653cdedb88e /lib | |
parent | 4d138a11f97becf8555705bd3d77b1a68b649997 (diff) | |
download | nextcloud-server-9e327a5890735d2a4dc3b7f88ab5fd571119c21d.tar.gz nextcloud-server-9e327a5890735d2a4dc3b7f88ab5fd571119c21d.zip |
fix(apps-store): Remove apps from force-enabled state when uninstalledfix/app-store-remove-force-enable
If an app is force-enabled and then uninstalled the force-enabled state was kept.
This is now removed, so when the app should be re-installed the compatibility should be reevaluated.
Co-authored-by: Ferdinand Thiessen <opensource@fthiessen.de>
Co-authored-by: Côme Chilliet <91878298+come-nc@users.noreply.github.com>
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/App/AppManager.php | 34 | ||||
-rw-r--r-- | lib/public/App/IAppManager.php | 8 |
2 files changed, 23 insertions, 19 deletions
diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php index 2b6d2a2700b..fe5d3e2faeb 100644 --- a/lib/private/App/AppManager.php +++ b/lib/private/App/AppManager.php @@ -200,10 +200,6 @@ class AppManager implements IAppManager { return array_keys($appsForUser); } - /** - * @param IGroup $group - * @return array - */ public function getEnabledAppsForGroup(IGroup $group): array { $apps = $this->getInstalledAppsValues(); $appsForGroups = array_filter($apps, function ($enabled) use ($group) { @@ -304,10 +300,6 @@ class AppManager implements IAppManager { return $this->autoDisabledApps; } - /** - * @param string $appId - * @return array - */ public function getAppRestriction(string $appId): array { $values = $this->getInstalledAppsValues(); @@ -321,7 +313,6 @@ class AppManager implements IAppManager { return json_decode($values[$appId], true); } - /** * Check if an app is enabled for user * @@ -410,12 +401,25 @@ class AppManager implements IAppManager { return isset($installedApps[$appId]); } - public function ignoreNextcloudRequirementForApp(string $appId): void { + /** + * Overwrite the `max-version` requirement for this app. + */ + public function overwriteNextcloudRequirement(string $appId): void { $ignoreMaxApps = $this->config->getSystemValue('app_install_overwrite', []); if (!in_array($appId, $ignoreMaxApps, true)) { $ignoreMaxApps[] = $appId; - $this->config->setSystemValue('app_install_overwrite', $ignoreMaxApps); } + $this->config->setSystemValue('app_install_overwrite', $ignoreMaxApps); + } + + /** + * Remove the `max-version` overwrite for this app. + * This means this app now again can not be enabled if the `max-version` is smaller than the current Nextcloud version. + */ + public function removeOverwriteNextcloudRequirement(string $appId): void { + $ignoreMaxApps = $this->config->getSystemValue('app_install_overwrite', []); + $ignoreMaxApps = array_filter($ignoreMaxApps, fn (string $id) => $id !== $appId); + $this->config->setSystemValue('app_install_overwrite', $ignoreMaxApps); } public function loadApp(string $app): void { @@ -573,7 +577,7 @@ class AppManager implements IAppManager { $this->getAppPath($appId); if ($forceEnable) { - $this->ignoreNextcloudRequirementForApp($appId); + $this->overwriteNextcloudRequirement($appId); } $this->installedAppsCache[$appId] = 'yes'; @@ -619,7 +623,7 @@ class AppManager implements IAppManager { } if ($forceEnable) { - $this->ignoreNextcloudRequirementForApp($appId); + $this->overwriteNextcloudRequirement($appId); } /** @var string[] $groupIds */ @@ -646,7 +650,7 @@ class AppManager implements IAppManager { * @param bool $automaticDisabled * @throws \Exception if app can't be disabled */ - public function disableApp($appId, $automaticDisabled = false) { + public function disableApp($appId, $automaticDisabled = false): void { if ($this->isAlwaysEnabled($appId)) { throw new \Exception("$appId can't be disabled."); } @@ -706,7 +710,7 @@ class AppManager implements IAppManager { /** * Clear the cached list of apps when enabling/disabling an app */ - public function clearAppsCache() { + public function clearAppsCache(): void { $this->appInfos = []; } diff --git a/lib/public/App/IAppManager.php b/lib/public/App/IAppManager.php index 0af7cdfc495..110bcacf396 100644 --- a/lib/public/App/IAppManager.php +++ b/lib/public/App/IAppManager.php @@ -144,7 +144,7 @@ interface IAppManager { * @param bool $automaticDisabled * @since 8.0.0 */ - public function disableApp($appId, $automaticDisabled = false); + public function disableApp($appId, $automaticDisabled = false): void; /** * Get the directory for the given app. @@ -185,7 +185,7 @@ interface IAppManager { * Clear the cached list of apps when enabling/disabling an app * @since 8.1.0 */ - public function clearAppsCache(); + public function clearAppsCache(): void; /** * @param string $appId @@ -201,7 +201,7 @@ interface IAppManager { * @return bool * * This function walks through the Nextcloud directory and loads all apps - * it can find. A directory contains an app if the file /appinfo/info.xml + * it can find. A directory contains an app if the file `/appinfo/info.xml` * exists. * * if $types is set to non-empty array, only apps of those types will be loaded @@ -271,7 +271,7 @@ interface IAppManager { /** * Set the global default apps with fallbacks * - * @param string[] $appId + * @param string[] $defaultApps * @throws \InvalidArgumentException If any of the apps is not installed * @since 28.0.0 * @deprecated 31.0.0 |