From ca1e266cdd570c7eb95ff1a2fcdb0e3eed9fbad1 Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel Date: Tue, 16 Jun 2009 16:41:44 +0200 Subject: [PATCH] Fix the modification of objects for hidden LDAP attributes (e.g. openLDAPaci) --- framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php | 5 ++--- framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php | 9 ++++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php index 1caefa038..898bd013e 100644 --- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php +++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php @@ -245,9 +245,8 @@ class Horde_Kolab_Server_Ldap extends Horde_Kolab_Server Horde_Kolab_Server_Exception::SYSTEM); } } else { - /* Net_LDAP2 will work on this as a reference */ - $mod_uid = $uid; - $result = $this->_ldap->modify($mod_uid, $data); + $entry = $this->_ldap->getEntry($mod_uid, $changes['attributes']); + $result = $this->_ldap->modify($entry, $data); if ($result instanceOf PEAR_Error) { throw new Horde_Kolab_Server_Exception($result, Horde_Kolab_Server_Exception::SYSTEM); diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php index dcbd528f7..063b8e01c 100644 --- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php +++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php @@ -895,8 +895,10 @@ class Horde_Kolab_Server_Object } if ($old === false && !($value === null || $value === '' || $value === array())) { $changes['add'][$key] = $value; + $changes['attributes'][] = $key; } else if ($old !== false && ($value === null || $value === '' || $value === array())) { $changes['delete'][] = $key; + $changes['attributes'][] = $key; } else if (is_array($old) || is_array($value)) { if (!is_array($old)) { $old = array($old); @@ -907,17 +909,22 @@ class Horde_Kolab_Server_Object $adds = array_diff($value, $old); if (!empty($adds)) { $changes['add'][$key] = $adds; + $changes['attributes'][] = $key; } $deletes = array_diff($old, $value); if (!empty($deletes)) { $changes['delete'][$key] = $deletes; + $changes['attributes'][] = $key; } } else { $changes['replace'][$key] = $value; + $changes['attributes'][] = $key; } } } + $changes['attributes'] = array_unique($changes['attributes']); + return $changes; } @@ -929,7 +936,7 @@ class Horde_Kolab_Server_Object * * @return array The differences between both arrays. */ - protected function getArrayChanges($a1, $a2) + public function getArrayChanges($a1, $a2) { if (empty($a1) || empty($a2)) { return !empty($a1) ? $a1 : $a2; -- 2.11.0