From c0dda46ce1f5ce9512791dbd56aeffabc6054f6d Mon Sep 17 00:00:00 2001 From: Benjamin Gaussorgues Date: Tue, 26 Sep 2023 11:07:49 +0200 Subject: [PATCH] feat(caldav): Allow advanced search for events/tasks Signed-off-by: Benjamin Gaussorgues --- apps/dav/lib/CalDAV/CalDavBackend.php | 8 +++++++- apps/dav/lib/Search/EventsSearchProvider.php | 5 +++-- apps/dav/lib/Search/TasksSearchProvider.php | 5 +++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 5f2fe7e5dcead..25d60e8d4e920 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -2155,6 +2155,12 @@ public function searchPrincipalUri(string $principalUri, if (isset($options['offset'])) { $calendarObjectIdQuery->setFirstResult($options['offset']); } + if (isset($options['t_since'])) { + $calendarObjectIdQuery->andWhere($calendarObjectIdQuery->expr()->lte('co.lastoccurence', $calendarObjectIdQuery->createNamedParameter($options['t_start']->value->getTimestamp()))); + } + if (isset($options['t_until'])) { + $calendarObjectIdQuery->andWhere($calendarObjectIdQuery->expr()->gte('co.firstoccurence', $calendarObjectIdQuery->createNamedParameter($options['t_end']->value->getTimestamp()))); + } $result = $calendarObjectIdQuery->executeQuery(); $matches = $result->fetchAll(); @@ -3183,7 +3189,7 @@ public function pruneOutdatedSyncTokens(int $keep = 10_000): int { $maxId = (int) $result->fetchOne(); $result->closeCursor(); if (!$maxId || $maxId < $keep) { - return 0; + return 0; } $query = $this->db->getQueryBuilder(); diff --git a/apps/dav/lib/Search/EventsSearchProvider.php b/apps/dav/lib/Search/EventsSearchProvider.php index 07fc90397ed2d..bfe764d7e9e53 100644 --- a/apps/dav/lib/Search/EventsSearchProvider.php +++ b/apps/dav/lib/Search/EventsSearchProvider.php @@ -42,7 +42,6 @@ * @package OCA\DAV\Search */ class EventsSearchProvider extends ACalendarSearchProvider { - /** * @var string[] */ @@ -107,13 +106,15 @@ public function search(IUser $user, $searchResults = $this->backend->searchPrincipalUri( $principalUri, - $query->getTerm(), + $query->getFilter('term', ''), [self::$componentType], self::$searchProperties, self::$searchParameters, [ 'limit' => $query->getLimit(), 'offset' => $query->getCursor(), + 'start' => $query->getFilter('start', null), + 'end' => $query->getFilter('end', null), ] ); $formattedResults = \array_map(function (array $eventRow) use ($calendarsById, $subscriptionsById):SearchResultEntry { diff --git a/apps/dav/lib/Search/TasksSearchProvider.php b/apps/dav/lib/Search/TasksSearchProvider.php index 763720ee4ae0a..12bfc0f62e21f 100644 --- a/apps/dav/lib/Search/TasksSearchProvider.php +++ b/apps/dav/lib/Search/TasksSearchProvider.php @@ -41,7 +41,6 @@ * @package OCA\DAV\Search */ class TasksSearchProvider extends ACalendarSearchProvider { - /** * @var string[] */ @@ -100,13 +99,15 @@ public function search(IUser $user, $searchResults = $this->backend->searchPrincipalUri( $principalUri, - $query->getTerm(), + $query->getFilter('term', ''), [self::$componentType], self::$searchProperties, self::$searchParameters, [ 'limit' => $query->getLimit(), 'offset' => $query->getCursor(), + 'start' => $query->getFilter('start'), + 'end' => $query->getFilter('end'), ] ); $formattedResults = \array_map(function (array $taskRow) use ($calendarsById, $subscriptionsById):SearchResultEntry {