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: