Merge pull request #28970 from nextcloud/enhancement/calendar-appointments
Add an API for calendar providerspull/29235/head
commit
b1c761df99
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCA\DAV\CalDAV;
|
||||
|
||||
use OCP\Calendar\ICalendarProvider;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
|
||||
class CalendarProvider implements ICalendarProvider {
|
||||
|
||||
/** @var CalDavBackend */
|
||||
private $calDavBackend;
|
||||
|
||||
/** @var IL10N */
|
||||
private $l10n;
|
||||
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
|
||||
public function __construct(CalDavBackend $calDavBackend, IL10N $l10n, IConfig $config) {
|
||||
$this->calDavBackend = $calDavBackend;
|
||||
$this->l10n = $l10n;
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
public function getCalendars(string $principalUri, array $calendarUris = []): array {
|
||||
$calendarInfos = [];
|
||||
if (empty($calendarUris)) {
|
||||
$calendarInfos[] = $this->calDavBackend->getCalendarsForUser($principalUri);
|
||||
} else {
|
||||
foreach ($calendarUris as $calendarUri) {
|
||||
$calendarInfos[] = $this->calDavBackend->getCalendarByUri($principalUri, $calendarUri);
|
||||
}
|
||||
}
|
||||
|
||||
$calendarInfos = array_filter($calendarInfos);
|
||||
|
||||
$iCalendars = [];
|
||||
foreach ($calendarInfos as $calendarInfo) {
|
||||
$calendar = new Calendar($this->calDavBackend, $calendarInfo, $this->l10n, $this->config);
|
||||
$iCalendars[] = new CalendarImpl(
|
||||
$calendar,
|
||||
$calendarInfo,
|
||||
$this->calDavBackend,
|
||||
);
|
||||
}
|
||||
return $iCalendars;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OC\Calendar;
|
||||
|
||||
use OCP\Calendar\ICalendarQuery;
|
||||
|
||||
class CalendarQuery implements ICalendarQuery {
|
||||
|
||||
/** @var string */
|
||||
private $principalUri;
|
||||
|
||||
/** @var array */
|
||||
public $searchProperties;
|
||||
|
||||
/** @var string|null */
|
||||
private $searchPattern;
|
||||
|
||||
/** @var array */
|
||||
private $options;
|
||||
|
||||
/** @var int|null */
|
||||
private $offset;
|
||||
|
||||
/** @var int|null */
|
||||
private $limit;
|
||||
|
||||
/** @var array */
|
||||
private $calendarUris;
|
||||
|
||||
public function __construct(string $principalUri) {
|
||||
$this->principalUri = $principalUri;
|
||||
$this->searchProperties = [];
|
||||
$this->options = [
|
||||
'types' => [],
|
||||
];
|
||||
}
|
||||
|
||||
public function getPrincipalUri(): string {
|
||||
return $this->principalUri;
|
||||
}
|
||||
|
||||
public function setPrincipalUri(string $principalUri): void {
|
||||
$this->principalUri = $principalUri;
|
||||
}
|
||||
|
||||
public function setSearchPattern(string $pattern): void {
|
||||
$this->searchPattern = $pattern;
|
||||
}
|
||||
|
||||
public function getSearchPattern(): ?string {
|
||||
return $this->searchPattern;
|
||||
}
|
||||
|
||||
public function addSearchProperty(string $value): void {
|
||||
$this->searchProperties[] = $value;
|
||||
}
|
||||
|
||||
public function getSearchProperties(): array {
|
||||
return $this->searchProperties;
|
||||
}
|
||||
|
||||
public function addSearchCalendar(string $calendarUri): void {
|
||||
$this->calendarUris[] = $calendarUri;
|
||||
}
|
||||
|
||||
public function getCalendarUris(): array {
|
||||
return $this->calendarUris;
|
||||
}
|
||||
|
||||
public function getLimit(): ?int {
|
||||
return $this->limit;
|
||||
}
|
||||
|
||||
public function setLimit(int $limit): void {
|
||||
$this->limit = $limit;
|
||||
}
|
||||
|
||||
public function getOffset(): ?int {
|
||||
return $this->offset;
|
||||
}
|
||||
|
||||
public function setOffset(int $offset): void {
|
||||
$this->offset = $offset;
|
||||
}
|
||||
|
||||
public function addType(string $value): void {
|
||||
$this->options['types'][] = $value;
|
||||
}
|
||||
|
||||
public function setTimerangeStart(\DateTimeImmutable $startTime): void {
|
||||
$this->options['timerange']['start'] = $startTime;
|
||||
}
|
||||
|
||||
public function setTimerangeEnd(\DateTimeImmutable $endTime): void {
|
||||
$this->options['timerange']['end'] = $endTime;
|
||||
}
|
||||
|
||||
public function getOptions(): array {
|
||||
return $this->options;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
*
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCP\Calendar;
|
||||
|
||||
/**
|
||||
* This interface defines a lazy loading mechanism for
|
||||
* calendars for Public Consumption
|
||||
*
|
||||
* @since 23.0.0
|
||||
*/
|
||||
interface ICalendarProvider {
|
||||
|
||||
/**
|
||||
* @param string $principalUri
|
||||
* @param string[] $calendarUris
|
||||
* @return ICalendar[]
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function getCalendars(string $principalUri, array $calendarUris = []): array;
|
||||
}
|
||||
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
namespace OCP\Calendar;
|
||||
|
||||
use DateTimeImmutable;
|
||||
|
||||
/**
|
||||
* Build a flexible, extendable query to the CalDAV backend
|
||||
*
|
||||
* @since 23.0.0
|
||||
*/
|
||||
interface ICalendarQuery {
|
||||
|
||||
/**
|
||||
* Limit the results to the calendar uri(s)
|
||||
*
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function addSearchCalendar(string $calendarUri): void;
|
||||
|
||||
/**
|
||||
* Search the property values
|
||||
*
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function setSearchPattern(string $pattern): void;
|
||||
|
||||
/**
|
||||
* Define the property name(s) to search for
|
||||
*
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function addSearchProperty(string $value): void;
|
||||
|
||||
/**
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function addType(string $value): void;
|
||||
|
||||
/**
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function setTimerangeStart(DateTimeImmutable $startTime): void;
|
||||
|
||||
/**
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function setTimerangeEnd(DateTimeImmutable $endTime): void;
|
||||
|
||||
/**
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function setLimit(int $limit): void;
|
||||
|
||||
/**
|
||||
* @since 23.0.0
|
||||
*/
|
||||
public function setOffset(int $offset): void;
|
||||
}
|
||||
Loading…
Reference in New Issue