aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/cloud_federation_api/lib/Capabilities.php6
-rw-r--r--apps/cloud_federation_api/lib/Controller/RequestHandlerController.php2
-rw-r--r--apps/cloud_federation_api/lib/ResponseDefinitions.php4
-rw-r--r--apps/dashboard/lib/Controller/DashboardApiController.php6
-rw-r--r--apps/dashboard/lib/ResponseDefinitions.php8
-rw-r--r--apps/dav/lib/Controller/UpcomingEventsController.php6
-rw-r--r--apps/federatedfilesharing/lib/Controller/RequestHandlerController.php12
-rw-r--r--apps/federation/lib/Controller/OCSAuthAPIController.php4
-rw-r--r--apps/files/lib/Capabilities.php2
-rw-r--r--apps/files/lib/Controller/DirectEditingController.php2
-rw-r--r--apps/files/lib/Controller/OpenLocalEditorController.php4
-rw-r--r--apps/files/lib/Controller/TemplateController.php17
-rw-r--r--apps/files/lib/Controller/TransferOwnershipController.php6
-rw-r--r--apps/files/lib/Helper.php27
-rw-r--r--apps/files/lib/ResponseDefinitions.php34
-rw-r--r--apps/files/openapi.json123
-rw-r--r--apps/files/tests/HelperTest.php14
-rw-r--r--apps/files_external/lib/Controller/ApiController.php2
-rw-r--r--apps/files_external/lib/Lib/StorageConfig.php12
-rw-r--r--apps/files_external/lib/ResponseDefinitions.php4
-rw-r--r--apps/files_reminders/lib/Controller/ApiController.php6
-rw-r--r--apps/files_sharing/lib/Controller/DeletedShareAPIController.php8
-rw-r--r--apps/files_sharing/lib/Controller/PublicPreviewController.php4
-rw-r--r--apps/files_sharing/lib/Controller/RemoteController.php12
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php36
-rw-r--r--apps/files_sharing/lib/Controller/ShareInfoController.php2
-rw-r--r--apps/files_sharing/lib/Controller/ShareesAPIController.php4
-rw-r--r--apps/files_sharing/lib/External/Manager.php10
-rw-r--r--apps/files_sharing/lib/ResponseDefinitions.php52
-rw-r--r--apps/files_sharing/openapi.json5
-rw-r--r--apps/files_trashbin/lib/Controller/PreviewController.php2
-rw-r--r--apps/files_versions/lib/Controller/PreviewController.php2
-rw-r--r--apps/provisioning_api/lib/Controller/AUserData.php2
-rw-r--r--apps/provisioning_api/lib/Controller/AppConfigController.php8
-rw-r--r--apps/provisioning_api/lib/Controller/AppsController.php10
-rw-r--r--apps/provisioning_api/lib/Controller/GroupsController.php28
-rw-r--r--apps/provisioning_api/lib/Controller/PreferencesController.php10
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php56
-rw-r--r--apps/provisioning_api/lib/ResponseDefinitions.php8
-rw-r--r--apps/sharebymail/lib/Capabilities.php4
-rw-r--r--apps/sharebymail/openapi.json101
-rw-r--r--apps/theming/lib/Controller/ThemingController.php2
-rw-r--r--apps/theming/lib/Controller/UserThemeController.php4
-rw-r--r--apps/updatenotification/lib/Controller/APIController.php2
-rw-r--r--apps/user_ldap/lib/Controller/ConfigAPIController.php4
-rw-r--r--apps/user_ldap/lib/Group_LDAP.php6
-rw-r--r--apps/user_ldap/lib/Group_Proxy.php2
-rw-r--r--apps/user_status/lib/Controller/HeartbeatController.php2
-rw-r--r--apps/user_status/lib/Controller/PredefinedStatusController.php6
-rw-r--r--apps/user_status/lib/Controller/StatusesController.php6
-rw-r--r--apps/user_status/lib/Controller/UserStatusController.php4
-rw-r--r--apps/user_status/lib/Dashboard/UserStatusWidget.php4
-rw-r--r--apps/weather_status/lib/Controller/WeatherStatusController.php6
-rw-r--r--apps/weather_status/lib/Service/WeatherStatusService.php8
-rw-r--r--apps/webhook_listeners/lib/Controller/WebhooksController.php12
-rw-r--r--core/Controller/AppPasswordController.php4
-rw-r--r--core/Controller/AutoCompleteController.php6
-rw-r--r--core/Controller/AvatarController.php4
-rw-r--r--core/Controller/CSRFTokenController.php2
-rw-r--r--core/Controller/ClientFlowLoginV2Controller.php2
-rw-r--r--core/Controller/CollaborationResourcesController.php20
-rw-r--r--core/Controller/HoverCardController.php4
-rw-r--r--core/Controller/LoginController.php2
-rw-r--r--core/Controller/NavigationController.php4
-rw-r--r--core/Controller/OCMController.php2
-rw-r--r--core/Controller/PreviewController.php6
-rw-r--r--core/Controller/ProfileApiController.php2
-rw-r--r--core/Controller/ReferenceApiController.php10
-rw-r--r--core/Controller/TaskProcessingApiController.php46
-rw-r--r--core/Controller/TeamsApiController.php12
-rw-r--r--core/Controller/TextProcessingApiController.php9
-rw-r--r--core/Controller/TextToImageApiController.php7
-rw-r--r--core/Controller/TranslationApiController.php4
-rw-r--r--core/Controller/UnifiedSearchController.php2
-rw-r--r--core/Controller/WhatsNewController.php4
-rw-r--r--core/Controller/WipeController.php4
-rw-r--r--core/ResponseDefinitions.php31
-rw-r--r--core/openapi-ex_app.json20
-rw-r--r--core/openapi-full.json20
-rw-r--r--core/openapi.json20
-rw-r--r--lib/private/AppConfig.php4
-rw-r--r--lib/private/Files/Template/TemplateManager.php7
-rw-r--r--lib/private/Group/Backend.php2
-rw-r--r--lib/private/Group/Database.php2
-rw-r--r--lib/private/Group/Manager.php4
-rw-r--r--lib/private/OCM/Model/OCMProvider.php12
-rw-r--r--lib/private/OCM/Model/OCMResource.php8
-rw-r--r--lib/private/Search/SearchComposer.php6
-rw-r--r--lib/private/Tags.php6
-rw-r--r--lib/private/Teams/TeamManager.php2
-rw-r--r--lib/private/Updater/ChangesCheck.php2
-rw-r--r--lib/private/legacy/OC_App.php2
-rw-r--r--lib/public/Dashboard/IAPIWidget.php4
-rw-r--r--lib/public/Dashboard/IButtonWidget.php2
-rw-r--r--lib/public/Dashboard/Model/WidgetItem.php10
-rw-r--r--lib/public/Files/Template/Field.php9
-rw-r--r--lib/public/Files/Template/Fields/CheckBoxField.php9
-rw-r--r--lib/public/Files/Template/Fields/RichTextField.php9
-rw-r--r--lib/public/Files/Template/ITemplateManager.php2
-rw-r--r--lib/public/Files/Template/Template.php28
-rw-r--r--lib/public/Files/Template/TemplateFileCreator.php4
-rw-r--r--lib/public/GroupInterface.php2
-rw-r--r--lib/public/IAppConfig.php4
-rw-r--r--lib/public/ITags.php6
-rw-r--r--lib/public/OCM/IOCMProvider.php6
-rw-r--r--lib/public/OCM/IOCMResource.php6
-rw-r--r--lib/public/TaskProcessing/IManager.php2
-rw-r--r--lib/public/TaskProcessing/Task.php4
-rw-r--r--lib/public/Teams/ITeamManager.php2
109 files changed, 698 insertions, 448 deletions
diff --git a/apps/cloud_federation_api/lib/Capabilities.php b/apps/cloud_federation_api/lib/Capabilities.php
index d5cb30bdc3f..ca4ea928cb8 100644
--- a/apps/cloud_federation_api/lib/Capabilities.php
+++ b/apps/cloud_federation_api/lib/Capabilities.php
@@ -31,11 +31,11 @@ class Capabilities implements ICapability {
* enabled: bool,
* apiVersion: string,
* endPoint: string,
- * resourceTypes: array{
+ * resourceTypes: list<array{
* name: string,
- * shareTypes: string[],
+ * shareTypes: list<string>,
* protocols: array<string, string>
- * }[],
+ * }>,
* },
* }
* @throws OCMArgumentException
diff --git a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
index 4cd668c29a0..a7b17f010ce 100644
--- a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
+++ b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
@@ -67,7 +67,7 @@ class RequestHandlerController extends Controller {
* @param string|null $ownerDisplayName Display name of the user who shared the item
* @param string|null $sharedBy Provider specific UID of the user who shared the resource
* @param string|null $sharedByDisplayName Display name of the user who shared the resource
- * @param array{name: string[], options: array<string, mixed>} $protocol e,.g. ['name' => 'webdav', 'options' => ['username' => 'john', 'permissions' => 31]]
+ * @param array{name: list<string>, options: array<string, mixed>} $protocol e,.g. ['name' => 'webdav', 'options' => ['username' => 'john', 'permissions' => 31]]
* @param string $shareType 'group' or 'user' share
* @param string $resourceType 'file', 'calendar',...
*
diff --git a/apps/cloud_federation_api/lib/ResponseDefinitions.php b/apps/cloud_federation_api/lib/ResponseDefinitions.php
index 80195c54137..b17f5aadc1d 100644
--- a/apps/cloud_federation_api/lib/ResponseDefinitions.php
+++ b/apps/cloud_federation_api/lib/ResponseDefinitions.php
@@ -20,10 +20,10 @@ namespace OCA\CloudFederationAPI;
* }
*
* @psalm-type CloudFederationAPIValidationError = CloudFederationAPIError&array{
- * validationErrors: array{
+ * validationErrors: list<array{
* name: string,
* message: string|null,
- * }[],
+ * }>,
* }
*/
class ResponseDefinitions {
diff --git a/apps/dashboard/lib/Controller/DashboardApiController.php b/apps/dashboard/lib/Controller/DashboardApiController.php
index c3d91fd9d34..d31cede85b7 100644
--- a/apps/dashboard/lib/Controller/DashboardApiController.php
+++ b/apps/dashboard/lib/Controller/DashboardApiController.php
@@ -74,8 +74,8 @@ class DashboardApiController extends OCSController {
* @param array<string, string> $sinceIds Array indexed by widget Ids, contains date/id from which we want the new items
* @param int $limit Limit number of result items per widget
* @psalm-param int<1, 30> $limit
- * @param string[] $widgets Limit results to specific widgets
- * @return DataResponse<Http::STATUS_OK, array<string, DashboardWidgetItem[]>, array{}>
+ * @param list<string> $widgets Limit results to specific widgets
+ * @return DataResponse<Http::STATUS_OK, array<string, list<DashboardWidgetItem>>, array{}>
*
* 200: Widget items returned
*/
@@ -102,7 +102,7 @@ class DashboardApiController extends OCSController {
* @param array<string, string> $sinceIds Array indexed by widget Ids, contains date/id from which we want the new items
* @param int $limit Limit number of result items per widget, not more than 30 are allowed
* @psalm-param int<1, 30> $limit
- * @param string[] $widgets Limit results to specific widgets
+ * @param list<string> $widgets Limit results to specific widgets
* @return DataResponse<Http::STATUS_OK, array<string, DashboardWidgetItems>, array{}>
*
* 200: Widget items returned
diff --git a/apps/dashboard/lib/ResponseDefinitions.php b/apps/dashboard/lib/ResponseDefinitions.php
index df76efdab5a..be5a4d56883 100644
--- a/apps/dashboard/lib/ResponseDefinitions.php
+++ b/apps/dashboard/lib/ResponseDefinitions.php
@@ -18,13 +18,13 @@ namespace OCA\Dashboard;
* icon_url: string,
* widget_url: ?string,
* item_icons_round: bool,
- * item_api_versions: int[],
+ * item_api_versions: list<int>,
* reload_interval: int,
- * buttons?: array{
+ * buttons?: list<array{
* type: string,
* text: string,
* link: string,
- * }[],
+ * }>,
* }
*
* @psalm-type DashboardWidgetItem = array{
@@ -37,7 +37,7 @@ namespace OCA\Dashboard;
* }
*
* @psalm-type DashboardWidgetItems = array{
- * items: DashboardWidgetItem[],
+ * items: list<DashboardWidgetItem>,
* emptyContentMessage: string,
* halfEmptyContentMessage: string,
* }
diff --git a/apps/dav/lib/Controller/UpcomingEventsController.php b/apps/dav/lib/Controller/UpcomingEventsController.php
index c8eb39abb17..a5d54f44754 100644
--- a/apps/dav/lib/Controller/UpcomingEventsController.php
+++ b/apps/dav/lib/Controller/UpcomingEventsController.php
@@ -35,7 +35,7 @@ class UpcomingEventsController extends OCSController {
* Get information about upcoming events
*
* @param string|null $location location/URL to filter by
- * @return DataResponse<Http::STATUS_OK, array{events: DAVUpcomingEvent[]}, array{}>|DataResponse<Http::STATUS_UNAUTHORIZED, null, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{events: list<DAVUpcomingEvent>}, array{}>|DataResponse<Http::STATUS_UNAUTHORIZED, null, array{}>
*
* 200: Upcoming events
* 401: When not authenticated
@@ -47,10 +47,10 @@ class UpcomingEventsController extends OCSController {
}
return new DataResponse([
- 'events' => array_map(fn (UpcomingEvent $e) => $e->jsonSerialize(), $this->service->getEvents(
+ 'events' => array_values(array_map(fn (UpcomingEvent $e) => $e->jsonSerialize(), $this->service->getEvents(
$this->userId,
$location,
- )),
+ ))),
]);
}
diff --git a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
index 222c6490b83..63de8ff605e 100644
--- a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
+++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
@@ -72,7 +72,7 @@ class RequestHandlerController extends OCSController {
* @param int|null $remoteId ID of the remote
* @param string|null $sharedByFederatedId Federated ID of the sender
* @param string|null $ownerFederatedId Federated ID of the receiver
- * @return Http\DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return Http\DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Share created successfully
@@ -186,7 +186,7 @@ class RequestHandlerController extends OCSController {
*
* @param int $id ID of the remote share
* @param string|null $token Shared secret between servers
- * @return Http\DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return Http\DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
* @throws ShareNotFound
* @throws HintException
@@ -221,7 +221,7 @@ class RequestHandlerController extends OCSController {
*
* @param int $id ID of the remote share
* @param string|null $token Shared secret between servers
- * @return Http\DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return Http\DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Share declined successfully
@@ -254,7 +254,7 @@ class RequestHandlerController extends OCSController {
*
* @param int $id ID of the share
* @param string|null $token Shared secret between servers
- * @return Http\DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return Http\DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Share unshared successfully
@@ -290,7 +290,7 @@ class RequestHandlerController extends OCSController {
*
* @param int $id ID of the share
* @param string|null $token Shared secret between servers
- * @return Http\DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return Http\DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSBadRequestException Revoking the share is not possible
*
* 200: Share revoked successfully
@@ -332,7 +332,7 @@ class RequestHandlerController extends OCSController {
* @param int $id ID of the share
* @param string|null $token Shared secret between servers
* @param int|null $permissions New permissions
- * @return Http\DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return Http\DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSBadRequestException Updating permissions is not possible
*
* 200: Permissions updated successfully
diff --git a/apps/federation/lib/Controller/OCSAuthAPIController.php b/apps/federation/lib/Controller/OCSAuthAPIController.php
index 0aa3f8bd148..44725fa0dba 100644
--- a/apps/federation/lib/Controller/OCSAuthAPIController.php
+++ b/apps/federation/lib/Controller/OCSAuthAPIController.php
@@ -52,7 +52,7 @@ class OCSAuthAPIController extends OCSController {
*
* @param string $url URL of the server
* @param string $token Token of the server
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSForbiddenException Requesting shared secret is not allowed
*
* 200: Shared secret requested successfully
@@ -87,7 +87,7 @@ class OCSAuthAPIController extends OCSController {
*
* @param string $url URL of the server
* @param string $token Token of the server
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSForbiddenException Requesting shared secret is not allowed
*
* 200: Shared secret requested successfully
diff --git a/apps/files/lib/Capabilities.php b/apps/files/lib/Capabilities.php
index d20d348a9f5..16ea42eae22 100644
--- a/apps/files/lib/Capabilities.php
+++ b/apps/files/lib/Capabilities.php
@@ -21,7 +21,7 @@ class Capabilities implements ICapability {
/**
* Return this classes capabilities
*
- * @return array{files: array{'$comment': ?string, bigfilechunking: bool, blacklisted_files: array<mixed>, forbidden_filenames: list<string>, forbidden_filename_basenames: list<string>, forbidden_filename_characters: list<string>, forbidden_filename_extensions: list<string>, chunked_upload: array{max_size: int, max_parallel_count: int}}}
+ * @return array{files: array{'$comment': ?string, bigfilechunking: bool, blacklisted_files: list<mixed>, forbidden_filenames: list<string>, forbidden_filename_basenames: list<string>, forbidden_filename_characters: list<string>, forbidden_filename_extensions: list<string>, chunked_upload: array{max_size: int, max_parallel_count: int}}}
*/
public function getCapabilities(): array {
return [
diff --git a/apps/files/lib/Controller/DirectEditingController.php b/apps/files/lib/Controller/DirectEditingController.php
index 63f29d3ba2a..2c910006df5 100644
--- a/apps/files/lib/Controller/DirectEditingController.php
+++ b/apps/files/lib/Controller/DirectEditingController.php
@@ -36,7 +36,7 @@ class DirectEditingController extends OCSController {
/**
* Get the direct editing capabilities
- * @return DataResponse<Http::STATUS_OK, array{editors: array<string, array{id: string, name: string, mimetypes: string[], optionalMimetypes: string[], secure: bool}>, creators: array<string, array{id: string, editor: string, name: string, extension: string, templates: bool, mimetypes: string[]}>}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{editors: array<string, array{id: string, name: string, mimetypes: list<string>, optionalMimetypes: list<string>, secure: bool}>, creators: array<string, array{id: string, editor: string, name: string, extension: string, templates: bool, mimetypes: list<string>}>}, array{}>
*
* 200: Direct editing capabilities returned
*/
diff --git a/apps/files/lib/Controller/OpenLocalEditorController.php b/apps/files/lib/Controller/OpenLocalEditorController.php
index dae321ae437..b000304eef6 100644
--- a/apps/files/lib/Controller/OpenLocalEditorController.php
+++ b/apps/files/lib/Controller/OpenLocalEditorController.php
@@ -46,7 +46,7 @@ class OpenLocalEditorController extends OCSController {
*
* @param string $path Path of the file
*
- * @return DataResponse<Http::STATUS_OK, array{userId: ?string, pathHash: string, expirationTime: int, token: string}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{userId: ?string, pathHash: string, expirationTime: int, token: string}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, list<empty>, array{}>
*
* 200: Local editor returned
*/
@@ -91,7 +91,7 @@ class OpenLocalEditorController extends OCSController {
* @param string $path Path of the file
* @param string $token Token of the local editor
*
- * @return DataResponse<Http::STATUS_OK, array{userId: string, pathHash: string, expirationTime: int, token: string}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{userId: string, pathHash: string, expirationTime: int, token: string}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Local editor validated successfully
* 404: Local editor not found
diff --git a/apps/files/lib/Controller/TemplateController.php b/apps/files/lib/Controller/TemplateController.php
index 551c9c54c4b..3321fb5f119 100644
--- a/apps/files/lib/Controller/TemplateController.php
+++ b/apps/files/lib/Controller/TemplateController.php
@@ -16,13 +16,16 @@ use OCP\AppFramework\OCS\OCSForbiddenException;
use OCP\AppFramework\OCSController;
use OCP\Files\GenericFileException;
use OCP\Files\Template\ITemplateManager;
+use OCP\Files\Template\Template;
use OCP\Files\Template\TemplateFileCreator;
use OCP\IRequest;
/**
* @psalm-import-type FilesTemplateFile from ResponseDefinitions
* @psalm-import-type FilesTemplateFileCreator from ResponseDefinitions
+ * @psalm-import-type FilesTemplateFileCreatorWithTemplates from ResponseDefinitions
* @psalm-import-type FilesTemplateField from ResponseDefinitions
+ * @psalm-import-type FilesTemplate from ResponseDefinitions
*/
class TemplateController extends OCSController {
public function __construct(
@@ -36,13 +39,17 @@ class TemplateController extends OCSController {
/**
* List the available templates
*
- * @return DataResponse<Http::STATUS_OK, array<FilesTemplateFileCreator>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<FilesTemplateFileCreatorWithTemplates>, array{}>
*
* 200: Available templates returned
*/
#[NoAdminRequired]
public function list(): DataResponse {
- return new DataResponse($this->templateManager->listTemplates());
+ /* Convert embedded Template instances to arrays to match return type */
+ return new DataResponse(array_map(static function (array $templateFileCreator) {
+ $templateFileCreator['templates'] = array_map(static fn (Template $template) => $template->jsonSerialize(), $templateFileCreator['templates']);
+ return $templateFileCreator;
+ }, $this->templateManager->listTemplates()));
}
/**
@@ -51,7 +58,7 @@ class TemplateController extends OCSController {
* @param string $filePath Path of the file
* @param string $templatePath Name of the template
* @param string $templateType Type of the template
- * @param FilesTemplateField[] $templateFields Fields of the template
+ * @param list<FilesTemplateField> $templateFields Fields of the template
*
* @return DataResponse<Http::STATUS_OK, FilesTemplateFile, array{}>
* @throws OCSForbiddenException Creating template is not allowed
@@ -82,7 +89,7 @@ class TemplateController extends OCSController {
* @param string $templatePath Path of the template directory
* @param bool $copySystemTemplates Whether to copy the system templates to the template directory
*
- * @return DataResponse<Http::STATUS_OK, array{template_path: string, templates: FilesTemplateFileCreator[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{template_path: string, templates: list<FilesTemplateFileCreator>}, array{}>
* @throws OCSForbiddenException Initializing the template directory is not allowed
*
* 200: Template directory initialized successfully
@@ -94,7 +101,7 @@ class TemplateController extends OCSController {
$templatePath = $this->templateManager->initializeTemplateDirectory($templatePath, null, $copySystemTemplates);
return new DataResponse([
'template_path' => $templatePath,
- 'templates' => array_map(fn (TemplateFileCreator $creator) => $creator->jsonSerialize(), $this->templateManager->listCreators()),
+ 'templates' => array_values(array_map(fn (TemplateFileCreator $creator) => $creator->jsonSerialize(), $this->templateManager->listCreators())),
]);
} catch (\Exception $e) {
throw new OCSForbiddenException($e->getMessage());
diff --git a/apps/files/lib/Controller/TransferOwnershipController.php b/apps/files/lib/Controller/TransferOwnershipController.php
index 1420e57e987..51a25400efb 100644
--- a/apps/files/lib/Controller/TransferOwnershipController.php
+++ b/apps/files/lib/Controller/TransferOwnershipController.php
@@ -47,7 +47,7 @@ class TransferOwnershipController extends OCSController {
* @param string $recipient Username of the recipient
* @param string $path Path of the file
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN, list<empty>, array{}>
*
* 200: Ownership transferred successfully
* 400: Transferring ownership is not possible
@@ -101,7 +101,7 @@ class TransferOwnershipController extends OCSController {
*
* @param int $id ID of the ownership transfer
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Ownership transfer accepted successfully
* 403: Accepting ownership transfer is not allowed
@@ -136,7 +136,7 @@ class TransferOwnershipController extends OCSController {
*
* @param int $id ID of the ownership transfer
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Ownership transfer rejected successfully
* 403: Rejecting ownership transfer is not allowed
diff --git a/apps/files/lib/Helper.php b/apps/files/lib/Helper.php
index ce33bbb80a6..b66dc9a2056 100644
--- a/apps/files/lib/Helper.php
+++ b/apps/files/lib/Helper.php
@@ -192,37 +192,34 @@ class Helper {
/**
* Populate the result set with file tags
*
- * @param array $fileList
- * @param string $fileIdentifier identifier attribute name for values in $fileList
- * @param ITagManager $tagManager
- * @return array file list populated with tags
+ * @psalm-template T of array{tags?: list<string>, file_source: int, ...array<string, mixed>}
+ * @param list<T> $fileList
+ * @return list<T> file list populated with tags
*/
- public static function populateTags(array $fileList, $fileIdentifier, ITagManager $tagManager) {
- $ids = [];
- foreach ($fileList as $fileData) {
- $ids[] = $fileData[$fileIdentifier];
- }
+ public static function populateTags(array $fileList, ITagManager $tagManager) {
$tagger = $tagManager->load('files');
- $tags = $tagger->getTagsForObjects($ids);
+ $tags = $tagger->getTagsForObjects(array_map(static fn (array $fileData) => $fileData['file_source'], $fileList));
if (!is_array($tags)) {
throw new \UnexpectedValueException('$tags must be an array');
}
// Set empty tag array
- foreach ($fileList as $key => $fileData) {
- $fileList[$key]['tags'] = [];
+ foreach ($fileList as &$fileData) {
+ $fileData['tags'] = [];
}
+ unset($fileData);
if (!empty($tags)) {
foreach ($tags as $fileId => $fileTags) {
- foreach ($fileList as $key => $fileData) {
- if ($fileId !== $fileData[$fileIdentifier]) {
+ foreach ($fileList as &$fileData) {
+ if ($fileId !== $fileData['file_source']) {
continue;
}
- $fileList[$key]['tags'] = $fileTags;
+ $fileData['tags'] = $fileTags;
}
+ unset($fileData);
}
}
diff --git a/apps/files/lib/ResponseDefinitions.php b/apps/files/lib/ResponseDefinitions.php
index a05cbb75b21..c5d094e7bd8 100644
--- a/apps/files/lib/ResponseDefinitions.php
+++ b/apps/files/lib/ResponseDefinitions.php
@@ -22,21 +22,45 @@ namespace OCA\Files;
* hasPreview: bool,
* }
*
+ * @psalm-type FilesTemplateField = array{
+ * index: string,
+ * type: string,
+ * alias: ?string,
+ * tag: ?string,
+ * id: ?int,
+ * content?: string,
+ * checked?: bool,
+ * }
+ *
+ * @psalm-type FilesTemplate = array{
+ * templateType: string,
+ * templateId: string,
+ * basename: string,
+ * etag: string,
+ * fileid: int,
+ * filename: string,
+ * lastmod: int,
+ * mime: string,
+ * size: int|float,
+ * type: string,
+ * hasPreview: bool,
+ * previewUrl: ?string,
+ * fields: list<FilesTemplateField>,
+ * }
+ *
* @psalm-type FilesTemplateFileCreator = array{
* app: string,
* label: string,
* extension: string,
* iconClass: ?string,
* iconSvgInline: ?string,
- * mimetypes: string[],
+ * mimetypes: list<string>,
* ratio: ?float,
* actionLabel: string,
* }
*
- * @psalm-type FilesTemplateField = array{
- * index: string,
- * content: string,
- * type: string,
+ * @psalm-type FilesTemplateFileCreatorWithTemplates = FilesTemplateFileCreator&array{
+ * templates: list<FilesTemplate>,
* }
*
* @psalm-type FilesFolderTree = list<array{
diff --git a/apps/files/openapi.json b/apps/files/openapi.json
index ded6ebd95e2..2c33097438f 100644
--- a/apps/files/openapi.json
+++ b/apps/files/openapi.json
@@ -170,22 +170,114 @@
}
}
},
+ "Template": {
+ "type": "object",
+ "required": [
+ "templateType",
+ "templateId",
+ "basename",
+ "etag",
+ "fileid",
+ "filename",
+ "lastmod",
+ "mime",
+ "size",
+ "type",
+ "hasPreview",
+ "previewUrl",
+ "fields"
+ ],
+ "properties": {
+ "templateType": {
+ "type": "string"
+ },
+ "templateId": {
+ "type": "string"
+ },
+ "basename": {
+ "type": "string"
+ },
+ "etag": {
+ "type": "string"
+ },
+ "fileid": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "filename": {
+ "type": "string"
+ },
+ "lastmod": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "mime": {
+ "type": "string"
+ },
+ "size": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "format": "int64"
+ },
+ {
+ "type": "number",
+ "format": "double"
+ }
+ ]
+ },
+ "type": {
+ "type": "string"
+ },
+ "hasPreview": {
+ "type": "boolean"
+ },
+ "previewUrl": {
+ "type": "string",
+ "nullable": true
+ },
+ "fields": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/TemplateField"
+ }
+ }
+ }
+ },
"TemplateField": {
"type": "object",
"required": [
"index",
- "content",
- "type"
+ "type",
+ "alias",
+ "tag",
+ "id"
],
"properties": {
"index": {
"type": "string"
},
- "content": {
+ "type": {
"type": "string"
},
- "type": {
+ "alias": {
+ "type": "string",
+ "nullable": true
+ },
+ "tag": {
+ "type": "string",
+ "nullable": true
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ },
+ "content": {
"type": "string"
+ },
+ "checked": {
+ "type": "boolean"
}
}
},
@@ -281,6 +373,27 @@
"type": "string"
}
}
+ },
+ "TemplateFileCreatorWithTemplates": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TemplateFileCreator"
+ },
+ {
+ "type": "object",
+ "required": [
+ "templates"
+ ],
+ "properties": {
+ "templates": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Template"
+ }
+ }
+ }
+ }
+ ]
}
}
},
@@ -1075,7 +1188,7 @@
"data": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/TemplateFileCreator"
+ "$ref": "#/components/schemas/TemplateFileCreatorWithTemplates"
}
}
}
diff --git a/apps/files/tests/HelperTest.php b/apps/files/tests/HelperTest.php
index 27b1de1322f..0cf2812f816 100644
--- a/apps/files/tests/HelperTest.php
+++ b/apps/files/tests/HelperTest.php
@@ -104,9 +104,9 @@ class HelperTest extends \Test\TestCase {
->willReturn($tagger);
$data = [
- ['id' => 10],
- ['id' => 22, 'foo' => 'bar'],
- ['id' => 42, 'x' => 'y'],
+ ['file_source' => 10],
+ ['file_source' => 22, 'foo' => 'bar'],
+ ['file_source' => 42, 'x' => 'y'],
];
$tags = [
@@ -118,12 +118,12 @@ class HelperTest extends \Test\TestCase {
->with([10, 22, 42])
->willReturn($tags);
- $result = Helper::populateTags($data, 'id', $tagManager);
+ $result = Helper::populateTags($data, $tagManager);
$this->assertSame([
- ['id' => 10, 'tags' => ['tag3']],
- ['id' => 22, 'foo' => 'bar', 'tags' => []],
- ['id' => 42, 'x' => 'y', 'tags' => ['tag1', 'tag2']],
+ ['file_source' => 10, 'tags' => ['tag3']],
+ ['file_source' => 22, 'foo' => 'bar', 'tags' => []],
+ ['file_source' => 42, 'x' => 'y', 'tags' => ['tag1', 'tag2']],
], $result);
}
}
diff --git a/apps/files_external/lib/Controller/ApiController.php b/apps/files_external/lib/Controller/ApiController.php
index 5a7eddf1540..49547357e6b 100644
--- a/apps/files_external/lib/Controller/ApiController.php
+++ b/apps/files_external/lib/Controller/ApiController.php
@@ -74,7 +74,7 @@ class ApiController extends OCSController {
/**
* Get the mount points visible for this user
*
- * @return DataResponse<Http::STATUS_OK, Files_ExternalMount[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<Files_ExternalMount>, array{}>
*
* 200: User mounts returned
*/
diff --git a/apps/files_external/lib/Lib/StorageConfig.php b/apps/files_external/lib/Lib/StorageConfig.php
index 12523937071..a9a03528b8f 100644
--- a/apps/files_external/lib/Lib/StorageConfig.php
+++ b/apps/files_external/lib/Lib/StorageConfig.php
@@ -82,14 +82,14 @@ class StorageConfig implements \JsonSerializable {
/**
* List of users who have access to this storage
*
- * @var string[]
+ * @var list<string>
*/
private $applicableUsers = [];
/**
* List of groups that have access to this storage
*
- * @var string[]
+ * @var list<string>
*/
private $applicableGroups = [];
@@ -256,7 +256,7 @@ class StorageConfig implements \JsonSerializable {
/**
* Returns the users for which to mount this storage
*
- * @return string[] applicable users
+ * @return list<string> applicable users
*/
public function getApplicableUsers() {
return $this->applicableUsers;
@@ -265,7 +265,7 @@ class StorageConfig implements \JsonSerializable {
/**
* Sets the users for which to mount this storage
*
- * @param string[]|null $applicableUsers applicable users
+ * @param list<string>|null $applicableUsers applicable users
*/
public function setApplicableUsers($applicableUsers) {
if (is_null($applicableUsers)) {
@@ -277,7 +277,7 @@ class StorageConfig implements \JsonSerializable {
/**
* Returns the groups for which to mount this storage
*
- * @return string[] applicable groups
+ * @return list<string> applicable groups
*/
public function getApplicableGroups() {
return $this->applicableGroups;
@@ -286,7 +286,7 @@ class StorageConfig implements \JsonSerializable {
/**
* Sets the groups for which to mount this storage
*
- * @param string[]|null $applicableGroups applicable groups
+ * @param list<string>|null $applicableGroups applicable groups
*/
public function setApplicableGroups($applicableGroups) {
if (is_null($applicableGroups)) {
diff --git a/apps/files_external/lib/ResponseDefinitions.php b/apps/files_external/lib/ResponseDefinitions.php
index e84b985b448..26a0965f1fc 100644
--- a/apps/files_external/lib/ResponseDefinitions.php
+++ b/apps/files_external/lib/ResponseDefinitions.php
@@ -11,8 +11,8 @@ namespace OCA\Files_External;
/**
* @psalm-type Files_ExternalStorageConfig = array{
- * applicableGroups?: string[],
- * applicableUsers?: string[],
+ * applicableGroups?: list<string>,
+ * applicableUsers?: list<string>,
* authMechanism: string,
* backend: string,
* backendOptions: array<string, mixed>,
diff --git a/apps/files_reminders/lib/Controller/ApiController.php b/apps/files_reminders/lib/Controller/ApiController.php
index a7d02b936c9..dbc340610b2 100644
--- a/apps/files_reminders/lib/Controller/ApiController.php
+++ b/apps/files_reminders/lib/Controller/ApiController.php
@@ -39,7 +39,7 @@ class ApiController extends OCSController {
* Get a reminder
*
* @param int $fileId ID of the file
- * @return DataResponse<Http::STATUS_OK, array{dueDate: ?string}, array{}>|DataResponse<Http::STATUS_UNAUTHORIZED, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{dueDate: ?string}, array{}>|DataResponse<Http::STATUS_UNAUTHORIZED, list<empty>, array{}>
*
* 200: Reminder returned
* 401: Account not found
@@ -71,7 +71,7 @@ class ApiController extends OCSController {
* @param int $fileId ID of the file
* @param string $dueDate ISO 8601 formatted date time string
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_CREATED|Http::STATUS_BAD_REQUEST|Http::STATUS_UNAUTHORIZED|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_CREATED|Http::STATUS_BAD_REQUEST|Http::STATUS_UNAUTHORIZED|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Reminder updated
* 201: Reminder created successfully
@@ -109,7 +109,7 @@ class ApiController extends OCSController {
*
* @param int $fileId ID of the file
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_UNAUTHORIZED|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_UNAUTHORIZED|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Reminder deleted successfully
* 401: Account not found
diff --git a/apps/files_sharing/lib/Controller/DeletedShareAPIController.php b/apps/files_sharing/lib/Controller/DeletedShareAPIController.php
index 9f80d285d4d..8d93afa4e04 100644
--- a/apps/files_sharing/lib/Controller/DeletedShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/DeletedShareAPIController.php
@@ -135,7 +135,7 @@ class DeletedShareAPIController extends OCSController {
/**
* Get a list of all deleted shares
*
- * @return DataResponse<Http::STATUS_OK, Files_SharingDeletedShare[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<Files_SharingDeletedShare>, array{}>
*
* 200: Deleted shares returned
*/
@@ -148,9 +148,9 @@ class DeletedShareAPIController extends OCSController {
$shares = array_merge($groupShares, $roomShares, $deckShares, $sciencemeshShares);
- $shares = array_map(function (IShare $share) {
+ $shares = array_values(array_map(function (IShare $share) {
return $this->formatShare($share);
- }, $shares);
+ }, $shares));
return new DataResponse($shares);
}
@@ -159,7 +159,7 @@ class DeletedShareAPIController extends OCSController {
* Undelete a deleted share
*
* @param string $id ID of the share
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
* @throws OCSNotFoundException Share not found
*
diff --git a/apps/files_sharing/lib/Controller/PublicPreviewController.php b/apps/files_sharing/lib/Controller/PublicPreviewController.php
index da71aca904c..8e8ee3768cb 100644
--- a/apps/files_sharing/lib/Controller/PublicPreviewController.php
+++ b/apps/files_sharing/lib/Controller/PublicPreviewController.php
@@ -62,7 +62,7 @@ class PublicPreviewController extends PublicShareController {
* @param int $x Width of the preview
* @param int $y Height of the preview
* @param bool $a Whether to not crop the preview
- * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Preview returned
* 400: Getting preview is not possible
@@ -134,7 +134,7 @@ class PublicPreviewController extends PublicShareController {
* Get a direct link preview for a shared file
*
* @param string $token Token of the share
- * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Preview returned
* 400: Getting preview is not possible
diff --git a/apps/files_sharing/lib/Controller/RemoteController.php b/apps/files_sharing/lib/Controller/RemoteController.php
index cdac35e0d9c..e23ae51f219 100644
--- a/apps/files_sharing/lib/Controller/RemoteController.php
+++ b/apps/files_sharing/lib/Controller/RemoteController.php
@@ -41,7 +41,7 @@ class RemoteController extends OCSController {
/**
* Get list of pending remote shares
*
- * @return DataResponse<Http::STATUS_OK, Files_SharingRemoteShare[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<Files_SharingRemoteShare>, array{}>
*
* 200: Pending remote shares returned
*/
@@ -54,7 +54,7 @@ class RemoteController extends OCSController {
* Accept a remote share
*
* @param int $id ID of the share
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSNotFoundException Share not found
*
* 200: Share accepted successfully
@@ -75,7 +75,7 @@ class RemoteController extends OCSController {
* Decline a remote share
*
* @param int $id ID of the share
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSNotFoundException Share not found
*
* 200: Share declined successfully
@@ -116,14 +116,14 @@ class RemoteController extends OCSController {
/**
* Get a list of accepted remote shares
*
- * @return DataResponse<Http::STATUS_OK, Files_SharingRemoteShare[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<Files_SharingRemoteShare>, array{}>
*
* 200: Accepted remote shares returned
*/
#[NoAdminRequired]
public function getShares() {
$shares = $this->externalManager->getAcceptedShares();
- $shares = array_map('self::extendShareInfo', $shares);
+ $shares = array_map(self::extendShareInfo(...), $shares);
return new DataResponse($shares);
}
@@ -153,7 +153,7 @@ class RemoteController extends OCSController {
* Unshare a remote share
*
* @param int $id ID of the share
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSNotFoundException Share not found
* @throws OCSForbiddenException Unsharing is not possible
*
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index 077eb4b35a3..71f73f777a5 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -351,10 +351,10 @@ class ShareAPIController extends OCSController {
/**
- * @param array $shares
- * @param array|null $updatedDisplayName
+ * @param list<Files_SharingShare> $shares
+ * @param array<string, string>|null $updatedDisplayName
*
- * @return array
+ * @return list<Files_SharingShare>
*/
private function fixMissingDisplayName(array $shares, ?array $updatedDisplayName = null): array {
$userIds = $updated = [];
@@ -450,7 +450,7 @@ class ShareAPIController extends OCSController {
*
* @param string $id ID of the share
* @param bool $include_tags Include tags in the share
- * @return DataResponse<Http::STATUS_OK, Files_SharingShare, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<Files_SharingShare>, array{}>
* @throws OCSNotFoundException Share not found
*
* 200: Share returned
@@ -468,7 +468,7 @@ class ShareAPIController extends OCSController {
$share = $this->formatShare($share);
if ($include_tags) {
- $share = Helper::populateTags([$share], 'file_source', \OC::$server->getTagManager());
+ $share = Helper::populateTags([$share], \OC::$server->getTagManager());
} else {
$share = [$share];
}
@@ -486,7 +486,7 @@ class ShareAPIController extends OCSController {
* Delete a share
*
* @param string $id ID of the share
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSNotFoundException Share not found
* @throws OCSForbiddenException Missing permissions to delete the share
*
@@ -828,7 +828,7 @@ class ShareAPIController extends OCSController {
* @param null|Node $node
* @param boolean $includeTags
*
- * @return Files_SharingShare[]
+ * @return list<Files_SharingShare>
*/
private function getSharedWithMe($node, bool $includeTags): array {
$userShares = $this->shareManager->getSharedWith($this->userId, IShare::TYPE_USER, $node, -1, 0);
@@ -856,7 +856,7 @@ class ShareAPIController extends OCSController {
}
if ($includeTags) {
- $formatted = Helper::populateTags($formatted, 'file_source', \OC::$server->getTagManager());
+ $formatted = Helper::populateTags($formatted, \OC::$server->getTagManager());
}
return $formatted;
@@ -865,7 +865,7 @@ class ShareAPIController extends OCSController {
/**
* @param Node $folder
*
- * @return Files_SharingShare[]
+ * @return list<Files_SharingShare>
* @throws OCSBadRequestException
* @throws NotFoundException
*/
@@ -925,7 +925,7 @@ class ShareAPIController extends OCSController {
* @param string $path Get shares for a specific path
* @param string $include_tags Include tags in the share
*
- * @return DataResponse<Http::STATUS_OK, Files_SharingShare[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<Files_SharingShare>, array{}>
* @throws OCSNotFoundException The folder was not found or is inaccessible
*
* 200: Shares returned
@@ -974,7 +974,7 @@ class ShareAPIController extends OCSController {
* @param bool $subFiles
* @param bool $includeTags
*
- * @return Files_SharingShare[]
+ * @return list<Files_SharingShare>
* @throws NotFoundException
* @throws OCSBadRequestException
*/
@@ -1045,7 +1045,7 @@ class ShareAPIController extends OCSController {
if ($includeTags) {
$formatted =
- Helper::populateTags($formatted, 'file_source', \OC::$server->getTagManager());
+ Helper::populateTags($formatted, \OC::$server->getTagManager());
}
return $formatted;
@@ -1057,7 +1057,7 @@ class ShareAPIController extends OCSController {
*
* @param string $path Path all shares will be relative to
*
- * @return DataResponse<Http::STATUS_OK, Files_SharingShare[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<Files_SharingShare>, array{}>
* @throws InvalidPathException
* @throws NotFoundException
* @throws OCSNotFoundException The given path is invalid
@@ -1371,7 +1371,7 @@ class ShareAPIController extends OCSController {
/**
* Get all shares that are still pending
*
- * @return DataResponse<Http::STATUS_OK, Files_SharingShare[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<Files_SharingShare>, array{}>
*
* 200: Pending shares returned
*/
@@ -1394,7 +1394,7 @@ class ShareAPIController extends OCSController {
}
}
- $result = array_filter(array_map(function (IShare $share) {
+ $result = array_values(array_filter(array_map(function (IShare $share) {
$userFolder = $this->rootFolder->getUserFolder($share->getSharedBy());
$node = $userFolder->getFirstNodeById($share->getNodeId());
if (!$node) {
@@ -1415,7 +1415,7 @@ class ShareAPIController extends OCSController {
}
}, $pendingShares), function ($entry) {
return $entry !== null;
- });
+ }));
return new DataResponse($result);
}
@@ -1424,7 +1424,7 @@ class ShareAPIController extends OCSController {
* Accept a share
*
* @param string $id ID of the share
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSNotFoundException Share not found
* @throws OCSException
* @throws OCSBadRequestException Share could not be accepted
@@ -2095,7 +2095,7 @@ class ShareAPIController extends OCSController {
* @throws OCSForbiddenException You are not allowed to send mail notifications
* @throws OCSBadRequestException Invalid request or wrong password
* @throws OCSException Error while sending mail notification
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
*
* 200: The email notification was sent successfully
*/
diff --git a/apps/files_sharing/lib/Controller/ShareInfoController.php b/apps/files_sharing/lib/Controller/ShareInfoController.php
index 05816a986f7..7805973f3c5 100644
--- a/apps/files_sharing/lib/Controller/ShareInfoController.php
+++ b/apps/files_sharing/lib/Controller/ShareInfoController.php
@@ -48,7 +48,7 @@ class ShareInfoController extends ApiController {
* @param string|null $password Password of the share
* @param string|null $dir Subdirectory to get info about
* @param int $depth Maximum depth to get info about
- * @return JSONResponse<Http::STATUS_OK, Files_SharingShareInfo, array{}>|JSONResponse<Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return JSONResponse<Http::STATUS_OK, Files_SharingShareInfo, array{}>|JSONResponse<Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Share info returned
* 403: Getting share info is not allowed
diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php
index 606a3d11de6..3a04dda72a1 100644
--- a/apps/files_sharing/lib/Controller/ShareesAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php
@@ -94,7 +94,7 @@ class ShareesAPIController extends OCSController {
* @param string|null $itemType Limit to specific item types
* @param int $page Page offset for searching
* @param int $perPage Limit amount of search results per page
- * @param int|int[]|null $shareType Limit to specific share types
+ * @param int|list<int>|null $shareType Limit to specific share types
* @param bool $lookup If a global lookup should be performed too
* @return DataResponse<Http::STATUS_OK, Files_SharingShareesSearchResult, array{Link?: string}>
* @throws OCSBadRequestException Invalid search parameters
@@ -300,7 +300,7 @@ class ShareesAPIController extends OCSController {
* Find recommended sharees
*
* @param string $itemType Limit to specific item types
- * @param int|int[]|null $shareType Limit to specific share types
+ * @param int|list<int>|null $shareType Limit to specific share types
* @return DataResponse<Http::STATUS_OK, Files_SharingShareesRecommendedResult, array{}>
*
* 200: Recommended sharees returned
diff --git a/apps/files_sharing/lib/External/Manager.php b/apps/files_sharing/lib/External/Manager.php
index e0d7f96cb90..e10b6c1c91f 100644
--- a/apps/files_sharing/lib/External/Manager.php
+++ b/apps/files_sharing/lib/External/Manager.php
@@ -11,6 +11,7 @@ use Doctrine\DBAL\Driver\Exception;
use OC\Files\Filesystem;
use OCA\FederatedFileSharing\Events\FederatedShareAddedEvent;
use OCA\Files_Sharing\Helper;
+use OCA\Files_Sharing\ResponseDefinitions;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Federation\ICloudFederationFactory;
@@ -30,6 +31,9 @@ use OCP\Share;
use OCP\Share\IShare;
use Psr\Log\LoggerInterface;
+/**
+ * @psalm-import-type Files_SharingRemoteShare from ResponseDefinitions
+ */
class Manager {
public const STORAGE = '\OCA\Files_Sharing\External\Storage';
@@ -686,7 +690,7 @@ class Manager {
/**
* return a list of shares which are not yet accepted by the user
*
- * @return array list of open server-to-server shares
+ * @return list<Files_SharingRemoteShare> list of open server-to-server shares
*/
public function getOpenShares() {
return $this->getShares(false);
@@ -695,7 +699,7 @@ class Manager {
/**
* return a list of shares which are accepted by the user
*
- * @return array list of accepted server-to-server shares
+ * @return list<Files_SharingRemoteShare> list of accepted server-to-server shares
*/
public function getAcceptedShares() {
return $this->getShares(true);
@@ -707,7 +711,7 @@ class Manager {
* @param bool|null $accepted True for accepted only,
* false for not accepted,
* null for all shares of the user
- * @return array list of open server-to-server shares
+ * @return list<Files_SharingRemoteShare> list of open server-to-server shares
*/
private function getShares($accepted) {
$user = $this->userManager->get($this->uid);
diff --git a/apps/files_sharing/lib/ResponseDefinitions.php b/apps/files_sharing/lib/ResponseDefinitions.php
index d412b93a135..0edf67fe042 100644
--- a/apps/files_sharing/lib/ResponseDefinitions.php
+++ b/apps/files_sharing/lib/ResponseDefinitions.php
@@ -178,38 +178,38 @@ namespace OCA\Files_Sharing;
*
* @psalm-type Files_SharingShareesSearchResult = array{
* exact: array{
- * circles: Files_SharingShareeCircle[],
- * emails: Files_SharingShareeEmail[],
- * groups: Files_SharingSharee[],
- * remote_groups: Files_SharingShareeRemoteGroup[],
- * remotes: Files_SharingShareeRemote[],
- * rooms: Files_SharingSharee[],
- * users: Files_SharingShareeUser[],
+ * circles: list<Files_SharingShareeCircle>,
+ * emails: list<Files_SharingShareeEmail>,
+ * groups: list<Files_SharingSharee>,
+ * remote_groups: list<Files_SharingShareeRemoteGroup>,
+ * remotes: list<Files_SharingShareeRemote>,
+ * rooms: list<Files_SharingSharee>,
+ * users: list<Files_SharingShareeUser>,
* },
- * circles: Files_SharingShareeCircle[],
- * emails: Files_SharingShareeEmail[],
- * groups: Files_SharingSharee[],
- * lookup: Files_SharingShareeLookup[],
- * remote_groups: Files_SharingShareeRemoteGroup[],
- * remotes: Files_SharingShareeRemote[],
- * rooms: Files_SharingSharee[],
- * users: Files_SharingShareeUser[],
+ * circles: list<Files_SharingShareeCircle>,
+ * emails: list<Files_SharingShareeEmail>,
+ * groups: list<Files_SharingSharee>,
+ * lookup: list<Files_SharingShareeLookup>,
+ * remote_groups: list<Files_SharingShareeRemoteGroup>,
+ * remotes: list<Files_SharingShareeRemote>,
+ * rooms: list<Files_SharingSharee>,
+ * users: list<Files_SharingShareeUser>,
* lookupEnabled: bool,
* }
*
* @psalm-type Files_SharingShareesRecommendedResult = array{
* exact: array{
- * emails: Files_SharingShareeEmail[],
- * groups: Files_SharingSharee[],
- * remote_groups: Files_SharingShareeRemoteGroup[],
- * remotes: Files_SharingShareeRemote[],
- * users: Files_SharingShareeUser[],
+ * emails: list<Files_SharingShareeEmail>,
+ * groups: list<Files_SharingSharee>,
+ * remote_groups: list<Files_SharingShareeRemoteGroup>,
+ * remotes: list<Files_SharingShareeRemote>,
+ * users: list<Files_SharingShareeUser>,
* },
- * emails: Files_SharingShareeEmail[],
- * groups: Files_SharingSharee[],
- * remote_groups: Files_SharingShareeRemoteGroup[],
- * remotes: Files_SharingShareeRemote[],
- * users: Files_SharingShareeUser[],
+ * emails: list<Files_SharingShareeEmail>,
+ * groups: list<Files_SharingSharee>,
+ * remote_groups: list<Files_SharingShareeRemoteGroup>,
+ * remotes: list<Files_SharingShareeRemote>,
+ * users: list<Files_SharingShareeUser>,
* }
*
* @psalm-type Files_SharingShareInfo = array{
@@ -222,7 +222,7 @@ namespace OCA\Files_Sharing;
* size: int|float,
* type: string,
* etag: string,
- * children?: array<string, mixed>[],
+ * children?: list<array<string, mixed>>,
* }
*/
class ResponseDefinitions {
diff --git a/apps/files_sharing/openapi.json b/apps/files_sharing/openapi.json
index 848b6293cc8..76063ad3f93 100644
--- a/apps/files_sharing/openapi.json
+++ b/apps/files_sharing/openapi.json
@@ -2170,7 +2170,10 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "$ref": "#/components/schemas/Share"
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Share"
+ }
}
}
}
diff --git a/apps/files_trashbin/lib/Controller/PreviewController.php b/apps/files_trashbin/lib/Controller/PreviewController.php
index d376ce80fda..a71bc4f01c7 100644
--- a/apps/files_trashbin/lib/Controller/PreviewController.php
+++ b/apps/files_trashbin/lib/Controller/PreviewController.php
@@ -46,7 +46,7 @@ class PreviewController extends Controller {
* @param int $y Height of the preview
* @param bool $a Whether to not crop the preview
*
- * @return Http\FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return Http\FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Preview returned
* 400: Getting preview is not possible
diff --git a/apps/files_versions/lib/Controller/PreviewController.php b/apps/files_versions/lib/Controller/PreviewController.php
index e1d87b4b9f5..fe984376d29 100644
--- a/apps/files_versions/lib/Controller/PreviewController.php
+++ b/apps/files_versions/lib/Controller/PreviewController.php
@@ -38,7 +38,7 @@ class PreviewController extends Controller {
* @param int $x Width of the preview
* @param int $y Height of the preview
* @param string $version Version of the file to get the preview for
- * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Preview returned
* 400: Getting preview is not possible
diff --git a/apps/provisioning_api/lib/Controller/AUserData.php b/apps/provisioning_api/lib/Controller/AUserData.php
index 603c6306227..61459e40b8b 100644
--- a/apps/provisioning_api/lib/Controller/AUserData.php
+++ b/apps/provisioning_api/lib/Controller/AUserData.php
@@ -222,7 +222,7 @@ abstract class AUserData extends OCSController {
* Get the groups a user is a subadmin of
*
* @param string $userId
- * @return string[]
+ * @return list<string>
* @throws OCSException
*/
protected function getUserSubAdminGroupsData(string $userId): array {
diff --git a/apps/provisioning_api/lib/Controller/AppConfigController.php b/apps/provisioning_api/lib/Controller/AppConfigController.php
index bb161f6cb8c..d8af1f38d95 100644
--- a/apps/provisioning_api/lib/Controller/AppConfigController.php
+++ b/apps/provisioning_api/lib/Controller/AppConfigController.php
@@ -44,7 +44,7 @@ class AppConfigController extends OCSController {
/**
* Get a list of apps
*
- * @return DataResponse<Http::STATUS_OK, array{data: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{data: list<string>}, array{}>
*
* 200: Apps returned
*/
@@ -58,7 +58,7 @@ class AppConfigController extends OCSController {
* Get the config keys of an app
*
* @param string $app ID of the app
- * @return DataResponse<Http::STATUS_OK, array{data: string[]}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{data: list<string>}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Keys returned
* 403: App is not allowed
@@ -105,7 +105,7 @@ class AppConfigController extends OCSController {
* @param string $app ID of the app
* @param string $key Key to update
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Value updated successfully
* 403: App or key is not allowed
@@ -154,7 +154,7 @@ class AppConfigController extends OCSController {
*
* @param string $app ID of the app
* @param string $key Key to delete
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array{data: array{message: string}}, array{}>
*
* 200: Key deleted successfully
* 403: App or key is not allowed
diff --git a/apps/provisioning_api/lib/Controller/AppsController.php b/apps/provisioning_api/lib/Controller/AppsController.php
index ae08a9cade0..04dfd8f29b1 100644
--- a/apps/provisioning_api/lib/Controller/AppsController.php
+++ b/apps/provisioning_api/lib/Controller/AppsController.php
@@ -31,18 +31,18 @@ class AppsController extends OCSController {
* Get a list of installed apps
*
* @param ?string $filter Filter for enabled or disabled apps
- * @return DataResponse<Http::STATUS_OK, array{apps: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{apps: list<string>}, array{}>
* @throws OCSException
*
* 200: Installed apps returned
*/
public function getApps(?string $filter = null): DataResponse {
$apps = (new OC_App())->listAllApps();
+ /** @var list<string> $list */
$list = [];
foreach ($apps as $app) {
$list[] = $app['id'];
}
- /** @var string[] $list */
if ($filter) {
switch ($filter) {
case 'enabled':
@@ -50,7 +50,7 @@ class AppsController extends OCSController {
break;
case 'disabled':
$enabled = OC_App::getEnabledApps();
- return new DataResponse(['apps' => array_diff($list, $enabled)]);
+ return new DataResponse(['apps' => array_values(array_diff($list, $enabled))]);
break;
default:
// Invalid filter variable
@@ -83,7 +83,7 @@ class AppsController extends OCSController {
* Enable an app
*
* @param string $app ID of the app
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: App enabled successfully
@@ -102,7 +102,7 @@ class AppsController extends OCSController {
* Disable an app
*
* @param string $app ID of the app
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
*
* 200: App disabled successfully
*/
diff --git a/apps/provisioning_api/lib/Controller/GroupsController.php b/apps/provisioning_api/lib/Controller/GroupsController.php
index 0b16c319f1d..87544cc8992 100644
--- a/apps/provisioning_api/lib/Controller/GroupsController.php
+++ b/apps/provisioning_api/lib/Controller/GroupsController.php
@@ -68,17 +68,17 @@ class GroupsController extends AUserData {
* @param string $search Text to search for
* @param ?int $limit Limit the amount of groups returned
* @param int $offset Offset for searching for groups
- * @return DataResponse<Http::STATUS_OK, array{groups: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{groups: list<string>}, array{}>
*
* 200: Groups returned
*/
#[NoAdminRequired]
public function getGroups(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$groups = $this->groupManager->search($search, $limit, $offset);
- $groups = array_map(function ($group) {
+ $groups = array_values(array_map(function ($group) {
/** @var IGroup $group */
return $group->getGID();
- }, $groups);
+ }, $groups));
return new DataResponse(['groups' => $groups]);
}
@@ -89,7 +89,7 @@ class GroupsController extends AUserData {
* @param string $search Text to search for
* @param ?int $limit Limit the amount of groups returned
* @param int $offset Offset for searching for groups
- * @return DataResponse<Http::STATUS_OK, array{groups: Provisioning_APIGroupDetails[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{groups: list<Provisioning_APIGroupDetails>}, array{}>
*
* 200: Groups details returned
*/
@@ -97,7 +97,7 @@ class GroupsController extends AUserData {
#[AuthorizedAdminSetting(settings: Sharing::class)]
public function getGroupsDetails(string $search = '', ?int $limit = null, int $offset = 0): DataResponse {
$groups = $this->groupManager->search($search, $limit, $offset);
- $groups = array_map(function ($group) {
+ $groups = array_values(array_map(function ($group) {
/** @var IGroup $group */
return [
'id' => $group->getGID(),
@@ -107,7 +107,7 @@ class GroupsController extends AUserData {
'canAdd' => $group->canAddUser(),
'canRemove' => $group->canRemoveUser(),
];
- }, $groups);
+ }, $groups));
return new DataResponse(['groups' => $groups]);
}
@@ -116,7 +116,7 @@ class GroupsController extends AUserData {
* Get a list of users in the specified group
*
* @param string $groupId ID of the group
- * @return DataResponse<Http::STATUS_OK, array{users: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{users: list<string>}, array{}>
* @throws OCSException
*
* @deprecated 14 Use getGroupUsers
@@ -132,7 +132,7 @@ class GroupsController extends AUserData {
* Get a list of users in the specified group
*
* @param string $groupId ID of the group
- * @return DataResponse<Http::STATUS_OK, array{users: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{users: list<string>}, array{}>
* @throws OCSException
* @throws OCSNotFoundException Group not found
* @throws OCSForbiddenException Missing permissions to get users in the group
@@ -163,7 +163,7 @@ class GroupsController extends AUserData {
/** @var IUser $user */
return $user->getUID();
}, $users);
- /** @var string[] $users */
+ /** @var list<string> $users */
$users = array_values($users);
return new DataResponse(['users' => $users]);
}
@@ -233,7 +233,7 @@ class GroupsController extends AUserData {
*
* @param string $groupid ID of the group
* @param string $displayname Display name of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Group created successfully
@@ -266,7 +266,7 @@ class GroupsController extends AUserData {
* @param string $groupId ID of the group
* @param string $key Key to update, only 'displayname'
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Group updated successfully
@@ -295,7 +295,7 @@ class GroupsController extends AUserData {
* Delete a group
*
* @param string $groupId ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Group deleted successfully
@@ -320,7 +320,7 @@ class GroupsController extends AUserData {
* Get the list of user IDs that are a subadmin of the group
*
* @param string $groupId ID of the group
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
* @throws OCSException
*
* 200: Sub admins returned
@@ -336,7 +336,7 @@ class GroupsController extends AUserData {
/** @var IUser[] $subadmins */
$subadmins = $this->groupManager->getSubAdmin()->getGroupsSubAdmins($targetGroup);
// New class returns IUser[] so convert back
- /** @var string[] $uids */
+ /** @var list<string> $uids */
$uids = [];
foreach ($subadmins as $user) {
$uids[] = $user->getUID();
diff --git a/apps/provisioning_api/lib/Controller/PreferencesController.php b/apps/provisioning_api/lib/Controller/PreferencesController.php
index 672aec7756c..8ae64e65b81 100644
--- a/apps/provisioning_api/lib/Controller/PreferencesController.php
+++ b/apps/provisioning_api/lib/Controller/PreferencesController.php
@@ -40,7 +40,7 @@ class PreferencesController extends OCSController {
* @param string $appId ID of the app
* @param array<string, string> $configs Key-value pairs of the preferences
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Preferences updated successfully
* 400: Preference invalid
@@ -85,7 +85,7 @@ class PreferencesController extends OCSController {
* @param string $appId ID of the app
* @param string $configKey Key of the preference
* @param string $configValue New value
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Preference updated successfully
* 400: Preference invalid
@@ -124,9 +124,9 @@ class PreferencesController extends OCSController {
* Delete multiple preferences for an app
*
* @param string $appId ID of the app
- * @param string[] $configKeys Keys to delete
+ * @param list<string> $configKeys Keys to delete
*
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Preferences deleted successfully
* 400: Preference invalid
@@ -168,7 +168,7 @@ class PreferencesController extends OCSController {
*
* @param string $appId ID of the app
* @param string $configKey Key to delete
- * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK|Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Preference deleted successfully
* 400: Preference invalid
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php
index b0cd9bfb448..9363b4ca935 100644
--- a/apps/provisioning_api/lib/Controller/UsersController.php
+++ b/apps/provisioning_api/lib/Controller/UsersController.php
@@ -97,7 +97,7 @@ class UsersController extends AUserData {
* @param string $search Text to search for
* @param int|null $limit Limit the amount of groups returned
* @param int $offset Offset for searching for groups
- * @return DataResponse<Http::STATUS_OK, array{users: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{users: list<string>}, array{}>
*
* 200: Users returned
*/
@@ -125,7 +125,7 @@ class UsersController extends AUserData {
}
}
- /** @var string[] $users */
+ /** @var list<string> $users */
$users = array_keys($users);
return new DataResponse([
@@ -341,8 +341,8 @@ class UsersController extends AUserData {
* Search users by their phone numbers
*
* @param string $location Location of the phone number (for country code)
- * @param array<string, string[]> $search Phone numbers to search for
- * @return DataResponse<Http::STATUS_OK, array<string, string>, array{}>|DataResponse<Http::STATUS_BAD_REQUEST, array<empty>, array{}>
+ * @param array<string, list<string>> $search Phone numbers to search for
+ * @return DataResponse<Http::STATUS_OK, array<string, string>, array{}>|DataResponse<Http::STATUS_BAD_REQUEST, list<empty>, array{}>
*
* 200: Users returned
* 400: Invalid location
@@ -433,8 +433,8 @@ class UsersController extends AUserData {
* @param string $password Password of the user
* @param string $displayName Display name of the user
* @param string $email Email of the user
- * @param string[] $groups Groups of the user
- * @param string[] $subadmin Groups where the user is subadmin
+ * @param list<string> $groups Groups of the user
+ * @param list<string> $subadmin Groups where the user is subadmin
* @param string $quota Quota of the user
* @param string $language Language of the user
* @param ?string $manager Manager of the user
@@ -689,7 +689,7 @@ class UsersController extends AUserData {
*
* Get a list of fields that are editable for the current user
*
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
* @throws OCSException
*
* 200: Editable fields returned
@@ -710,7 +710,7 @@ class UsersController extends AUserData {
* Get a list of fields that are editable for a user
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
* @throws OCSException
*
* 200: Editable fields for user returned
@@ -779,7 +779,7 @@ class UsersController extends AUserData {
* @param string $collectionName Collection to update
* @param string $key Key that will be updated
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User values edited successfully
@@ -884,7 +884,7 @@ class UsersController extends AUserData {
* @param string $userId ID of the user
* @param string $key Key that will be updated
* @param string $value New value for the key
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User value edited successfully
@@ -1222,7 +1222,7 @@ class UsersController extends AUserData {
*
* @param string $userId ID of the user
*
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
*
* @throws OCSException
*
@@ -1261,7 +1261,7 @@ class UsersController extends AUserData {
* Delete a user
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User deleted successfully
@@ -1301,7 +1301,7 @@ class UsersController extends AUserData {
* Disable a user
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User disabled successfully
@@ -1316,7 +1316,7 @@ class UsersController extends AUserData {
* Enable a user
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User enabled successfully
@@ -1330,7 +1330,7 @@ class UsersController extends AUserData {
/**
* @param string $userId
* @param bool $value
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*/
private function setEnabled(string $userId, bool $value): DataResponse {
@@ -1360,7 +1360,7 @@ class UsersController extends AUserData {
* Get a list of groups the user belongs to
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array{groups: string[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{groups: list<string>}, array{}>
* @throws OCSException
*
* 200: Users groups returned
@@ -1387,16 +1387,10 @@ class UsersController extends AUserData {
// Looking up someone else
if ($subAdminManager->isUserAccessible($loggedInUser, $targetUser)) {
// Return the group that the method caller is subadmin of for the user in question
- /** @var IGroup[] $getSubAdminsGroups */
- $getSubAdminsGroups = $subAdminManager->getSubAdminsGroups($loggedInUser);
- foreach ($getSubAdminsGroups as $key => $group) {
- $getSubAdminsGroups[$key] = $group->getGID();
- }
- /** @var string[] $groups */
- $groups = array_intersect(
- $getSubAdminsGroups,
+ $groups = array_values(array_intersect(
+ array_map(static fn (IGroup $group) => $group->getGID(), $subAdminManager->getSubAdminsGroups($loggedInUser)),
$this->groupManager->getUserGroupIds($targetUser)
- );
+ ));
return new DataResponse(['groups' => $groups]);
} else {
// Not permitted
@@ -1410,7 +1404,7 @@ class UsersController extends AUserData {
*
* @param string $userId ID of the user
* @param string $groupid ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User added to group successfully
@@ -1450,7 +1444,7 @@ class UsersController extends AUserData {
*
* @param string $userId ID of the user
* @param string $groupid ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User removed from group successfully
@@ -1517,7 +1511,7 @@ class UsersController extends AUserData {
*
* @param string $userId ID of the user
* @param string $groupid ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User added as group subadmin successfully
@@ -1557,7 +1551,7 @@ class UsersController extends AUserData {
*
* @param string $userId ID of the user
* @param string $groupid ID of the group
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: User removed as group subadmin successfully
@@ -1591,7 +1585,7 @@ class UsersController extends AUserData {
* Get the groups a user is a subadmin of
*
* @param string $userId ID if the user
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
* @throws OCSException
*
* 200: User subadmin groups returned
@@ -1606,7 +1600,7 @@ class UsersController extends AUserData {
* Resend the welcome message
*
* @param string $userId ID if the user
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
*
* 200: Resent welcome message successfully
diff --git a/apps/provisioning_api/lib/ResponseDefinitions.php b/apps/provisioning_api/lib/ResponseDefinitions.php
index fec68021209..afa725c110a 100644
--- a/apps/provisioning_api/lib/ResponseDefinitions.php
+++ b/apps/provisioning_api/lib/ResponseDefinitions.php
@@ -21,8 +21,8 @@ namespace OCA\Provisioning_API;
* @psalm-type Provisioning_APIUserDetailsScope = 'v2-private'|'v2-local'|'v2-federated'|'v2-published'|'private'|'contacts'|'public'
*
* @psalm-type Provisioning_APIUserDetails = array{
- * additional_mail: string[],
- * additional_mailScope?: Provisioning_APIUserDetailsScope[],
+ * additional_mail: list<string>,
+ * additional_mailScope?: list<Provisioning_APIUserDetailsScope>,
* address: string,
* addressScope?: Provisioning_APIUserDetailsScope,
* avatarScope?: Provisioning_APIUserDetailsScope,
@@ -41,7 +41,7 @@ namespace OCA\Provisioning_API;
* enabled?: bool,
* fediverse: string,
* fediverseScope?: Provisioning_APIUserDetailsScope,
- * groups: string[],
+ * groups: list<string>,
* headline: string,
* headlineScope?: Provisioning_APIUserDetailsScope,
* id: string,
@@ -62,7 +62,7 @@ namespace OCA\Provisioning_API;
* role: string,
* roleScope?: Provisioning_APIUserDetailsScope,
* storageLocation?: string,
- * subadmin: string[],
+ * subadmin: list<string>,
* twitter: string,
* twitterScope?: Provisioning_APIUserDetailsScope,
* website: string,
diff --git a/apps/sharebymail/lib/Capabilities.php b/apps/sharebymail/lib/Capabilities.php
index 5b489b7d790..67a0ec7a9de 100644
--- a/apps/sharebymail/lib/Capabilities.php
+++ b/apps/sharebymail/lib/Capabilities.php
@@ -24,7 +24,7 @@ class Capabilities implements ICapability {
/**
* @return array{
- * files_sharing: array{
+ * files_sharing?: array{
* sharebymail: array{
* enabled: bool,
* send_password_by_mail: bool,
@@ -41,7 +41,7 @@ class Capabilities implements ICapability {
* },
* }
* }
- * }|array<empty>
+ * }
*/
public function getCapabilities(): array {
if (!$this->appManager->isEnabledForUser('files_sharing')) {
diff --git a/apps/sharebymail/openapi.json b/apps/sharebymail/openapi.json
index 7bc231c0770..a64013b1924 100644
--- a/apps/sharebymail/openapi.json
+++ b/apps/sharebymail/openapi.json
@@ -21,87 +21,76 @@
},
"schemas": {
"Capabilities": {
- "oneOf": [
- {
+ "type": "object",
+ "properties": {
+ "files_sharing": {
"type": "object",
"required": [
- "files_sharing"
+ "sharebymail"
],
"properties": {
- "files_sharing": {
+ "sharebymail": {
"type": "object",
"required": [
- "sharebymail"
+ "enabled",
+ "send_password_by_mail",
+ "upload_files_drop",
+ "password",
+ "expire_date"
],
"properties": {
- "sharebymail": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "send_password_by_mail": {
+ "type": "boolean"
+ },
+ "upload_files_drop": {
+ "type": "object",
+ "required": [
+ "enabled"
+ ],
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "password": {
"type": "object",
"required": [
"enabled",
- "send_password_by_mail",
- "upload_files_drop",
- "password",
- "expire_date"
+ "enforced"
],
"properties": {
"enabled": {
"type": "boolean"
},
- "send_password_by_mail": {
+ "enforced": {
+ "type": "boolean"
+ }
+ }
+ },
+ "expire_date": {
+ "type": "object",
+ "required": [
+ "enabled",
+ "enforced"
+ ],
+ "properties": {
+ "enabled": {
"type": "boolean"
},
- "upload_files_drop": {
- "type": "object",
- "required": [
- "enabled"
- ],
- "properties": {
- "enabled": {
- "type": "boolean"
- }
- }
- },
- "password": {
- "type": "object",
- "required": [
- "enabled",
- "enforced"
- ],
- "properties": {
- "enabled": {
- "type": "boolean"
- },
- "enforced": {
- "type": "boolean"
- }
- }
- },
- "expire_date": {
- "type": "object",
- "required": [
- "enabled",
- "enforced"
- ],
- "properties": {
- "enabled": {
- "type": "boolean"
- },
- "enforced": {
- "type": "boolean"
- }
- }
+ "enforced": {
+ "type": "boolean"
}
}
}
}
}
}
- },
- {
- "type": "array",
- "maxItems": 0
}
- ]
+ }
}
}
},
diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php
index 1b02595fa39..d748a6278b4 100644
--- a/apps/theming/lib/Controller/ThemingController.php
+++ b/apps/theming/lib/Controller/ThemingController.php
@@ -417,7 +417,7 @@ class ThemingController extends Controller {
*
* @param string $app ID of the app
* @psalm-suppress LessSpecificReturnStatement The content of the Manifest doesn't need to be described in the return type
- * @return JSONResponse<Http::STATUS_OK, array{name: string, short_name: string, start_url: string, theme_color: string, background_color: string, description: string, icons: array{src: non-empty-string, type: string, sizes: string}[], display: string}, array{}>|JSONResponse<Http::STATUS_NOT_FOUND, array{}, array{}>
+ * @return JSONResponse<Http::STATUS_OK, array{name: string, short_name: string, start_url: string, theme_color: string, background_color: string, description: string, icons: list<array{src: non-empty-string, type: string, sizes: string}>, display: string}, array{}>|JSONResponse<Http::STATUS_NOT_FOUND, array{}, array{}>
*
* 200: Manifest returned
* 404: App not found
diff --git a/apps/theming/lib/Controller/UserThemeController.php b/apps/theming/lib/Controller/UserThemeController.php
index 9bcf32daa9c..1ead97f5d37 100644
--- a/apps/theming/lib/Controller/UserThemeController.php
+++ b/apps/theming/lib/Controller/UserThemeController.php
@@ -58,7 +58,7 @@ class UserThemeController extends OCSController {
* Enable theme
*
* @param string $themeId the theme ID
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSBadRequestException Enabling theme is not possible
* @throws PreConditionNotMetException
*
@@ -77,7 +77,7 @@ class UserThemeController extends OCSController {
* Disable theme
*
* @param string $themeId the theme ID
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSBadRequestException Disabling theme is not possible
* @throws PreConditionNotMetException
*
diff --git a/apps/updatenotification/lib/Controller/APIController.php b/apps/updatenotification/lib/Controller/APIController.php
index 59643e935d1..6b4f559f650 100644
--- a/apps/updatenotification/lib/Controller/APIController.php
+++ b/apps/updatenotification/lib/Controller/APIController.php
@@ -62,7 +62,7 @@ class APIController extends OCSController {
*
* @param string $newVersion Server version to check updates for
*
- * @return DataResponse<Http::STATUS_OK, array{missing: UpdateNotificationApp[], available: UpdateNotificationApp[]}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, array{appstore_disabled: bool, already_on_latest?: bool}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{missing: list<UpdateNotificationApp>, available: list<UpdateNotificationApp>}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, array{appstore_disabled: bool, already_on_latest?: bool}, array{}>
*
* 200: Apps returned
* 404: New versions not found
diff --git a/apps/user_ldap/lib/Controller/ConfigAPIController.php b/apps/user_ldap/lib/Controller/ConfigAPIController.php
index 8ce2486c153..0a019312e35 100644
--- a/apps/user_ldap/lib/Controller/ConfigAPIController.php
+++ b/apps/user_ldap/lib/Controller/ConfigAPIController.php
@@ -74,7 +74,7 @@ class ConfigAPIController extends OCSController {
* Delete a LDAP configuration
*
* @param string $configID ID of the config
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
* @throws OCSNotFoundException Config not found
*
@@ -102,7 +102,7 @@ class ConfigAPIController extends OCSController {
*
* @param string $configID ID of the config
* @param array<string, mixed> $configData New config
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSException
* @throws OCSBadRequestException Modifying config is not possible
* @throws OCSNotFoundException Config not found
diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php
index 2c99fadfcc9..0cd263edec8 100644
--- a/apps/user_ldap/lib/Group_LDAP.php
+++ b/apps/user_ldap/lib/Group_LDAP.php
@@ -638,6 +638,10 @@ class Group_LDAP extends ABackend implements GroupInterface, IGroupLDAP, IGetDis
return false;
}
+ /**
+ * @param string $uid
+ * @return list<string>
+ */
protected function getCachedGroupsForUserId(string $uid): array {
$groupStr = $this->config->getUserValue($uid, 'user_ldap', 'cached-group-memberships-' . $this->access->connection->getConfigPrefix(), '[]');
return json_decode($groupStr, true) ?? [];
@@ -650,7 +654,7 @@ class Group_LDAP extends ABackend implements GroupInterface, IGroupLDAP, IGetDis
* This function includes groups based on dynamic group membership.
*
* @param string $uid Name of the user
- * @return string[] Group names
+ * @return list<string> Group names
* @throws Exception
* @throws ServerNotAvailableException
*/
diff --git a/apps/user_ldap/lib/Group_Proxy.php b/apps/user_ldap/lib/Group_Proxy.php
index 11b7498fbed..8ed3a5dd87d 100644
--- a/apps/user_ldap/lib/Group_Proxy.php
+++ b/apps/user_ldap/lib/Group_Proxy.php
@@ -133,7 +133,7 @@ class Group_Proxy extends Proxy implements GroupInterface, IGroupLDAP, IGetDispl
* Get all groups a user belongs to
*
* @param string $uid Name of the user
- * @return string[] with group names
+ * @return list<string> with group names
*
* This function fetches all groups a user belongs to. It does not check
* if the user exists at all.
diff --git a/apps/user_status/lib/Controller/HeartbeatController.php b/apps/user_status/lib/Controller/HeartbeatController.php
index d1da035329e..30f4af6572a 100644
--- a/apps/user_status/lib/Controller/HeartbeatController.php
+++ b/apps/user_status/lib/Controller/HeartbeatController.php
@@ -44,7 +44,7 @@ class HeartbeatController extends OCSController {
*
* @param string $status Only online, away
*
- * @return DataResponse<Http::STATUS_OK, UserStatusPrivate, array{}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_INTERNAL_SERVER_ERROR|Http::STATUS_NO_CONTENT, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, UserStatusPrivate, array{}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_INTERNAL_SERVER_ERROR|Http::STATUS_NO_CONTENT, list<empty>, array{}>
*
* 200: Status successfully updated
* 204: User has no status to keep alive
diff --git a/apps/user_status/lib/Controller/PredefinedStatusController.php b/apps/user_status/lib/Controller/PredefinedStatusController.php
index 14300360880..70262d1108a 100644
--- a/apps/user_status/lib/Controller/PredefinedStatusController.php
+++ b/apps/user_status/lib/Controller/PredefinedStatusController.php
@@ -42,7 +42,7 @@ class PredefinedStatusController extends OCSController {
/**
* Get all predefined messages
*
- * @return DataResponse<Http::STATUS_OK, UserStatusPredefined[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<UserStatusPredefined>, array{}>
*
* 200: Predefined statuses returned
*/
@@ -50,8 +50,8 @@ class PredefinedStatusController extends OCSController {
#[ApiRoute(verb: 'GET', url: '/api/v1/predefined_statuses/')]
public function findAll():DataResponse {
// Filtering out the invisible one, that should only be set by API
- return new DataResponse(array_filter($this->predefinedStatusService->getDefaultStatuses(), function (array $status) {
+ return new DataResponse(array_values(array_filter($this->predefinedStatusService->getDefaultStatuses(), function (array $status) {
return !array_key_exists('visible', $status) || $status['visible'] === true;
- }));
+ })));
}
}
diff --git a/apps/user_status/lib/Controller/StatusesController.php b/apps/user_status/lib/Controller/StatusesController.php
index f9c64c075bf..e27a0fabbed 100644
--- a/apps/user_status/lib/Controller/StatusesController.php
+++ b/apps/user_status/lib/Controller/StatusesController.php
@@ -47,7 +47,7 @@ class StatusesController extends OCSController {
*
* @param int|null $limit Maximum number of statuses to find
* @param int|null $offset Offset for finding statuses
- * @return DataResponse<Http::STATUS_OK, UserStatusPublic[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<UserStatusPublic>, array{}>
*
* 200: Statuses returned
*/
@@ -56,9 +56,9 @@ class StatusesController extends OCSController {
public function findAll(?int $limit = null, ?int $offset = null): DataResponse {
$allStatuses = $this->service->findAll($limit, $offset);
- return new DataResponse(array_map(function ($userStatus) {
+ return new DataResponse(array_values(array_map(function ($userStatus) {
return $this->formatStatus($userStatus);
- }, $allStatuses));
+ }, $allStatuses)));
}
/**
diff --git a/apps/user_status/lib/Controller/UserStatusController.php b/apps/user_status/lib/Controller/UserStatusController.php
index bc2efaf86e6..a65f9a75c9f 100644
--- a/apps/user_status/lib/Controller/UserStatusController.php
+++ b/apps/user_status/lib/Controller/UserStatusController.php
@@ -155,7 +155,7 @@ class UserStatusController extends OCSController {
/**
* Clear the message of the current user
*
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
*
* 200: Message cleared successfully
*/
@@ -171,7 +171,7 @@ class UserStatusController extends OCSController {
*
* @param string $messageId ID of the message to delete
*
- * @return DataResponse<Http::STATUS_OK, UserStatusPrivate|array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, UserStatusPrivate|list<empty>, array{}>
*
* 200: Status reverted
*/
diff --git a/apps/user_status/lib/Dashboard/UserStatusWidget.php b/apps/user_status/lib/Dashboard/UserStatusWidget.php
index 9dce2b1412a..c1091d4bb21 100644
--- a/apps/user_status/lib/Dashboard/UserStatusWidget.php
+++ b/apps/user_status/lib/Dashboard/UserStatusWidget.php
@@ -143,7 +143,7 @@ class UserStatusWidget implements IAPIWidget, IAPIWidgetV2, IIconWidget, IOption
public function getItems(string $userId, ?string $since = null, int $limit = 7): array {
$widgetItemsData = $this->getWidgetData($userId, $since, $limit);
- return array_map(function (array $widgetData) {
+ return array_values(array_map(function (array $widgetData) {
$formattedDate = $this->dateTimeFormatter->formatTimeSpan($widgetData['timestamp']);
return new WidgetItem(
$widgetData['displayName'],
@@ -157,7 +157,7 @@ class UserStatusWidget implements IAPIWidget, IAPIWidgetV2, IIconWidget, IOption
),
(string)$widgetData['timestamp']
);
- }, $widgetItemsData);
+ }, $widgetItemsData));
}
/**
diff --git a/apps/weather_status/lib/Controller/WeatherStatusController.php b/apps/weather_status/lib/Controller/WeatherStatusController.php
index 953e09f2f2d..c56ea3b97b3 100644
--- a/apps/weather_status/lib/Controller/WeatherStatusController.php
+++ b/apps/weather_status/lib/Controller/WeatherStatusController.php
@@ -93,7 +93,7 @@ class WeatherStatusController extends OCSController {
/**
* Get forecast for current location
*
- * @return DataResponse<Http::STATUS_OK, WeatherStatusForecast[]|array{error: string}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, WeatherStatusSuccess, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<WeatherStatusForecast>|array{error: string}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, WeatherStatusSuccess, array{}>
*
* 200: Forecast returned
* 404: Forecast not found
@@ -111,7 +111,7 @@ class WeatherStatusController extends OCSController {
/**
* Get favorites list
*
- * @return DataResponse<Http::STATUS_OK, string[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<string>, array{}>
*
* 200: Favorites returned
*/
@@ -123,7 +123,7 @@ class WeatherStatusController extends OCSController {
/**
* Set favorites list
*
- * @param string[] $favorites Favorite addresses
+ * @param list<string> $favorites Favorite addresses
* @return DataResponse<Http::STATUS_OK, WeatherStatusSuccess, array{}>
*
* 200: Favorites updated
diff --git a/apps/weather_status/lib/Service/WeatherStatusService.php b/apps/weather_status/lib/Service/WeatherStatusService.php
index 9d9972e84ef..04500cf66a5 100644
--- a/apps/weather_status/lib/Service/WeatherStatusService.php
+++ b/apps/weather_status/lib/Service/WeatherStatusService.php
@@ -70,7 +70,7 @@ class WeatherStatusService {
/**
* Get favorites list
- * @return string[]
+ * @return list<string>
*/
public function getFavorites(): array {
$favoritesJson = $this->config->getUserValue($this->userId, Application::APP_ID, 'favorites', '');
@@ -79,7 +79,7 @@ class WeatherStatusService {
/**
* Set favorites list
- * @param string[] $favorites
+ * @param list<string> $favorites
* @return WeatherStatusSuccess success state
*/
public function setFavorites(array $favorites): array {
@@ -287,7 +287,7 @@ class WeatherStatusService {
/**
* Get forecast for current location
*
- * @return WeatherStatusForecast[]|array{error: string}|WeatherStatusSuccess which contains success state and filtered forecast data
+ * @return list<WeatherStatusForecast>|array{error: string}|WeatherStatusSuccess which contains success state and filtered forecast data
*/
public function getForecast(): array {
$lat = $this->config->getUserValue($this->userId, Application::APP_ID, 'lat', '');
@@ -310,7 +310,7 @@ class WeatherStatusService {
* @param float $lon Longitude of requested forecast, in decimal degree format
* @param float $altitude Altitude of requested forecast, in meter
* @param int $nbValues Number of forecast values (hours)
- * @return WeatherStatusForecast[]|array{error: string} Filtered forecast data
+ * @return list<WeatherStatusForecast>|array{error: string} Filtered forecast data
*/
private function forecastRequest(float $lat, float $lon, float $altitude, int $nbValues = 10): array {
$params = [
diff --git a/apps/webhook_listeners/lib/Controller/WebhooksController.php b/apps/webhook_listeners/lib/Controller/WebhooksController.php
index 1d5e37cb373..ef8e2e1e244 100644
--- a/apps/webhook_listeners/lib/Controller/WebhooksController.php
+++ b/apps/webhook_listeners/lib/Controller/WebhooksController.php
@@ -50,7 +50,7 @@ class WebhooksController extends OCSController {
* List registered webhooks
*
* @param string|null $uri The callback URI to filter by
- * @return DataResponse<Http::STATUS_OK, WebhookListenersWebhookInfo[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<WebhookListenersWebhookInfo>, array{}>
* @throws OCSException Other internal error
*
* 200: Webhook registrations returned
@@ -66,12 +66,10 @@ class WebhooksController extends OCSController {
$webhookListeners = $this->mapper->getAll();
}
- return new DataResponse(
- array_map(
- fn (WebhookListener $listener): array => $listener->jsonSerialize(),
- $webhookListeners
- )
- );
+ return new DataResponse(array_values(array_map(
+ fn (WebhookListener $listener): array => $listener->jsonSerialize(),
+ $webhookListeners
+ )));
} catch (\Exception $e) {
$this->logger->error('Error when listing webhooks', ['exception' => $e]);
throw new OCSException('An internal error occurred', Http::STATUS_INTERNAL_SERVER_ERROR, $e);
diff --git a/core/Controller/AppPasswordController.php b/core/Controller/AppPasswordController.php
index b43f0077507..16ec124e23a 100644
--- a/core/Controller/AppPasswordController.php
+++ b/core/Controller/AppPasswordController.php
@@ -102,7 +102,7 @@ class AppPasswordController extends \OCP\AppFramework\OCSController {
/**
* Delete app password
*
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSForbiddenException Deleting app password is not allowed
*
* 200: App password deleted successfully
@@ -162,7 +162,7 @@ class AppPasswordController extends \OCP\AppFramework\OCSController {
*
* @param string $password The password of the user
*
- * @return DataResponse<Http::STATUS_OK, array{lastLogin: int}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{lastLogin: int}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, list<empty>, array{}>
*
* 200: Password confirmation succeeded
* 403: Password confirmation failed
diff --git a/core/Controller/AutoCompleteController.php b/core/Controller/AutoCompleteController.php
index 654570e66ec..692fe1b7297 100644
--- a/core/Controller/AutoCompleteController.php
+++ b/core/Controller/AutoCompleteController.php
@@ -43,10 +43,10 @@ class AutoCompleteController extends OCSController {
* @param string|null $itemType Type of the items to search for
* @param string|null $itemId ID of the items to search for
* @param string|null $sorter can be piped, top prio first, e.g.: "commenters|share-recipients"
- * @param int[] $shareTypes Types of shares to search for
+ * @param list<int> $shareTypes Types of shares to search for
* @param int $limit Maximum number of results to return
*
- * @return DataResponse<Http::STATUS_OK, CoreAutocompleteResult[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<CoreAutocompleteResult>, array{}>
*
* 200: Autocomplete results returned
*/
@@ -100,7 +100,7 @@ class AutoCompleteController extends OCSController {
}
/**
- * @return CoreAutocompleteResult[]
+ * @return list<CoreAutocompleteResult>
*/
protected function prepareResultArray(array $results): array {
$output = [];
diff --git a/core/Controller/AvatarController.php b/core/Controller/AvatarController.php
index 5003d5824e3..4d5e810ddb9 100644
--- a/core/Controller/AvatarController.php
+++ b/core/Controller/AvatarController.php
@@ -57,7 +57,7 @@ class AvatarController extends Controller {
* @param string $userId ID of the user
* @param 64|512 $size Size of the avatar
* @param bool $guestFallback Fallback to guest avatar if not found
- * @return FileDisplayResponse<Http::STATUS_OK|Http::STATUS_CREATED, array{Content-Type: string, X-NC-IsCustomAvatar: int}>|JSONResponse<Http::STATUS_NOT_FOUND, array<empty>, array{}>|Response<Http::STATUS_INTERNAL_SERVER_ERROR, array{}>
+ * @return FileDisplayResponse<Http::STATUS_OK|Http::STATUS_CREATED, array{Content-Type: string, X-NC-IsCustomAvatar: int}>|JSONResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}>|Response<Http::STATUS_INTERNAL_SERVER_ERROR, array{}>
*
* 200: Avatar returned
* 201: Avatar returned
@@ -108,7 +108,7 @@ class AvatarController extends Controller {
* @param string $userId ID of the user
* @param 64|512 $size Size of the avatar
* @param bool $guestFallback Fallback to guest avatar if not found
- * @return FileDisplayResponse<Http::STATUS_OK|Http::STATUS_CREATED, array{Content-Type: string, X-NC-IsCustomAvatar: int}>|JSONResponse<Http::STATUS_NOT_FOUND, array<empty>, array{}>|Response<Http::STATUS_INTERNAL_SERVER_ERROR, array{}>
+ * @return FileDisplayResponse<Http::STATUS_OK|Http::STATUS_CREATED, array{Content-Type: string, X-NC-IsCustomAvatar: int}>|JSONResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}>|Response<Http::STATUS_INTERNAL_SERVER_ERROR, array{}>
*
* 200: Avatar returned
* 201: Avatar returned
diff --git a/core/Controller/CSRFTokenController.php b/core/Controller/CSRFTokenController.php
index c3d1a7f842b..8ea475941c8 100644
--- a/core/Controller/CSRFTokenController.php
+++ b/core/Controller/CSRFTokenController.php
@@ -29,7 +29,7 @@ class CSRFTokenController extends Controller {
/**
* Returns a new CSRF token.
*
- * @return JSONResponse<Http::STATUS_OK, array{token: string}, array{}>|JSONResponse<Http::STATUS_FORBIDDEN, array<empty>, array{}>
+ * @return JSONResponse<Http::STATUS_OK, array{token: string}, array{}>|JSONResponse<Http::STATUS_FORBIDDEN, list<empty>, array{}>
*
* 200: CSRF token returned
* 403: Strict cookie check failed
diff --git a/core/Controller/ClientFlowLoginV2Controller.php b/core/Controller/ClientFlowLoginV2Controller.php
index 43eac012be1..b973a57924e 100644
--- a/core/Controller/ClientFlowLoginV2Controller.php
+++ b/core/Controller/ClientFlowLoginV2Controller.php
@@ -61,7 +61,7 @@ class ClientFlowLoginV2Controller extends Controller {
* Poll the login flow credentials
*
* @param string $token Token of the flow
- * @return JSONResponse<Http::STATUS_OK, CoreLoginFlowV2Credentials, array{}>|JSONResponse<Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return JSONResponse<Http::STATUS_OK, CoreLoginFlowV2Credentials, array{}>|JSONResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Login flow credentials returned
* 404: Login flow not found or completed
diff --git a/core/Controller/CollaborationResourcesController.php b/core/Controller/CollaborationResourcesController.php
index 6f27789c566..e160d733176 100644
--- a/core/Controller/CollaborationResourcesController.php
+++ b/core/Controller/CollaborationResourcesController.php
@@ -59,7 +59,7 @@ class CollaborationResourcesController extends OCSController {
* Get a collection
*
* @param int $collectionId ID of the collection
- * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, list<empty>, array{}>
*
* 200: Collection returned
* 404: Collection not found
@@ -80,7 +80,7 @@ class CollaborationResourcesController extends OCSController {
* Search for collections
*
* @param string $filter Filter collections
- * @return DataResponse<Http::STATUS_OK, CoreCollection[], array{}>|DataResponse<Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<CoreCollection>, array{}>|DataResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Collections returned
* 404: Collection not found
@@ -103,7 +103,7 @@ class CollaborationResourcesController extends OCSController {
* @param int $collectionId ID of the collection
* @param string $resourceType Name of the resource
* @param string $resourceId ID of the resource
- * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, list<empty>, array{}>
*
* 200: Collection returned
* 404: Collection not found or resource inaccessible
@@ -137,7 +137,7 @@ class CollaborationResourcesController extends OCSController {
* @param int $collectionId ID of the collection
* @param string $resourceType Name of the resource
* @param string $resourceId ID of the resource
- * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, list<empty>, array{}>
*
* 200: Collection returned
* 404: Collection or resource not found
@@ -167,7 +167,7 @@ class CollaborationResourcesController extends OCSController {
*
* @param string $resourceType Type of the resource
* @param string $resourceId ID of the resource
- * @return DataResponse<Http::STATUS_OK, CoreCollection[], array{}>|DataResponse<Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<CoreCollection>, array{}>|DataResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Collections returned
* 404: Resource not accessible
@@ -194,7 +194,7 @@ class CollaborationResourcesController extends OCSController {
* @param string $baseResourceType Type of the base resource
* @param string $baseResourceId ID of the base resource
* @param string $name Name of the collection
- * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, list<empty>, array{}>
*
* 200: Collection returned
* 400: Creating collection is not possible
@@ -228,7 +228,7 @@ class CollaborationResourcesController extends OCSController {
*
* @param int $collectionId ID of the collection
* @param string $collectionName New name
- * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, list<empty>, array{}>
*
* 200: Collection returned
* 404: Collection not found
@@ -248,7 +248,7 @@ class CollaborationResourcesController extends OCSController {
}
/**
- * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, CoreCollection, array{}>|DataResponse<Http::STATUS_NOT_FOUND|Http::STATUS_INTERNAL_SERVER_ERROR, list<empty>, array{}>
*/
protected function respondCollection(ICollection $collection): DataResponse {
try {
@@ -262,7 +262,7 @@ class CollaborationResourcesController extends OCSController {
}
/**
- * @return CoreCollection[]
+ * @return list<CoreCollection>
*/
protected function prepareCollections(array $collections): array {
$result = [];
@@ -295,7 +295,7 @@ class CollaborationResourcesController extends OCSController {
}
/**
- * @return CoreResource[]
+ * @return list<CoreResource>
*/
protected function prepareResources(array $resources): array {
$result = [];
diff --git a/core/Controller/HoverCardController.php b/core/Controller/HoverCardController.php
index 588cef2a72d..7a816e21d14 100644
--- a/core/Controller/HoverCardController.php
+++ b/core/Controller/HoverCardController.php
@@ -33,7 +33,7 @@ class HoverCardController extends \OCP\AppFramework\OCSController {
* Get the account details for a hovercard
*
* @param string $userId ID of the user
- * @return DataResponse<Http::STATUS_OK, array{userId: string, displayName: string, actions: CoreContactsAction[]}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{userId: string, displayName: string, actions: list<CoreContactsAction>}, array{}>|DataResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Account details returned
* 404: Account not found
@@ -54,7 +54,7 @@ class HoverCardController extends \OCP\AppFramework\OCSController {
array_unshift($actions, $data['topAction']);
}
- /** @var CoreContactsAction[] $actions */
+ /** @var list<CoreContactsAction> $actions */
return new DataResponse([
'userId' => $userId,
'displayName' => $contact->getFullName(),
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index a433c3073b4..d4d6a17db79 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -381,7 +381,7 @@ class LoginController extends Controller {
*
* @param string $password The password of the user
*
- * @return DataResponse<Http::STATUS_OK, array{lastLogin: int}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{lastLogin: int}, array{}>|DataResponse<Http::STATUS_FORBIDDEN, list<empty>, array{}>
*
* 200: Password confirmation succeeded
* 403: Password confirmation failed
diff --git a/core/Controller/NavigationController.php b/core/Controller/NavigationController.php
index 44c8ef0880b..de72e412945 100644
--- a/core/Controller/NavigationController.php
+++ b/core/Controller/NavigationController.php
@@ -33,7 +33,7 @@ class NavigationController extends OCSController {
* Get the apps navigation
*
* @param bool $absolute Rewrite URLs to absolute ones
- * @return DataResponse<Http::STATUS_OK, CoreNavigationEntry[], array{}>|DataResponse<Http::STATUS_NOT_MODIFIED, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<CoreNavigationEntry>, array{}>|DataResponse<Http::STATUS_NOT_MODIFIED, list<empty>, array{}>
*
* 200: Apps navigation returned
* 304: No apps navigation changed
@@ -60,7 +60,7 @@ class NavigationController extends OCSController {
* Get the settings navigation
*
* @param bool $absolute Rewrite URLs to absolute ones
- * @return DataResponse<Http::STATUS_OK, CoreNavigationEntry[], array{}>|DataResponse<Http::STATUS_NOT_MODIFIED, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<CoreNavigationEntry>, array{}>|DataResponse<Http::STATUS_NOT_MODIFIED, list<empty>, array{}>
*
* 200: Apps navigation returned
* 304: No apps navigation changed
diff --git a/core/Controller/OCMController.php b/core/Controller/OCMController.php
index b53dc08fecf..59529b66e12 100644
--- a/core/Controller/OCMController.php
+++ b/core/Controller/OCMController.php
@@ -43,7 +43,7 @@ class OCMController extends Controller {
*
* @psalm-suppress MoreSpecificReturnType
* @psalm-suppress LessSpecificReturnStatement
- * @return DataResponse<Http::STATUS_OK, array{enabled: bool, apiVersion: string, endPoint: string, resourceTypes: array{name: string, shareTypes: string[], protocols: array{webdav: string}}[]}, array{X-NEXTCLOUD-OCM-PROVIDERS: true, Content-Type: 'application/json'}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{enabled: bool, apiVersion: string, endPoint: string, resourceTypes: list<array{name: string, shareTypes: list<string>, protocols: array{webdav: string}}>}, array{X-NEXTCLOUD-OCM-PROVIDERS: true, Content-Type: 'application/json'}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
*
* 200: OCM Provider details returned
* 500: OCM not supported
diff --git a/core/Controller/PreviewController.php b/core/Controller/PreviewController.php
index 807df4a2ebc..2720da671be 100644
--- a/core/Controller/PreviewController.php
+++ b/core/Controller/PreviewController.php
@@ -47,7 +47,7 @@ class PreviewController extends Controller {
* @param bool $forceIcon Force returning an icon
* @param 'fill'|'cover' $mode How to crop the image
* @param bool $mimeFallback Whether to fallback to the mime icon if no preview is available
- * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, array<empty>, array{}>|RedirectResponse<Http::STATUS_SEE_OTHER, array{}>
+ * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, list<empty>, array{}>|RedirectResponse<Http::STATUS_SEE_OTHER, array{}>
*
* 200: Preview returned
* 303: Redirect to the mime icon url if mimeFallback is true
@@ -90,7 +90,7 @@ class PreviewController extends Controller {
* @param bool $forceIcon Force returning an icon
* @param 'fill'|'cover' $mode How to crop the image
* @param bool $mimeFallback Whether to fallback to the mime icon if no preview is available
- * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, array<empty>, array{}>|RedirectResponse<Http::STATUS_SEE_OTHER, array{}>
+ * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, list<empty>, array{}>|RedirectResponse<Http::STATUS_SEE_OTHER, array{}>
*
* 200: Preview returned
* 303: Redirect to the mime icon url if mimeFallback is true
@@ -124,7 +124,7 @@ class PreviewController extends Controller {
}
/**
- * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, array<empty>, array{}>|RedirectResponse<Http::STATUS_SEE_OTHER, array{}>
+ * @return FileDisplayResponse<Http::STATUS_OK, array{Content-Type: string}>|DataResponse<Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND, list<empty>, array{}>|RedirectResponse<Http::STATUS_SEE_OTHER, array{}>
*/
private function fetchPreview(
Node $node,
diff --git a/core/Controller/ProfileApiController.php b/core/Controller/ProfileApiController.php
index bbfb9cc4153..c807ecb72d4 100644
--- a/core/Controller/ProfileApiController.php
+++ b/core/Controller/ProfileApiController.php
@@ -44,7 +44,7 @@ class ProfileApiController extends OCSController {
* @param string $targetUserId ID of the user
* @param string $paramId ID of the parameter
* @param string $visibility New visibility
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws OCSBadRequestException Updating visibility is not possible
* @throws OCSForbiddenException Not allowed to edit other users visibility
* @throws OCSNotFoundException Account not found
diff --git a/core/Controller/ReferenceApiController.php b/core/Controller/ReferenceApiController.php
index cba91b976e2..0d34e6244f5 100644
--- a/core/Controller/ReferenceApiController.php
+++ b/core/Controller/ReferenceApiController.php
@@ -141,7 +141,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
/**
* Resolve multiple references
*
- * @param string[] $references References to resolve
+ * @param list<string> $references References to resolve
* @param int $limit Maximum amount of references to resolve
* @return DataResponse<Http::STATUS_OK, array{references: array<string, CoreReference|null>}, array{}>
*
@@ -168,7 +168,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
/**
* Resolve multiple references from a public page
*
- * @param string[] $references References to resolve
+ * @param list<string> $references References to resolve
* @param string $sharingToken Token of the public share
* @param int $limit Maximum amount of references to resolve, limited to 15
* @return DataResponse<Http::STATUS_OK, array{references: array<string, CoreReference|null>}, array{}>
@@ -197,7 +197,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
/**
* Get the providers
*
- * @return DataResponse<Http::STATUS_OK, CoreReferenceProvider[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<CoreReferenceProvider>, array{}>
*
* 200: Providers returned
*/
@@ -205,9 +205,9 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
#[ApiRoute(verb: 'GET', url: '/providers', root: '/references')]
public function getProvidersInfo(): DataResponse {
$providers = $this->referenceManager->getDiscoverableProviders();
- $jsonProviders = array_map(static function (IDiscoverableReferenceProvider $provider) {
+ $jsonProviders = array_values(array_map(static function (IDiscoverableReferenceProvider $provider) {
return $provider->jsonSerialize();
- }, $providers);
+ }, $providers));
return new DataResponse($jsonProviders);
}
diff --git a/core/Controller/TaskProcessingApiController.php b/core/Controller/TaskProcessingApiController.php
index 7ee5e7068af..e41c178f44d 100644
--- a/core/Controller/TaskProcessingApiController.php
+++ b/core/Controller/TaskProcessingApiController.php
@@ -68,30 +68,30 @@ class TaskProcessingApiController extends \OCP\AppFramework\OCSController {
#[ApiRoute(verb: 'GET', url: '/tasktypes', root: '/taskprocessing')]
public function taskTypes(): DataResponse {
$taskTypes = array_map(function (array $tt) {
- $tt['inputShape'] = array_map(function ($descriptor) {
+ $tt['inputShape'] = array_values(array_map(function ($descriptor) {
return $descriptor->jsonSerialize();
- }, $tt['inputShape']);
- $tt['outputShape'] = array_map(function ($descriptor) {
+ }, $tt['inputShape']));
+ $tt['outputShape'] = array_values(array_map(function ($descriptor) {
return $descriptor->jsonSerialize();
- }, $tt['outputShape']);
- $tt['optionalInputShape'] = array_map(function ($descriptor) {
+ }, $tt['outputShape']));
+ $tt['optionalInputShape'] = array_values(array_map(function ($descriptor) {
return $descriptor->jsonSerialize();
- }, $tt['optionalInputShape']);
- $tt['optionalOutputShape'] = array_map(function ($descriptor) {
+ }, $tt['optionalInputShape']));
+ $tt['optionalOutputShape'] = array_values(array_map(function ($descriptor) {
return $descriptor->jsonSerialize();
- }, $tt['optionalOutputShape']);
- $tt['inputShapeEnumValues'] = array_map(function (array $enumValues) {
- return array_map(fn (ShapeEnumValue $enumValue) => $enumValue->jsonSerialize(), $enumValues);
- }, $tt['inputShapeEnumValues']);
- $tt['optionalInputShapeEnumValues'] = array_map(function (array $enumValues) {
- return array_map(fn (ShapeEnumValue $enumValue) => $enumValue->jsonSerialize(), $enumValues);
- }, $tt['optionalInputShapeEnumValues']);
- $tt['outputShapeEnumValues'] = array_map(function (array $enumValues) {
- return array_map(fn (ShapeEnumValue $enumValue) => $enumValue->jsonSerialize(), $enumValues);
- }, $tt['outputShapeEnumValues']);
- $tt['optionalOutputShapeEnumValues'] = array_map(function (array $enumValues) {
- return array_map(fn (ShapeEnumValue $enumValue) => $enumValue->jsonSerialize(), $enumValues);
- }, $tt['optionalOutputShapeEnumValues']);
+ }, $tt['optionalOutputShape']));
+ $tt['inputShapeEnumValues'] = array_values(array_map(function (array $enumValues) {
+ return array_values(array_map(fn (ShapeEnumValue $enumValue) => $enumValue->jsonSerialize(), $enumValues));
+ }, $tt['inputShapeEnumValues']));
+ $tt['optionalInputShapeEnumValues'] = array_values(array_map(function (array $enumValues) {
+ return array_values(array_map(fn (ShapeEnumValue $enumValue) => $enumValue->jsonSerialize(), $enumValues));
+ }, $tt['optionalInputShapeEnumValues']));
+ $tt['outputShapeEnumValues'] = array_values(array_map(function (array $enumValues) {
+ return array_values(array_map(fn (ShapeEnumValue $enumValue) => $enumValue->jsonSerialize(), $enumValues));
+ }, $tt['outputShapeEnumValues']));
+ $tt['optionalOutputShapeEnumValues'] = array_values(array_map(function (array $enumValues) {
+ return array_values(array_map(fn (ShapeEnumValue $enumValue) => $enumValue->jsonSerialize(), $enumValues));
+ }, $tt['optionalOutputShapeEnumValues']));
return $tt;
}, $this->taskProcessingManager->getAvailableTaskTypes());
return new DataResponse([
@@ -208,7 +208,7 @@ class TaskProcessingApiController extends \OCP\AppFramework\OCSController {
*
* @param string $appId ID of the app
* @param string|null $customId An arbitrary identifier for the task
- * @return DataResponse<Http::STATUS_OK, array{tasks: CoreTaskProcessingTask[]}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{tasks: list<CoreTaskProcessingTask>}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
*
* 200: Tasks returned
*/
@@ -217,7 +217,6 @@ class TaskProcessingApiController extends \OCP\AppFramework\OCSController {
public function listTasksByApp(string $appId, ?string $customId = null): DataResponse {
try {
$tasks = $this->taskProcessingManager->getUserTasksByApp($this->userId, $appId, $customId);
- /** @var CoreTaskProcessingTask[] $json */
$json = array_map(static function (Task $task) {
return $task->jsonSerialize();
}, $tasks);
@@ -235,7 +234,7 @@ class TaskProcessingApiController extends \OCP\AppFramework\OCSController {
*
* @param string|null $taskType The task type to filter by
* @param string|null $customId An arbitrary identifier for the task
- * @return DataResponse<Http::STATUS_OK, array{tasks: CoreTaskProcessingTask[]}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{tasks: list<CoreTaskProcessingTask>}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
*
* 200: Tasks returned
*/
@@ -244,7 +243,6 @@ class TaskProcessingApiController extends \OCP\AppFramework\OCSController {
public function listTasks(?string $taskType, ?string $customId = null): DataResponse {
try {
$tasks = $this->taskProcessingManager->getUserTasks($this->userId, $taskType, $customId);
- /** @var CoreTaskProcessingTask[] $json */
$json = array_map(static function (Task $task) {
return $task->jsonSerialize();
}, $tasks);
diff --git a/core/Controller/TeamsApiController.php b/core/Controller/TeamsApiController.php
index a27f6deff76..36685555d4d 100644
--- a/core/Controller/TeamsApiController.php
+++ b/core/Controller/TeamsApiController.php
@@ -36,7 +36,7 @@ class TeamsApiController extends \OCP\AppFramework\OCSController {
* Get all resources of a team
*
* @param string $teamId Unique id of the team
- * @return DataResponse<Http::STATUS_OK, array{resources: CoreTeamResource[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{resources: list<CoreTeamResource>}, array{}>
*
* 200: Resources returned
*/
@@ -44,7 +44,7 @@ class TeamsApiController extends \OCP\AppFramework\OCSController {
#[ApiRoute(verb: 'GET', url: '/{teamId}/resources', root: '/teams')]
public function resolveOne(string $teamId): DataResponse {
/**
- * @var CoreTeamResource[] $resolvedResources
+ * @var list<CoreTeamResource> $resolvedResources
* @psalm-suppress PossiblyNullArgument The route is limited to logged-in users
*/
$resolvedResources = $this->teamManager->getSharedWith($teamId, $this->userId);
@@ -57,7 +57,7 @@ class TeamsApiController extends \OCP\AppFramework\OCSController {
*
* @param string $providerId Identifier of the provider (e.g. deck, talk, collectives)
* @param string $resourceId Unique id of the resource to list teams for (e.g. deck board id)
- * @return DataResponse<Http::STATUS_OK, array{teams: CoreTeam[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{teams: list<CoreTeam>}, array{}>
*
* 200: Teams returned
*/
@@ -66,13 +66,13 @@ class TeamsApiController extends \OCP\AppFramework\OCSController {
public function listTeams(string $providerId, string $resourceId): DataResponse {
/** @psalm-suppress PossiblyNullArgument The route is limited to logged-in users */
$teams = $this->teamManager->getTeamsForResource($providerId, $resourceId, $this->userId);
- /** @var CoreTeam[] $teams */
- $teams = array_map(function (Team $team) {
+ /** @var list<CoreTeam> $teams */
+ $teams = array_values(array_map(function (Team $team) {
$response = $team->jsonSerialize();
/** @psalm-suppress PossiblyNullArgument The route is limited to logged in users */
$response['resources'] = $this->teamManager->getSharedWith($team->getId(), $this->userId);
return $response;
- }, $teams);
+ }, $teams));
return new DataResponse([
'teams' => $teams,
diff --git a/core/Controller/TextProcessingApiController.php b/core/Controller/TextProcessingApiController.php
index a0acf193289..cdf39563167 100644
--- a/core/Controller/TextProcessingApiController.php
+++ b/core/Controller/TextProcessingApiController.php
@@ -52,7 +52,7 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController {
/**
* This endpoint returns all available LanguageModel task types
*
- * @return DataResponse<Http::STATUS_OK, array{types: array{id: string, name: string, description: string}[]}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{types: list<array{id: string, name: string, description: string}>}, array{}>
*
* 200: Task types returned
*/
@@ -191,7 +191,7 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController {
*
* @param string $appId ID of the app
* @param string|null $identifier An arbitrary identifier for the task
- * @return DataResponse<Http::STATUS_OK, array{tasks: CoreTextProcessingTask[]}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{tasks: list<CoreTextProcessingTask>}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
*
* 200: Task list returned
*/
@@ -200,10 +200,9 @@ class TextProcessingApiController extends \OCP\AppFramework\OCSController {
public function listTasksByApp(string $appId, ?string $identifier = null): DataResponse {
try {
$tasks = $this->textProcessingManager->getUserTasksByApp($this->userId, $appId, $identifier);
- /** @var CoreTextProcessingTask[] $json */
- $json = array_map(static function (Task $task) {
+ $json = array_values(array_map(static function (Task $task) {
return $task->jsonSerialize();
- }, $tasks);
+ }, $tasks));
return new DataResponse([
'tasks' => $json,
diff --git a/core/Controller/TextToImageApiController.php b/core/Controller/TextToImageApiController.php
index 241c752ea01..3ffc868e80f 100644
--- a/core/Controller/TextToImageApiController.php
+++ b/core/Controller/TextToImageApiController.php
@@ -212,7 +212,7 @@ class TextToImageApiController extends \OCP\AppFramework\OCSController {
*
* @param string $appId ID of the app
* @param string|null $identifier An arbitrary identifier for the task
- * @return DataResponse<Http::STATUS_OK, array{tasks: CoreTextToImageTask[]}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{tasks: list<CoreTextToImageTask>}, array{}>|DataResponse<Http::STATUS_INTERNAL_SERVER_ERROR, array{message: string}, array{}>
*
* 200: Task list returned
*/
@@ -222,10 +222,9 @@ class TextToImageApiController extends \OCP\AppFramework\OCSController {
public function listTasksByApp(string $appId, ?string $identifier = null): DataResponse {
try {
$tasks = $this->textToImageManager->getUserTasksByApp($this->userId, $appId, $identifier);
- /** @var CoreTextToImageTask[] $json */
- $json = array_map(static function (Task $task) {
+ $json = array_values(array_map(static function (Task $task) {
return $task->jsonSerialize();
- }, $tasks);
+ }, $tasks));
return new DataResponse([
'tasks' => $json,
diff --git a/core/Controller/TranslationApiController.php b/core/Controller/TranslationApiController.php
index 81ed190277b..294251baa47 100644
--- a/core/Controller/TranslationApiController.php
+++ b/core/Controller/TranslationApiController.php
@@ -36,7 +36,7 @@ class TranslationApiController extends \OCP\AppFramework\OCSController {
/**
* Get the list of supported languages
*
- * @return DataResponse<Http::STATUS_OK, array{languages: array{from: string, fromLabel: string, to: string, toLabel: string}[], languageDetection: bool}, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{languages: list<array{from: string, fromLabel: string, to: string, toLabel: string}>, languageDetection: bool}, array{}>
*
* 200: Supported languages returned
*/
@@ -44,7 +44,7 @@ class TranslationApiController extends \OCP\AppFramework\OCSController {
#[ApiRoute(verb: 'GET', url: '/languages', root: '/translation')]
public function languages(): DataResponse {
return new DataResponse([
- 'languages' => array_map(fn ($lang) => $lang->jsonSerialize(), $this->translationManager->getLanguages()),
+ 'languages' => array_values(array_map(fn ($lang) => $lang->jsonSerialize(), $this->translationManager->getLanguages())),
'languageDetection' => $this->translationManager->canDetectLanguage(),
]);
}
diff --git a/core/Controller/UnifiedSearchController.php b/core/Controller/UnifiedSearchController.php
index 20d6fb5e59c..c770c6240df 100644
--- a/core/Controller/UnifiedSearchController.php
+++ b/core/Controller/UnifiedSearchController.php
@@ -45,7 +45,7 @@ class UnifiedSearchController extends OCSController {
* Get the providers for unified search
*
* @param string $from the url the user is currently at
- * @return DataResponse<Http::STATUS_OK, CoreUnifiedSearchProvider[], array{}>
+ * @return DataResponse<Http::STATUS_OK, list<CoreUnifiedSearchProvider>, array{}>
*
* 200: Providers returned
*/
diff --git a/core/Controller/WhatsNewController.php b/core/Controller/WhatsNewController.php
index 98c5e77964b..86192d8f466 100644
--- a/core/Controller/WhatsNewController.php
+++ b/core/Controller/WhatsNewController.php
@@ -41,7 +41,7 @@ class WhatsNewController extends OCSController {
/**
* Get the changes
*
- * @return DataResponse<Http::STATUS_OK, array{changelogURL: string, product: string, version: string, whatsNew?: array{regular: string[], admin: string[]}}, array{}>|DataResponse<Http::STATUS_NO_CONTENT, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, array{changelogURL: string, product: string, version: string, whatsNew?: array{regular: list<string>, admin: list<string>}}, array{}>|DataResponse<Http::STATUS_NO_CONTENT, list<empty>, array{}>
*
* 200: Changes returned
* 204: No changes
@@ -87,7 +87,7 @@ class WhatsNewController extends OCSController {
*
* @param string $version Version to dismiss the changes for
*
- * @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
+ * @return DataResponse<Http::STATUS_OK, list<empty>, array{}>
* @throws \OCP\PreConditionNotMetException
* @throws DoesNotExistException
*
diff --git a/core/Controller/WipeController.php b/core/Controller/WipeController.php
index fe9ee79f3b4..d364e6399d9 100644
--- a/core/Controller/WipeController.php
+++ b/core/Controller/WipeController.php
@@ -33,7 +33,7 @@ class WipeController extends Controller {
*
* @param string $token App password
*
- * @return JSONResponse<Http::STATUS_OK, array{wipe: bool}, array{}>|JSONResponse<Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return JSONResponse<Http::STATUS_OK, array{wipe: bool}, array{}>|JSONResponse<Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Device should be wiped
* 404: Device should not be wiped
@@ -62,7 +62,7 @@ class WipeController extends Controller {
*
* @param string $token App password
*
- * @return JSONResponse<Http::STATUS_OK|Http::STATUS_NOT_FOUND, array<empty>, array{}>
+ * @return JSONResponse<Http::STATUS_OK|Http::STATUS_NOT_FOUND, list<empty>, array{}>
*
* 200: Wipe finished successfully
* 404: Device should not be wiped
diff --git a/core/ResponseDefinitions.php b/core/ResponseDefinitions.php
index 4edde2dde36..7dfd3b7da9b 100644
--- a/core/ResponseDefinitions.php
+++ b/core/ResponseDefinitions.php
@@ -63,7 +63,7 @@ namespace OC\Core;
* @psalm-type CoreCollection = array{
* id: int,
* name: string,
- * resources: CoreResource[],
+ * resources: list<CoreResource>,
* }
*
* @psalm-type CoreReference = array{
@@ -78,7 +78,7 @@ namespace OC\Core;
* title: string,
* icon_url: string,
* order: int,
- * search_providers_ids: ?string[]
+ * search_providers_ids: ?list<string>,
* }
*
* @psalm-type CoreUnifiedSearchProvider = array{
@@ -87,7 +87,7 @@ namespace OC\Core;
* name: string,
* icon: string,
* order: int,
- * triggers: string[],
+ * triggers: list<string>,
* filters: array<string, string>,
* inAppSearch: bool,
* }
@@ -99,13 +99,13 @@ namespace OC\Core;
* resourceUrl: string,
* icon: string,
* rounded: bool,
- * attributes: string[],
+ * attributes: list<string>,
* }
*
* @psalm-type CoreUnifiedSearchResult = array{
* name: string,
* isPaginated: bool,
- * entries: CoreUnifiedSearchResultEntry[],
+ * entries: list<CoreUnifiedSearchResultEntry>,
* cursor: int|string|null,
* }
*
@@ -171,16 +171,16 @@ namespace OC\Core;
* @psalm-type CoreTaskProcessingTaskType = array{
* name: string,
* description: string,
- * inputShape: CoreTaskProcessingShape[],
- * inputShapeEnumValues: array{name: string, value: string}[][],
+ * inputShape: list<CoreTaskProcessingShape>,
+ * inputShapeEnumValues: list<list<array{name: string, value: string}>>,
* inputShapeDefaults: array<string, numeric|string>,
- * optionalInputShape: CoreTaskProcessingShape[],
- * optionalInputShapeEnumValues: array{name: string, value: string}[][],
+ * optionalInputShape: list<CoreTaskProcessingShape>,
+ * optionalInputShapeEnumValues: list<list<array{name: string, value: string}>>,
* optionalInputShapeDefaults: array<string, numeric|string>,
- * outputShape: CoreTaskProcessingShape[],
- * outputShapeEnumValues: array{name: string, value: string}[][],
- * optionalOutputShape: CoreTaskProcessingShape[],
- * optionalOutputShapeEnumValues: array{name: string, value: string}[][]}
+ * outputShape: list<CoreTaskProcessingShape>,
+ * outputShapeEnumValues: list<list<array{name: string, value: string}>>,
+ * optionalOutputShape: list<CoreTaskProcessingShape>,
+ * optionalOutputShapeEnumValues: list<list<array{name: string, value: string}>>,
* }
*
* @psalm-type CoreTaskProcessingIO = array<string, numeric|list<numeric>|string|list<string>>
@@ -196,7 +196,10 @@ namespace OC\Core;
* output: null|CoreTaskProcessingIO,
* customId: ?string,
* completionExpectedAt: ?int,
- * progress: ?float
+ * progress: ?float,
+ * scheduledAt: ?int,
+ * startedAt: ?int,
+ * endedAt: ?int,
* }
*
*/
diff --git a/core/openapi-ex_app.json b/core/openapi-ex_app.json
index cc4a53e10b1..95a86e8e112 100644
--- a/core/openapi-ex_app.json
+++ b/core/openapi-ex_app.json
@@ -142,7 +142,10 @@
"output",
"customId",
"completionExpectedAt",
- "progress"
+ "progress",
+ "scheduledAt",
+ "startedAt",
+ "endedAt"
],
"properties": {
"id": {
@@ -194,6 +197,21 @@
"type": "number",
"format": "double",
"nullable": true
+ },
+ "scheduledAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ },
+ "startedAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ },
+ "endedAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
}
}
}
diff --git a/core/openapi-full.json b/core/openapi-full.json
index 36ff35d55b9..d6f9837b1c6 100644
--- a/core/openapi-full.json
+++ b/core/openapi-full.json
@@ -538,7 +538,10 @@
"output",
"customId",
"completionExpectedAt",
- "progress"
+ "progress",
+ "scheduledAt",
+ "startedAt",
+ "endedAt"
],
"properties": {
"id": {
@@ -590,6 +593,21 @@
"type": "number",
"format": "double",
"nullable": true
+ },
+ "scheduledAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ },
+ "startedAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ },
+ "endedAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
}
}
},
diff --git a/core/openapi.json b/core/openapi.json
index 582b01fd050..bf8f2478fbd 100644
--- a/core/openapi.json
+++ b/core/openapi.json
@@ -538,7 +538,10 @@
"output",
"customId",
"completionExpectedAt",
- "progress"
+ "progress",
+ "scheduledAt",
+ "startedAt",
+ "endedAt"
],
"properties": {
"id": {
@@ -590,6 +593,21 @@
"type": "number",
"format": "double",
"nullable": true
+ },
+ "scheduledAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ },
+ "startedAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
+ },
+ "endedAt": {
+ "type": "integer",
+ "format": "int64",
+ "nullable": true
}
}
},
diff --git a/lib/private/AppConfig.php b/lib/private/AppConfig.php
index 312b6973403..a0e5d7e28e8 100644
--- a/lib/private/AppConfig.php
+++ b/lib/private/AppConfig.php
@@ -76,7 +76,7 @@ class AppConfig implements IAppConfig {
/**
* @inheritDoc
*
- * @return string[] list of app ids
+ * @return list<string> list of app ids
* @since 7.0.0
*/
public function getApps(): array {
@@ -92,7 +92,7 @@ class AppConfig implements IAppConfig {
*
* @param string $app id of the app
*
- * @return string[] list of stored config keys
+ * @return list<string> list of stored config keys
* @since 29.0.0
*/
public function getKeys(string $app): array {
diff --git a/lib/private/Files/Template/TemplateManager.php b/lib/private/Files/Template/TemplateManager.php
index 865af4eb90c..47011f875ae 100644
--- a/lib/private/Files/Template/TemplateManager.php
+++ b/lib/private/Files/Template/TemplateManager.php
@@ -118,11 +118,11 @@ class TemplateManager implements ITemplateManager {
}
public function listTemplates(): array {
- return array_map(function (TemplateFileCreator $entry) {
+ return array_values(array_map(function (TemplateFileCreator $entry) {
return array_merge($entry->jsonSerialize(), [
'templates' => $this->getTemplateFiles($entry)
]);
- }, $this->listCreators());
+ }, $this->listCreators()));
}
/**
@@ -180,6 +180,9 @@ class TemplateManager implements ITemplateManager {
throw new NotFoundException();
}
+ /**
+ * @return list<Template>
+ */
private function getTemplateFiles(TemplateFileCreator $type): array {
$templates = [];
foreach ($this->getRegisteredProviders() as $provider) {
diff --git a/lib/private/Group/Backend.php b/lib/private/Group/Backend.php
index f6844308a15..f4a90018b5a 100644
--- a/lib/private/Group/Backend.php
+++ b/lib/private/Group/Backend.php
@@ -71,7 +71,7 @@ abstract class Backend implements \OCP\GroupInterface {
/**
* Get all groups a user belongs to
* @param string $uid Name of the user
- * @return array an array of group names
+ * @return list<string> an array of group names
*
* This function fetches all groups a user belongs to. It does not check
* if the user exists at all.
diff --git a/lib/private/Group/Database.php b/lib/private/Group/Database.php
index 095cbe24316..0cb571a3935 100644
--- a/lib/private/Group/Database.php
+++ b/lib/private/Group/Database.php
@@ -194,7 +194,7 @@ class Database extends ABackend implements
/**
* Get all groups a user belongs to
* @param string $uid Name of the user
- * @return array an array of group names
+ * @return list<string> an array of group names
*
* This function fetches all groups a user belongs to. It does not check
* if the user exists at all.
diff --git a/lib/private/Group/Manager.php b/lib/private/Group/Manager.php
index bd46780a602..e58a1fe6585 100644
--- a/lib/private/Group/Manager.php
+++ b/lib/private/Group/Manager.php
@@ -361,7 +361,7 @@ class Manager extends PublicEmitter implements IGroupManager {
* get a list of group ids for a user
*
* @param IUser $user
- * @return string[] with group ids
+ * @return list<string> with group ids
*/
public function getUserGroupIds(IUser $user): array {
return $this->getUserIdGroupIds($user->getUID());
@@ -369,7 +369,7 @@ class Manager extends PublicEmitter implements IGroupManager {
/**
* @param string $uid the user id
- * @return string[]
+ * @return list<string>
*/
private function getUserIdGroupIds(string $uid): array {
if (!isset($this->cachedUserGroups[$uid])) {
diff --git a/lib/private/OCM/Model/OCMProvider.php b/lib/private/OCM/Model/OCMProvider.php
index 9bda95ebc17..73002ae668d 100644
--- a/lib/private/OCM/Model/OCMProvider.php
+++ b/lib/private/OCM/Model/OCMProvider.php
@@ -194,12 +194,12 @@ class OCMProvider implements IOCMProvider {
* enabled: bool,
* apiVersion: string,
* endPoint: string,
- * resourceTypes: array{
- * name: string,
- * shareTypes: string[],
- * protocols: array<string, string>
- * }[]
- * }
+ * resourceTypes: list<array{
+ * name: string,
+ * shareTypes: list<string>,
+ * protocols: array<string, string>
+ * }>,
+ * }
*/
public function jsonSerialize(): array {
$resourceTypes = [];
diff --git a/lib/private/OCM/Model/OCMResource.php b/lib/private/OCM/Model/OCMResource.php
index 68f9ee18f79..3d619db1927 100644
--- a/lib/private/OCM/Model/OCMResource.php
+++ b/lib/private/OCM/Model/OCMResource.php
@@ -16,7 +16,7 @@ use OCP\OCM\IOCMResource;
*/
class OCMResource implements IOCMResource {
private string $name = '';
- /** @var string[] */
+ /** @var list<string> */
private array $shareTypes = [];
/** @var array<string, string> */
private array $protocols = [];
@@ -40,7 +40,7 @@ class OCMResource implements IOCMResource {
}
/**
- * @param string[] $shareTypes
+ * @param list<string> $shareTypes
*
* @return $this
*/
@@ -51,7 +51,7 @@ class OCMResource implements IOCMResource {
}
/**
- * @return string[]
+ * @return list<string>
*/
public function getShareTypes(): array {
return $this->shareTypes;
@@ -92,7 +92,7 @@ class OCMResource implements IOCMResource {
/**
* @return array{
* name: string,
- * shareTypes: string[],
+ * shareTypes: list<string>,
* protocols: array<string, string>
* }
*/
diff --git a/lib/private/Search/SearchComposer.php b/lib/private/Search/SearchComposer.php
index d23662f7055..71fd003717c 100644
--- a/lib/private/Search/SearchComposer.php
+++ b/lib/private/Search/SearchComposer.php
@@ -10,6 +10,7 @@ namespace OC\Search;
use InvalidArgumentException;
use OC\AppFramework\Bootstrap\Coordinator;
+use OC\Core\ResponseDefinitions;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\Search\FilterDefinition;
@@ -43,6 +44,7 @@ use function array_map;
* results are awaited or shown as they come in.
*
* @see IProvider::search() for the arguments of the individual search requests
+ * @psalm-import-type CoreUnifiedSearchProvider from ResponseDefinitions
*/
class SearchComposer {
/**
@@ -156,7 +158,7 @@ class SearchComposer {
* @param string $route the route the user is currently at
* @param array $routeParameters the parameters of the route the user is currently at
*
- * @return array
+ * @return list<CoreUnifiedSearchProvider>
*/
public function getProviders(string $route, array $routeParameters): array {
$this->loadLazyProviders();
@@ -183,7 +185,7 @@ class SearchComposer {
'name' => $provider->getName(),
'icon' => $this->fetchIcon($appId, $provider->getId()),
'order' => $order,
- 'triggers' => $triggers,
+ 'triggers' => array_values($triggers),
'filters' => $this->getFiltersType($filters, $provider->getId()),
'inAppSearch' => $provider instanceof IInAppSearch,
];
diff --git a/lib/private/Tags.php b/lib/private/Tags.php
index 1f22a4c6a33..d59c1bd6928 100644
--- a/lib/private/Tags.php
+++ b/lib/private/Tags.php
@@ -147,9 +147,9 @@ class Tags implements ITags {
/**
* Get the list of tags for the given ids.
*
- * @param array $objIds array of object ids
- * @return array|false of tags id as key to array of tag names
- * or false if an error occurred
+ * @param list<int> $objIds array of object ids
+ * @return array<int, list<string>>|false of tags id as key to array of tag names
+ * or false if an error occurred
*/
public function getTagsForObjects(array $objIds) {
$entries = [];
diff --git a/lib/private/Teams/TeamManager.php b/lib/private/Teams/TeamManager.php
index 223579a1182..d75b0209c71 100644
--- a/lib/private/Teams/TeamManager.php
+++ b/lib/private/Teams/TeamManager.php
@@ -80,7 +80,7 @@ class TeamManager implements ITeamManager {
array_push($resources, ...$provider->getSharedWith($teamId));
}
- return $resources;
+ return array_values($resources);
}
public function getTeamsForResource(string $providerId, string $resourceId, string $userId): array {
diff --git a/lib/private/Updater/ChangesCheck.php b/lib/private/Updater/ChangesCheck.php
index df017b09040..e88969f62a8 100644
--- a/lib/private/Updater/ChangesCheck.php
+++ b/lib/private/Updater/ChangesCheck.php
@@ -32,7 +32,7 @@ class ChangesCheck {
/**
* @throws DoesNotExistException
- * @return array{changelogURL: string, whatsNew: array<string, array{admin: string[], regular: string[]}>}
+ * @return array{changelogURL: string, whatsNew: array<string, array{admin: list<string>, regular: list<string>}>}
*/
public function getChangesForVersion(string $version): array {
$version = $this->normalizeVersion($version);
diff --git a/lib/private/legacy/OC_App.php b/lib/private/legacy/OC_App.php
index 6afd4086cb3..544938b6ff9 100644
--- a/lib/private/legacy/OC_App.php
+++ b/lib/private/legacy/OC_App.php
@@ -169,7 +169,7 @@ class OC_App {
* @param bool $forceRefresh whether to refresh the cache
* @param bool $all whether to return apps for all users, not only the
* currently logged in one
- * @return string[]
+ * @return list<string>
*/
public static function getEnabledApps(bool $forceRefresh = false, bool $all = false): array {
if (!\OC::$server->getSystemConfig()->getValue('installed', false)) {
diff --git a/lib/public/Dashboard/IAPIWidget.php b/lib/public/Dashboard/IAPIWidget.php
index 8fec40cf1b1..c8f98290a0e 100644
--- a/lib/public/Dashboard/IAPIWidget.php
+++ b/lib/public/Dashboard/IAPIWidget.php
@@ -9,6 +9,8 @@ declare(strict_types=1);
namespace OCP\Dashboard;
+use OCP\Dashboard\Model\WidgetItem;
+
/**
* interface IAPIWidget
*
@@ -16,7 +18,7 @@ namespace OCP\Dashboard;
*/
interface IAPIWidget extends IWidget {
/**
- * @return \OCP\Dashboard\Model\WidgetItem[] The widget items
+ * @return list<WidgetItem> The widget items
* @since 22.0.0
*/
public function getItems(string $userId, ?string $since = null, int $limit = 7): array;
diff --git a/lib/public/Dashboard/IButtonWidget.php b/lib/public/Dashboard/IButtonWidget.php
index fa8d6bc36a6..f4ebd9253c7 100644
--- a/lib/public/Dashboard/IButtonWidget.php
+++ b/lib/public/Dashboard/IButtonWidget.php
@@ -19,7 +19,7 @@ interface IButtonWidget extends IWidget {
* Get the buttons to show on the widget
*
* @param string $userId
- * @return WidgetButton[]
+ * @return list<WidgetButton>
* @since 25.0.0
*/
public function getWidgetButtons(string $userId): array;
diff --git a/lib/public/Dashboard/Model/WidgetItem.php b/lib/public/Dashboard/Model/WidgetItem.php
index be5fba82323..680daf1b114 100644
--- a/lib/public/Dashboard/Model/WidgetItem.php
+++ b/lib/public/Dashboard/Model/WidgetItem.php
@@ -134,8 +134,14 @@ final class WidgetItem implements JsonSerializable {
/**
* @since 22.0.0
- *
- * @return array
+ * @return array{
+ * subtitle: string,
+ * title: string,
+ * link: string,
+ * iconUrl: string,
+ * overlayIconUrl: string,
+ * sinceId: string,
+ * }
*/
public function jsonSerialize(): array {
return [
diff --git a/lib/public/Files/Template/Field.php b/lib/public/Files/Template/Field.php
index ec195ca3504..e047e83a29e 100644
--- a/lib/public/Files/Template/Field.php
+++ b/lib/public/Files/Template/Field.php
@@ -32,6 +32,15 @@ abstract class Field implements \JsonSerializable {
abstract public function setValue(mixed $value): void;
/**
+ * @return array{
+ * index: string,
+ * type: string,
+ * alias: ?string,
+ * tag: ?string,
+ * id: ?int,
+ * content?: string,
+ * checked?: bool,
+ * }
* @since 30.0.0
*/
public function jsonSerialize(): array {
diff --git a/lib/public/Files/Template/Fields/CheckBoxField.php b/lib/public/Files/Template/Fields/CheckBoxField.php
index 48ccb04336a..6fab3ce66a6 100644
--- a/lib/public/Files/Template/Fields/CheckBoxField.php
+++ b/lib/public/Files/Template/Fields/CheckBoxField.php
@@ -37,6 +37,15 @@ class CheckBoxField extends Field {
}
/**
+ * @return array{
+ * index: string,
+ * type: string,
+ * alias: ?string,
+ * tag: ?string,
+ * id: ?int,
+ * content?: string,
+ * checked?: bool,
+ * }
* @since 30.0.0
*/
public function jsonSerialize(): array {
diff --git a/lib/public/Files/Template/Fields/RichTextField.php b/lib/public/Files/Template/Fields/RichTextField.php
index 14539bc9dbd..93ead68747c 100644
--- a/lib/public/Files/Template/Fields/RichTextField.php
+++ b/lib/public/Files/Template/Fields/RichTextField.php
@@ -37,6 +37,15 @@ class RichTextField extends Field {
}
/**
+ * @return array{
+ * index: string,
+ * type: string,
+ * alias: ?string,
+ * tag: ?string,
+ * id: ?int,
+ * content?: string,
+ * checked?: bool,
+ * }
* @since 30.0.0
*/
public function jsonSerialize(): array {
diff --git a/lib/public/Files/Template/ITemplateManager.php b/lib/public/Files/Template/ITemplateManager.php
index 94e0db935e7..9a81aa51ceb 100644
--- a/lib/public/Files/Template/ITemplateManager.php
+++ b/lib/public/Files/Template/ITemplateManager.php
@@ -33,7 +33,7 @@ interface ITemplateManager {
/**
* Get a list of available file creators and their offered templates
*
- * @return array
+ * @return list<array{app: string, label: string, extension: string, iconClass: ?string, iconSvgInline: ?string, mimetypes: list<string>, ratio: ?float, actionLabel: string, templates: list<Template>}>
* @since 21.0.0
*/
public function listTemplates(): array;
diff --git a/lib/public/Files/Template/Template.php b/lib/public/Files/Template/Template.php
index 634935d212e..7f01c2afa48 100644
--- a/lib/public/Files/Template/Template.php
+++ b/lib/public/Files/Template/Template.php
@@ -24,7 +24,7 @@ final class Template implements \JsonSerializable {
private $hasPreview = false;
/** @var string|null */
private $previewUrl = null;
- /** @var array */
+ /** @var list<Field> */
private $fields = [];
/**
@@ -51,6 +51,7 @@ final class Template implements \JsonSerializable {
}
/**
+ * @param list<Field> $fields
* @since 30.0.0
*/
public function setFields(array $fields): void {
@@ -58,6 +59,29 @@ final class Template implements \JsonSerializable {
}
/**
+ * @return array{
+ * templateType: string,
+ * templateId: string,
+ * basename: string,
+ * etag: string,
+ * fileid: int,
+ * filename: string,
+ * lastmod: int,
+ * mime: string,
+ * size: int|float,
+ * type: string,
+ * hasPreview: bool,
+ * previewUrl: ?string,
+ * fields: list<array{
+ * index: string,
+ * type: string,
+ * alias: ?string,
+ * tag: ?string,
+ * id: ?int,
+ * content?: string,
+ * checked?: bool,
+ * }>,
+ * }
* @since 21.0.0
*/
public function jsonSerialize(): array {
@@ -74,7 +98,7 @@ final class Template implements \JsonSerializable {
'type' => $this->file->getType(),
'hasPreview' => $this->hasPreview,
'previewUrl' => $this->previewUrl,
- 'fields' => $this->fields
+ 'fields' => array_map(static fn (Field $field) => $field->jsonSerialize(), $this->fields),
];
}
}
diff --git a/lib/public/Files/Template/TemplateFileCreator.php b/lib/public/Files/Template/TemplateFileCreator.php
index 9a4bd2fae43..809bd3d0bc2 100644
--- a/lib/public/Files/Template/TemplateFileCreator.php
+++ b/lib/public/Files/Template/TemplateFileCreator.php
@@ -13,7 +13,7 @@ namespace OCP\Files\Template;
*/
final class TemplateFileCreator implements \JsonSerializable {
protected $appId;
- /** @var string[] $mimetypes */
+ /** @var list<string> $mimetypes */
protected $mimetypes = [];
protected $actionName;
protected $fileExtension;
@@ -121,7 +121,7 @@ final class TemplateFileCreator implements \JsonSerializable {
/**
* @since 21.0.0
- * @return array{app: string, label: string, extension: string, iconClass: ?string, iconSvgInline: ?string, mimetypes: string[], ratio: ?float, actionLabel: string}
+ * @return array{app: string, label: string, extension: string, iconClass: ?string, iconSvgInline: ?string, mimetypes: list<string>, ratio: ?float, actionLabel: string}
*/
public function jsonSerialize(): array {
return [
diff --git a/lib/public/GroupInterface.php b/lib/public/GroupInterface.php
index a6c01fa1d11..cbfd74a068a 100644
--- a/lib/public/GroupInterface.php
+++ b/lib/public/GroupInterface.php
@@ -86,7 +86,7 @@ interface GroupInterface {
/**
* Get all groups a user belongs to
* @param string $uid Name of the user
- * @return array an array of group names
+ * @return list<string> an array of group names
* @since 4.5.0
*
* This function fetches all groups a user belongs to. It does not check
diff --git a/lib/public/IAppConfig.php b/lib/public/IAppConfig.php
index 49f51467308..fe894da8d31 100644
--- a/lib/public/IAppConfig.php
+++ b/lib/public/IAppConfig.php
@@ -50,7 +50,7 @@ interface IAppConfig {
*
* **WARNING:** ignore lazy filtering, all config values are loaded from database
*
- * @return string[] list of app ids
+ * @return list<string> list of app ids
* @since 7.0.0
*/
public function getApps(): array;
@@ -63,7 +63,7 @@ interface IAppConfig {
*
* @param string $app id of the app
*
- * @return string[] list of stored config keys
+ * @return list<string> list of stored config keys
* @since 29.0.0
*/
public function getKeys(string $app): array;
diff --git a/lib/public/ITags.php b/lib/public/ITags.php
index 0da4522c86c..633cec72085 100644
--- a/lib/public/ITags.php
+++ b/lib/public/ITags.php
@@ -76,9 +76,9 @@ interface ITags {
* ]
* ```
*
- * @param array $objIds item ids
- * @return array|false with object id as key and an array
- * of tag names as value or false if an error occurred
+ * @param list<int> $objIds item ids
+ * @return array<int, list<string>>|false with object id as key and an array
+ * of tag names as value or false if an error occurred
* @since 8.0.0
*/
public function getTagsForObjects(array $objIds);
diff --git a/lib/public/OCM/IOCMProvider.php b/lib/public/OCM/IOCMProvider.php
index 58b50aca172..ba2ab6ce759 100644
--- a/lib/public/OCM/IOCMProvider.php
+++ b/lib/public/OCM/IOCMProvider.php
@@ -136,11 +136,11 @@ interface IOCMProvider extends JsonSerializable {
* enabled: bool,
* apiVersion: string,
* endPoint: string,
- * resourceTypes: array{
+ * resourceTypes: list<array{
* name: string,
- * shareTypes: string[],
+ * shareTypes: list<string>,
* protocols: array<string, string>
- * }[]
+ * }>,
* }
* @since 28.0.0
*/
diff --git a/lib/public/OCM/IOCMResource.php b/lib/public/OCM/IOCMResource.php
index 788b5563cfc..60bf701e8ea 100644
--- a/lib/public/OCM/IOCMResource.php
+++ b/lib/public/OCM/IOCMResource.php
@@ -39,7 +39,7 @@ interface IOCMResource extends JsonSerializable {
/**
* set share types
*
- * @param string[] $shareTypes
+ * @param list<string> $shareTypes
*
* @return $this
* @since 28.0.0
@@ -49,7 +49,7 @@ interface IOCMResource extends JsonSerializable {
/**
* get share types
*
- * @return string[]
+ * @return list<string>
* @since 28.0.0
*/
public function getShareTypes(): array;
@@ -85,7 +85,7 @@ interface IOCMResource extends JsonSerializable {
/**
* @return array{
* name: string,
- * shareTypes: string[],
+ * shareTypes: list<string>,
* protocols: array<string, string>
* }
* @since 28.0.0
diff --git a/lib/public/TaskProcessing/IManager.php b/lib/public/TaskProcessing/IManager.php
index 2d5fe1d9ba6..1b59bb12ad4 100644
--- a/lib/public/TaskProcessing/IManager.php
+++ b/lib/public/TaskProcessing/IManager.php
@@ -46,7 +46,7 @@ interface IManager {
public function getPreferredProvider(string $taskTypeId);
/**
- * @return array<array-key,array{name: string, description: string, inputShape: ShapeDescriptor[], inputShapeEnumValues: ShapeEnumValue[][], inputShapeDefaults: array<array-key, numeric|string>, optionalInputShape: ShapeDescriptor[], optionalInputShapeEnumValues: ShapeEnumValue[][], optionalInputShapeDefaults: array<array-key, numeric|string>, outputShape: ShapeDescriptor[], outputShapeEnumValues: ShapeEnumValue[][], optionalOutputShape: ShapeDescriptor[], optionalOutputShapeEnumValues: ShapeEnumValue[][]}>
+ * @return array<string, array{name: string, description: string, inputShape: ShapeDescriptor[], inputShapeEnumValues: ShapeEnumValue[][], inputShapeDefaults: array<array-key, numeric|string>, optionalInputShape: ShapeDescriptor[], optionalInputShapeEnumValues: ShapeEnumValue[][], optionalInputShapeDefaults: array<array-key, numeric|string>, outputShape: ShapeDescriptor[], outputShapeEnumValues: ShapeEnumValue[][], optionalOutputShape: ShapeDescriptor[], optionalOutputShapeEnumValues: ShapeEnumValue[][]}>
* @since 30.0.0
*/
public function getAvailableTaskTypes(): array;
diff --git a/lib/public/TaskProcessing/Task.php b/lib/public/TaskProcessing/Task.php
index db8e4d7fab5..71c271cd43d 100644
--- a/lib/public/TaskProcessing/Task.php
+++ b/lib/public/TaskProcessing/Task.php
@@ -253,12 +253,12 @@ final class Task implements \JsonSerializable {
}
/**
- * @psalm-return array{id: ?int, lastUpdated: int, type: string, status: 'STATUS_CANCELLED'|'STATUS_FAILED'|'STATUS_SUCCESSFUL'|'STATUS_RUNNING'|'STATUS_SCHEDULED'|'STATUS_UNKNOWN', userId: ?string, appId: string, input: array<array-key, list<numeric|string>|numeric|string>, output: ?array<array-key, list<numeric|string>|numeric|string>, customId: ?string, completionExpectedAt: ?int, progress: ?float, scheduledAt: ?int, startedAt: ?int, endedAt: ?int}
+ * @psalm-return array{id: int, lastUpdated: int, type: string, status: 'STATUS_CANCELLED'|'STATUS_FAILED'|'STATUS_SUCCESSFUL'|'STATUS_RUNNING'|'STATUS_SCHEDULED'|'STATUS_UNKNOWN', userId: ?string, appId: string, input: array<string, list<numeric|string>|numeric|string>, output: ?array<string, list<numeric|string>|numeric|string>, customId: ?string, completionExpectedAt: ?int, progress: ?float, scheduledAt: ?int, startedAt: ?int, endedAt: ?int}
* @since 30.0.0
*/
final public function jsonSerialize(): array {
return [
- 'id' => $this->getId(),
+ 'id' => (int)$this->getId(),
'type' => $this->getTaskTypeId(),
'lastUpdated' => $this->getLastUpdated(),
'status' => self::statusToString($this->getStatus()),
diff --git a/lib/public/Teams/ITeamManager.php b/lib/public/Teams/ITeamManager.php
index 5c4c63b4f23..144a141f93e 100644
--- a/lib/public/Teams/ITeamManager.php
+++ b/lib/public/Teams/ITeamManager.php
@@ -28,7 +28,7 @@ interface ITeamManager {
/**
* Returns all team resources for a given team and user
*
- * @return TeamResource[]
+ * @return list<TeamResource>
* @since 29.0.0
*/
public function getSharedWith(string $teamId, string $userId): array;