Signed-off-by: Carl Schwan <carl@carlschwan.eu>tags/v25.0.0beta1
@@ -100,7 +100,7 @@ $server->setBaseUri($baseuri); | |||
// Add plugins | |||
$server->addPlugin(new MaintenancePlugin(\OC::$server->getConfig(), \OC::$server->getL10N('dav'))); | |||
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, 'ownCloud')); | |||
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend)); | |||
$server->addPlugin(new \Sabre\CalDAV\Plugin()); | |||
$server->addPlugin(new LegacyDAVACL()); |
@@ -38,7 +38,6 @@ use OCA\DAV\Connector\Sabre\Principal; | |||
use OCP\App\IAppManager; | |||
use Psr\Log\LoggerInterface; | |||
use Sabre\CardDAV\Plugin; | |||
use Psr\Log\LoggerInterface; | |||
$authBackend = new Auth( | |||
\OC::$server->getSession(), |
@@ -71,12 +71,9 @@ class BuildReminderIndexBackgroundJob extends QueuedJob { | |||
$this->timeFactory = $timeFactory; | |||
} | |||
/** | |||
* @param $arguments | |||
*/ | |||
public function run($arguments) { | |||
$offset = (int) $arguments['offset']; | |||
$stopAt = (int) $arguments['stopAt']; | |||
public function run($argument) { | |||
$offset = (int) $argument['offset']; | |||
$stopAt = (int) $argument['stopAt']; | |||
$this->logger->info('Building calendar reminder index (' . $offset .'/' . $stopAt . ')'); | |||
@@ -52,12 +52,11 @@ class EventReminderJob extends TimedJob { | |||
} | |||
/** | |||
* @param $arg | |||
* @throws \OCA\DAV\CalDAV\Reminder\NotificationProvider\ProviderNotAvailableException | |||
* @throws \OCA\DAV\CalDAV\Reminder\NotificationTypeDoesNotExistException | |||
* @throws \OC\User\NoUserException | |||
*/ | |||
public function run($arg):void { | |||
public function run($argument):void { | |||
if ($this->config->getAppValue('dav', 'sendEventReminders', 'yes') !== 'yes') { | |||
return; | |||
} |
@@ -47,12 +47,9 @@ class GenerateBirthdayCalendarBackgroundJob extends QueuedJob { | |||
$this->config = $config; | |||
} | |||
/** | |||
* @param array $arguments | |||
*/ | |||
public function run($arguments) { | |||
$userId = $arguments['userId']; | |||
$purgeBeforeGenerating = $arguments['purgeBeforeGenerating'] ?? false; | |||
public function run($argument) { | |||
$userId = $argument['userId']; | |||
$purgeBeforeGenerating = $argument['purgeBeforeGenerating'] ?? false; | |||
// make sure admin didn't change his mind | |||
$isGloballyEnabled = $this->config->getAppValue('dav', 'generateBirthdayCalendar', 'yes'); |
@@ -32,18 +32,15 @@ use OCP\AppFramework\Utility\ITimeFactory; | |||
use OCP\BackgroundJob\IJob; | |||
use OCP\BackgroundJob\IJobList; | |||
use OCP\BackgroundJob\TimedJob; | |||
use OCP\Files\Node; | |||
use OCP\Files\File; | |||
use OCP\Files\Folder; | |||
use OCP\Files\IRootFolder; | |||
use OCP\Files\NotFoundException; | |||
class UploadCleanup extends TimedJob { | |||
/** @var IRootFolder */ | |||
private $rootFolder; | |||
/** @var IJobList */ | |||
private $jobList; | |||
private IRootFolder $rootFolder; | |||
private IJobList $jobList; | |||
public function __construct(ITimeFactory $time, IRootFolder $rootFolder, IJobList $jobList) { | |||
parent::__construct($time); | |||
@@ -71,6 +68,7 @@ class UploadCleanup extends TimedJob { | |||
return; | |||
} | |||
/** @var File[] $files */ | |||
$files = $uploadFolder->getDirectoryListing(); | |||
// Remove if all files have an mtime of more than a day |
@@ -53,34 +53,15 @@ use Sabre\VObject\Reader; | |||
*/ | |||
class BirthdayService { | |||
public const BIRTHDAY_CALENDAR_URI = 'contact_birthdays'; | |||
/** @var GroupPrincipalBackend */ | |||
private $principalBackend; | |||
/** @var CalDavBackend */ | |||
private $calDavBackEnd; | |||
/** @var CardDavBackend */ | |||
private $cardDavBackEnd; | |||
/** @var IConfig */ | |||
private $config; | |||
/** @var IDBConnection */ | |||
private $dbConnection; | |||
/** @var IL10N */ | |||
private $l10n; | |||
private GroupPrincipalBackend $principalBackend; | |||
private CalDavBackend $calDavBackEnd; | |||
private CardDavBackend $cardDavBackEnd; | |||
private IConfig $config; | |||
private IDBConnection $dbConnection; | |||
private IL10N $l10n; | |||
/** | |||
* BirthdayService constructor. | |||
* | |||
* @param CalDavBackend $calDavBackEnd | |||
* @param CardDavBackend $cardDavBackEnd | |||
* @param GroupPrincipalBackend $principalBackend | |||
* @param IConfig $config | |||
* @param IDBConnection $dbConnection | |||
* @param IL10N $l10n | |||
*/ | |||
public function __construct(CalDavBackend $calDavBackEnd, | |||
CardDavBackend $cardDavBackEnd, | |||
@@ -96,14 +77,9 @@ class BirthdayService { | |||
$this->l10n = $l10n; | |||
} | |||
/** | |||
* @param int $addressBookId | |||
* @param string $cardUri | |||
* @param string $cardData | |||
*/ | |||
public function onCardChanged(int $addressBookId, | |||
string $cardUri, | |||
string $cardData) { | |||
string $cardData): void { | |||
if (!$this->isGloballyEnabled()) { | |||
return; | |||
} | |||
@@ -129,12 +105,8 @@ class BirthdayService { | |||
} | |||
} | |||
/** | |||
* @param int $addressBookId | |||
* @param string $cardUri | |||
*/ | |||
public function onCardDeleted(int $addressBookId, | |||
string $cardUri) { | |||
string $cardUri): void { | |||
if (!$this->isGloballyEnabled()) { | |||
return; | |||
} | |||
@@ -156,11 +128,9 @@ class BirthdayService { | |||
} | |||
/** | |||
* @param string $principal | |||
* @return array|null | |||
* @throws \Sabre\DAV\Exception\BadRequest | |||
*/ | |||
public function ensureCalendarExists(string $principal):?array { | |||
public function ensureCalendarExists(string $principal): ?array { | |||
$calendar = $this->calDavBackEnd->getCalendarByUri($principal, self::BIRTHDAY_CALENDAR_URI); | |||
if (!is_null($calendar)) { | |||
return $calendar; |
@@ -31,6 +31,7 @@ use OCA\DAV\Exception\UnsupportedLimitOnInitialSyncException; | |||
use Sabre\CalDAV\Backend\BackendInterface; | |||
use Sabre\DAV\Exception\MethodNotAllowed; | |||
use Sabre\DAV\Exception\NotFound; | |||
use Sabre\DAV\INode; | |||
use Sabre\DAV\PropPatch; | |||
/** | |||
@@ -51,7 +52,7 @@ class CachedSubscription extends \Sabre\CalDAV\Calendar { | |||
/** | |||
* @return array | |||
*/ | |||
public function getACL():array { | |||
public function getACL() { | |||
return [ | |||
[ | |||
'privilege' => '{DAV:}read', | |||
@@ -79,7 +80,7 @@ class CachedSubscription extends \Sabre\CalDAV\Calendar { | |||
/** | |||
* @return array | |||
*/ | |||
public function getChildACL():array { | |||
public function getChildACL() { | |||
return [ | |||
[ | |||
'privilege' => '{DAV:}read', | |||
@@ -139,9 +140,9 @@ class CachedSubscription extends \Sabre\CalDAV\Calendar { | |||
} | |||
/** | |||
* @return array | |||
* @return INode[] | |||
*/ | |||
public function getChildren():array { | |||
public function getChildren(): array { | |||
$objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id'], CalDavBackend::CALENDAR_TYPE_SUBSCRIPTION); | |||
$children = []; | |||
@@ -169,8 +170,8 @@ class CachedSubscription extends \Sabre\CalDAV\Calendar { | |||
/** | |||
* @param string $name | |||
* @param null $calendarData | |||
* @return null|string|void | |||
* @param null|resource|string $calendarData | |||
* @return null|string | |||
* @throws MethodNotAllowed | |||
*/ | |||
public function createFile($name, $calendarData = null) { |
@@ -50,7 +50,7 @@ class CachedSubscriptionObject extends \Sabre\CalDAV\CalendarObject { | |||
/** | |||
* @param resource|string $calendarData | |||
* @return string|void | |||
* @return string | |||
* @throws MethodNotAllowed | |||
*/ | |||
public function put($calendarData) { |
@@ -23,11 +23,11 @@ | |||
namespace OCA\DAV\CalDAV\ICSExportPlugin; | |||
use OCP\IConfig; | |||
use Psr\Log\LoggerInterface; | |||
use Sabre\HTTP\ResponseInterface; | |||
use Sabre\VObject\DateTimeParser; | |||
use Sabre\VObject\InvalidDataException; | |||
use Sabre\VObject\Property\ICalendar\Duration; | |||
use Psr\Log\LoggerInterface; | |||
/** | |||
* Class ICSExportPlugin |
@@ -37,7 +37,6 @@ use OCA\DAV\RootCollection; | |||
use OCP\EventDispatcher\IEventDispatcher; | |||
use Psr\Log\LoggerInterface; | |||
use Sabre\VObject\ITip\Message; | |||
use Psr\Log\LoggerInterface; | |||
class InvitationResponseServer { | |||
@@ -134,8 +134,8 @@ class PublishPlugin extends ServerPlugin { | |||
$canPublish = (!$node->isSubscription() && $node->canWrite()); | |||
if ($this->config->getAppValue('dav', 'limitAddressBookAndCalendarSharingToOwner', 'no') === 'yes') { | |||
$canShare &= ($node->getOwner() === $node->getPrincipalURI()); | |||
$canPublish &= ($node->getOwner() === $node->getPrincipalURI()); | |||
$canShare = $canShare && ($node->getOwner() === $node->getPrincipalURI()); | |||
$canPublish = $canPublish && ($node->getOwner() === $node->getPrincipalURI()); | |||
} | |||
return new AllowedSharingModes($canShare, $canPublish); |
@@ -38,6 +38,7 @@ use OCP\IURLGenerator; | |||
use OCP\L10N\IFactory as L10NFactory; | |||
use OCP\Mail\IEMailTemplate; | |||
use OCP\Mail\IMailer; | |||
use OCP\IUser; | |||
use Psr\Log\LoggerInterface; | |||
use Sabre\VObject; | |||
use Sabre\VObject\Component\VEvent; | |||
@@ -54,8 +55,7 @@ class EmailProvider extends AbstractProvider { | |||
/** @var string */ | |||
public const NOTIFICATION_TYPE = 'EMAIL'; | |||
/** @var IMailer */ | |||
private $mailer; | |||
private IMailer $mailer; | |||
public function __construct(IConfig $config, | |||
IMailer $mailer, | |||
@@ -168,10 +168,6 @@ class EmailProvider extends AbstractProvider { | |||
} | |||
} | |||
/** | |||
* @param string $path | |||
* @return string | |||
*/ | |||
private function getAbsoluteImagePath(string $path):string { | |||
return $this->urlGenerator->getAbsoluteURL( | |||
$this->urlGenerator->imagePath('core', $path) | |||
@@ -207,9 +203,8 @@ class EmailProvider extends AbstractProvider { | |||
} | |||
/** | |||
* @param array $emails | |||
* @param string $defaultLanguage | |||
* @return array | |||
* @param array<string, array{LANG?: string}> $emails | |||
* @return array<string, string[]> | |||
*/ | |||
private function sortEMailAddressesByLanguage(array $emails, | |||
string $defaultLanguage):array { | |||
@@ -234,7 +229,7 @@ class EmailProvider extends AbstractProvider { | |||
/** | |||
* @param VEvent $vevent | |||
* @return array | |||
* @return array<string, array{LANG?: string}> | |||
*/ | |||
private function getAllEMailAddressesFromEvent(VEvent $vevent):array { | |||
$emailAddresses = []; | |||
@@ -277,7 +272,7 @@ class EmailProvider extends AbstractProvider { | |||
$properties = []; | |||
$langProp = $attendee->offsetGet('LANG'); | |||
if ($langProp instanceof VObject\Parameter) { | |||
if ($langProp instanceof VObject\Parameter && $langProp->getValue() !== null) { | |||
$properties['LANG'] = $langProp->getValue(); | |||
} | |||
@@ -287,18 +282,15 @@ class EmailProvider extends AbstractProvider { | |||
} | |||
if (isset($vevent->ORGANIZER) && $this->hasAttendeeMailURI($vevent->ORGANIZER)) { | |||
$emailAddresses[$this->getEMailAddressOfAttendee($vevent->ORGANIZER)] = []; | |||
$organizerEmailAddress = $this->getEMailAddressOfAttendee($vevent->ORGANIZER); | |||
if ($organizerEmailAddress !== null) { | |||
$emailAddresses[$organizerEmailAddress] = []; | |||
} | |||
} | |||
return $emailAddresses; | |||
} | |||
/** | |||
* @param VObject\Property $attendee | |||
* @return string | |||
*/ | |||
private function getCUTypeOfAttendee(VObject\Property $attendee):string { | |||
$cuType = $attendee->offsetGet('CUTYPE'); | |||
if ($cuType instanceof VObject\Parameter) { | |||
@@ -308,10 +300,6 @@ class EmailProvider extends AbstractProvider { | |||
return 'INDIVIDUAL'; | |||
} | |||
/** | |||
* @param VObject\Property $attendee | |||
* @return string | |||
*/ | |||
private function getPartstatOfAttendee(VObject\Property $attendee):string { | |||
$partstat = $attendee->offsetGet('PARTSTAT'); | |||
if ($partstat instanceof VObject\Parameter) { | |||
@@ -321,19 +309,11 @@ class EmailProvider extends AbstractProvider { | |||
return 'NEEDS-ACTION'; | |||
} | |||
/** | |||
* @param VObject\Property $attendee | |||
* @return bool | |||
*/ | |||
private function hasAttendeeMailURI(VObject\Property $attendee):bool { | |||
private function hasAttendeeMailURI(VObject\Property $attendee): bool { | |||
return stripos($attendee->getValue(), 'mailto:') === 0; | |||
} | |||
/** | |||
* @param VObject\Property $attendee | |||
* @return string|null | |||
*/ | |||
private function getEMailAddressOfAttendee(VObject\Property $attendee):?string { | |||
private function getEMailAddressOfAttendee(VObject\Property $attendee): ?string { | |||
if (!$this->hasAttendeeMailURI($attendee)) { | |||
return null; | |||
} | |||
@@ -342,8 +322,8 @@ class EmailProvider extends AbstractProvider { | |||
} | |||
/** | |||
* @param array $users | |||
* @return array | |||
* @param IUser[] $users | |||
* @return array<string, array{LANG?: string}> | |||
*/ | |||
private function getEMailAddressesOfAllUsersWithWriteAccessToCalendar(array $users):array { | |||
$emailAddresses = []; | |||
@@ -366,12 +346,9 @@ class EmailProvider extends AbstractProvider { | |||
} | |||
/** | |||
* @param IL10N $l10n | |||
* @param VEvent $vevent | |||
* @return string | |||
* @throws \Exception | |||
*/ | |||
private function generateDateString(IL10N $l10n, VEvent $vevent):string { | |||
private function generateDateString(IL10N $l10n, VEvent $vevent): string { | |||
$isAllDay = $vevent->DTSTART instanceof Property\ICalendar\Date; | |||
/** @var Property\ICalendar\Date | Property\ICalendar\DateTime $dtstart */ | |||
@@ -437,57 +414,27 @@ class EmailProvider extends AbstractProvider { | |||
. ' (' . $startTimezone . ')'; | |||
} | |||
/** | |||
* @param DateTime $dtStart | |||
* @param DateTime $dtEnd | |||
* @return bool | |||
*/ | |||
private function isDayEqual(DateTime $dtStart, | |||
DateTime $dtEnd):bool { | |||
return $dtStart->format('Y-m-d') === $dtEnd->format('Y-m-d'); | |||
} | |||
/** | |||
* @param IL10N $l10n | |||
* @param DateTime $dt | |||
* @return string | |||
*/ | |||
private function getWeekDayName(IL10N $l10n, DateTime $dt):string { | |||
return $l10n->l('weekdayName', $dt, ['width' => 'abbreviated']); | |||
return (string)$l10n->l('weekdayName', $dt, ['width' => 'abbreviated']); | |||
} | |||
/** | |||
* @param IL10N $l10n | |||
* @param DateTime $dt | |||
* @return string | |||
*/ | |||
private function getDateString(IL10N $l10n, DateTime $dt):string { | |||
return $l10n->l('date', $dt, ['width' => 'medium']); | |||
return (string)$l10n->l('date', $dt, ['width' => 'medium']); | |||
} | |||
/** | |||
* @param IL10N $l10n | |||
* @param DateTime $dt | |||
* @return string | |||
*/ | |||
private function getDateTimeString(IL10N $l10n, DateTime $dt):string { | |||
return $l10n->l('datetime', $dt, ['width' => 'medium|short']); | |||
return (string)$l10n->l('datetime', $dt, ['width' => 'medium|short']); | |||
} | |||
/** | |||
* @param IL10N $l10n | |||
* @param DateTime $dt | |||
* @return string | |||
*/ | |||
private function getTimeString(IL10N $l10n, DateTime $dt):string { | |||
return $l10n->l('time', $dt, ['width' => 'short']); | |||
return (string)$l10n->l('time', $dt, ['width' => 'short']); | |||
} | |||
/** | |||
* @param VEvent $vevent | |||
* @param IL10N $l10n | |||
* @return string | |||
*/ | |||
private function getTitleFromVEvent(VEvent $vevent, IL10N $l10n):string { | |||
if (isset($vevent->SUMMARY)) { | |||
return (string)$vevent->SUMMARY; |
@@ -109,8 +109,6 @@ class PushProvider extends AbstractProvider { | |||
} | |||
/** | |||
* @var VEvent $vevent | |||
* @return array | |||
* @throws \Exception | |||
*/ | |||
protected function extractEventDetails(VEvent $vevent):array { |
@@ -298,7 +298,7 @@ class Notifier implements INotifier { | |||
* @return string | |||
*/ | |||
private function getWeekDayName(DateTime $dt):string { | |||
return $this->l10n->l('weekdayName', $dt, ['width' => 'abbreviated']); | |||
return (string)$this->l10n->l('weekdayName', $dt, ['width' => 'abbreviated']); | |||
} | |||
/** | |||
@@ -306,7 +306,7 @@ class Notifier implements INotifier { | |||
* @return string | |||
*/ | |||
private function getDateString(DateTime $dt):string { | |||
return $this->l10n->l('date', $dt, ['width' => 'medium']); | |||
return (string)$this->l10n->l('date', $dt, ['width' => 'medium']); | |||
} | |||
/** | |||
@@ -314,7 +314,7 @@ class Notifier implements INotifier { | |||
* @return string | |||
*/ | |||
private function getDateTimeString(DateTime $dt):string { | |||
return $this->l10n->l('datetime', $dt, ['width' => 'medium|short']); | |||
return (string)$this->l10n->l('datetime', $dt, ['width' => 'medium|short']); | |||
} | |||
/** | |||
@@ -322,6 +322,6 @@ class Notifier implements INotifier { | |||
* @return string | |||
*/ | |||
private function getTimeString(DateTime $dt):string { | |||
return $this->l10n->l('time', $dt, ['width' => 'short']); | |||
return (string)$this->l10n->l('time', $dt, ['width' => 'short']); | |||
} | |||
} |
@@ -291,16 +291,15 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
/** | |||
* @param int $addressBookId | |||
*/ | |||
public function getAddressBookById($addressBookId) { | |||
public function getAddressBookById(int $addressBookId): ?array { | |||
$query = $this->db->getQueryBuilder(); | |||
$result = $query->select(['id', 'uri', 'displayname', 'principaluri', 'description', 'synctoken']) | |||
->from('addressbooks') | |||
->where($query->expr()->eq('id', $query->createNamedParameter($addressBookId))) | |||
->execute(); | |||
->where($query->expr()->eq('id', $query->createNamedParameter($addressBookId, IQueryBuilder::PARAM_INT))) | |||
->executeQuery(); | |||
$row = $result->fetch(); | |||
$result->closeCursor(); | |||
if ($row === false) { | |||
if (!$row) { | |||
return null; | |||
} | |||
@@ -457,7 +456,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
$addressBookId = $query->getLastInsertId(); | |||
$addressBookRow = $this->getAddressBookById($addressBookId); | |||
$this->dispatcher->dispatchTyped(new AddressBookCreatedEvent((int)$addressBookId, $addressBookRow)); | |||
$this->dispatcher->dispatchTyped(new AddressBookCreatedEvent($addressBookId, $addressBookRow)); | |||
return $addressBookId; | |||
} | |||
@@ -495,7 +494,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
->execute(); | |||
if ($addressBookData) { | |||
$this->dispatcher->dispatchTyped(new AddressBookDeletedEvent((int) $addressBookId, $addressBookData, $shares)); | |||
$this->dispatcher->dispatchTyped(new AddressBookDeletedEvent($addressBookId, $addressBookData, $shares)); | |||
} | |||
} | |||
@@ -515,14 +514,14 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
* calculating them. If they are specified, you can also ommit carddata. | |||
* This may speed up certain requests, especially with large cards. | |||
* | |||
* @param mixed $addressBookId | |||
* @param mixed $addressbookId | |||
* @return array | |||
*/ | |||
public function getCards($addressBookId) { | |||
public function getCards($addressbookId) { | |||
$query = $this->db->getQueryBuilder(); | |||
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid']) | |||
->from($this->dbCardsTable) | |||
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))); | |||
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressbookId))); | |||
$cards = []; | |||
@@ -588,7 +587,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
* If the backend supports this, it may allow for some speed-ups. | |||
* | |||
* @param mixed $addressBookId | |||
* @param string[] $uris | |||
* @param array $uris | |||
* @return array | |||
*/ | |||
public function getMultipleCards($addressBookId, array $uris) { | |||
@@ -689,7 +688,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
$addressBookData = $this->getAddressBookById($addressBookId); | |||
$shares = $this->getShares($addressBookId); | |||
$objectRow = $this->getCard($addressBookId, $cardUri); | |||
$this->dispatcher->dispatchTyped(new CardCreatedEvent((int)$addressBookId, $addressBookData, $shares, $objectRow)); | |||
$this->dispatcher->dispatchTyped(new CardCreatedEvent($addressBookId, $addressBookData, $shares, $objectRow)); | |||
$this->legacyDispatcher->dispatch('\OCA\DAV\CardDAV\CardDavBackend::createCard', | |||
new GenericEvent(null, [ | |||
'addressBookId' => $addressBookId, | |||
@@ -753,7 +752,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
$addressBookData = $this->getAddressBookById($addressBookId); | |||
$shares = $this->getShares($addressBookId); | |||
$objectRow = $this->getCard($addressBookId, $cardUri); | |||
$this->dispatcher->dispatchTyped(new CardUpdatedEvent((int)$addressBookId, $addressBookData, $shares, $objectRow)); | |||
$this->dispatcher->dispatchTyped(new CardUpdatedEvent($addressBookId, $addressBookData, $shares, $objectRow)); | |||
$this->legacyDispatcher->dispatch('\OCA\DAV\CardDAV\CardDavBackend::updateCard', | |||
new GenericEvent(null, [ | |||
'addressBookId' => $addressBookId, | |||
@@ -784,13 +783,13 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
$ret = $query->delete($this->dbCardsTable) | |||
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) | |||
->andWhere($query->expr()->eq('uri', $query->createNamedParameter($cardUri))) | |||
->execute(); | |||
->executeStatement(); | |||
$this->addChange($addressBookId, $cardUri, 3); | |||
if ($ret === 1) { | |||
if ($cardId !== null) { | |||
$this->dispatcher->dispatchTyped(new CardDeletedEvent((int)$addressBookId, $addressBookData, $shares, $objectRow)); | |||
$this->dispatcher->dispatchTyped(new CardDeletedEvent($addressBookId, $addressBookData, $shares, $objectRow)); | |||
$this->legacyDispatcher->dispatch('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', | |||
new GenericEvent(null, [ | |||
'addressBookId' => $addressBookId, | |||
@@ -868,12 +867,12 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
->where( | |||
$qb->expr()->eq('id', $qb->createNamedParameter($addressBookId)) | |||
); | |||
$stmt = $qb->execute(); | |||
$stmt = $qb->executeQuery(); | |||
$currentToken = $stmt->fetchOne(); | |||
$stmt->closeCursor(); | |||
if (is_null($currentToken)) { | |||
return null; | |||
return []; | |||
} | |||
$result = [ | |||
@@ -900,7 +899,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
} | |||
// Fetching all changes | |||
$stmt = $qb->execute(); | |||
$stmt = $qb->executeQuery(); | |||
$changes = []; | |||
@@ -932,7 +931,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { | |||
$qb->expr()->eq('addressbookid', $qb->createNamedParameter($addressBookId)) | |||
); | |||
// No synctoken supplied, this is the initial sync. | |||
$stmt = $qb->execute(); | |||
$stmt = $qb->executeQuery(); | |||
$result['added'] = $stmt->fetchAll(\PDO::FETCH_COLUMN); | |||
$stmt->closeCursor(); | |||
} |
@@ -63,15 +63,9 @@ class PhotoCache { | |||
} | |||
/** | |||
* @param int $addressBookId | |||
* @param string $cardUri | |||
* @param int $size | |||
* @param Card $card | |||
* | |||
* @return ISimpleFile | |||
* @throws NotFoundException | |||
*/ | |||
public function get($addressBookId, $cardUri, $size, Card $card) { | |||
public function get(int $addressBookId, string $cardUri, int $size, Card $card): ISimpleFile { | |||
$folder = $this->getFolder($addressBookId, $cardUri); | |||
if ($this->isEmpty($folder)) { | |||
@@ -120,7 +114,10 @@ class PhotoCache { | |||
return !$folder->fileExists('nophoto'); | |||
} | |||
private function getFile(ISimpleFolder $folder, int $size): ISimpleFile { | |||
/** | |||
* @param float|-1 $size | |||
*/ | |||
private function getFile(ISimpleFolder $folder, $size): ISimpleFile { | |||
$ext = $this->getExtension($folder); | |||
if ($size === -1) { |
@@ -86,7 +86,7 @@ class SyncService { | |||
*/ | |||
public function syncRemoteAddressBook($url, $userName, $addressBookUrl, $sharedSecret, $syncToken, $targetBookId, $targetPrincipal, $targetProperties) { | |||
// 1. create addressbook | |||
$book = $this->ensureSystemAddressBookExists($targetPrincipal, $targetBookId, $targetProperties); | |||
$book = $this->ensureSystemAddressBookExists($targetPrincipal, (string)$targetBookId, $targetProperties); | |||
$addressBookId = $book['id']; | |||
// 2. query changes |
@@ -44,7 +44,7 @@ use Sabre\DAV\Auth\Backend\AbstractBasic; | |||
*/ | |||
class PublicAuth extends AbstractBasic { | |||
private const BRUTEFORCE_ACTION = 'public_webdav_auth'; | |||
private IShare $share; | |||
private ?IShare $share = null; | |||
private IManager $shareManager; | |||
private ISession $session; | |||
private IRequest $request; | |||
@@ -121,6 +121,7 @@ class PublicAuth extends AbstractBasic { | |||
} | |||
public function getShare(): IShare { | |||
assert($this->share !== null); | |||
return $this->share; | |||
} | |||
} |
@@ -54,7 +54,7 @@ class Auth extends AbstractBasic { | |||
private ISession $session; | |||
private Session $userSession; | |||
private IRequest $request; | |||
private string $currentUser; | |||
private ?string $currentUser = null; | |||
private Manager $twoFactorManager; | |||
private Throttler $throttler; | |||
@@ -37,7 +37,7 @@ use Sabre\DAV\Server; | |||
* @package OCA\DAV\Connector\Sabre | |||
*/ | |||
class BlockLegacyClientPlugin extends ServerPlugin { | |||
protected Server $server; | |||
protected ?Server $server = null; | |||
protected IConfig $config; | |||
public function __construct(IConfig $config) { |
@@ -29,7 +29,7 @@ use Sabre\HTTP\ResponseInterface; | |||
use Sabre\DAV\Server; | |||
class ChecksumUpdatePlugin extends ServerPlugin { | |||
protected Server $server; | |||
protected ?Server $server = null; | |||
public function initialize(Server $server) { | |||
$this->server = $server; |
@@ -36,7 +36,7 @@ class CommentPropertiesPlugin extends ServerPlugin { | |||
public const PROPERTY_NAME_COUNT = '{http://owncloud.org/ns}comments-count'; | |||
public const PROPERTY_NAME_UNREAD = '{http://owncloud.org/ns}comments-unread'; | |||
protected Server $server; | |||
protected ?Server $server = null; | |||
private ICommentsManager $commentsManager; | |||
private IUserSession $userSession; | |||
private array $cachedUnreadCount = []; |
@@ -35,7 +35,7 @@ use Sabre\DAV\Server; | |||
* or mangle Etag headers. | |||
*/ | |||
class CopyEtagHeaderPlugin extends \Sabre\DAV\ServerPlugin { | |||
private Server $server; | |||
private ?Server $server = null; | |||
/** | |||
* This initializes the plugin. |
@@ -44,7 +44,7 @@ use Sabre\DAV\Server; | |||
* @package OCA\DAV\Connector\Sabre | |||
*/ | |||
class DummyGetResponsePlugin extends \Sabre\DAV\ServerPlugin { | |||
protected Server $server; | |||
protected ?Server $server = null; | |||
/** | |||
* @param \Sabre\DAV\Server $server |
@@ -112,7 +112,7 @@ class ExceptionLoggerPlugin extends \Sabre\DAV\ServerPlugin { | |||
/** | |||
* Log exception | |||
*/ | |||
public function logException(\Throwable $ex): void { | |||
public function logException(\Throwable $ex) { | |||
$exceptionClass = get_class($ex); | |||
if (isset($this->nonFatalExceptions[$exceptionClass]) || | |||
( |
@@ -86,7 +86,7 @@ class FilesPlugin extends ServerPlugin { | |||
public const FILE_METADATA_SIZE = '{http://nextcloud.org/ns}file-metadata-size'; | |||
/** Reference to main server object */ | |||
private Server $server; | |||
private ?Server $server = null; | |||
private Tree $tree; | |||
private IUserSession $userSession; | |||
@@ -345,7 +345,7 @@ class FilesPlugin extends ServerPlugin { | |||
$propFind->handle(self::HAS_PREVIEW_PROPERTYNAME, function () use ($node) { | |||
return json_encode($this->previewManager->isAvailable($node->getFileInfo())); | |||
}); | |||
$propFind->handle(self::SIZE_PROPERTYNAME, function () use ($node): int { | |||
$propFind->handle(self::SIZE_PROPERTYNAME, function () use ($node): ?int { | |||
return $node->getSize(); | |||
}); | |||
$propFind->handle(self::MOUNT_TYPE_PROPERTYNAME, function () use ($node) { |
@@ -29,7 +29,7 @@ namespace OCA\DAV\Tests\Files; | |||
use OC\Files\Search\SearchComparison; | |||
use OC\Files\Search\SearchQuery; | |||
use OC\Files\View; | |||
use OCA\DAV\Connector\Sabre\CachingTree; | |||
use OCA\DAV\Connector\Sabre\ObjectTree; | |||
use OCA\DAV\Connector\Sabre\Directory; | |||
use OCA\DAV\Connector\Sabre\File; | |||
use OCA\DAV\Connector\Sabre\FilesPlugin; | |||
@@ -48,7 +48,7 @@ use SearchDAV\Query\Query; | |||
use Test\TestCase; | |||
class FileSearchBackendTest extends TestCase { | |||
/** @var CachingTree|\PHPUnit\Framework\MockObject\MockObject */ | |||
/** @var ObjectTree|\PHPUnit\Framework\MockObject\MockObject */ | |||
private $tree; | |||
/** @var IUser */ | |||
@@ -80,7 +80,7 @@ class FileSearchBackendTest extends TestCase { | |||
->method('getUID') | |||
->willReturn('test'); | |||
$this->tree = $this->getMockBuilder(CachingTree::class) | |||
$this->tree = $this->getMockBuilder(ObjectTree::class) | |||
->disableOriginalConstructor() | |||
->getMock(); | |||
@@ -55,9 +55,6 @@ | |||
</UndefinedFunction> | |||
</file> | |||
<file src="apps/dav/appinfo/v1/caldav.php"> | |||
<TooManyArguments occurrences="1"> | |||
<code>new \Sabre\DAV\Auth\Plugin($authBackend, 'ownCloud')</code> | |||
</TooManyArguments> | |||
<UndefinedGlobalVariable occurrences="1"> | |||
<code>$baseuri</code> | |||
</UndefinedGlobalVariable> | |||
@@ -122,26 +119,6 @@ | |||
<code>Uri\split($this->principalInfo['uri'])</code> | |||
</UndefinedFunction> | |||
</file> | |||
<file src="apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php"> | |||
<ParamNameMismatch occurrences="1"> | |||
<code>$arguments</code> | |||
</ParamNameMismatch> | |||
</file> | |||
<file src="apps/dav/lib/BackgroundJob/EventReminderJob.php"> | |||
<ParamNameMismatch occurrences="1"> | |||
<code>$arg</code> | |||
</ParamNameMismatch> | |||
</file> | |||
<file src="apps/dav/lib/BackgroundJob/GenerateBirthdayCalendarBackgroundJob.php"> | |||
<ParamNameMismatch occurrences="1"> | |||
<code>$arguments</code> | |||
</ParamNameMismatch> | |||
</file> | |||
<file src="apps/dav/lib/BackgroundJob/UploadCleanup.php"> | |||
<InvalidArgument occurrences="1"> | |||
<code>File</code> | |||
</InvalidArgument> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/BirthdayService.php"> | |||
<UndefinedMethod occurrences="2"> | |||
<code>setDateTime</code> | |||
@@ -155,20 +132,11 @@ | |||
</UndefinedPropertyFetch> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/CachedSubscription.php"> | |||
<LessSpecificImplementedReturnType occurrences="1"> | |||
<code>array</code> | |||
</LessSpecificImplementedReturnType> | |||
<MoreSpecificImplementedParamType occurrences="1"> | |||
<code>$calendarData</code> | |||
</MoreSpecificImplementedParamType> | |||
<ParamNameMismatch occurrences="1"> | |||
<code>$calendarData</code> | |||
</ParamNameMismatch> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/CachedSubscriptionObject.php"> | |||
<ImplementedReturnTypeMismatch occurrences="1"> | |||
<code>string|void</code> | |||
</ImplementedReturnTypeMismatch> | |||
<NullableReturnStatement occurrences="1"> | |||
<code>$this->objectData['calendardata']</code> | |||
</NullableReturnStatement> | |||
@@ -263,16 +231,6 @@ | |||
<code>$paths</code> | |||
</MoreSpecificImplementedParamType> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/Publishing/PublishPlugin.php"> | |||
<InvalidOperand occurrences="2"> | |||
<code>$canPublish</code> | |||
<code>$canShare</code> | |||
</InvalidOperand> | |||
<InvalidScalarArgument occurrences="2"> | |||
<code>$canPublish</code> | |||
<code>$canShare</code> | |||
</InvalidScalarArgument> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php"> | |||
<UndefinedMethod occurrences="3"> | |||
<code>hasTime</code> | |||
@@ -281,60 +239,17 @@ | |||
</UndefinedMethod> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php"> | |||
<FalsableReturnStatement occurrences="4"> | |||
<code>$l10n->l('date', $dt, ['width' => 'medium'])</code> | |||
<code>$l10n->l('datetime', $dt, ['width' => 'medium|short'])</code> | |||
<code>$l10n->l('time', $dt, ['width' => 'short'])</code> | |||
<code>$l10n->l('weekdayName', $dt, ['width' => 'abbreviated'])</code> | |||
</FalsableReturnStatement> | |||
<InvalidReturnStatement occurrences="4"> | |||
<code>$l10n->l('date', $dt, ['width' => 'medium'])</code> | |||
<code>$l10n->l('datetime', $dt, ['width' => 'medium|short'])</code> | |||
<code>$l10n->l('time', $dt, ['width' => 'short'])</code> | |||
<code>$l10n->l('weekdayName', $dt, ['width' => 'abbreviated'])</code> | |||
</InvalidReturnStatement> | |||
<InvalidReturnType occurrences="4"> | |||
<code>string</code> | |||
<code>string</code> | |||
<code>string</code> | |||
<code>string</code> | |||
</InvalidReturnType> | |||
<UndefinedMethod occurrences="3"> | |||
<code>getDateTime</code> | |||
<code>getDateTime</code> | |||
<code>isFloating</code> | |||
</UndefinedMethod> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php"> | |||
<PossiblyInvalidDocblockTag occurrences="1"> | |||
<code>@var VEvent $vevent</code> | |||
</PossiblyInvalidDocblockTag> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/Reminder/NotificationProviderManager.php"> | |||
<UndefinedConstant occurrences="1"> | |||
<code>$provider::NOTIFICATION_TYPE</code> | |||
</UndefinedConstant> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/Reminder/Notifier.php"> | |||
<FalsableReturnStatement occurrences="4"> | |||
<code>$this->l10n->l('date', $dt, ['width' => 'medium'])</code> | |||
<code>$this->l10n->l('datetime', $dt, ['width' => 'medium|short'])</code> | |||
<code>$this->l10n->l('time', $dt, ['width' => 'short'])</code> | |||
<code>$this->l10n->l('weekdayName', $dt, ['width' => 'abbreviated'])</code> | |||
</FalsableReturnStatement> | |||
<InvalidReturnStatement occurrences="4"> | |||
<code>$this->l10n->l('date', $dt, ['width' => 'medium'])</code> | |||
<code>$this->l10n->l('datetime', $dt, ['width' => 'medium|short'])</code> | |||
<code>$this->l10n->l('time', $dt, ['width' => 'short'])</code> | |||
<code>$this->l10n->l('weekdayName', $dt, ['width' => 'abbreviated'])</code> | |||
</InvalidReturnStatement> | |||
<InvalidReturnType occurrences="4"> | |||
<code>string</code> | |||
<code>string</code> | |||
<code>string</code> | |||
<code>string</code> | |||
</InvalidReturnType> | |||
</file> | |||
<file src="apps/dav/lib/CalDAV/Reminder/ReminderService.php"> | |||
<UndefinedMethod occurrences="3"> | |||
<code>getDateInterval</code> | |||
@@ -457,21 +372,6 @@ | |||
<code>'\OCA\DAV\CardDAV\CardDavBackend::deleteCard'</code> | |||
<code>'\OCA\DAV\CardDAV\CardDavBackend::updateCard'</code> | |||
</InvalidArgument> | |||
<InvalidNullableReturnType occurrences="1"> | |||
<code>array</code> | |||
</InvalidNullableReturnType> | |||
<MoreSpecificImplementedParamType occurrences="1"> | |||
<code>$uris</code> | |||
</MoreSpecificImplementedParamType> | |||
<NullableReturnStatement occurrences="1"> | |||
<code>null</code> | |||
</NullableReturnStatement> | |||
<ParamNameMismatch occurrences="1"> | |||
<code>$addressBookId</code> | |||
</ParamNameMismatch> | |||
<RedundantCast occurrences="1"> | |||
<code>(int)$addressBookId</code> | |||
</RedundantCast> | |||
<TooManyArguments occurrences="3"> | |||
<code>dispatch</code> | |||
<code>dispatch</code> | |||
@@ -511,11 +411,6 @@ | |||
<code>\Sabre\Uri\split($principal)</code> | |||
</UndefinedFunction> | |||
</file> | |||
<file src="apps/dav/lib/CardDAV/SyncService.php"> | |||
<InvalidScalarArgument occurrences="1"> | |||
<code>$targetBookId</code> | |||
</InvalidScalarArgument> | |||
</file> | |||
<file src="apps/dav/lib/CardDAV/UserAddressBooks.php"> | |||
<InvalidArgument occurrences="2"> | |||
<code>$this->principalUri</code> |