[Tickets #14945] CardDAV: Removing property values is broken
noreply at bugs.horde.org
noreply at bugs.horde.org
Tue Aug 20 13:19:28 UTC 2019
BITTE NICHT AUF DIESE NACHRICHT ANTWORTEN. NACHRICHTEN AN DIESE
E-MAIL-ADRESSE WERDEN NICHT GELESEN.
Ticket-URL: https://bugs.horde.org/ticket/14945
------------------------------------------------------------------------------
Ticket | 14945
Erstellt Von | bugs.horde.org at ulle.dyndns.org
Zusammenfassung | CardDAV: Removing property values is broken
Warteschlange | Turba
Version | FRAMEWORK_5_2
Typ | Bug
Status | Unconfirmed
Priorität | 2. Medium
Milestone |
Patch |
Zuständige |
------------------------------------------------------------------------------
bugs.horde.org at ulle.dyndns.org (2019-08-20 13:19) hat geschrieben:
When a CardDAV client wants to change a property of an address book
entry, it just sends the new property value. Along with all other
properties of this entry, which _have a value_ (no matter if changed
or not). This works well with Horde.
If the clients wants to _remove_ a property , the client just does not
send it. Instead it sends all other properties of the entry, which
_have a value_ (no matter if changed or not).
Horde does not remove this (not sent) property . It just keeps its
former value.
That means it is impossible to remove property values via CardDAV.
Removing properties via Horde web frontend or ActiveSync works as expected.
This misbeavior is coming from function davPutObject($collection,
$object, $data)
in turba/lib/Application.php
https://github.com/horde/turba/blob/master/lib/Application.php#L1107
Horde only changes properties sent by CardDAV client , unsent
properties just stay within the former existing object, which then get
stored to database.
My suggestion for improvement:
Putting these lines before foreach ($contact as $attribute => $value)
{ (between line 1104 and line 1105)
// Set every property to null (except those starting
with '__')
foreach ($existing_contact->attributes as $attribute
=> $value) {
if ( strpos($attribute, '__') !== 0 ) {
$existing_contact->setValue($attribute, null );
}
}
// tags/categories should not be null, but empty string
$existing_contact->setValue( '__tags' , '' );
Looking forward to seeing this fixed.
More information about the bugs
mailing list