[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