summaryrefslogtreecommitdiffstats
path: root/lib/public
diff options
context:
space:
mode:
Diffstat (limited to 'lib/public')
-rw-r--r--lib/public/Activity/IExtension.php127
-rw-r--r--lib/public/Activity/IManager.php147
-rw-r--r--lib/public/AppFramework/Http/StandaloneTemplateResponse.php37
-rw-r--r--lib/public/AppFramework/Http/TemplateResponse.php3
-rw-r--r--lib/public/Files/Cache/CacheInsertEvent.php72
-rw-r--r--lib/public/Files/SimpleFS/InMemoryFile.php150
-rw-r--r--lib/public/FullTextSearch/IFullTextSearchProvider.php22
-rw-r--r--lib/public/Group/ISubAdmin.php99
-rw-r--r--lib/public/IAvatarManager.php9
-rw-r--r--lib/public/IInitialStateService.php60
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;
+}