From 63302dc5cb057ffb0f0be1b8296e27451161f2f6 Mon Sep 17 00:00:00 2001 From: Chuck Hagenbuch Date: Thu, 14 Jan 2010 17:22:36 -0500 Subject: [PATCH] Add an initial set of dependency injection bindings. These are configured automatically when the Registry is set up, access the current global $conf array, and let you create: - a Horde_Db instance, by asking for db-reader, db-writer, or db-manager (the distinction isn't implemented yet) - a null Horde_Log_Logger object (our config is still for PEAR Log) - a real Horde_Cache object as configured in $conf --- framework/Core/lib/Horde/Core/Binder/Cache.php | 32 +++++++++++++++ framework/Core/lib/Horde/Core/Binder/Db.php | 53 +++++++++++++++++++++++++ framework/Core/lib/Horde/Core/Binder/Logger.php | 13 ++++++ framework/Core/lib/Horde/Registry.php | 8 ++++ framework/Core/package.xml | 10 +++++ 5 files changed, 116 insertions(+) create mode 100644 framework/Core/lib/Horde/Core/Binder/Cache.php create mode 100644 framework/Core/lib/Horde/Core/Binder/Db.php create mode 100644 framework/Core/lib/Horde/Core/Binder/Logger.php diff --git a/framework/Core/lib/Horde/Core/Binder/Cache.php b/framework/Core/lib/Horde/Core/Binder/Cache.php new file mode 100644 index 000000000..bd56c6c9a --- /dev/null +++ b/framework/Core/lib/Horde/Core/Binder/Cache.php @@ -0,0 +1,32 @@ +_kind = $kind; + } + + /** + * Handle Horde-style configuration arrays, PEAR DB/MDB2 arrays or DSNs, or + * PDO DSNS. + */ + public function create(Horde_Injector $injector) + { + $config = $GLOBALS['conf']['sql']; + if (!isset($config['adapter'])) { + $config['adapter'] = $config['phptype'] == 'mysqli' ? 'mysqli' : 'pdo_' . $config['phptype']; + } + + if (!isset($config['logger'])) { + $config['logger'] = $injector->getInstance('Horde_Log_Logger'); + } + + if (!isset($config['cache'])) { + $config['cache'] = $injector->getInstance('Horde_Cache'); + } + + /* @TODO Based on $this->_kind and the splitread configuration, return a + * reader, writer, or manager connection. */ + + $adapter = str_replace(' ', '_' , ucwords(str_replace('_', ' ', basename($config['adapter'])))); + $class = 'Horde_Db_Adapter_' . $adapter; + if (!class_exists($class)) { + throw new Horde_Exception('Adapter class "' . $class . '" not found'); + } + + return new $class($config); + } + + public function equals(Horde_Injector_Binder $binder) + { + return false; + } +} diff --git a/framework/Core/lib/Horde/Core/Binder/Logger.php b/framework/Core/lib/Horde/Core/Binder/Logger.php new file mode 100644 index 000000000..1e8ec7582 --- /dev/null +++ b/framework/Core/lib/Horde/Core/Binder/Logger.php @@ -0,0 +1,13 @@ +addBinder('Horde_Cache', new Horde_Core_Binder_Cache()); + $GLOBALS['injector']->addBinder('Horde_Log_Logger', new Horde_Core_Binder_Logger()); + $GLOBALS['injector']->addBinder('db-reader', new Horde_Core_Binder_Db('reader')); + $GLOBALS['injector']->addBinder('db-writer', new Horde_Core_Binder_Db('writer')); + $GLOBALS['injector']->addBinder('db-manager', new Horde_Core_Binder_Db('manager')); + /* Create the global permissions object. */ // TODO: Remove(?) $GLOBALS['perms'] = Horde_Perms::singleton(); diff --git a/framework/Core/package.xml b/framework/Core/package.xml index fade2bba1..3f47c8ae8 100644 --- a/framework/Core/package.xml +++ b/framework/Core/package.xml @@ -49,6 +49,13 @@ Application Framework. + + + + + + + @@ -123,6 +130,9 @@ Application Framework. + + + -- 2.11.0