From 158f683e695c76d206fe068d9efacdecb40c72ca Mon Sep 17 00:00:00 2001 From: ralf Date: Wed, 21 Feb 2024 17:27:49 +0200 Subject: [PATCH] * REST API: fix PATCHing of custom-fields --- api/src/CalDAV/JsBase.php | 12 ++++++++++-- api/src/CalDAV/JsCalendar.php | 2 +- api/src/Contacts/JsContact.php | 2 +- timesheet/src/JsTimesheet.php | 3 ++- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/api/src/CalDAV/JsBase.php b/api/src/CalDAV/JsBase.php index e9f5357488..a504a4a1e3 100644 --- a/api/src/CalDAV/JsBase.php +++ b/api/src/CalDAV/JsBase.php @@ -200,7 +200,7 @@ class JsBase foreach($definitions as $name => $definition) { - $data = $cfs[$name]; + $data = $cfs[$name] ?? null; if (isset($data)) { if (is_scalar($data) || is_array($data) && !isset($data['value'])) @@ -358,7 +358,15 @@ class JsBase } if (isset($value)) { - $target = $value; + // objects need to be merged, to not unset all not given attributes + if (is_array($value) && !array_key_exists(0, $value)) + { + $target = array_merge($target, $value); + } + else + { + $target = $value; + } } else { diff --git a/api/src/CalDAV/JsCalendar.php b/api/src/CalDAV/JsCalendar.php index d9353d39d2..81ccefeeff 100644 --- a/api/src/CalDAV/JsCalendar.php +++ b/api/src/CalDAV/JsCalendar.php @@ -179,7 +179,7 @@ class JsCalendar extends JsBase break; case 'egroupware.org:customfields': - $event += self::parseCustomfields($value, $strict); + $event = array_merge($event, self::parseCustomfields($value, $strict)); break; case 'prodId': diff --git a/api/src/Contacts/JsContact.php b/api/src/Contacts/JsContact.php index 6c79233a62..530271a68f 100644 --- a/api/src/Contacts/JsContact.php +++ b/api/src/Contacts/JsContact.php @@ -188,7 +188,7 @@ class JsContact extends Api\CalDAV\JsBase break; case 'egroupware.org:customfields': - $contact += self::parseCustomfields($value); + $contact = array_merge($contact, self::parseCustomfields($value)); break; case 'egroupware.org:assistant': diff --git a/timesheet/src/JsTimesheet.php b/timesheet/src/JsTimesheet.php index 702f357536..9454b2a669 100644 --- a/timesheet/src/JsTimesheet.php +++ b/timesheet/src/JsTimesheet.php @@ -154,7 +154,7 @@ class JsTimesheet extends Api\CalDAV\JsBase break; case 'egroupware.org:customfields': - $timesheet += self::parseCustomfields($value); + $timesheet = array_merge($timesheet, self::parseCustomfields($value)); break; case 'prodId': @@ -163,6 +163,7 @@ class JsTimesheet extends Api\CalDAV\JsBase case 'modifier': case self::AT_TYPE: case 'id': + case 'etag': break; default: