aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public
diff options
context:
space:
mode:
Diffstat (limited to 'lib/public')
-rw-r--r--lib/public/App/IAppManager.php8
-rw-r--r--lib/public/AppFramework/Bootstrap/IBootstrap.php2
-rw-r--r--lib/public/AppFramework/Http/TemplateResponse.php8
-rw-r--r--lib/public/AppFramework/Http/TooManyRequestsResponse.php5
-rw-r--r--lib/public/Authentication/TwoFactorAuth/ILoginSetupProvider.php7
-rw-r--r--lib/public/Authentication/TwoFactorAuth/IPersonalProviderSettings.php8
-rw-r--r--lib/public/Authentication/TwoFactorAuth/IProvider.php8
-rw-r--r--lib/public/BackgroundJob/TimedJob.php9
-rw-r--r--lib/public/Calendar/CalendarEventStatus.php19
-rw-r--r--lib/public/Calendar/ICalendarEventBuilder.php7
-rw-r--r--lib/public/Files/Cache/ICacheEntry.php8
-rw-r--r--lib/public/Files/IMimeTypeDetector.php22
-rw-r--r--lib/public/Files/ObjectStore/IObjectStoreMetaData.php38
-rw-r--r--lib/public/IAddressBookEnabled.php26
-rw-r--r--lib/public/IAppConfig.php8
-rw-r--r--lib/public/IUser.php12
-rw-r--r--lib/public/IUserManager.php24
-rw-r--r--lib/public/OCM/IOCMProvider.php2
-rw-r--r--lib/public/Profile/IProfileManager.php4
-rw-r--r--lib/public/Share/IManager.php4
-rw-r--r--lib/public/Share/IShare.php2
-rw-r--r--lib/public/TaskProcessing/EShapeType.php6
-rw-r--r--lib/public/TaskProcessing/Events/GetTaskProcessingProvidersEvent.php68
-rw-r--r--lib/public/TaskProcessing/TaskTypes/AudioToText.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/ContextAgentInteraction.php4
-rw-r--r--lib/public/TaskProcessing/TaskTypes/ContextWrite.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/GenerateEmoji.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToImage.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToText.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextChangeTone.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextChat.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextChatWithTools.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextFormalization.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextHeadline.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextProofread.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextReformulation.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextSimplification.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextSummary.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextTopics.php2
-rw-r--r--lib/public/TaskProcessing/TaskTypes/TextToTextTranslate.php2
-rw-r--r--lib/public/Template.php26
-rw-r--r--lib/public/Template/ITemplate.php47
-rw-r--r--lib/public/Template/ITemplateManager.php44
-rw-r--r--lib/public/Template/TemplateNotFoundException.php16
-rw-r--r--lib/public/Util.php28
45 files changed, 421 insertions, 81 deletions
diff --git a/lib/public/App/IAppManager.php b/lib/public/App/IAppManager.php
index fa35819b779..67ef2d796be 100644
--- a/lib/public/App/IAppManager.php
+++ b/lib/public/App/IAppManager.php
@@ -52,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(): array;
+
+ /**
* Returns the app icon or null if none is found
*
* @param string $appId
diff --git a/lib/public/AppFramework/Bootstrap/IBootstrap.php b/lib/public/AppFramework/Bootstrap/IBootstrap.php
index 81c34524191..7260d2b77a1 100644
--- a/lib/public/AppFramework/Bootstrap/IBootstrap.php
+++ b/lib/public/AppFramework/Bootstrap/IBootstrap.php
@@ -25,8 +25,6 @@ interface IBootstrap {
* At this stage you can assume that all services are registered and the DI
* container(s) are ready to be queried.
*
- * This is also the state where an optional `appinfo/app.php` was loaded.
- *
* @param IBootContext $context
*
* @since 20.0.0
diff --git a/lib/public/AppFramework/Http/TemplateResponse.php b/lib/public/AppFramework/Http/TemplateResponse.php
index 55b9f2b06af..af37a1a2313 100644
--- a/lib/public/AppFramework/Http/TemplateResponse.php
+++ b/lib/public/AppFramework/Http/TemplateResponse.php
@@ -1,13 +1,19 @@
<?php
+declare(strict_types=1);
+
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
+
namespace OCP\AppFramework\Http;
use OCP\AppFramework\Http;
+use OCP\Server;
+use OCP\Template\ITemplateManager;
/**
* Response for a normal template
@@ -180,7 +186,7 @@ class TemplateResponse extends Response {
$renderAs = $this->renderAs;
}
- $template = new \OCP\Template($this->appName, $this->templateName, $renderAs);
+ $template = Server::get(ITemplateManager::class)->getTemplate($this->appName, $this->templateName, $renderAs);
foreach ($this->params as $key => $value) {
$template->assign($key, $value);
diff --git a/lib/public/AppFramework/Http/TooManyRequestsResponse.php b/lib/public/AppFramework/Http/TooManyRequestsResponse.php
index 6b2ef5b1b90..f7084ec768d 100644
--- a/lib/public/AppFramework/Http/TooManyRequestsResponse.php
+++ b/lib/public/AppFramework/Http/TooManyRequestsResponse.php
@@ -8,7 +8,8 @@ declare(strict_types=1);
namespace OCP\AppFramework\Http;
use OCP\AppFramework\Http;
-use OCP\Template;
+use OCP\Server;
+use OCP\Template\ITemplateManager;
/**
* A generic 429 response showing an 404 error page as well to the end-user
@@ -34,7 +35,7 @@ class TooManyRequestsResponse extends Response {
* @since 19.0.0
*/
public function render() {
- $template = new Template('core', '429', 'blank');
+ $template = Server::get(ITemplateManager::class)->getTemplate('core', '429', TemplateResponse::RENDER_AS_BLANK);
return $template->fetchPage();
}
}
diff --git a/lib/public/Authentication/TwoFactorAuth/ILoginSetupProvider.php b/lib/public/Authentication/TwoFactorAuth/ILoginSetupProvider.php
index 84b0a9066f2..32ede4f385c 100644
--- a/lib/public/Authentication/TwoFactorAuth/ILoginSetupProvider.php
+++ b/lib/public/Authentication/TwoFactorAuth/ILoginSetupProvider.php
@@ -8,16 +8,15 @@ declare(strict_types=1);
*/
namespace OCP\Authentication\TwoFactorAuth;
-use OCP\Template;
+use OCP\Template\ITemplate;
/**
* @since 17.0.0
*/
interface ILoginSetupProvider {
/**
- * @return Template
- *
* @since 17.0.0
+ * @since 32.0.0 Broader return type ITemplate instead of \OCP\Template
*/
- public function getBody(): Template;
+ public function getBody(): ITemplate;
}
diff --git a/lib/public/Authentication/TwoFactorAuth/IPersonalProviderSettings.php b/lib/public/Authentication/TwoFactorAuth/IPersonalProviderSettings.php
index 610f299c526..3cf7946272e 100644
--- a/lib/public/Authentication/TwoFactorAuth/IPersonalProviderSettings.php
+++ b/lib/public/Authentication/TwoFactorAuth/IPersonalProviderSettings.php
@@ -6,9 +6,10 @@ declare(strict_types=1);
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
+
namespace OCP\Authentication\TwoFactorAuth;
-use OCP\Template;
+use OCP\Template\ITemplate;
/**
* Interface IPersonalProviderSettings
@@ -17,9 +18,8 @@ use OCP\Template;
*/
interface IPersonalProviderSettings {
/**
- * @return Template
- *
* @since 15.0.0
+ * @since 32.0.0 Broader return type ITemplate instead of \OCP\Template
*/
- public function getBody(): Template;
+ public function getBody(): ITemplate;
}
diff --git a/lib/public/Authentication/TwoFactorAuth/IProvider.php b/lib/public/Authentication/TwoFactorAuth/IProvider.php
index f1dd24ff0a2..27c4121f4ac 100644
--- a/lib/public/Authentication/TwoFactorAuth/IProvider.php
+++ b/lib/public/Authentication/TwoFactorAuth/IProvider.php
@@ -9,7 +9,7 @@ declare(strict_types=1);
namespace OCP\Authentication\TwoFactorAuth;
use OCP\IUser;
-use OCP\Template;
+use OCP\Template\ITemplate;
/**
* @since 9.1.0
@@ -50,11 +50,9 @@ interface IProvider {
* Get the template for rending the 2FA provider view
*
* @since 9.1.0
- *
- * @param IUser $user
- * @return Template
+ * @since 32.0.0 Broader return type ITemplate instead of \OCP\Template.
*/
- public function getTemplate(IUser $user): Template;
+ public function getTemplate(IUser $user): ITemplate;
/**
* Verify the given challenge
diff --git a/lib/public/BackgroundJob/TimedJob.php b/lib/public/BackgroundJob/TimedJob.php
index 85ca34665b4..296bd9e4e32 100644
--- a/lib/public/BackgroundJob/TimedJob.php
+++ b/lib/public/BackgroundJob/TimedJob.php
@@ -33,6 +33,15 @@ abstract class TimedJob extends Job {
}
/**
+ * Get the interval [seconds] for the job
+ *
+ * @since 32.0.0
+ */
+ public function getInterval(): int {
+ return $this->interval;
+ }
+
+ /**
* Whether the background job is time sensitive and needs to run soon after
* the scheduled interval, of if it is okay to be delayed until a later time.
*
diff --git a/lib/public/Calendar/CalendarEventStatus.php b/lib/public/Calendar/CalendarEventStatus.php
new file mode 100644
index 00000000000..5e070545758
--- /dev/null
+++ b/lib/public/Calendar/CalendarEventStatus.php
@@ -0,0 +1,19 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCP\Calendar;
+
+/**
+ * The status of a calendar event.
+ *
+ * @since 32.0.0
+ */
+enum CalendarEventStatus: string {
+ case TENTATIVE = 'TENTATIVE';
+ case CONFIRMED = 'CONFIRMED';
+ case CANCELLED = 'CANCELLED';
+};
diff --git a/lib/public/Calendar/ICalendarEventBuilder.php b/lib/public/Calendar/ICalendarEventBuilder.php
index 8afc817a61e..c99dc60cc8c 100644
--- a/lib/public/Calendar/ICalendarEventBuilder.php
+++ b/lib/public/Calendar/ICalendarEventBuilder.php
@@ -66,6 +66,13 @@ interface ICalendarEventBuilder {
public function setLocation(string $location): self;
/**
+ * Set the event status.
+ *
+ * @since 32.0.0
+ */
+ public function setStatus(CalendarEventStatus $status): static;
+
+ /**
* Set the event organizer.
* This property is required if attendees are added!
*
diff --git a/lib/public/Files/Cache/ICacheEntry.php b/lib/public/Files/Cache/ICacheEntry.php
index 11d91e74105..28e673071fd 100644
--- a/lib/public/Files/Cache/ICacheEntry.php
+++ b/lib/public/Files/Cache/ICacheEntry.php
@@ -161,4 +161,12 @@ interface ICacheEntry extends ArrayAccess {
* @since 25.0.0
*/
public function getUnencryptedSize(): int;
+
+ /**
+ * Get the file id of the parent folder
+ *
+ * @return int
+ * @since 32.0.0
+ */
+ public function getParentId(): int;
}
diff --git a/lib/public/Files/IMimeTypeDetector.php b/lib/public/Files/IMimeTypeDetector.php
index 6f3e498c203..1bc9c514610 100644
--- a/lib/public/Files/IMimeTypeDetector.php
+++ b/lib/public/Files/IMimeTypeDetector.php
@@ -14,11 +14,11 @@ namespace OCP\Files;
* Interface IMimeTypeDetector
* @since 8.2.0
*
- * Interface to handle mimetypes (detection and icon retrieval)
+ * Interface to handle MIME type (detection and icon retrieval)
**/
interface IMimeTypeDetector {
/**
- * detect mimetype only based on filename, content of file is not used
+ * Detect MIME type only based on filename, content of file is not used
* @param string $path
* @return string
* @since 8.2.0
@@ -26,7 +26,7 @@ interface IMimeTypeDetector {
public function detectPath($path);
/**
- * detect mimetype only based on the content of file
+ * Detect MIME type only based on the content of file
* @param string $path
* @return string
* @since 18.0.0
@@ -34,7 +34,7 @@ interface IMimeTypeDetector {
public function detectContent(string $path): string;
/**
- * detect mimetype based on both filename and content
+ * Detect MIME type based on both filename and content
*
* @param string $path
* @return string
@@ -43,7 +43,7 @@ interface IMimeTypeDetector {
public function detect($path);
/**
- * Get a secure mimetype that won't expose potential XSS.
+ * Get a secure MIME type that won't expose potential XSS.
*
* @param string $mimeType
* @return string
@@ -52,7 +52,7 @@ interface IMimeTypeDetector {
public function getSecureMimeType($mimeType);
/**
- * detect mimetype based on the content of a string
+ * Detect MIME type based on the content of a string
*
* @param string $data
* @return string
@@ -75,7 +75,15 @@ interface IMimeTypeDetector {
public function getAllAliases(): array;
/**
- * @return array<string, list{string, string|null}>
+ * Get all extension to MIME type mappings.
+ *
+ * The return format is an array of the file extension, as the key,
+ * mapped to a list where the first entry is the MIME type
+ * and the second entry is the secure MIME type (or null if none).
+ * Due to PHP idiosyncrasies if a numeric string is set as the extension,
+ * then also the array key (file extension) is a number instead of a string.
+ *
+ * @return array<list{string, string|null}>
* @since 32.0.0
*/
public function getAllMappings(): array;
diff --git a/lib/public/Files/ObjectStore/IObjectStoreMetaData.php b/lib/public/Files/ObjectStore/IObjectStoreMetaData.php
new file mode 100644
index 00000000000..8359e83f573
--- /dev/null
+++ b/lib/public/Files/ObjectStore/IObjectStoreMetaData.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+namespace OCP\Files\ObjectStore;
+
+/**
+ * Interface IObjectStoreMetaData
+ *
+ * @psalm-type ObjectMetaData = array{mtime?: \DateTime, etag?: string, size?: int, mimetype?: string, filename?: string}
+ *
+ * @since 32.0.0
+ */
+interface IObjectStoreMetaData {
+ /**
+ * Get metadata for an object.
+ *
+ * @param string $urn
+ * @return ObjectMetaData
+ *
+ * @since 32.0.0
+ */
+ public function getObjectMetaData(string $urn): array;
+
+ /**
+ * List all objects in the object store.
+ *
+ * If the object store implementation can do it efficiently, the metadata for each object is also included.
+ *
+ * @param string $prefix
+ * @return \Iterator<array{urn: string, metadata: ?ObjectMetaData}>
+ *
+ * @since 32.0.0
+ */
+ public function listObjects(string $prefix = ''): \Iterator;
+}
diff --git a/lib/public/IAddressBookEnabled.php b/lib/public/IAddressBookEnabled.php
new file mode 100644
index 00000000000..ad93aa3f59a
--- /dev/null
+++ b/lib/public/IAddressBookEnabled.php
@@ -0,0 +1,26 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors"
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal Nextcloud classes
+
+namespace OCP;
+
+/**
+ * IAddressBook Interface extension for checking if the address book is enabled
+ *
+ * @since 32.0.0
+ */
+interface IAddressBookEnabled extends IAddressBook {
+ /**
+ * Check if the address book is enabled
+ * @return bool
+ * @since 32.0.0
+ */
+ public function isEnabled(): bool;
+}
diff --git a/lib/public/IAppConfig.php b/lib/public/IAppConfig.php
index d4d5c1c09c7..f4210793476 100644
--- a/lib/public/IAppConfig.php
+++ b/lib/public/IAppConfig.php
@@ -507,4 +507,12 @@ interface IAppConfig {
* @deprecated 29.0.0 Use {@see getAllValues()} or {@see searchValues()}
*/
public function getFilteredValues($app);
+
+ /**
+ * Returns the installed version of all apps
+ *
+ * @return array<string, string>
+ * @since 32.0.0
+ */
+ public function getAppInstalledVersions(): array;
}
diff --git a/lib/public/IUser.php b/lib/public/IUser.php
index b4808ec045a..52f79083dc1 100644
--- a/lib/public/IUser.php
+++ b/lib/public/IUser.php
@@ -16,6 +16,11 @@ use InvalidArgumentException;
*/
interface IUser {
/**
+ * @since 32.0.0
+ */
+ public const MAX_USERID_LENGTH = 64;
+
+ /**
* get the user id
*
* @return string
@@ -150,6 +155,13 @@ interface IUser {
public function canChangeDisplayName();
/**
+ * Check if the backend supports changing email
+ *
+ * @since 32.0.0
+ */
+ public function canChangeEmail(): bool;
+
+ /**
* check if the user is enabled
*
* @return bool
diff --git a/lib/public/IUserManager.php b/lib/public/IUserManager.php
index 50eaa9c98b7..dbd1e188bec 100644
--- a/lib/public/IUserManager.php
+++ b/lib/public/IUserManager.php
@@ -32,14 +32,14 @@ interface IUserManager {
/**
* register a user backend
*
- * @param \OCP\UserInterface $backend
* @since 8.0.0
+ * @return void
*/
- public function registerBackend($backend);
+ public function registerBackend(UserInterface $backend);
/**
* Get the active backends
- * @return \OCP\UserInterface[]
+ * @return UserInterface[]
* @since 8.0.0
*/
public function getBackends();
@@ -47,16 +47,17 @@ interface IUserManager {
/**
* remove a user backend
*
- * @param \OCP\UserInterface $backend
* @since 8.0.0
+ * @return void
*/
- public function removeBackend($backend);
+ public function removeBackend(UserInterface $backend);
/**
* remove all user backends
* @since 8.0.0
+ * @return void
*/
- public function clearBackends() ;
+ public function clearBackends();
/**
* get a user by user id
@@ -231,4 +232,15 @@ interface IUserManager {
* @since 30.0.0
*/
public function getLastLoggedInUsers(?int $limit = null, int $offset = 0, string $search = ''): array;
+
+ /**
+ * Gets the list of users.
+ * An iterator is returned allowing the caller to stop the iteration at any time.
+ * The offset argument allows the caller to continue the iteration at a specific offset.
+ *
+ * @param int $offset from which offset to fetch
+ * @return \Iterator<IUser> list of IUser object
+ * @since 32.0.0
+ */
+ public function getSeenUsers(int $offset = 0): \Iterator;
}
diff --git a/lib/public/OCM/IOCMProvider.php b/lib/public/OCM/IOCMProvider.php
index a588d869655..a267abc52d2 100644
--- a/lib/public/OCM/IOCMProvider.php
+++ b/lib/public/OCM/IOCMProvider.php
@@ -151,7 +151,7 @@ interface IOCMProvider extends JsonSerializable {
* enabled: bool,
* apiVersion: '1.0-proposal1',
* endPoint: string,
- * publicKey: array{
+ * publicKey?: array{
* keyId: string,
* publicKeyPem: string
* },
diff --git a/lib/public/Profile/IProfileManager.php b/lib/public/Profile/IProfileManager.php
index 0a1e6733e58..f4e90e39d12 100644
--- a/lib/public/Profile/IProfileManager.php
+++ b/lib/public/Profile/IProfileManager.php
@@ -9,10 +9,12 @@ declare(strict_types=1);
namespace OCP\Profile;
+use OC\Core\ResponseDefinitions;
use OCP\Accounts\IAccountManager;
use OCP\IUser;
/**
+ * @psalm-import-type CoreProfileFields from ResponseDefinitions
* @since 28.0.0
*/
interface IProfileManager {
@@ -83,7 +85,7 @@ interface IProfileManager {
* Return the profile parameters of the target user that are visible to the visiting user
* in an associative array
*
- * @return array{userId: string, address?: string|null, biography?: string|null, displayname?: string|null, headline?: string|null, isUserAvatarVisible?: bool, organisation?: string|null, pronouns?: string|null, role?: string|null, actions: list<array{id: string, icon: string, title: string, target: ?string}>}
+ * @psalm-return CoreProfileFields
* @since 28.0.0
*/
public function getProfileFields(IUser $targetUser, ?IUser $visitingUser): array;
diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php
index 23713f2e462..89d6f5e4a87 100644
--- a/lib/public/Share/IManager.php
+++ b/lib/public/Share/IManager.php
@@ -485,11 +485,9 @@ interface IManager {
/**
* Check if sharing is disabled for the given user
*
- * @param string $userId
- * @return bool
* @since 9.0.0
*/
- public function sharingDisabledForUser($userId);
+ public function sharingDisabledForUser(?string $userId): bool;
/**
* Check if outgoing server2server shares are allowed
diff --git a/lib/public/Share/IShare.php b/lib/public/Share/IShare.php
index cdad084ac92..337210e3b91 100644
--- a/lib/public/Share/IShare.php
+++ b/lib/public/Share/IShare.php
@@ -379,7 +379,7 @@ interface IShare {
public function getExpirationDate();
/**
- * Set overwrite flag for falsy expiry date vavlues
+ * Set overwrite flag for falsy expiry date values
*
* @param bool $noExpirationDate
* @return \OCP\Share\IShare The modified object
diff --git a/lib/public/TaskProcessing/EShapeType.php b/lib/public/TaskProcessing/EShapeType.php
index cd8d6d837da..f6cfab6b38f 100644
--- a/lib/public/TaskProcessing/EShapeType.php
+++ b/lib/public/TaskProcessing/EShapeType.php
@@ -154,19 +154,19 @@ enum EShapeType: int {
if ($this === EShapeType::ListOfImages && (!is_array($value) || count(array_filter($value, fn ($item) => !is_numeric($item))) > 0)) {
throw new ValidationException('Non-image list item provided for ListOfImages slot');
}
- if ($this === EShapeType::Audio && !is_string($value)) {
+ if ($this === EShapeType::Audio && !is_numeric($value)) {
throw new ValidationException('Non-audio item provided for Audio slot');
}
if ($this === EShapeType::ListOfAudios && (!is_array($value) || count(array_filter($value, fn ($item) => !is_numeric($item))) > 0)) {
throw new ValidationException('Non-audio list item provided for ListOfAudio slot');
}
- if ($this === EShapeType::Video && !is_string($value)) {
+ if ($this === EShapeType::Video && !is_numeric($value)) {
throw new ValidationException('Non-video item provided for Video slot');
}
if ($this === EShapeType::ListOfVideos && (!is_array($value) || count(array_filter($value, fn ($item) => !is_numeric($item))) > 0)) {
throw new ValidationException('Non-video list item provided for ListOfTexts slot');
}
- if ($this === EShapeType::File && !is_string($value)) {
+ if ($this === EShapeType::File && !is_numeric($value)) {
throw new ValidationException('Non-file item provided for File slot');
}
if ($this === EShapeType::ListOfFiles && (!is_array($value) || count(array_filter($value, fn ($item) => !is_numeric($item))) > 0)) {
diff --git a/lib/public/TaskProcessing/Events/GetTaskProcessingProvidersEvent.php b/lib/public/TaskProcessing/Events/GetTaskProcessingProvidersEvent.php
new file mode 100644
index 00000000000..10c94d20406
--- /dev/null
+++ b/lib/public/TaskProcessing/Events/GetTaskProcessingProvidersEvent.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCP\TaskProcessing\Events;
+
+use OCP\EventDispatcher\Event;
+use OCP\TaskProcessing\IProvider;
+use OCP\TaskProcessing\ITaskType;
+
+/**
+ * Event dispatched by the server to collect Task Processing Providers
+ * and custom Task Types from listeners (like AppAPI).
+ *
+ * Listeners should add their providers and task types using the
+ * addProvider() and addTaskType() methods.
+ *
+ * @since 32.0.0
+ */
+class GetTaskProcessingProvidersEvent extends Event {
+ /** @var IProvider[] */
+ private array $providers = [];
+
+ /** @var ITaskType[] */
+ private array $taskTypes = [];
+
+ /**
+ * Add a Task Processing Provider.
+ *
+ * @param IProvider $provider The provider instance to add.
+ * @since 32.0.0
+ */
+ public function addProvider(IProvider $provider): void {
+ $this->providers[] = $provider;
+ }
+
+ /**
+ * Get all collected Task Processing Providers.
+ *
+ * @return IProvider[]
+ * @since 32.0.0
+ */
+ public function getProviders(): array {
+ return $this->providers;
+ }
+
+ /**
+ * Add a custom Task Processing Task Type.
+ *
+ * @param ITaskType $taskType The task type instance to add.
+ * @since 32.0.0
+ */
+ public function addTaskType(ITaskType $taskType): void {
+ $this->taskTypes[] = $taskType;
+ }
+
+ /**
+ * Get all collected custom Task Processing Task Types.
+ *
+ * @return ITaskType[]
+ * @since 32.0.0
+ */
+ public function getTaskTypes(): array {
+ return $this->taskTypes;
+ }
+}
diff --git a/lib/public/TaskProcessing/TaskTypes/AudioToText.php b/lib/public/TaskProcessing/TaskTypes/AudioToText.php
index 3f23d00d41b..1982d4c9d28 100644
--- a/lib/public/TaskProcessing/TaskTypes/AudioToText.php
+++ b/lib/public/TaskProcessing/TaskTypes/AudioToText.php
@@ -34,7 +34,7 @@ class AudioToText implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/ContextAgentInteraction.php b/lib/public/TaskProcessing/TaskTypes/ContextAgentInteraction.php
index f5bef6b48e3..cd08d6f4e3d 100644
--- a/lib/public/TaskProcessing/TaskTypes/ContextAgentInteraction.php
+++ b/lib/public/TaskProcessing/TaskTypes/ContextAgentInteraction.php
@@ -31,7 +31,7 @@ class ContextAgentInteraction implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
/**
@@ -39,7 +39,7 @@ class ContextAgentInteraction implements ITaskType {
* @since 31.0.0
*/
public function getName(): string {
- return $this->l->t('ContextAgent');
+ return 'ContextAgent'; // We do not translate this
}
/**
diff --git a/lib/public/TaskProcessing/TaskTypes/ContextWrite.php b/lib/public/TaskProcessing/TaskTypes/ContextWrite.php
index 36ee8f24d3f..fd5c6a8f58b 100644
--- a/lib/public/TaskProcessing/TaskTypes/ContextWrite.php
+++ b/lib/public/TaskProcessing/TaskTypes/ContextWrite.php
@@ -34,7 +34,7 @@ class ContextWrite implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/GenerateEmoji.php b/lib/public/TaskProcessing/TaskTypes/GenerateEmoji.php
index 89ddfa58072..2cb22b3b455 100644
--- a/lib/public/TaskProcessing/TaskTypes/GenerateEmoji.php
+++ b/lib/public/TaskProcessing/TaskTypes/GenerateEmoji.php
@@ -34,7 +34,7 @@ class GenerateEmoji implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToImage.php b/lib/public/TaskProcessing/TaskTypes/TextToImage.php
index a4b8070e8bb..ed956d244a1 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToImage.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToImage.php
@@ -34,7 +34,7 @@ class TextToImage implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToText.php b/lib/public/TaskProcessing/TaskTypes/TextToText.php
index 92eaf5629e8..c39d435688a 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToText.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToText.php
@@ -34,7 +34,7 @@ class TextToText implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextChangeTone.php b/lib/public/TaskProcessing/TaskTypes/TextToTextChangeTone.php
index bab60976454..0ea4575a187 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextChangeTone.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextChangeTone.php
@@ -31,7 +31,7 @@ class TextToTextChangeTone implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
/**
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextChat.php b/lib/public/TaskProcessing/TaskTypes/TextToTextChat.php
index e9169f64837..9cf1e7ef3ce 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextChat.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextChat.php
@@ -34,7 +34,7 @@ class TextToTextChat implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextChatWithTools.php b/lib/public/TaskProcessing/TaskTypes/TextToTextChatWithTools.php
index e09211e940b..ebc660a3af9 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextChatWithTools.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextChatWithTools.php
@@ -31,7 +31,7 @@ class TextToTextChatWithTools implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
/**
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextFormalization.php b/lib/public/TaskProcessing/TaskTypes/TextToTextFormalization.php
index 81eff28f3e9..70e38f78c0b 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextFormalization.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextFormalization.php
@@ -34,7 +34,7 @@ class TextToTextFormalization implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextHeadline.php b/lib/public/TaskProcessing/TaskTypes/TextToTextHeadline.php
index 9907a3605b2..dde4ea03042 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextHeadline.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextHeadline.php
@@ -34,7 +34,7 @@ class TextToTextHeadline implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextProofread.php b/lib/public/TaskProcessing/TaskTypes/TextToTextProofread.php
index 09f2111e22e..508794490be 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextProofread.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextProofread.php
@@ -33,7 +33,7 @@ class TextToTextProofread implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextReformulation.php b/lib/public/TaskProcessing/TaskTypes/TextToTextReformulation.php
index 44c1fddc73c..120f5316aee 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextReformulation.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextReformulation.php
@@ -34,7 +34,7 @@ class TextToTextReformulation implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextSimplification.php b/lib/public/TaskProcessing/TaskTypes/TextToTextSimplification.php
index 580b9d92755..d107e584e3a 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextSimplification.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextSimplification.php
@@ -34,7 +34,7 @@ class TextToTextSimplification implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextSummary.php b/lib/public/TaskProcessing/TaskTypes/TextToTextSummary.php
index 8b00c64f915..601b478c0bd 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextSummary.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextSummary.php
@@ -33,7 +33,7 @@ class TextToTextSummary implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextTopics.php b/lib/public/TaskProcessing/TaskTypes/TextToTextTopics.php
index a08ec6d2c0f..943cc2e2fd4 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextTopics.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextTopics.php
@@ -34,7 +34,7 @@ class TextToTextTopics implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/TaskProcessing/TaskTypes/TextToTextTranslate.php b/lib/public/TaskProcessing/TaskTypes/TextToTextTranslate.php
index 11b71ec3eb2..a02550226ee 100644
--- a/lib/public/TaskProcessing/TaskTypes/TextToTextTranslate.php
+++ b/lib/public/TaskProcessing/TaskTypes/TextToTextTranslate.php
@@ -34,7 +34,7 @@ class TextToTextTranslate implements ITaskType {
public function __construct(
IFactory $l10nFactory,
) {
- $this->l = $l10nFactory->get('core');
+ $this->l = $l10nFactory->get('lib');
}
diff --git a/lib/public/Template.php b/lib/public/Template.php
index 048697ffcc4..3b31ee10a54 100644
--- a/lib/public/Template.php
+++ b/lib/public/Template.php
@@ -7,13 +7,21 @@
*/
namespace OCP;
+use OCP\Template\ITemplate;
+
+/*
+ * We have to require the functions file because this class contains aliases to the functions
+ */
+require_once __DIR__ . '/../private/Template/functions.php';
+
/**
* This class provides the template system for owncloud. You can use it to load
* specific templates, add data and generate the html code
*
* @since 8.0.0
+ * @deprecated 32.0.0 Use \OCP\Template\ITemplateManager instead
*/
-class Template extends \OC_Template {
+class Template extends \OC_Template implements ITemplate {
/**
* Make OC_Helper::imagePath available as a simple function
*
@@ -23,7 +31,7 @@ class Template extends \OC_Template {
* @param string $image
* @return string to the image
* @since 8.0.0
- * @suppress PhanDeprecatedFunction
+ * @deprecated 32.0.0 Use the function directly instead
*/
public static function image_path($app, $image) {
return \image_path($app, $image);
@@ -36,7 +44,7 @@ class Template extends \OC_Template {
* @param string $mimetype
* @return string to the image of this file type.
* @since 8.0.0
- * @suppress PhanDeprecatedFunction
+ * @deprecated 32.0.0 Use the function directly instead
*/
public static function mimetype_icon($mimetype) {
return \mimetype_icon($mimetype);
@@ -48,7 +56,7 @@ class Template extends \OC_Template {
* @param string $path path to file
* @return string to the preview of the image
* @since 8.0.0
- * @suppress PhanDeprecatedFunction
+ * @deprecated 32.0.0 Use the function directly instead
*/
public static function preview_icon($path) {
return \preview_icon($path);
@@ -62,7 +70,7 @@ class Template extends \OC_Template {
* @param string $token
* @return string link to the preview
* @since 8.0.0
- * @suppress PhanDeprecatedFunction
+ * @deprecated 32.0.0 Use the function directly instead
*/
public static function publicPreview_icon($path, $token) {
return \publicPreview_icon($path, $token);
@@ -75,10 +83,10 @@ class Template extends \OC_Template {
* @param int $bytes in bytes
* @return string size as string
* @since 8.0.0
- * @suppress PhanDeprecatedFunction
+ * @deprecated 32.0.0 Use \OCP\Util::humanFileSize instead
*/
public static function human_file_size($bytes) {
- return \human_file_size($bytes);
+ return Util::humanFileSize($bytes);
}
/**
@@ -88,8 +96,8 @@ class Template extends \OC_Template {
* @param boolean $dateOnly
* @return string human readable interpretation of the timestamp
* @since 8.0.0
- * @suppress PhanDeprecatedFunction
* @suppress PhanTypeMismatchArgument
+ * @deprecated 32.0.0 Use the function directly instead
*/
public static function relative_modified_date($timestamp, $dateOnly = false) {
return \relative_modified_date($timestamp, null, $dateOnly);
@@ -103,7 +111,7 @@ class Template extends \OC_Template {
* @param array $params the parameters
* @return string html options
* @since 8.0.0
- * @suppress PhanDeprecatedFunction
+ * @deprecated 32.0.0 Use the function directly instead
*/
public static function html_select_options($options, $selected, $params = []) {
return \html_select_options($options, $selected, $params);
diff --git a/lib/public/Template/ITemplate.php b/lib/public/Template/ITemplate.php
new file mode 100644
index 00000000000..7131df4d17c
--- /dev/null
+++ b/lib/public/Template/ITemplate.php
@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Template;
+
+/**
+ * @since 32.0.0
+ */
+interface ITemplate {
+ /**
+ * Process the template
+ * @since 32.0.0
+ */
+ public function fetchPage(?array $additionalParams = null): string;
+
+ /**
+ * Proceed the template and print its output.
+ * @since 32.0.0
+ */
+ public function printPage(): void;
+
+ /**
+ * Assign variables
+ *
+ * This function assigns a variable. It can be accessed via $_[$key] in
+ * the template.
+ *
+ * If the key existed before, it will be overwritten
+ * @since 32.0.0
+ */
+ public function assign(string $key, mixed $value): void;
+
+ /**
+ * Appends a variable
+ *
+ * This function assigns a variable in an array context. If the key already
+ * exists, the value will be appended. It can be accessed via
+ * $_[$key][$position] in the template.
+ */
+ public function append(string $key, mixed $value): void;
+}
diff --git a/lib/public/Template/ITemplateManager.php b/lib/public/Template/ITemplateManager.php
new file mode 100644
index 00000000000..05549bbddfd
--- /dev/null
+++ b/lib/public/Template/ITemplateManager.php
@@ -0,0 +1,44 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Template;
+
+use OCP\AppFramework\Http\TemplateResponse;
+
+/**
+ * @since 32.0.0
+ */
+interface ITemplateManager {
+ /**
+ * @param TemplateResponse::RENDER_AS_* $renderAs
+ * @throws TemplateNotFoundException if the template cannot be found
+ * @since 32.0.0
+ */
+ public function getTemplate(string $app, string $name, string $renderAs = TemplateResponse::RENDER_AS_BLANK, bool $registerCall = true): ITemplate;
+
+ /**
+ * Shortcut to print a simple page for guests
+ * @since 32.0.0
+ */
+ public function printGuestPage(string $application, string $name, array $parameters = []): void;
+
+ /**
+ * Print a fatal error page and terminates the script
+ * @since 32.0.0
+ * @param string $error_msg The error message to show
+ * @param string $hint An optional hint message - needs to be properly escape
+ */
+ public function printErrorPage(string $error_msg, string $hint = '', int $statusCode = 500): never;
+
+ /**
+ * Print error page using Exception details
+ * @since 32.0.0
+ */
+ public function printExceptionErrorPage(\Throwable $exception, int $statusCode = 503): never;
+}
diff --git a/lib/public/Template/TemplateNotFoundException.php b/lib/public/Template/TemplateNotFoundException.php
new file mode 100644
index 00000000000..e77fcd8646a
--- /dev/null
+++ b/lib/public/Template/TemplateNotFoundException.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Template;
+
+/**
+ * @since 32.0.0
+ */
+class TemplateNotFoundException extends \Exception {
+}
diff --git a/lib/public/Util.php b/lib/public/Util.php
index 28da91c9a0f..14663abd62f 100644
--- a/lib/public/Util.php
+++ b/lib/public/Util.php
@@ -78,19 +78,16 @@ class Util {
*
* @return boolean
* @since 7.0.0
- * @deprecated 9.1.0 Use \OC::$server->get(\OCP\Share\IManager::class)->sharingDisabledForUser
+ * @deprecated 9.1.0 Use Server::get(\OCP\Share\IManager::class)->sharingDisabledForUser
*/
public static function isSharingDisabledForUser() {
if (self::$shareManager === null) {
- self::$shareManager = \OC::$server->get(IManager::class);
+ self::$shareManager = Server::get(IManager::class);
}
- $user = \OC::$server->getUserSession()->getUser();
- if ($user !== null) {
- $user = $user->getUID();
- }
+ $user = Server::get(\OCP\IUserSession::class)->getUser();
- return self::$shareManager->sharingDisabledForUser($user);
+ return self::$shareManager->sharingDisabledForUser($user?->getUID());
}
/**
@@ -102,13 +99,15 @@ class Util {
}
/**
- * add a css file
- * @param string $application
- * @param string $file
+ * Add a css file
+ *
+ * @param string $application application id
+ * @param ?string $file filename
+ * @param bool $prepend prepend the style to the beginning of the list
* @since 4.0.0
*/
- public static function addStyle($application, $file = null) {
- \OC_Util::addStyle($application, $file);
+ public static function addStyle(string $application, ?string $file = null, bool $prepend = false): void {
+ \OC_Util::addStyle($application, $file, $prepend);
}
/**
@@ -384,7 +383,7 @@ class Util {
/**
* Cached encrypted CSRF token. Some static unit-tests of ownCloud compare
- * multiple OC_Template elements which invoke `callRegister`. If the value
+ * multiple Template elements which invoke `callRegister`. If the value
* would not be cached these unit-tests would fail.
* @var string
*/
@@ -393,6 +392,7 @@ class Util {
/**
* Register an get/post call. This is important to prevent CSRF attacks
* @since 4.5.0
+ * @deprecated 32.0.0 directly use CsrfTokenManager instead
*/
public static function callRegister() {
if (self::$token === '') {
@@ -408,7 +408,7 @@ class Util {
* string or array of strings before displaying it on a web page.
*
* @param string|string[] $value
- * @return string|string[] an array of sanitized strings or a single sanitized string, depends on the input parameter.
+ * @return ($value is array ? string[] : string) an array of sanitized strings or a single sanitized string, depends on the input parameter.
* @since 4.5.0
*/
public static function sanitizeHTML($value) {