--- /dev/null
+<?php
+class Horde_Core_Binder_Cache implements Horde_Injector_Binder
+{
+ public function create(Horde_Injector $injector)
+ {
+ $driver = $GLOBALS['conf']['cache']['driver'];
+ $params = Horde::getDriverConfig('cache', $driver);
+
+ if (is_array($driver)) {
+ list($app, $driver_name) = $driver;
+ $driver = basename($driver_name);
+ } else {
+ $driver = basename($driver);
+ }
+
+ if (empty($driver) || $driver == 'none') {
+ return new Horde_Cache_Null($params);
+ }
+
+ $class = (empty($app) ? 'Horde' : $app) . '_Cache_' . ucfirst($driver);
+ if (class_exists($class)) {
+ return new $class($params);
+ }
+
+ throw new Horde_Exception('Class definition of ' . $class . ' not found.');
+ }
+
+ public function equals(Horde_Injector_Binder $binder)
+ {
+ return false;
+ }
+}
--- /dev/null
+<?php
+class Horde_Core_Binder_Db implements Horde_Injector_Binder
+{
+ /**
+ * If there are multiple db instances, which one should be returned?
+ * @var string
+ */
+ protected $_kind = 'manager';
+
+ /**
+ * @param string $kind The kind of database connection to return - reader, writer, manager.
+ */
+ public function __construct($kind = null)
+ {
+ $this->_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;
+ }
+}
--- /dev/null
+<?php
+class Horde_Core_Binder_Logger implements Horde_Injector_Binder
+{
+ public function create(Horde_Injector $injector)
+ {
+ return new Horde_Log_Logger(new Horde_Log_Handler_Null());
+ }
+
+ public function equals(Horde_Injector_Binder $binder)
+ {
+ return false;
+ }
+}
throw new Horde_Exception(_("This system is currently deactivated."));
}
+ /* Set default bindings. */
+ $GLOBALS['injector'] = new Horde_Injector(new Horde_Injector_TopLevel());
+ $GLOBALS['injector']->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();
<dir name="lib">
<dir name="Horde">
<file name="Config.php" role="php" />
+ <dir name="Core">
+ <dir name="Binder">
+ <file name="Cache.php" role="php" />
+ <file name="Db.php" role="php" />
+ <file name="Logger.php" role="php" />
+ </dir> <!-- /lib/Horde/Core/Binder -->
+ </dir> <!-- /lib/Horde/Core -->
<file name="ErrorHandler.php" role="php" />
<dir name="Exception">
<file name="HookNotSet.php" role="php" />
<phprelease>
<filelist>
<install name="lib/Horde/Config.php" as="Horde/Config.php" />
+ <install name="lib/Horde/Core/Binder/Cache.php" as="Horde/Core/Binder/Cache.php" />
+ <install name="lib/Horde/Core/Binder/Db.php" as="Horde/Core/Binder/Db.php" />
+ <install name="lib/Horde/Core/Binder/Logger.php" as="Horde/Core/Binder/Logger.php" />
<install name="lib/Horde/ErrorHandler.php" as="Horde/ErrorHandler.php" />
<install name="lib/Horde/Exception/HookNotSet.php" as="Horde/Exception/HookNotSet.php" />
<install name="lib/Horde/Help.php" as="Horde/Help.php" />