aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public/App/IAppManager.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/public/App/IAppManager.php')
-rw-r--r--lib/public/App/IAppManager.php130
1 files changed, 93 insertions, 37 deletions
diff --git a/lib/public/App/IAppManager.php b/lib/public/App/IAppManager.php
index 142e8bb8515..20019ce1ffd 100644
--- a/lib/public/App/IAppManager.php
+++ b/lib/public/App/IAppManager.php
@@ -1,32 +1,9 @@
<?php
+
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Daniel Rudolf <github.com@daniel-rudolf.de>
- * @author Greta Doci <gretadoci@gmail.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Julius Haertl <jus@bitgrid.net>
- * @author Julius Härtl <jus@bitgrid.net>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <robin@icewind.nl>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCP\App;
@@ -43,15 +20,28 @@ use OCP\IUser;
*/
interface IAppManager {
/**
- * Returns the app information from "appinfo/info.xml".
+ * @since 30.0.0
+ */
+ public const BACKEND_CALDAV = 'caldav';
+
+ /**
+ * Returns the app information from "appinfo/info.xml" for an app
*
* @param string|null $lang
* @return array|null
* @since 14.0.0
+ * @since 31.0.0 Usage of $path is discontinued and throws an \InvalidArgumentException, use {@see self::getAppInfoByPath} instead.
*/
public function getAppInfo(string $appId, bool $path = false, $lang = null);
/**
+ * Returns the app information from a given path ending with "/appinfo/info.xml"
+ *
+ * @since 31.0.0
+ */
+ public function getAppInfoByPath(string $path, ?string $lang = null): ?array;
+
+ /**
* Returns the app information from "appinfo/info.xml".
*
* @param string $appId
@@ -62,6 +52,14 @@ interface IAppManager {
public function getAppVersion(string $appId, bool $useCache = true): string;
/**
+ * Returns the installed version of all apps
+ *
+ * @return array<string, string>
+ * @since 32.0.0
+ */
+ public function getAppInstalledVersions(bool $onlyEnabled = false): array;
+
+ /**
* Returns the app icon or null if none is found
*
* @param string $appId
@@ -69,7 +67,7 @@ interface IAppManager {
* @return string|null
* @since 29.0.0
*/
- public function getAppIcon(string $appId, bool $dark = false): string|null;
+ public function getAppIcon(string $appId, bool $dark = false): ?string;
/**
* Check if an app is enabled for user
@@ -89,10 +87,18 @@ interface IAppManager {
* @param string $appId
* @return bool
* @since 8.0.0
+ * @deprecated 32.0.0 Use either {@see self::isEnabledForUser} or {@see self::isEnabledForAnyone}
*/
public function isInstalled($appId);
/**
+ * Check if an app is enabled in the instance, either for everyone or for specific groups
+ *
+ * @since 32.0.0
+ */
+ public function isEnabledForAnyone(string $appId): bool;
+
+ /**
* Check if an app should be enabled by default
*
* Notice: This actually checks if the app should be enabled by default
@@ -154,17 +160,15 @@ 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.
*
- * @param string $appId
- * @return string
* @since 11.0.0
* @throws AppPathNotFoundException
*/
- public function getAppPath($appId);
+ public function getAppPath(string $appId): string;
/**
* Get the web path for the given app.
@@ -180,7 +184,7 @@ interface IAppManager {
* List all apps enabled for a user
*
* @param \OCP\IUser $user
- * @return string[]
+ * @return list<string>
* @since 8.1.0
*/
public function getEnabledAppsForUser(IUser $user);
@@ -190,14 +194,23 @@ interface IAppManager {
*
* @return string[]
* @since 8.1.0
+ * @deprecated 32.0.0 Use either {@see self::getEnabledApps} or {@see self::getEnabledAppsForUser}
*/
public function getInstalledApps();
/**
+ * List all apps enabled, either for everyone or for specific groups only
+ *
+ * @return list<string>
+ * @since 32.0.0
+ */
+ public function getEnabledApps(): array;
+
+ /**
* 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
@@ -213,7 +226,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
@@ -265,6 +278,8 @@ interface IAppManager {
*
* @since 25.0.6
* @since 28.0.0 Added optional $withFallbacks parameter
+ * @deprecated 31.0.0
+ * Use @see \OCP\INavigationManager::getDefaultEntryIdForUser() instead
*/
public function getDefaultAppForUser(?IUser $user = null, bool $withFallbacks = true): string;
@@ -273,15 +288,56 @@ interface IAppManager {
*
* @return string[] The default applications
* @since 28.0.0
+ * @deprecated 31.0.0
+ * Use @see \OCP\INavigationManager::getDefaultEntryIds() instead
*/
public function getDefaultApps(): array;
/**
* 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
+ * Use @see \OCP\INavigationManager::setDefaultEntryIds() instead
*/
public function setDefaultApps(array $defaultApps): void;
+
+ /**
+ * Check whether the given backend is required by at least one app.
+ *
+ * @param self::BACKEND_* $backend Name of the backend, one of `self::BACKEND_*`
+ * @return bool True if at least one app requires the backend
+ *
+ * @since 30.0.0
+ */
+ public function isBackendRequired(string $backend): bool;
+
+ /**
+ * Clean the appId from forbidden characters
+ *
+ * @psalm-taint-escape callable
+ * @psalm-taint-escape cookie
+ * @psalm-taint-escape file
+ * @psalm-taint-escape has_quotes
+ * @psalm-taint-escape header
+ * @psalm-taint-escape html
+ * @psalm-taint-escape include
+ * @psalm-taint-escape ldap
+ * @psalm-taint-escape shell
+ * @psalm-taint-escape sql
+ * @psalm-taint-escape unserialize
+ *
+ * @since 31.0.0
+ */
+ public function cleanAppId(string $app): string;
+
+ /**
+ * Get a list of all apps in the apps folder
+ *
+ * @return list<string> an array of app names (string IDs)
+ * @since 31.0.0
+ */
+ public function getAllAppsInAppsFolders(): array;
}