Fix the handling of the connection parameters.
authorGunnar Wrobel <p@rdus.de>
Tue, 2 Jun 2009 14:02:50 +0000 (16:02 +0200)
committerGunnar Wrobel <p@rdus.de>
Tue, 2 Jun 2009 19:27:55 +0000 (21:27 +0200)
framework/Kolab_Server/lib/Horde/Kolab/Server.php

index a64b381..269c81a 100644 (file)
@@ -143,60 +143,60 @@ abstract class Horde_Kolab_Server
      *                                      missing or the given user could not
      *                                      be identified.
      */
-    static public function &singleton($params = null)
+    static public function &singleton($params = array())
     {
         global $conf;
 
         static $instances = array();
 
-        $server_params = array();
-
         if (!empty($params['driver'])) {
             $driver = $params['driver'];
             unset($params['driver']);
         } else if (isset($conf['kolab']['server']['driver'])) {
             $driver = $conf['kolab']['server']['driver'];
             if (isset($conf['kolab']['server']['params'])) {
-                $server_params = $conf['kolab']['server']['params'];
+                if (!is_array($params)) {
+                    $params = $conf['kolab']['server']['params'];
+                } else {
+                    $params = array_merge($conf['kolab']['server']['params'],
+                                          $params);
+                }
             }
         } else {
             throw new Horde_Kolab_Server_Exception(
                 'The configuration for the Kolab server driver is missing!');
         }
 
-        if (!empty($params)) {
-            if (isset($params['user'])) {
-                $tmp_server = &Horde_Kolab_Server::factory($driver, $server_params);
-
-                try {
-                    $uid = $tmp_server->uidForIdOrMail($params['user']);
-                } catch (Horde_Kolab_Server_Exception $e) {
-                    throw new Horde_Kolab_Server_Exception(
-                        sprintf(_("Failed identifying the UID of the Kolab user %s. Error was: %s"),
-                                $params['user'],
-                                $e->getMessage()));
-                }
-                if ($uid === false) {
-                    throw new Horde_Kolab_Server_MissingObjectException(
-                        sprintf(_("Failed identifying the UID of the Kolab user %s."),
-                                $params['user']));
-                }
-                $params['uid'] = $uid;
+        if (isset($params['user']) && !isset($params['uid'])) {
+            $tmp_server = &Horde_Kolab_Server::factory($driver, $params);
+
+            try {
+                $uid = $tmp_server->uidForIdOrMail($params['user']);
+            } catch (Horde_Kolab_Server_Exception $e) {
+                throw new Horde_Kolab_Server_Exception(
+                    sprintf(_("Failed identifying the UID of the Kolab user %s. Error was: %s"),
+                            $params['user'],
+                            $e->getMessage()));
+            }
+            if ($uid === false) {
+                throw new Horde_Kolab_Server_MissingObjectException(
+                    sprintf(_("Failed identifying the UID of the Kolab user %s. No such user."),
+                            $params['user']));
             }
-            $server_params = array_merge($server_params, $params);
+            $params['uid'] = $uid;
         }
 
-        if (!empty($params['write']) && isset($server_params['host_master'])) {
-            $server_params['host'] = $server_params['host_master'];
+        if (!empty($params['write']) && isset($params['host_master'])) {
+            $params['host'] = $params['host_master'];
         }
 
-        $sparam         = $server_params;
+        $sparam         = $params;
         $sparam['pass'] = isset($sparam['pass']) ? md5($sparam['pass']) : '';
         ksort($sparam);
         $signature = serialize(array($driver, $sparam));
         if (empty($instances[$signature])) {
             $instances[$signature] = &Horde_Kolab_Server::factory($driver,
-                                                                  $server_params);
+                                                                  $params);
         }
 
         return $instances[$signature];