aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2024-10-23 12:55:28 +0200
committerFerdinand Thiessen <opensource@fthiessen.de>2024-11-18 14:09:54 +0100
commit9e327a5890735d2a4dc3b7f88ab5fd571119c21d (patch)
treecb8118d9115acf0051af5411bb77a653cdedb88e /lib
parent4d138a11f97becf8555705bd3d77b1a68b649997 (diff)
downloadnextcloud-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.php34
-rw-r--r--lib/public/App/IAppManager.php8
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