aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public/App/IAppManager.php
blob: 110bcacf396be7e3ebdd9daeda972269d3d8054d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
<?php

/**
 * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
 * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
 * SPDX-License-Identifier: AGPL-3.0-only
 */
namespace OCP\App;

use OCP\IGroup;
use OCP\IUser;

/**
 * Interface IAppManager
 *
 * @warning This interface shouldn't be included with dependency injection in
 *          classes used for installing Nextcloud.
 *
 * @since 8.0.0
 */
interface IAppManager {
	/**
	 * @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
	 * @param bool $useCache
	 * @return string
	 * @since 14.0.0
	 */
	public function getAppVersion(string $appId, bool $useCache = true): string;

	/**
	 * 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|null $user (optional) if not defined, the currently loggedin user will be used
	 * @return bool
	 * @since 8.0.0
	 */
	public function isEnabledForUser($appId, $user = null);

	/**
	 * Check if an app is enabled in the instance
	 *
	 * Notice: This actually checks if the app is enabled and not only if it is installed.
	 *
	 * @param string $appId
	 * @return bool
	 * @since 8.0.0
	 */
	public function isInstalled($appId);

	/**
	 * Check if an app should be enabled by default
	 *
	 * Notice: This actually checks if the app should be enabled by default
	 * and not if currently installed/enabled
	 *
	 * @param string $appId ID of the app
	 * @since 25.0.0
	 */
	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
	 * @param bool $forceEnable
	 * @throws AppPathNotFoundException
	 * @since 8.0.0
	 */
	public function enableApp(string $appId, bool $forceEnable = false): void;

	/**
	 * Whether a list of types contains a protected app type
	 *
	 * @param string[] $types
	 * @return bool
	 * @since 12.0.0
	 */
	public function hasProtectedAppType($types);

	/**
	 * Enable an app only for specific groups
	 *
	 * @param string $appId
	 * @param \OCP\IGroup[] $groups
	 * @param bool $forceEnable
	 * @throws \Exception
	 * @since 8.0.0
	 */
	public function enableAppForGroups(string $appId, array $groups, bool $forceEnable = false): void;

	/**
	 * Disable an app for every user
	 *
	 * @param string $appId
	 * @param bool $automaticDisabled
	 * @since 8.0.0
	 */
	public function disableApp($appId, $automaticDisabled = false): void;

	/**
	 * Get the directory for the given app.
	 *
	 * @since 11.0.0
	 * @throws AppPathNotFoundException
	 */
	public function getAppPath(string $appId): string;

	/**
	 * Get the web path for the given app.
	 *
	 * @param string $appId
	 * @return string
	 * @since 18.0.0
	 * @throws AppPathNotFoundException
	 */
	public function getAppWebPath(string $appId): string;

	/**
	 * List all apps enabled for a user
	 *
	 * @param \OCP\IUser $user
	 * @return string[]
	 * @since 8.1.0
	 */
	public function getEnabledAppsForUser(IUser $user);

	/**
	 * List all installed apps
	 *
	 * @return string[]
	 * @since 8.1.0
	 */
	public function getInstalledApps();

	/**
	 * Clear the cached list of apps when enabling/disabling an app
	 * @since 8.1.0
	 */
	public function clearAppsCache(): void;

	/**
	 * @param string $appId
	 * @return boolean
	 * @since 9.0.0
	 */
	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
	 */
	public function getAlwaysEnabledApps();

	/**
	 * @return string[] app IDs
	 * @since 25.0.0
	 */
	public function getDefaultEnabledApps(): array;

	/**
	 * @param \OCP\IGroup $group
	 * @return String[]
	 * @since 17.0.0
	 */
	public function getEnabledAppsForGroup(IGroup $group): array;

	/**
	 * @param String $appId
	 * @return string[]
	 * @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 file
	 * @psalm-taint-escape include
	 * @psalm-taint-escape html
	 * @psalm-taint-escape has_quotes
	 *
	 * @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;
}