Bug #9027: Use Horde_Db_Pear binder to get DB objects
authorMichael M Slusarz <slusarz@curecanti.org>
Fri, 14 May 2010 18:45:57 +0000 (12:45 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Fri, 14 May 2010 19:02:00 +0000 (13:02 -0600)
framework/Core/lib/Horde/Core/Binder/Alarm.php
framework/Core/lib/Horde/Core/Binder/Cache.php
framework/Core/lib/Horde/Core/Binder/Common.php [deleted file]
framework/Core/lib/Horde/Core/Binder/DbPear.php [new file with mode: 0644]
framework/Core/lib/Horde/Core/Binder/Lock.php
framework/Core/lib/Horde/Core/Binder/Perms.php
framework/Core/lib/Horde/Core/Binder/SessionHandler.php
framework/Core/lib/Horde/Core/Binder/Token.php
framework/Core/lib/Horde/Core/Factory/DbPear.php [new file with mode: 0644]
framework/Core/lib/Horde/Registry.php
framework/Core/package.xml

index 876f0a9..578d6d2 100644 (file)
@@ -16,7 +16,7 @@ class Horde_Core_Binder_Alarm implements Horde_Injector_Binder
         }
 
         if (strcasecmp($driver, 'Sql') === 0) {
-            $write_db = Horde_Core_Binder_Common::createDb($params, 'alarm SQL');
+            $write_db = $injector->getInstance('Horde_Db_Pear')->getOb();
 
             /* Check if we need to set up the read DB connection
              * separately. */
@@ -24,7 +24,7 @@ class Horde_Core_Binder_Alarm implements Horde_Injector_Binder
                 $params['db'] = $write_db;
             } else {
                 $params['write_db'] = $write_db;
-                $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'alarm SQL');
+                $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read');
             }
         }
 
index bc850d1..b7fbcff 100644 (file)
@@ -21,15 +21,15 @@ class Horde_Core_Binder_Cache implements Horde_Injector_Binder
         if (strcasecmp($driver, 'Memcache') === 0) {
             $params['memcache'] = $injector->getInstance('Horde_Memcache');
         } elseif (strcasecmp($driver, 'Sql') === 0) {
-            $write_db = Horde_Core_Binder_Common::createDb($params, 'cache SQL');
+            $write_db = $injector->getInstance('Horde_Db_Pear')->getOb();
 
             /* Check if we need to set up the read DB connection
-             *              * separately. */
+             * separately. */
             if (empty($params['splitread'])) {
                 $params['db'] = $write_db;
             } else {
                 $params['write_db'] = $write_db;
-                $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'cache SQL');
+                $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read');
             }
 
             if (!empty($params['use_memorycache'])) {
diff --git a/framework/Core/lib/Horde/Core/Binder/Common.php b/framework/Core/lib/Horde/Core/Binder/Common.php
deleted file mode 100644 (file)
index 356cef7..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * @category Horde
- * @package  Core
- */
-class Horde_Core_Binder_Common
-{
-    /* Utility function to use until code is transferred to new DB code. */
-    public function createDb($params, $ident)
-    {
-        Horde::assertDriverConfig($params, 'sql', array('charset', 'phptype'), $ident);
-
-        $params = array_merge(array(
-            'database' => '',
-            'hostspec' => '',
-            'password' => '',
-            'username' => ''
-        ), $params);
-
-        /* Connect to the SQL server using the supplied parameters. */
-        $db = DB::connect($params, array(
-            'persistent' => !empty($params['persistent']),
-            'ssl' => !empty($params['ssl'])
-        ));
-
-        if ($db instanceof PEAR_Error) {
-            throw new Horde_Exception($db);
-        }
-
-        // Set DB portability options.
-        switch ($db->phptype) {
-        case 'mssql':
-            $db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM);
-            break;
-
-        default:
-            $db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS);
-            break;
-        }
-
-        return $db;
-    }
-
-}
diff --git a/framework/Core/lib/Horde/Core/Binder/DbPear.php b/framework/Core/lib/Horde/Core/Binder/DbPear.php
new file mode 100644 (file)
index 0000000..3a83625
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+/**
+ * @category Horde
+ * @package  Core
+ */
+class Horde_Core_Binder_DbPear implements Horde_Injector_Binder
+{
+    public function create(Horde_Injector $injector)
+    {
+        return new Horde_Core_Factory_DbPear($injector);
+    }
+
+    public function equals(Horde_Injector_Binder $binder)
+    {
+        return false;
+    }
+}
index a0bfe82..8fbeba4 100644 (file)
@@ -20,7 +20,7 @@ class Horde_Core_Binder_Lock implements Horde_Injector_Binder
         $params['logger'] = $injector->getInstance('Horde_Log_Logger');
 
         if (strcasecmp($driver, 'Sql') === 0) {
-            $write_db = Horde_Core_Binder_Common::createDb($params, 'lock SQL');
+            $write_db = $injector->getInstance('Horde_Db_Pear')->getOb();
 
             /* Check if we need to set up the read DB connection
              * separately. */
@@ -28,7 +28,7 @@ class Horde_Core_Binder_Lock implements Horde_Injector_Binder
                 $params['db'] = $write_db;
             } else {
                 $params['write_db'] = $write_db;
-                $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'lock SQL');
+                $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read');
             }
         }
 
index 5c943aa..c5c2747 100644 (file)
@@ -22,7 +22,7 @@ class Horde_Core_Binder_Perms implements Horde_Injector_Binder
                 array_merge(Horde::getDriverConfig('datatree', $dt_driver), array('group' => 'horde.perms'))
             );
         } elseif (strcasecmp($driver, 'Sql') === 0) {
-            $write_db = Horde_Core_Binder_Common::createDb($params, 'perms SQL');
+            $write_db = $injector->getInstance('Horde_Db_Pear')->getOb();
 
             /* Check if we need to set up the read DB connection
              * separately. */
@@ -30,7 +30,7 @@ class Horde_Core_Binder_Perms implements Horde_Injector_Binder
                 $params['db'] = $write_db;
             } else {
                 $params['write_db'] = $write_db;
-                $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'perms SQL');
+                $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read');
             }
         }
 
index 5280780..f554f5b 100644 (file)
@@ -16,15 +16,15 @@ class Horde_Core_Binder_SessionHandler implements Horde_Injector_Binder
         $params = Horde::getDriverConfig('sessionhandler', $driver);
 
         if (strcasecmp($driver, 'Sql') === 0) {
-            $write_db = Horde_Core_Binder_Common::createDb($params, 'sessionhandler SQL');
+            $write_db = $injector->getInstance('Horde_Db_Pear')->getOb();
 
             /* Check if we need to set up the read DB connection
-             *              * separately. */
+             * separately. */
             if (empty($params['splitread'])) {
                 $params['db'] = $write_db;
             } else {
                 $params['write_db'] = $write_db;
-                $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'sessionhandler SQL');
+                $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read');
             }
         }
 
index 49b5f4e..340c3c4 100644 (file)
@@ -15,7 +15,7 @@ class Horde_Core_Binder_Token implements Horde_Injector_Binder
             : array();
 
         if (strcasecmp($driver, 'Sql') === 0) {
-            $write_db = Horde_Core_Binder_Common::createDb($params, 'token SQL');
+            $write_db = $injector->getInstance('Horde_Db_Pear')->getOb();
 
             /* Check if we need to set up the read DB connection
              * separately. */
@@ -23,7 +23,7 @@ class Horde_Core_Binder_Token implements Horde_Injector_Binder
                 $params['db'] = $write_db;
             } else {
                 $params['write_db'] = $write_db;
-                $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'token SQL');
+                $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read');
             }
         } elseif (strcasecmp($driver, 'None') === 0) {
             $driver = 'Null';
diff --git a/framework/Core/lib/Horde/Core/Factory/DbPear.php b/framework/Core/lib/Horde/Core/Factory/DbPear.php
new file mode 100644 (file)
index 0000000..901800a
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+/**
+ * A Horde_Injector:: based factory for creating PEAR DB objects..
+ *
+ * PHP version 5
+ *
+ * @category Horde
+ * @package  Core
+ * @author   Michael Slusarz <slusarz@horde.org>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Core
+ */
+
+/**
+ * A Horde_Injector:: based factory for creating PEAR DB objects..
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Horde
+ * @package  Core
+ * @author   Michael Slusarz <slusarz@horde.org>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Core
+ */
+class Horde_Core_Factory_DbPear
+{
+    /**
+     * Instances.
+     *
+     * @var array
+     */
+    private $_instances = array();
+
+    /**
+     * The injector.
+     *
+     * @var Horde_Injector
+     */
+    private $_injector;
+
+    /**
+     * Constructor.
+     *
+     * @param Horde_Injector $injector  The injector to use.
+     */
+    public function __construct(Horde_Injector $injector)
+    {
+        $this->_injector = $injector;
+    }
+
+    /**
+     * Return the DB instance.
+     *
+     * @param string $type  Either 'read' or 'rw'.
+     *
+     * @return DB  The singleton DB instance.
+     * @throws Horde_Exception
+     */
+    public function getOb($type = 'rw')
+    {
+        if (isset($this->_instances[$type])) {
+            return $this->_instances[$type];
+        }
+
+        $params = array_merge(array(
+            'database' => '',
+            'hostspec' => '',
+            'password' => '',
+            'username' => ''
+        ), $GLOBALS['conf']['sql']);
+        if ($type == 'read') {
+            $params = array_merge($params, $params['read']);
+        }
+
+        Horde::assertDriverConfig($params, 'sql', array('charset', 'phptype'), $ident, 'SQL');
+
+        /* Connect to the SQL server using the supplied parameters. */
+        $db = DB::connect($params, array(
+            'persistent' => !empty($params['persistent']),
+            'ssl' => !empty($params['ssl'])
+        ));
+
+        if ($db instanceof PEAR_Error) {
+            throw new Horde_Exception($db);
+        }
+
+        // Set DB portability options.
+        switch ($db->phptype) {
+        case 'mssql':
+            $db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM);
+            break;
+
+        default:
+            $db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS);
+            break;
+        }
+
+        $this->_instances[$type] = $db;
+
+        return $db;
+    }
+
+}
index 3a007cb..671aa50 100644 (file)
@@ -237,6 +237,7 @@ class Horde_Registry
             // 'Horde_Browser' - initialized below
             'Horde_Cache' => new Horde_Core_Binder_Cache(),
             'Horde_Db_Adapter_Base' => new Horde_Core_Binder_Db(),
+            'Horde_Db_Pear' => new Horde_Core_Binder_DbPear(),
             'Horde_Editor' => new Horde_Core_Binder_Editor(),
             'Horde_History' => new Horde_Core_Binder_History(),
             'Horde_Lock' => new Horde_Core_Binder_Lock(),
index 6d8192b..29e7835 100644 (file)
@@ -67,8 +67,8 @@ Application Framework.
       <dir name="Binder">
        <file name="Alarm.php" role="php" />
        <file name="Cache.php" role="php" />
-       <file name="Common.php" role="php" />
        <file name="Db.php" role="php" />
+       <file name="DbPear.php" role="php" />
        <file name="Dns.php" role="php" />
        <file name="Editor.php" role="php" />
        <file name="History.php" role="php" />
@@ -87,6 +87,7 @@ Application Framework.
        <file name="Facebook.php" role="php" />
       </dir> <!-- /lib/Horde/Core/Binder -->
       <dir name="Factory">
+       <file name="DbPear.php" role="php" />
        <file name="Editor.php" role="php" />
        <file name="Identity.php" role="php" />
        <file name="KolabServer.php" role="php" />
@@ -194,6 +195,10 @@ Application Framework.
     <channel>pear.horde.org</channel>
    </package>
    <package>
+    <name>DB</name>
+    <channel>pear.php.net</channel>
+   </package>
+   <package>
     <name>Editor</name>
     <channel>pear.horde.org</channel>
    </package>
@@ -219,8 +224,8 @@ Application Framework.
    <install name="lib/Horde/Core/Autoloader/Callback/Mime.php" as="Horde/Core/Autoloader/Callback/Mime.php" />
    <install name="lib/Horde/Core/Binder/Alarm.php" as="Horde/Core/Binder/Alarm.php" />
    <install name="lib/Horde/Core/Binder/Cache.php" as="Horde/Core/Binder/Cache.php" />
-   <install name="lib/Horde/Core/Binder/Common.php" as="Horde/Core/Binder/Common.php" />
    <install name="lib/Horde/Core/Binder/Db.php" as="Horde/Core/Binder/Db.php" />
+   <install name="lib/Horde/Core/Binder/DbPear.php" as="Horde/Core/Binder/DbPear.php" />
    <install name="lib/Horde/Core/Binder/Dns.php" as="Horde/Core/Binder/Dns.php" />
    <install name="lib/Horde/Core/Binder/Editor.php" as="Horde/Core/Binder/Editor.php" />
    <install name="lib/Horde/Core/Binder/History.php" as="Horde/Core/Binder/History.php" />
@@ -237,6 +242,7 @@ Application Framework.
    <install name="lib/Horde/Core/Binder/Token.php" as="Horde/Core/Binder/Token.php" />
    <install name="lib/Horde/Core/Binder/Vfs.php" as="Horde/Core/Binder/Vfs.php" />
    <install name="lib/Horde/Core/Binder/Facebook.php" as="Horde/Core/Binder/Facebook.php" />
+   <install name="lib/Horde/Core/Factory/DbPear.php" as="Horde/Core/Factory/DbPear.php" />
    <install name="lib/Horde/Core/Factory/Editor.php" as="Horde/Core/Factory/Editor.php" />
    <install name="lib/Horde/Core/Factory/Identity.php" as="Horde/Core/Factory/Identity.php" />
    <install name="lib/Horde/Core/Factory/KolabServer.php" as="Horde/Core/Factory/KolabServer.php" />