diff options
Diffstat (limited to 'lib/public/App')
-rw-r--r-- | lib/public/App/AppPathNotFoundException.php | 23 | ||||
-rw-r--r-- | lib/public/App/Events/AppDisableEvent.php | 36 | ||||
-rw-r--r-- | lib/public/App/Events/AppEnableEvent.php | 47 | ||||
-rw-r--r-- | lib/public/App/Events/AppUpdateEvent.php | 34 | ||||
-rw-r--r-- | lib/public/App/IAppManager.php | 207 | ||||
-rw-r--r-- | lib/public/App/ManagerEvent.php | 29 |
6 files changed, 298 insertions, 78 deletions
diff --git a/lib/public/App/AppPathNotFoundException.php b/lib/public/App/AppPathNotFoundException.php index 29475fce216..56d6571ea68 100644 --- a/lib/public/App/AppPathNotFoundException.php +++ b/lib/public/App/AppPathNotFoundException.php @@ -1,25 +1,8 @@ <?php + /** - * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net> - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Julius Haertl <jus@bitgrid.net> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * 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 - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace OCP\App; diff --git a/lib/public/App/Events/AppDisableEvent.php b/lib/public/App/Events/AppDisableEvent.php new file mode 100644 index 00000000000..5d16d42785e --- /dev/null +++ b/lib/public/App/Events/AppDisableEvent.php @@ -0,0 +1,36 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCP\App\Events; + +use OCP\EventDispatcher\Event; + +/** + * This event is triggered when an app is disabled. + * + * @since 27.0.0 + */ +class AppDisableEvent extends Event { + private string $appId; + + /** + * @since 27.0.0 + */ + public function __construct(string $appId) { + parent::__construct(); + + $this->appId = $appId; + } + + /** + * @since 27.0.0 + */ + public function getAppId(): string { + return $this->appId; + } +} diff --git a/lib/public/App/Events/AppEnableEvent.php b/lib/public/App/Events/AppEnableEvent.php new file mode 100644 index 00000000000..fe1523d6a83 --- /dev/null +++ b/lib/public/App/Events/AppEnableEvent.php @@ -0,0 +1,47 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCP\App\Events; + +use OCP\EventDispatcher\Event; + +/** + * This event is triggered when an app is enabled. + * + * @since 27.0.0 + */ +class AppEnableEvent extends Event { + private string $appId; + /** @var string[] */ + private array $groupIds; + + /** + * @param string[] $groupIds + * @since 27.0.0 + */ + public function __construct(string $appId, array $groupIds = []) { + parent::__construct(); + + $this->appId = $appId; + $this->groupIds = $groupIds; + } + + /** + * @since 27.0.0 + */ + public function getAppId(): string { + return $this->appId; + } + + /** + * @since 27.0.0 + */ + public function getGroupIds(): array { + return $this->groupIds; + } +} diff --git a/lib/public/App/Events/AppUpdateEvent.php b/lib/public/App/Events/AppUpdateEvent.php new file mode 100644 index 00000000000..2cf59ff7949 --- /dev/null +++ b/lib/public/App/Events/AppUpdateEvent.php @@ -0,0 +1,34 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCP\App\Events; + +use OCP\EventDispatcher\Event; + +/** + * This event is triggered when an app is updated. + * + * @since 27.0.0 + */ +class AppUpdateEvent extends Event { + /** + * @since 27.0.0 + */ + public function __construct( + private readonly string $appId, + ) { + parent::__construct(); + } + + /** + * @since 27.0.0 + */ + public function getAppId(): string { + return $this->appId; + } +} diff --git a/lib/public/App/IAppManager.php b/lib/public/App/IAppManager.php index de36fafcdfe..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 $appId - * @return mixed + * @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,10 +52,28 @@ 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 + * @param bool $dark Enable to request a dark icon variant, default is a white icon + * @return string|null + * @since 29.0.0 + */ + public function getAppIcon(string $appId, bool $dark = false): ?string; + + /** * Check if an app is enabled for user * * @param string $appId - * @param \OCP\IUser $user (optional) if not defined, the currently loggedin user will be used + * @param \OCP\IUser|null $user (optional) if not defined, the currently loggedin user will be used * @return bool * @since 8.0.0 */ @@ -79,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 @@ -94,6 +110,20 @@ interface IAppManager { public function isDefaultEnabled(string $appId):bool; /** + * Load an app, if not already loaded + * @param string $app app id + * @since 27.0.0 + */ + public function loadApp(string $app): void; + + /** + * Check if an app is loaded + * @param string $app app id + * @since 27.0.0 + */ + public function isAppLoaded(string $app): bool; + + /** * Enable an app for every user * * @param string $appId @@ -130,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. @@ -156,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); @@ -166,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 @@ -183,6 +220,27 @@ interface IAppManager { public function isShipped($appId); /** + * Loads all apps + * + * @param string[] $types + * @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` + * exists. + * + * if $types is set to non-empty array, only apps of those types will be loaded + * @since 27.0.0 + */ + public function loadApps(array $types = []): bool; + + /** + * Check if an app is of a specific type + * @since 27.0.0 + */ + public function isType(string $app, array $types): bool; + + /** * @return string[] * @since 9.0.0 */ @@ -207,4 +265,79 @@ interface IAppManager { * @since 17.0.0 */ public function getAppRestriction(string $appId): array; + + /** + * Returns the id of the user's default app + * + * If `user` is not passed, the currently logged in user will be used + * + * @param ?IUser $user User to query default app for + * @param bool $withFallbacks Include fallback values if no default app was configured manually + * Before falling back to predefined default apps, + * the user defined app order is considered and the first app would be used as the fallback. + * + * @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; + + /** + * Get the global default apps with fallbacks + * + * @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[] $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; } diff --git a/lib/public/App/ManagerEvent.php b/lib/public/App/ManagerEvent.php index 0069e57db42..e02a82195e2 100644 --- a/lib/public/App/ManagerEvent.php +++ b/lib/public/App/ManagerEvent.php @@ -1,25 +1,9 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Lukas Reschke <lukas@statuscode.ch> - * - * @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; @@ -32,16 +16,19 @@ use OCP\EventDispatcher\Event; */ class ManagerEvent extends Event { /** + * @since 9.0.0 * @deprecated 22.0.0 */ public const EVENT_APP_ENABLE = 'OCP\App\IAppManager::enableApp'; /** + * @since 9.0.0 * @deprecated 22.0.0 */ public const EVENT_APP_ENABLE_FOR_GROUPS = 'OCP\App\IAppManager::enableAppForGroups'; /** + * @since 9.0.0 * @deprecated 22.0.0 */ public const EVENT_APP_DISABLE = 'OCP\App\IAppManager::disableApp'; @@ -67,7 +54,7 @@ class ManagerEvent extends Event { * @param \OCP\IGroup[]|null $groups * @since 9.0.0 */ - public function __construct($event, $appID, array $groups = null) { + public function __construct($event, $appID, ?array $groups = null) { $this->event = $event; $this->appID = $appID; $this->groups = $groups; |