summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2024-03-11 16:27:23 +0100
committerDaniel Kesselberg <mail@danielkesselberg.de>2024-05-31 14:50:53 +0200
commit86020a510ae51ef70db86b7570f7807616ad42fd (patch)
treee9021504cf1fafa507788c7139f2137e6359a969
parent5bc8329bf389daf21e2cf1d04c49f876f7295ab2 (diff)
fix(dav): Add occ command to fix missing caldav sync tokensbackport/44130/stable27
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
-rw-r--r--apps/dav/appinfo/info.xml1
-rw-r--r--apps/dav/composer/composer/autoload_classmap.php1
-rw-r--r--apps/dav/composer/composer/autoload_static.php1
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php75
-rw-r--r--apps/dav/lib/Command/FixCalendarSyncCommand.php86
-rw-r--r--apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php33
-rw-r--r--apps/dav/tests/unit/CalDAV/CalDavBackendTest.php89
7 files changed, 249 insertions, 37 deletions
diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml
index 9140c674716..034f929b7b1 100644
--- a/apps/dav/appinfo/info.xml
+++ b/apps/dav/appinfo/info.xml
@@ -50,6 +50,7 @@
<command>OCA\DAV\Command\CreateAddressBook</command>
<command>OCA\DAV\Command\CreateCalendar</command>
<command>OCA\DAV\Command\DeleteCalendar</command>
+ <command>OCA\DAV\Command\FixCalendarSyncCommand</command>
<command>OCA\DAV\Command\MoveCalendar</command>
<command>OCA\DAV\Command\ListCalendars</command>
<command>OCA\DAV\Command\RetentionCleanupCommand</command>
diff --git a/apps/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php
index 83aa8370f89..8b99396919b 100644
--- a/apps/dav/composer/composer/autoload_classmap.php
+++ b/apps/dav/composer/composer/autoload_classmap.php
@@ -133,6 +133,7 @@ return array(
'OCA\\DAV\\Command\\CreateAddressBook' => $baseDir . '/../lib/Command/CreateAddressBook.php',
'OCA\\DAV\\Command\\CreateCalendar' => $baseDir . '/../lib/Command/CreateCalendar.php',
'OCA\\DAV\\Command\\DeleteCalendar' => $baseDir . '/../lib/Command/DeleteCalendar.php',
+ 'OCA\\DAV\\Command\\FixCalendarSyncCommand' => $baseDir . '/../lib/Command/FixCalendarSyncCommand.php',
'OCA\\DAV\\Command\\ListCalendars' => $baseDir . '/../lib/Command/ListCalendars.php',
'OCA\\DAV\\Command\\MoveCalendar' => $baseDir . '/../lib/Command/MoveCalendar.php',
'OCA\\DAV\\Command\\RemoveInvalidShares' => $baseDir . '/../lib/Command/RemoveInvalidShares.php',
diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php
index cbf2abe3a4e..d8b2005ebd0 100644
--- a/apps/dav/composer/composer/autoload_static.php
+++ b/apps/dav/composer/composer/autoload_static.php
@@ -148,6 +148,7 @@ class ComposerStaticInitDAV
'OCA\\DAV\\Command\\CreateAddressBook' => __DIR__ . '/..' . '/../lib/Command/CreateAddressBook.php',
'OCA\\DAV\\Command\\CreateCalendar' => __DIR__ . '/..' . '/../lib/Command/CreateCalendar.php',
'OCA\\DAV\\Command\\DeleteCalendar' => __DIR__ . '/..' . '/../lib/Command/DeleteCalendar.php',
+ 'OCA\\DAV\\Command\\FixCalendarSyncCommand' => __DIR__ . '/..' . '/../lib/Command/FixCalendarSyncCommand.php',
'OCA\\DAV\\Command\\ListCalendars' => __DIR__ . '/..' . '/../lib/Command/ListCalendars.php',
'OCA\\DAV\\Command\\MoveCalendar' => __DIR__ . '/..' . '/../lib/Command/MoveCalendar.php',
'OCA\\DAV\\Command\\RemoveInvalidShares' => __DIR__ . '/..' . '/../lib/Command/RemoveInvalidShares.php',
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index 651483f000c..69d85c1b604 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -99,6 +99,7 @@ use Sabre\VObject\Property;
use Sabre\VObject\Reader;
use Sabre\VObject\Recur\EventIterator;
use function array_column;
+use function array_map;
use function array_merge;
use function array_values;
use function explode;
@@ -882,7 +883,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$query->where($query->expr()->eq('id', $query->createNamedParameter($calendarId)));
$query->executeStatement();
- $this->addChange($calendarId, "", 2);
+ $this->addChanges($calendarId, [""], 2);
$calendarData = $this->getCalendarById($calendarId);
$shares = $this->getShares($calendarId);
@@ -1301,7 +1302,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
->executeStatement();
$this->updateProperties($calendarId, $objectUri, $calendarData, $calendarType);
- $this->addChange($calendarId, $objectUri, 1, $calendarType);
+ $this->addChanges($calendarId, [$objectUri], 1, $calendarType);
$objectRow = $this->getCalendarObject($calendarId, $objectUri, $calendarType);
assert($objectRow !== null);
@@ -1362,7 +1363,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
->executeStatement();
$this->updateProperties($calendarId, $objectUri, $calendarData, $calendarType);
- $this->addChange($calendarId, $objectUri, 2, $calendarType);
+ $this->addChanges($calendarId, [$objectUri], 2, $calendarType);
$objectRow = $this->getCalendarObject($calendarId, $objectUri, $calendarType);
if (is_array($objectRow)) {
@@ -1412,8 +1413,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$this->purgeProperties($sourceCalendarId, $objectId);
$this->updateProperties($targetCalendarId, $object['uri'], $object['calendardata'], $calendarType);
- $this->addChange($sourceCalendarId, $object['uri'], 3, $calendarType);
- $this->addChange($targetCalendarId, $object['uri'], 1, $calendarType);
+ $this->addChanges($sourceCalendarId, [$object['uri']], 3, $calendarType);
+ $this->addChanges($targetCalendarId, [$object['uri']], 1, $calendarType);
$object = $this->getCalendarObjectById($newPrincipalUri, $objectId);
// Calendar Object wasn't found - possibly because it was deleted in the meantime by a different client
@@ -1540,7 +1541,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
}
- $this->addChange($calendarId, $objectUri, 3, $calendarType);
+ $this->addChanges($calendarId, [$objectUri], 3, $calendarType);
}, $this->db);
}
@@ -1582,7 +1583,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
// Welp, this should possibly not have happened, but let's ignore
return;
}
- $this->addChange($row['calendarid'], $row['uri'], 1, (int) $row['calendartype']);
+ $this->addChanges($row['calendarid'], [$row['uri']], 1, (int) $row['calendartype']);
$calendarRow = $this->getCalendarById((int) $row['calendarid']);
if ($calendarRow === null) {
@@ -2742,16 +2743,16 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* Adds a change record to the calendarchanges table.
*
* @para