Skip to content

Commit 08eeb6a

Browse files
committed
feat(dav): Add an activity focused selector for calendar events
It will show any event linked to a calendar directly owned by the logged-in user. Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
1 parent 2f4b41d commit 08eeb6a

5 files changed

Lines changed: 36 additions & 1 deletion

File tree

apps/dav/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
'OCA\\DAV\\BulkUpload\\BulkUploadPlugin' => $baseDir . '/../lib/BulkUpload/BulkUploadPlugin.php',
3333
'OCA\\DAV\\BulkUpload\\MultipartRequestParser' => $baseDir . '/../lib/BulkUpload/MultipartRequestParser.php',
3434
'OCA\\DAV\\CalDAV\\Activity\\Backend' => $baseDir . '/../lib/CalDAV/Activity/Backend.php',
35+
'OCA\\DAV\\CalDAV\\Activity\\CalendarFocusedSelector' => $baseDir . '/../lib/CalDAV/Activity/CalendarFocusedSelector.php',
3536
'OCA\\DAV\\CalDAV\\Activity\\Filter\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Filter/Calendar.php',
3637
'OCA\\DAV\\CalDAV\\Activity\\Filter\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Filter/Todo.php',
3738
'OCA\\DAV\\CalDAV\\Activity\\Provider\\Base' => $baseDir . '/../lib/CalDAV/Activity/Provider/Base.php',

apps/dav/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class ComposerStaticInitDAV
4747
'OCA\\DAV\\BulkUpload\\BulkUploadPlugin' => __DIR__ . '/..' . '/../lib/BulkUpload/BulkUploadPlugin.php',
4848
'OCA\\DAV\\BulkUpload\\MultipartRequestParser' => __DIR__ . '/..' . '/../lib/BulkUpload/MultipartRequestParser.php',
4949
'OCA\\DAV\\CalDAV\\Activity\\Backend' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Backend.php',
50+
'OCA\\DAV\\CalDAV\\Activity\\CalendarFocusedSelector' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/CalendarFocusedSelector.php',
5051
'OCA\\DAV\\CalDAV\\Activity\\Filter\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Filter/Calendar.php',
5152
'OCA\\DAV\\CalDAV\\Activity\\Filter\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Filter/Todo.php',
5253
'OCA\\DAV\\CalDAV\\Activity\\Provider\\Base' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Provider/Base.php',

apps/dav/lib/AppInfo/Application.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
namespace OCA\DAV\AppInfo;
1212

13+
use OCA\DAV\CalDAV\Activity\CalendarFocusedSelector;
1314
use OCA\DAV\CalDAV\AppCalendar\AppCalendarPlugin;
1415
use OCA\DAV\CalDAV\CachedSubscriptionProvider;
1516
use OCA\DAV\CalDAV\CalendarManager;
@@ -243,6 +244,8 @@ public function register(IRegistrationContext $context): void {
243244
$context->registerEventListener(DeclarativeSettingsSetValueEvent::class, DavAdminSettingsListener::class);
244245

245246
$context->registerConfigLexicon(ConfigLexicon::class);
247+
248+
$context->registerActivityFocusedSelector(CalendarFocusedSelector::class);
246249
}
247250

248251
#[\Override]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace OCA\DAV\CalDAV\Activity;
11+
12+
use OCP\Activity\IActivityFocusedSelector;
13+
use OCP\DB\QueryBuilder\IQueryBuilder;
14+
15+
class CalendarFocusedSelector implements IActivityFocusedSelector {
16+
#[\Override]
17+
public function extendQuery(IQueryBuilder $query, string $userId): array {
18+
// Activity related to calendars owned by the user
19+
$query->leftJoin('a', 'calendars', 'calendars',
20+
$query->expr()->andX(
21+
$query->expr()->eq('a.object_type', $query->createNamedParameter('calendar')),
22+
$query->expr()->eq('a.object_id', 'calendars.id'),
23+
));
24+
return [
25+
$query->expr()->eq('calendars.principaluri', $query->createNamedParameter('principals/users/' . $userId)),
26+
];
27+
}
28+
}

lib/public/Activity/IActivityFocusedSelector.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
namespace OCP\Activity;
1111

1212
use OCP\AppFramework\Attribute\Implementable;
13+
use OCP\DB\QueryBuilder\ICompositeExpression;
1314
use OCP\DB\QueryBuilder\IQueryBuilder;
15+
use OCP\DB\QueryBuilder\IQueryFunction;
1416

1517
/**
1618
* @since 35.0.0
@@ -21,7 +23,7 @@ interface IActivityFocusedSelector {
2123
* Extend query with joins if needed, and return an array of conditions to add
2224
* in the OR clause of the WHERE for filtering focused activity events
2325
*
24-
* @return list<string> conditions to add in the where clause
26+
* @return list<string|ICompositeExpression|IQueryFunction> conditions to add in the where clause
2527
* @since 35.0.0
2628
*/
2729
public function extendQuery(IQueryBuilder $query, string $userId): array;

0 commit comments

Comments
 (0)