diff --git a/src/bundle/Resources/config/routing.yml b/src/bundle/Resources/config/routing.yml index f9ef57e8..5a66eb0d 100644 --- a/src/bundle/Resources/config/routing.yml +++ b/src/bundle/Resources/config/routing.yml @@ -117,6 +117,12 @@ ibexa.rest.load_content_versions: requirements: contentId: \d+ +ibexa.rest.load_version_info_list_by_content_ids: + path: /content/objects/version-info-list + defaults: + _controller: Ibexa\Rest\Server\Controller\Content:loadVersionInfoListByContentIds + methods: [GET] + ibexa.rest.load_version_relations: path: /content/objects/{contentId}/versions/{versionNumber}/relations defaults: diff --git a/src/lib/Server/Controller/Content.php b/src/lib/Server/Controller/Content.php index b490cdc5..47ab665f 100644 --- a/src/lib/Server/Controller/Content.php +++ b/src/lib/Server/Controller/Content.php @@ -332,6 +332,32 @@ public function loadContentVersions($contentId, Request $request) ); } + /** + * Returns a list of version info for multiple content IDs. + * + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\BadStateException + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException + * @throws \Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException + */ + public function loadVersionInfoListByContentIds(Request $request): Values\VersionList + { + $contentIds = $request->query->all('content_ids'); + + if (empty($contentIds)) { + throw new BadRequestException("'content_ids' parameter is required and must contain at least one ID."); + } + + $contentService = $this->repository->getContentService(); + $contentInfos = $contentService->loadContentInfoList($contentIds); + + $versionInfoList = $contentService->loadVersionInfoListByContentInfo($contentInfos); + + return new Values\VersionList( + array_values($versionInfoList), + $request->getPathInfo() + ); + } + /** * The version is deleted. *