Fix identification of object types.
authorGunnar Wrobel <p@rdus.de>
Mon, 6 Apr 2009 09:43:29 +0000 (11:43 +0200)
committerGunnar Wrobel <p@rdus.de>
Mon, 6 Apr 2009 10:26:00 +0000 (12:26 +0200)
framework/Kolab_Server/lib/Horde/Kolab/Server/Kolab.php
framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php

index 3e0787e..3d03a4d 100644 (file)
@@ -105,31 +105,28 @@ class Horde_Kolab_Server_Kolab extends Horde_Kolab_Server_Ldap
     {
         switch ($type) {
         case 'Horde_Kolab_Server_Object_Kolab_User':
-            if (!isset($info['user_type']) || $info['user_type'] == 0) {
-                return sprintf('cn=%s,%s', $id, $this->getBaseUid());
-            } else if ($info['user_type'] == Horde_Kolab_Server_Object_Kolab_User::USERTYPE_INTERNAL) {
-                return sprintf('cn=%s,cn=internal,%s', $id, $this->getBaseUid());
+            if ($info['user_type'] == Horde_Kolab_Server_Object_Kolab_User::USERTYPE_INTERNAL) {
+                return sprintf('%s,cn=internal,%s', $id, $this->getBaseUid());
             } else if ($info['user_type'] == Horde_Kolab_Server_Object_Kolab_User::USERTYPE_GROUP) {
-                return sprintf('cn=%s,cn=groups,%s', $id, $this->getBaseUid());
+                return sprintf('%s,cn=groups,%s', $id, $this->getBaseUid());
             } else if ($info['user_type'] == Horde_Kolab_Server_Object_Kolab_User::USERTYPE_RESOURCE) {
-                return sprintf('cn=%s,cn=resources,%s', $id, $this->getBaseUid());
+                return sprintf('%s,cn=resources,%s', $id, $this->getBaseUid());
             } else {
-                return sprintf('cn=%s,%s', $id, $this->getBaseUid());
+                return parent::getServerUid($type, $id, $info);
             }
         case 'Horde_Kolab_Server_Object_Kolab_Address':
-            return sprintf('cn=%s,cn=external,%s', $id, $this->getBaseUid());
-        case 'Horde_Kolab_Server_Object_Kolabsharedfolder':
-        case 'Horde_Kolab_Server_Object_Kolab_Administrator':
-        case 'Horde_Kolab_Server_Object_Kolab_Maintainer':
-        case 'Horde_Kolab_Server_Object_Kolab_Domainmaintainer':
-            return sprintf('cn=%s,%s', $id, $this->getBaseUid());
+            return sprintf('%s,cn=external,%s', $id, $this->getBaseUid());
         case 'Horde_Kolab_Server_Object_Kolabgroupofnames':
         case 'Horde_Kolab_Server_Object_Kolab_Distlist':
             if (!isset($info['visible']) || !empty($info['visible'])) {
-                return sprintf('cn=%s,%s', $id, $this->getBaseUid());
+                return parent::generateServerUid($type, $id, $info);
             } else {
-                return sprintf('cn=%s,cn=internal,%s', $id, $this->getBaseUid());
+                return sprintf('%s,cn=internal,%s', $id, $this->getBaseUid());
             }
+        case 'Horde_Kolab_Server_Object_Kolabsharedfolder':
+        case 'Horde_Kolab_Server_Object_Kolab_Administrator':
+        case 'Horde_Kolab_Server_Object_Kolab_Maintainer':
+        case 'Horde_Kolab_Server_Object_Kolab_Domainmaintainer':
         default:
             return parent::generateServerUid($type, $id, $info);
         }
index 04b7b42..e8332c9 100644 (file)
@@ -167,16 +167,16 @@ class Horde_Kolab_Server_Ldap extends Horde_Kolab_Server
     /**
      * Save an object.
      *
-     * @param string  $dn     The DN of the object to be added.
+     * @param string  $uid    The UID of the object to be added.
      * @param array   $data   The attributes of the object to be added.
      * @param boolean $exists Does the object already exist on the server?
      *
      * @return boolean  True if saving succeeded.
      */
-    public function save($dn, $data, $exists = false)
+    public function save($uid, $data, $exists = false)
     {
         if ($exists === false) {
-            $entry  = Net_LDAP2_Entry::createFresh($dn, $data);
+            $entry  = Net_LDAP2_Entry::createFresh($uid, $data);
             $result = $this->_ldap->add($entry);
             if ($result instanceOf PEAR_Error) {
                 throw new Horde_Kolab_Server_Exception($result->getMessage());
@@ -196,7 +196,7 @@ class Horde_Kolab_Server_Ldap extends Horde_Kolab_Server
                     unset($data[$key]);
                 }
             }
-            $result = $this->_ldap->modify($dn, array('delete' => $deletes,
+            $result = $this->_ldap->modify($uid, array('delete' => $deletes,
                                                       'replace' => $data));
             if ($result instanceOf PEAR_Error) {
                 throw new Horde_Kolab_Server_Exception($result->getMessage());
@@ -500,13 +500,14 @@ class Horde_Kolab_Server_Ldap extends Horde_Kolab_Server
         array_reverse($ocs);
         foreach ($ocs as $oc) {
             try {
-                Horde_Kolab_Server_Object::loadClass($oc);
-                return $oc;
+                $class_name = 'Horde_Kolab_Server_Object_' . ucfirst($oc);
+                Horde_Kolab_Server_Object::loadClass($class_name);
+                return $class_name;
             } catch (Horde_Kolab_Server_Exception $e)  {
             }
-            if ($oc == 'top') {
-                return 'Horde_Kolab_Server_Object';
-            }
+        }
+        if ($oc == 'top') {
+            return 'Horde_Kolab_Server_Object';
         }
         throw new Horde_Kolab_Server_Exception(sprintf(_("Unkown object type for UID %s."),
                                                        $uid));