aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@users.noreply.github.com>2024-11-06 08:56:30 +0100
committerGitHub <noreply@github.com>2024-11-06 08:56:30 +0100
commitd53fde8eef13d408fcf035ea8a95e6345df9b99b (patch)
tree60f6b612d967a9a264589cdd6cc0c6d008e1bf05 /apps
parent8fab143aa486904f7a17c4f1c2f6364cd43bf9d9 (diff)
parent77114fb3277742fc69ddcf2432311ecb263af97e (diff)
downloadnextcloud-server-d53fde8eef13d408fcf035ea8a95e6345df9b99b.tar.gz
nextcloud-server-d53fde8eef13d408fcf035ea8a95e6345df9b99b.zip
Merge pull request #49015 from nextcloud/fix/openapi/array-syntax
Diffstat (limited to 'apps')
-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
55 files changed, 433 insertions, 300 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);