2022-11-12 11:42:12 -05:00
|
|
|
<?php
|
2023-11-23 04:22:34 -05:00
|
|
|
|
2022-11-12 11:42:12 -05:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
/**
|
2024-05-27 11:39:07 -04:00
|
|
|
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
|
|
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
2022-11-12 11:42:12 -05:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace OCA\DAV\CalDAV\AppCalendar;
|
|
|
|
|
|
2024-10-10 06:40:31 -04:00
|
|
|
use OCA\DAV\CalDAV\CachedSubscriptionImpl;
|
|
|
|
|
use OCA\DAV\CalDAV\CalendarImpl;
|
2025-05-14 05:21:28 -04:00
|
|
|
use OCA\DAV\CalDAV\Federation\FederatedCalendarImpl;
|
2022-11-12 11:42:12 -05:00
|
|
|
use OCA\DAV\CalDAV\Integration\ExternalCalendar;
|
|
|
|
|
use OCA\DAV\CalDAV\Integration\ICalendarProvider;
|
|
|
|
|
use OCP\Calendar\IManager;
|
|
|
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
|
|
|
|
|
|
/* Plugin for wrapping application generated calendars registered in nextcloud core (OCP\Calendar\ICalendarProvider) */
|
|
|
|
|
class AppCalendarPlugin implements ICalendarProvider {
|
2024-10-18 06:04:22 -04:00
|
|
|
public function __construct(
|
|
|
|
|
protected IManager $manager,
|
|
|
|
|
protected LoggerInterface $logger,
|
|
|
|
|
) {
|
2022-11-12 11:42:12 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getAppID(): string {
|
|
|
|
|
return 'dav-wrapper';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function fetchAllForCalendarHome(string $principalUri): array {
|
|
|
|
|
return array_map(function ($calendar) use (&$principalUri) {
|
|
|
|
|
return new AppCalendar($this->getAppID(), $calendar, $principalUri);
|
|
|
|
|
}, $this->getWrappedCalendars($principalUri));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function hasCalendarInCalendarHome(string $principalUri, string $calendarUri): bool {
|
|
|
|
|
return count($this->getWrappedCalendars($principalUri, [ $calendarUri ])) > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getCalendarInCalendarHome(string $principalUri, string $calendarUri): ?ExternalCalendar {
|
|
|
|
|
$calendars = $this->getWrappedCalendars($principalUri, [ $calendarUri ]);
|
|
|
|
|
if (count($calendars) > 0) {
|
|
|
|
|
return new AppCalendar($this->getAppID(), $calendars[0], $principalUri);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected function getWrappedCalendars(string $principalUri, array $calendarUris = []): array {
|
|
|
|
|
return array_values(
|
|
|
|
|
array_filter($this->manager->getCalendarsForPrincipal($principalUri, $calendarUris), function ($c) {
|
|
|
|
|
// We must not provide a wrapper for DAV calendars
|
2025-05-14 05:21:28 -04:00
|
|
|
return !(
|
|
|
|
|
($c instanceof CalendarImpl)
|
|
|
|
|
|| ($c instanceof CachedSubscriptionImpl)
|
|
|
|
|
|| ($c instanceof FederatedCalendarImpl)
|
|
|
|
|
);
|
2022-11-12 11:42:12 -05:00
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|