Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2021-12-29 17:26:49 +0300
committerArthur Schiwon <blizzz@arthur-schiwon.de>2022-04-14 14:32:39 +0300
commit337a3238bd47707b0e0b00981fda0132b297d265 (patch)
treefebcd3fdc4ade1f3dc86fdb26742993f5d8843dd
parent12db5e1a673602b1cb12e2e192c0cddf31c414f0 (diff)
Fix CalDAV subscriptions calendarorder column/prop typebackport/30438/stable23
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php58
1 files changed, 33 insertions, 25 deletions
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index bae9126de01..a81acea683e 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -96,6 +96,7 @@ use Sabre\VObject\Reader;
use Sabre\VObject\Recur\EventIterator;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
+use function array_column;
use function array_merge;
use function array_values;
use function explode;
@@ -163,13 +164,13 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @var array
*/
public $subscriptionPropertyMap = [
- '{DAV:}displayname' => 'displayname',
- '{http://apple.com/ns/ical/}refreshrate' => 'refreshrate',
- '{http://apple.com/ns/ical/}calendar-order' => 'calendarorder',
- '{http://apple.com/ns/ical/}calendar-color' => 'calendarcolor',
- '{http://calendarserver.org/ns/}subscribed-strip-todos' => 'striptodos',
- '{http://calendarserver.org/ns/}subscribed-strip-alarms' => 'stripalarms',
- '{http://calendarserver.org/ns/}subscribed-strip-attachments' => 'stripattachments',
+ '{DAV:}displayname' => ['displayname', 'string'],
+ '{http://apple.com/ns/ical/}refreshrate' => ['refreshrate', 'string'],
+ '{http://apple.com/ns/ical/}calendar-order' => ['calendarorder', 'int'],
+ '{http://apple.com/ns/ical/}calendar-color' => ['calendarcolor', 'string'],
+ '{http://calendarserver.org/ns/}subscribed-strip-todos' => ['striptodos', 'bool'],
+ '{http://calendarserver.org/ns/}subscribed-strip-alarms' => ['stripalarms', 'string'],
+ '{http://calendarserver.org/ns/}subscribed-strip-attachments' => ['stripattachments', 'string'],
];
/** @var array properties to index */
@@ -747,7 +748,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @param $subscriptionId
*/
public function getSubscriptionById($subscriptionId) {
- $fields = array_values($this->subscriptionPropertyMap);
+ $fields = array_column($this->subscriptionPropertyMap, 0);
$fields[] = 'id';
$fields[] = 'uri';
$fields[] = 'source';
@@ -779,13 +780,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
];
- foreach ($this->subscriptionPropertyMap as $xmlName => $dbName) {
- if (!is_null($row[$dbName])) {
- $subscription[$xmlName] = $row[$dbName];
- }
- }
-
- return $subscription;
+ return $this->rowToSubscription($row, $subscription);
}
/**
@@ -2366,7 +2361,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @return array
*/
public function getSubscriptionsForUser($principalUri) {
- $fields = array_values($this->subscriptionPropertyMap);
+ $fields = array_column($this->subscriptionPropertyMap, 0);
$fields[] = 'id';
$fields[] = 'uri';
$fields[] = 'source';
@@ -2394,13 +2389,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
];
- foreach ($this->subscriptionPropertyMap as $xmlName => $dbName) {
- if (!is_null($row[$dbName])) {
- $subscription[$xmlName] = $row[$dbName];
- }
- }
-
- $subscriptions[] = $subscription;
+ $subscriptions[] = $this->rowToSubscription($row, $subscription);
}
return $subscriptions;
@@ -2431,7 +2420,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$propertiesBoolean = ['striptodos', 'stripalarms', 'stripattachments'];
- foreach ($this->subscriptionPropertyMap as $xmlName => $dbName) {
+ foreach ($this->subscriptionPropertyMap as $xmlName => [$dbName, $type]) {
if (array_key_exists($xmlName, $properties)) {
$values[$dbName] = $properties[$xmlName];
if (in_array($dbName, $propertiesBoolean)) {
@@ -2493,7 +2482,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
if ($propertyName === '{http://calendarserver.org/ns/}source') {
$newValues['source'] = $propertyValue->getHref();
} else {
- $fieldName = $this->subscriptionPropertyMap[$propertyName];
+ $fieldName = $this->subscriptionPropertyMap[$propertyName][0];
$newValues[$fieldName] = $propertyValue;
}
}
@@ -3196,4 +3185,23 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
return $calendar;
}
+
+ /**
+ * Amend the subscription info with database row data
+ *
+ * @param array $row
+ * @param array $subscription
+ *
+ * @return array
+ */
+ private function rowToSubscription($row, array $subscription): array {
+ foreach ($this->subscriptionPropertyMap as $xmlName => [$dbName, $type]) {
+ $value = $row[$dbName];
+ if ($value !== null) {
+ settype($value, $type);
+ }
+ $subscription[$xmlName] = $value;
+ }
+ return $subscription;
+ }
}