aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorBenjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>2023-11-10 10:42:20 +0100
committerGitHub <noreply@github.com>2023-11-10 10:42:20 +0100
commitfa761b51ccff0be55f9c22208d45c5e5a8b5b427 (patch)
tree9589adc503c2cb68e6bc89974c6c5a7337d1e6d6 /core
parenta66dbcdfc1e3126e5a4efbe8655c902c3fbedf91 (diff)
parentddb8b68b55d07e18a4e3e472febafb4a3f21f439 (diff)
downloadnextcloud-server-fa761b51ccff0be55f9c22208d45c5e5a8b5b427.tar.gz
nextcloud-server-fa761b51ccff0be55f9c22208d45c5e5a8b5b427.zip
Merge pull request #40618 from nextcloud/feat/39162/advanced_search
Advanced search: backend allows multiples terms to search
Diffstat (limited to 'core')
-rw-r--r--core/Controller/UnifiedSearchController.php35
-rw-r--r--core/ResponseDefinitions.php4
-rw-r--r--core/openapi.json29
3 files changed, 52 insertions, 16 deletions
diff --git a/core/Controller/UnifiedSearchController.php b/core/Controller/UnifiedSearchController.php
index 9704850bb1f..87aa84e1d91 100644
--- a/core/Controller/UnifiedSearchController.php
+++ b/core/Controller/UnifiedSearchController.php
@@ -31,14 +31,15 @@ namespace OC\Core\Controller;
use OC\Search\SearchComposer;
use OC\Search\SearchQuery;
use OCA\Core\ResponseDefinitions;
-use OCP\AppFramework\OCSController;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\OCSController;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserSession;
use OCP\Route\IRouter;
use OCP\Search\ISearchQuery;
+use OC\Search\UnsupportedFilter;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
/**
@@ -80,7 +81,10 @@ class UnifiedSearchController extends OCSController {
* @NoAdminRequired
* @NoCSRFRequired
*
- * Search
+ * Launch a search for a specific search provider.
+ *
+ * Additional filters are available for each provider.
+ * Send a request to /providers endpoint to list providers with their available filters.
*
* @param string $providerId ID of the provider
* @param string $term Term to search
@@ -89,28 +93,33 @@ class UnifiedSearchController extends OCSController {
* @param int|string|null $cursor Offset for searching
* @param string $from The current user URL
*
- * @return DataResponse<Http::STATUS_OK, CoreUnifiedSearchResult, array{}>|DataResponse<Http::STATUS_BAD_REQUEST, null, array{}>
+ * @return DataResponse<Http::STATUS_OK, CoreUnifiedSearchResult, array{}>|DataResponse<Http::STATUS_BAD_REQUEST, string, array{}>
*
* 200: Search entries returned
* 400: Searching is not possible
*/
- public function search(string $providerId,
- string $term = '',
- ?int $sortOrder = null,
- ?int $limit = null,
- $cursor = null,
- string $from = ''): DataResponse {
- if (trim($term) === "") {
- return new DataResponse(null, Http::STATUS_BAD_REQUEST);
- }
+ public function search(
+ string $providerId,
+ // Unused parameter for OpenAPI spec generator
+ string $term = '',
+ ?int $sortOrder = null,
+ ?int $limit = null,
+ $cursor = null,
+ string $from = '',
+ ): DataResponse {
[$route, $routeParameters] = $this->getRouteInformation($from);
+ try {
+ $filters = $this->composer->buildFilterList($providerId, $this->request->getParams());
+ } catch (UnsupportedFilter $e) {
+ return new DataResponse($e->getMessage(), Http::STATUS_BAD_REQUEST);
+ }
return new DataResponse(
$this->composer->search(
$this->userSession->getUser(),
$providerId,
new SearchQuery(
- $term,
+ $filters,
$sortOrder ?? ISearchQuery::SORT_DATE_DESC,
$limit ?? SearchQuery::LIMIT_DEFAULT,
$cursor,
diff --git a/core/ResponseDefinitions.php b/core/ResponseDefinitions.php
index ca3f117051c..86eef1d2524 100644
--- a/core/ResponseDefinitions.php
+++ b/core/ResponseDefinitions.php
@@ -98,8 +98,12 @@ namespace OCA\Core;
*
* @psalm-type CoreUnifiedSearchProvider = array{
* id: string,
+ * appId: string,
* name: string,
+ * icon: string,
* order: int,
+ * triggers: string[],
+ * filters: array<string, string>,
* }
*
* @psalm-type CoreUnifiedSearchResultEntry = array{
diff --git a/core/openapi.json b/core/openapi.json
index 7cb48b58f0a..a63d9380db7 100644
--- a/core/openapi.json
+++ b/core/openapi.json
@@ -501,19 +501,41 @@
"type": "object",
"required": [
"id",
+ "appId",
"name",
- "order"
+ "icon",
+ "order",
+ "triggers",
+ "filters"
],
"properties": {
"id": {
"type": "string"
},
+ "appId": {
+ "type": "string"
+ },
"name": {
"type": "string"
},
+ "icon": {
+ "type": "string"
+ },
"order": {
"type": "integer",
"format": "int64"
+ },
+ "triggers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "filters": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
}
}
},
@@ -4000,7 +4022,8 @@
"/ocs/v2.php/search/providers/{providerId}/search": {
"get": {
"operationId": "unified_search-search",
- "summary": "Search",
+ "summary": "Launch a search for a specific search provider.",
+ "description": "Additional filters are available for each provider. Send a request to /providers endpoint to list providers with their available filters.",
"tags": [
"unified_search"
],
@@ -4132,7 +4155,7 @@
"$ref": "#/components/schemas/OCSMeta"
},
"data": {
- "nullable": true
+ "type": "string"
}
}
}