Inject DB object into Turba_Driver_Sql
authorMichael M Slusarz <slusarz@curecanti.org>
Thu, 13 Jan 2011 17:08:20 +0000 (10:08 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Thu, 13 Jan 2011 17:26:43 +0000 (10:26 -0700)
turba/lib/Driver/Sql.php
turba/lib/Injector/Factory/Driver.php

index 93c9c2f..dc18075 100644 (file)
@@ -40,23 +40,19 @@ class Turba_Driver_Sql extends Turba_Driver
     protected $_db;
 
     /**
+     * Constructor.
      *
-     * @param string $name
-     * @param array $params
+     * @param array $params  Additional parameters needed:
+     * <pre>
+     * 'db' - (Horde_Db_Adapter) A DB Adapter object.
+     * </pre>
      */
     public function __construct($name = '', $params = array())
     {
+        $this->_db = $params['db'];
+        unset($params['db']);
+
         parent::__construct($name, $params);
-       // TODO: Move to injector
-        if (empty($this->_params['sql'])) {
-            try {
-                $this->_db = $GLOBALS['injector']->getInstance('Horde_Db_Adapter');
-            } catch (Horde_Db_Exception $e) {
-                throw new Turba_Exception($e);
-            }
-        } else {
-            $this->_db = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Db')->create('turba', $this->_params['sql']);
-        }
     }
 
     /**
index 1ff3195..74ce00a 100644 (file)
@@ -77,12 +77,28 @@ class Turba_Injector_Factory_Driver
 
         if (!isset($this->_instances[$key])) {
             $class = 'Turba_Driver_' . ucfirst(basename($srcConfig['type']));
-            if (class_exists($class)) {
-                $driver = new $class($srcName, $srcConfig['params']);
-            } else {
+            if (!class_exists($class)) {
                 throw new Turba_Exception(sprintf(_("Unable to load the definition of %s."), $class));
             }
 
+            if (empty($srcConfig['params'])) {
+                $srcConfig['params'] = array();
+            }
+
+            switch ($class) {
+            case 'Turba_Driver_Sql':
+                try {
+                    $srcConfig['params']['db'] = empty($srcConfig['params']['sql'])
+                        ? $GLOBALS['injector']->getInstance('Horde_Db_Adapter')
+                        : $GLOBALS['injector']->getInstance('Horde_Core_Factory_Db')->create('turba', $this->_params['sql']);
+                } catch (Horde_Db_Exception $e) {
+                    throw new Turba_Exception($e);
+                }
+                break;
+            }
+
+            $driver = new $class($srcName, $srcConfig['params']);
+
             // Title
             $driver->title = $srcConfig['title'];