diff options
Diffstat (limited to 'lib/public')
-rw-r--r-- | lib/public/Activity/IExtension.php | 127 | ||||
-rw-r--r-- | lib/public/Activity/IManager.php | 147 | ||||
-rw-r--r-- | lib/public/AppFramework/Http/StandaloneTemplateResponse.php | 37 | ||||
-rw-r--r-- | lib/public/AppFramework/Http/TemplateResponse.php | 3 | ||||
-rw-r--r-- | lib/public/Files/Cache/CacheInsertEvent.php | 72 | ||||
-rw-r--r-- | lib/public/Files/SimpleFS/InMemoryFile.php | 150 | ||||
-rw-r--r-- | lib/public/FullTextSearch/IFullTextSearchProvider.php | 22 | ||||
-rw-r--r-- | lib/public/Group/ISubAdmin.php | 99 | ||||
-rw-r--r-- | lib/public/IAvatarManager.php | 9 | ||||
-rw-r--r-- | lib/public/IInitialStateService.php | 60 |
10 files changed, 469 insertions, 257 deletions
diff --git a/lib/public/Activity/IExtension.php b/lib/public/Activity/IExtension.php index 321c2f03bc3..eaf425fb779 100644 --- a/lib/public/Activity/IExtension.php +++ b/lib/public/Activity/IExtension.php @@ -24,13 +24,6 @@ * */ -/** - * Public interface of ownCloud for apps to use. - * Activity/IExtension interface - */ - -// use OCP namespace for all classes that are considered public. -// This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Activity; /** @@ -48,124 +41,4 @@ interface IExtension { const PRIORITY_MEDIUM = 30; const PRIORITY_HIGH = 40; const PRIORITY_VERYHIGH = 50; - - /** - * The extension can return an array of additional notification types. - * If no additional types are to be added false is to be returned - * - * @param string $languageCode - * @return array|false Array "stringID of the type" => "translated string description for the setting" - * or Array "stringID of the type" => [ - * 'desc' => "translated string description for the setting" - * 'methods' => [self::METHOD_*], - * ] - * @since 8.0.0 - 8.2.0: Added support to allow limiting notifications to certain methods - */ - public function getNotificationTypes($languageCode); - - /** - * For a given method additional types to be displayed in the settings can be returned. - * In case no additional types are to be added false is to be returned. - * - * @param string $method - * @return array|false - * @since 8.0.0 - */ - public function getDefaultTypes($method); - - /** - * A string naming the css class for the icon to be used can be returned. - * If no icon is known for the given type false is to be returned. - * - * @param string $type - * @return string|false - * @since 8.0.0 - */ - public function getTypeIcon($type); - - /** - * The extension can translate a given message to the requested languages. - * If no translation is available false is to be returned. - * - * @param string $app - * @param string $text - * @param array $params - * @param boolean $stripPath - * @param boolean $highlightParams - * @param string $languageCode - * @return string|false - * @since 8.0.0 - */ - public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode); - - /** - * The extension can define the type of parameters for translation - * - * Currently known types are: - * * file => will strip away the path of the file and add a tooltip with it - * * username => will add the avatar of the user - * * email => will add a mailto link - * - * @param string $app - * @param string $text - * @return array|false - * @since 8.0.0 - */ - public function getSpecialParameterList($app, $text); - - /** - * The extension can define the parameter grouping by returning the index as integer. - * In case no grouping is required false is to be returned. - * - * @param array $activity - * @return integer|false - * @since 8.0.0 - */ - public function getGroupParameter($activity); - - /** - * The extension can define additional navigation entries. The array returned has to contain two keys 'top' - * and 'apps' which hold arrays with the relevant entries. - * If no further entries are to be added false is no be returned. - * - * @return array|false - * @since 8.0.0 - * @deprecated 11.0.0 - Register an IFilter instead - */ - public function getNavigation(); - - /** - * The extension can check if a customer filter (given by a query string like filter=abc) is valid or not. - * - * @param string $filterValue - * @return boolean - * @since 8.0.0 - * @deprecated 11.0.0 - Register an IFilter instead - */ - public function isFilterValid($filterValue); - - /** - * The extension can filter the types based on the filter if required. - * In case no filter is to be applied false is to be returned unchanged. - * - * @param array $types - * @param string $filter - * @return array|false - * @since 8.0.0 - * @deprecated 11.0.0 - Register an IFilter instead - */ - public function filterNotificationTypes($types, $filter); - - /** - * For a given filter the extension can specify the sql query conditions including parameters for that query. - * In case the extension does not know the filter false is to be returned. - * The query condition and the parameters are to be returned as array with two elements. - * E.g. return array('`app` = ? and `message` like ?', array('mail', 'ownCloud%')); - * - * @param string $filter - * @return array|false - * @since 8.0.0 - * @deprecated 11.0.0 - Register an IFilter instead - */ - public function getQueryForFilter($filter); } diff --git a/lib/public/Activity/IManager.php b/lib/public/Activity/IManager.php index 90959a57099..b00e64f33e7 100644 --- a/lib/public/Activity/IManager.php +++ b/lib/public/Activity/IManager.php @@ -1,4 +1,5 @@ <?php +declare(strict_types=1); /** * @copyright Copyright (c) 2016, ownCloud, Inc. * @@ -24,13 +25,6 @@ * */ -/** - * Public interface of ownCloud for apps to use. - * Activity/IManager interface - */ - -// use OCP namespace for all classes that are considered public. -// This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Activity; /** @@ -53,7 +47,7 @@ interface IManager { * @return IEvent * @since 8.2.0 */ - public function generateEvent(); + public function generateEvent(): IEvent; /** * Publish an event to the activity consumers @@ -68,7 +62,7 @@ interface IManager { * @throws \BadMethodCallException if required values have not been set * @since 8.2.0 */ - public function publish(IEvent $event); + public function publish(IEvent $event): void; /** * In order to improve lazy loading a closure can be registered which will be called in case @@ -77,35 +71,21 @@ interface IManager { * $callable has to return an instance of \OCP\Activity\IConsumer * * @param \Closure $callable - * @return void * @since 6.0.0 */ - public function registerConsumer(\Closure $callable); - - /** - * In order to improve lazy loading a closure can be registered which will be called in case - * activity consumers are actually requested - * - * $callable has to return an instance of \OCP\Activity\IExtension - * - * @param \Closure $callable - * @return void - * @since 8.0.0 - */ - public function registerExtension(\Closure $callable); + public function registerConsumer(\Closure $callable): void; /** * @param string $filter Class must implement OCA\Activity\IFilter - * @return void * @since 11.0.0 */ - public function registerFilter($filter); + public function registerFilter(string $filter): void; /** * @return IFilter[] * @since 11.0.0 */ - public function getFilters(); + public function getFilters(): array; /** * @param string $id @@ -113,33 +93,31 @@ interface IManager { * @throws \InvalidArgumentException when the filter was not found * @since 11.0.0 */ - public function getFilterById($id); + public function getFilterById(string $id): IFilter; /** * @param string $setting Class must implement OCA\Activity\ISetting - * @return void * @since 11.0.0 */ - public function registerSetting($setting); + public function registerSetting(string $setting): void; /** * @return ISetting[] * @since 11.0.0 */ - public function getSettings(); + public function getSettings(): array; /** * @param string $provider Class must implement OCA\Activity\IProvider - * @return void * @since 11.0.0 */ - public function registerProvider($provider); + public function registerProvider(string $provider): void; /** * @return IProvider[] * @since 11.0.0 */ - public function getProviders(); + public function getProviders(): array; /** * @param string $id @@ -147,89 +125,32 @@ interface IManager { * @throws \InvalidArgumentException when the setting was not found * @since 11.0.0 */ - public function getSettingById($id); - - /** - * Will return additional notification types as specified by other apps - * - * @param string $languageCode - * @return array Array "stringID of the type" => "translated string description for the setting" - * or Array "stringID of the type" => [ - * 'desc' => "translated string description for the setting" - * 'methods' => [\OCP\Activity\IExtension::METHOD_*], - * ] - * @since 8.0.0 - 8.2.0: Added support to allow limiting notifications to certain methods - * @deprecated 11.0.0 - Use getSettings() instead - */ - public function getNotificationTypes($languageCode); - - /** - * @param string $method - * @return array - * @since 8.0.0 - * @deprecated 11.0.0 - Use getSettings()->isDefaulEnabled<method>() instead - */ - public function getDefaultTypes($method); - - /** - * @param string $type - * @return string - * @since 8.0.0 - */ - public function getTypeIcon($type); + public function getSettingById(string $id): ISetting; /** * @param string $type * @param int $id * @since 8.2.0 */ - public function setFormattingObject($type, $id); + public function setFormattingObject(string $type, int $id): void; /** * @return bool * @since 8.2.0 */ - public function isFormattingFilteredObject(); + public function isFormattingFilteredObject(): bool; /** * @param bool $status Set to true, when parsing events should not use SVG icons * @since 12.0.1 */ - public function setRequirePNG($status); + public function setRequirePNG(bool $status): void; /** * @return bool * @since 12.0.1 */ - public function getRequirePNG(); - - /** - * @param string $app - * @param string $text - * @param array $params - * @param boolean $stripPath - * @param boolean $highlightParams - * @param string $languageCode - * @return string|false - * @since 8.0.0 - */ - public function translate($app, $text, $params, $stripPath, $highlightParams, $languageCode); - - /** - * @param string $app - * @param string $text - * @return array|false - * @since 8.0.0 - */ - public function getSpecialParameterList($app, $text); - - /** - * @param array $activity - * @return integer|false - * @since 8.0.0 - */ - public function getGroupParameter($activity); - + public function getRequirePNG(): bool; /** * Set the user we need to use @@ -238,7 +159,7 @@ interface IManager { * @throws \UnexpectedValueException If the user is invalid * @since 9.0.1 */ - public function setCurrentUserId($currentUserId); + public function setCurrentUserId(string $currentUserId = null): void; /** * Get the user we need to use @@ -249,37 +170,5 @@ interface IManager { * @throws \UnexpectedValueException If the token is invalid, does not exist or is not unique * @since 8.1.0 */ - public function getCurrentUserId(); - - /** - * @return array - * @since 8.0.0 - * @deprecated 11.0.0 - Use getFilters() instead - */ - public function getNavigation(); - - /** - * @param string $filterValue - * @return boolean - * @since 8.0.0 - * @deprecated 11.0.0 - Use getFilterById() instead - */ - public function isFilterValid($filterValue); - - /** - * @param array $types - * @param string $filter - * @return array - * @since 8.0.0 - * @deprecated 11.0.0 - Use getFilterById()->filterTypes() instead - */ - public function filterNotificationTypes($types, $filter); - - /** - * @param string $filter - * @return array - * @since 8.0.0 - * @deprecated 11.0.0 - Use getFilterById() instead - */ - public function getQueryForFilter($filter); + public function getCurrentUserId(): string; } diff --git a/lib/public/AppFramework/Http/StandaloneTemplateResponse.php b/lib/public/AppFramework/Http/StandaloneTemplateResponse.php new file mode 100644 index 00000000000..330b74d4b7d --- /dev/null +++ b/lib/public/AppFramework/Http/StandaloneTemplateResponse.php @@ -0,0 +1,37 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> + * + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @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/>. + * + */ + +namespace OCP\AppFramework\Http; + +/** + * A template response that does not emit the loadAdditionalScripts events. + * + * This is useful for pages that are authenticated but do not yet show the + * full nextcloud UI. Like the 2FA page, or the grant page in the login flow. + * + * @since 16.0.0 + */ +class StandaloneTemplateResponse extends TemplateResponse { + +} diff --git a/lib/public/AppFramework/Http/TemplateResponse.php b/lib/public/AppFramework/Http/TemplateResponse.php index 0e31f780d7a..f6436038cc3 100644 --- a/lib/public/AppFramework/Http/TemplateResponse.php +++ b/lib/public/AppFramework/Http/TemplateResponse.php @@ -37,6 +37,9 @@ namespace OCP\AppFramework\Http; */ class TemplateResponse extends Response { + const EVENT_LOAD_ADDITIONAL_SCRIPTS = self::class . '::loadAdditionalScripts'; + const EVENT_LOAD_ADDITIONAL_SCRIPTS_LOGGEDIN = self::class . '::loadAdditionalScriptsLoggedIn'; + /** * name of the template * @var string diff --git a/lib/public/Files/Cache/CacheInsertEvent.php b/lib/public/Files/Cache/CacheInsertEvent.php new file mode 100644 index 00000000000..071f039d45f --- /dev/null +++ b/lib/public/Files/Cache/CacheInsertEvent.php @@ -0,0 +1,72 @@ +<?php declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 Robin Appelman <robin@icewind.nl> + * + * @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/>. + * + */ + +namespace OCP\Files\Cache; + +use OCP\Files\Storage\IStorage; +use Symfony\Component\EventDispatcher\Event; + +/** + * @since 16.0.0 + */ +class CacheInsertEvent extends Event { + private $storage; + private $path; + private $fileId; + + /** + * CacheInsertEvent constructor. + * + * @param IStorage $storage + * @param string $path + * @param int $fileId + * @since 16.0.0 + */ + public function __construct(IStorage $storage, string $path, int $fileId) { + $this->storage = $storage; + $this->path = $path; + $this->fileId = $fileId; + } + + /** + * @return IStorage + * @since 16.0.0 + */ + public function getStorage(): IStorage { + return $this->storage; + } + + /** + * @return string + * @since 16.0.0 + */ + public function getPath(): string { + return $this->path; + } + + /** + * @return int + * @since 16.0.0 + */ + public function getFileId(): int { + return $this->fileId; + } +} diff --git a/lib/public/Files/SimpleFS/InMemoryFile.php b/lib/public/Files/SimpleFS/InMemoryFile.php new file mode 100644 index 00000000000..7976523f4e8 --- /dev/null +++ b/lib/public/Files/SimpleFS/InMemoryFile.php @@ -0,0 +1,150 @@ +<?php +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2018, Michael Weimann <mail@michael-weimann.eu> + * + * @author Michael Weimann <mail@michael-weimann.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/> + */ + +namespace OCP\Files\SimpleFS; + +use OCP\Files\NotPermittedException; + +/** + * This class represents a file that is only hold in memory. + * + * @package OC\Files\SimpleFS + * @since 16.0.0 + */ +class InMemoryFile implements ISimpleFile { + /** + * Holds the file name. + * + * @var string + */ + private $name; + + /** + * Holds the file contents. + * + * @var string + */ + private $contents; + + /** + * InMemoryFile constructor. + * + * @param string $name The file name + * @param string $contents The file contents + * @since 16.0.0 + */ + public function __construct(string $name, string $contents) { + $this->name = $name; + $this->contents = $contents; + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getName() { + return $this->name; + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getSize() { + return strlen($this->contents); + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getETag() { + return ''; + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getMTime() { + return time(); + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getContent() { + return $this->contents; + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function putContent($data) { + $this->contents = $data; + } + + /** + * In memory files can't be deleted. + * + * @since 16.0.0 + */ + public function delete() { + // unimplemented for in memory files + } + + /** + * @inheritdoc + * @since 16.0.0 + */ + public function getMimeType() { + $fileInfo = new \finfo(FILEINFO_MIME_TYPE); + return $fileInfo->buffer($this->contents); + } + + /** + * Stream reading is unsupported for in memory files. + * + * @throws NotPermittedException + * @since 16.0.0 + */ + public function read() { + throw new NotPermittedException( + 'Stream reading is unsupported for in memory files' + ); + } + + /** + * Stream writing isn't available for in memory files. + * + * @throws NotPermittedException + * @since 16.0.0 + */ + public function write() { + throw new NotPermittedException( + 'Stream writing is unsupported for in memory files' + ); + } +} diff --git a/lib/public/FullTextSearch/IFullTextSearchProvider.php b/lib/public/FullTextSearch/IFullTextSearchProvider.php index 890b57d84c9..a46ef051491 100644 --- a/lib/public/FullTextSearch/IFullTextSearchProvider.php +++ b/lib/public/FullTextSearch/IFullTextSearchProvider.php @@ -164,6 +164,24 @@ interface IFullTextSearchProvider { /** + * Allow the provider to generate a list of chunk to split a huge list of + * indexable documents + * + * During the indexing the generateIndexableDocuments method will be called + * for each entry of the returned array. + * If the returned array is empty, the generateIndexableDocuments() will be + * called only once (per user). + * + * @since 16.0.0 + * + * @param string $userId + * + * @return string[] + */ + public function generateChunks(string $userId): array; + + + /** * Returns all indexable document for a user as an array of IndexDocument. * * There is no need to fill each IndexDocument with content; at this point, @@ -179,12 +197,14 @@ interface IFullTextSearchProvider { * @see IndexDocument * * @since 15.0.0 + * -> 16.0.0: the parameter "$chunk" was added * * @param string $userId + * @param string $chunk * * @return IndexDocument[] */ - public function generateIndexableDocuments(string $userId): array; + public function generateIndexableDocuments(string $userId, string $chunk): array; /** diff --git a/lib/public/Group/ISubAdmin.php b/lib/public/Group/ISubAdmin.php new file mode 100644 index 00000000000..571b9e3db63 --- /dev/null +++ b/lib/public/Group/ISubAdmin.php @@ -0,0 +1,99 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> + * + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @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/>. + * + */ + +namespace OCP\Group; + +use OCP\IGroup; +use OCP\IUser; + +/** + * @since 16.0.0 + */ +interface ISubAdmin { + + /** + * add a SubAdmin + * @param IUser $user user to be SubAdmin + * @param IGroup $group group $user becomes subadmin of + * + * @since 16.0.0 + */ + public function createSubAdmin(IUser $user, IGroup $group): void; + + /** + * delete a SubAdmin + * @param IUser $user the user that is the SubAdmin + * @param IGroup $group the group + * + * @since 16.0.0 + */ + public function deleteSubAdmin(IUser $user, IGroup $group): void; + + /** + * get groups of a SubAdmin + * @param IUser $user the SubAdmin + * @return IGroup[] + * + * @since 16.0.0 + */ + public function getSubAdminsGroups(IUser $user): array; + + /** + * get SubAdmins of a group + * @param IGroup $group the group + * @return IUser[] + * + * @since 16.0.0 + */ + public function getGroupsSubAdmins(IGroup $group): array; + + /** + * checks if a user is a SubAdmin of a group + * @param IUser $user + * @param IGroup $group + * @return bool + * + * @since 16.0.0 + */ + public function isSubAdminOfGroup(IUser $user, IGroup $group): bool; + + /** + * checks if a user is a SubAdmin + * @param IUser $user + * @return bool + * + * @since 16.0.0 + */ + public function isSubAdmin(IUser $user): bool; + + /** + * checks if a user is a accessible by a subadmin + * @param IUser $subadmin + * @param IUser $user + * @return bool + * + * @since 16.0.0 + */ + public function isUserAccessible(IUser $subadmin, IUser $user): bool; +} diff --git a/lib/public/IAvatarManager.php b/lib/public/IAvatarManager.php index 4b89173d88b..890bcd1e6dd 100644 --- a/lib/public/IAvatarManager.php +++ b/lib/public/IAvatarManager.php @@ -45,4 +45,13 @@ interface IAvatarManager { */ public function getAvatar(string $user) : IAvatar; + /** + * Returns a guest user avatar instance. + * + * @param string $name The guest name, e.g. "Albert". + * @return IAvatar + * @since 16.0.0 + */ + public function getGuestAvatar(string $name): IAvatar; + } diff --git a/lib/public/IInitialStateService.php b/lib/public/IInitialStateService.php new file mode 100644 index 00000000000..49096886846 --- /dev/null +++ b/lib/public/IInitialStateService.php @@ -0,0 +1,60 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> + * + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @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/>. + * + */ + +namespace OCP; + +use Closure; + +/** + * @since 16.0.0 + */ +interface IInitialStateService { + /** + * Allows an app to provide its initial state to the template system. + * Use this if you know your initial state sill be used for example if + * you are in the render function of you controller. + * + * @since 16.0.0 + * + * @param string $appName + * @param string $key + * @param bool|int|float|string|array|\JsonSerializable $data + */ + public function provideInitialState(string $appName, string $key, $data): void; + + /** + * Allows an app to provide its initial state via a lazy method. + * This will call the closure when the template is being generated. + * Use this if your app is injected into pages. Since then the render method + * is not called explicitly. But we do not want to load the state on webdav + * requests for example. + * + * @since 16.0.0 + * + * @param string $appName + * @param string $key + * @param Closure $closure returns a primitive or an object that implements JsonSerializable + */ + public function provideLazyInitialState(string $appName, string $key, Closure $closure): void; +} |