$injector = new Horde_Injector(new Horde_Injector_TopLevel());
$db = new Horde_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory:'));
- $injector->setInstance('Horde_Db_Adapter_Base', $db);
+ $injector->setInstance('Horde_Db_Base', $db);
$this->tagger = $injector->getInstance('Content_Tagger');
* The used configuration array will be
* $conf[$backend]. If an array gets passed, it will
* be $conf[$key1][$key2].
- * @param string $type The type of driver.
+ * @param string $type The type of driver. If null, will not merge with
+ * base config.
*
* @return array The connection parameters.
*/
{
global $conf;
- $type = Horde_String::lower($type);
+ if (is_null($type)) {
+ $type = Horde_String::lower($type);
+ }
- $c = null;
if (is_array($backend)) {
$c = Horde_Array::getElement($conf, $backend);
} elseif (isset($conf[$backend])) {
$c = $conf[$backend];
+ } else {
+ $c = null;
}
if (!is_null($c) && isset($c['params'])) {
$c['params']['umask'] = $conf['umask'];
- if (isset($conf[$type])) {
- return array_merge($conf[$type], $c['params']);
- } else {
- return $c['params'];
- }
+ return (!is_null($type) && isset($conf[$type]))
+ ? array_merge($conf[$type], $c['params'])
+ : $c['params'];
}
- return isset($conf[$type]) ? $conf[$type] : array();
+ return (!is_null($type) && isset($conf[$type]))
+ ? $conf[$type]
+ : array();
}
/**
serialize($signup->getData())
);
- $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base')->insert($query, $values);
+ $GLOBALS['injector']->getInstance('Horde_Db')->getOb('horde', 'signup')->insert($query, $values);
}
/**
' WHERE user_name = ?';
$values = array($user);
- return (bool)$GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base')->selectValue($query, $values);
+ return (bool)$GLOBALS['injector']->getInstance('Horde_Db')->getOb('horde', 'signup')->selectValue($query, $values);
}
/**
' WHERE user_name = ?';
$values = array($username);
- $result = $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base')->selectOne($query, $values);
+ $result = $GLOBALS['injector']->getInstance('Horde_Db')->getOb('horde', 'signup')->selectOne($query, $values);
if (empty($result)) {
throw new Horde_Exception(sprintf(_("User \"%s\" does not exist."), $username));
}
$query = 'SELECT * FROM ' . $this->_params['table'] .
' ORDER BY signup_date';
- $result = $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base')->selectAll($query);
+ $result = $GLOBALS['injector']->getInstance('Horde_Db')->getOb('horde', 'signup')->selectAll($query);
if (empty($result)) {
return array();
}
' WHERE user_name = ?';
$values = array($username);
- $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base')->delete($query, $values);
+ $GLOBALS['injector']->getInstance('Horde_Db')->getOb('horde', 'signup')->delete($query, $values);
}
/**
$params = Horde::getDriverConfig('alarms', $driver);
if (strcasecmp($driver, 'Sql') === 0) {
- $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+ $params['db'] = $injector->getInstance('Horde_Db')->getOb('horde', 'alarm');
}
$params['logger'] = $injector->getInstance('Horde_Log_Logger');
if (strcasecmp($driver, 'Memcache') === 0) {
$params['memcache'] = $injector->getInstance('Horde_Memcache');
} elseif (strcasecmp($driver, 'Sql') === 0) {
- $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+ $params['db'] = $injector->getInstance('Horde_Db')->getOb('horde', 'cache');
}
if (!empty($GLOBALS['conf']['cache']['use_memorycache']) &&
*/
class Horde_Core_Binder_Db implements Horde_Injector_Binder
{
- /**
- * Handle Horde-style configuration arrays, PEAR DB/MDB2 arrays or DSNs, or
- * PDO DSNS.
- *
- * @return Horde_Db_Adapter_Base
- * @throws Horde_Exception
- */
public function create(Horde_Injector $injector)
{
- return $this->_createDb($GLOBALS['conf']['sql'], $injector);
- }
-
- protected function _createDb($config, $injector)
- {
- if (!empty($config['splitread'])) {
- unset($config['splitread']);
- $config['write_db'] = $this->_createDb($config, $injector);
- $config = array_merge($config, $config['read']);
- }
-
- if (!isset($config['adapter'])) {
- if ($config['phptype'] == 'oci8') {
- $config['phptype'] = 'oci';
- }
- $config['adapter'] = ($config['phptype'] == 'mysqli')
- ? 'mysqli'
- : 'pdo_' . $config['phptype'];
- }
-
- if (!empty($config['hostspec'])) {
- $config['host'] = $config['hostspec'];
- }
-
- $adapter = str_replace(' ', '_' , ucwords(str_replace('_', ' ', basename($config['adapter']))));
- $class = 'Horde_Db_Adapter_' . $adapter;
-
- if (class_exists($class)) {
- $ob = new $class($config);
-
- if (!isset($config['cache'])) {
- $ob->setCache($injector->getInstance('Horde_Cache'));
- }
-
- if (!isset($config['logger'])) {
- $ob->setLogger($injector->getInstance('Horde_Log_Logger'));
- }
-
- return $ob;
- }
-
- throw new Horde_Exception('Adapter class "' . $class . '" not found');
+ return new Horde_Core_Factory_Db($injector);
}
public function equals(Horde_Injector_Binder $binder)
{
return false;
}
+
}
--- /dev/null
+<?php
+/**
+ * @category Horde
+ * @package Core
+ */
+class Horde_Core_Binder_DbBase implements Horde_Injector_Binder
+{
+ /**
+ * @return Horde_Db_Adapter_Base
+ * @throws Horde_Exception
+ */
+ public function create(Horde_Injector $injector)
+ {
+ $db = new Horde_Core_Factory_Db($injector);
+ return $db->getOb('horde');
+ }
+
+ public function equals(Horde_Injector_Binder $binder)
+ {
+ return false;
+ }
+
+}
$params['logger'] = $injector->getInstance('Horde_Log_Logger');
if (strcasecmp($driver, 'Sql') === 0) {
- $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+ $params['db'] = $injector->getInstance('Horde_Db')->getOb('horde', 'lock');
}
return Horde_Lock::factory($driver, $params);
array_merge(Horde::getDriverConfig('datatree', $dt_driver), array('group' => 'horde.perms'))
);
} elseif (strcasecmp($driver, 'Sql') === 0) {
- $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+ $params['db'] = $injector->getInstance('Horde_Db')->getOb('horde', 'perms');
}
$params['cache'] = $injector->getInstance('Horde_Cache');
$params = Horde::getDriverConfig('sessionhandler', $driver);
if (strcasecmp($driver, 'Sql') === 0) {
- $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+ $params['db'] = $injector->getInstance('Horde_Db')->getOb('horde', 'sessionhandler');
} elseif (strcasecmp($driver, 'Memcache') === 0) {
$params['memcache'] = $injector->getInstance('Horde_Memcache');
}
: array();
if (strcasecmp($driver, 'Sql') === 0) {
- $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+ $params['db'] = $injector->getInstance('Horde_Db')->getOb('horde', 'token');
} elseif (strcasecmp($driver, 'None') === 0) {
$driver = 'Null';
}
--- /dev/null
+<?php
+/**
+ * A Horde_Injector:: based factory for creating Horde_Db_Adapter_Base
+ * 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 Horde_Db_Adapter_Base
+ * 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_Db
+{
+ /**
+ * 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 $app The application.
+ * @param string $type The type.
+ *
+ * @return Horde_Db_Adapter_Base The singleton instance.
+ * @throws Horde_Exception
+ * @throws Horde_Db_Exception
+ */
+ public function getOb($app = 'horde', $type = null)
+ {
+ $sig = $app . '|' . $type;
+
+ if (isset($this->_instances[$sig])) {
+ return $this->_instances[$sig];
+ }
+
+ $pushed = ($app == 'horde')
+ ? false
+ : $GLOBALS['registry']->pushApp($app);
+
+ $config = Horde::getDriverConfig($type, 'sql');
+
+ /* Determine if we are using the base SQL config. */
+ if (isset($config['driverconfig']) &&
+ ($config['driverconfig'] == 'horde')) {
+ $this->_instances[$sig] = $this->getOb();
+ return $this->_instances[$sig];
+ }
+
+ try {
+ $this->_instances[$sig] = $this->_createDb($config);
+ } catch (Horde_Exception $e) {
+ if ($pushed) {
+ $GLOBALS['registry']->popApp();
+ }
+ throw $e;
+ }
+
+ if ($pushed) {
+ $GLOBALS['registry']->popApp();
+ }
+
+ return $this->_instances[$sig];
+ }
+
+ /**
+ */
+ protected function _createDb($config)
+ {
+ if (!empty($config['splitread'])) {
+ unset($config['splitread']);
+ $config['write_db'] = $this->_createDb($config);
+ $config = array_merge($config, $config['read']);
+ }
+
+ if (!isset($config['adapter'])) {
+ if ($config['phptype'] == 'oci8') {
+ $config['phptype'] = 'oci';
+ }
+ $config['adapter'] = ($config['phptype'] == 'mysqli')
+ ? 'mysqli'
+ : 'pdo_' . $config['phptype'];
+ }
+
+ if (!empty($config['hostspec'])) {
+ $config['host'] = $config['hostspec'];
+ }
+
+ $adapter = str_replace(' ', '_' , ucwords(str_replace('_', ' ', basename($config['adapter']))));
+ $class = 'Horde_Db_Adapter_' . $adapter;
+
+ if (class_exists($class)) {
+ $ob = new $class($config);
+
+ if (!isset($config['cache'])) {
+ $ob->setCache($this->_injector->getInstance('Horde_Cache'));
+ }
+
+ if (!isset($config['logger'])) {
+ $ob->setLogger($this->_injector->getInstance('Horde_Log_Logger'));
+ }
+
+ return $ob;
+ }
+
+ throw new Horde_Exception('Adapter class "' . $class . '" not found');
+ }
+
+}
'Horde_Cache' => new Horde_Core_Binder_Cache(),
'Horde_Core_Auth_Signup' => new Horde_Core_Binder_AuthSignup(),
'Horde_Data' => new Horde_Core_Binder_Data(),
- 'Horde_Db_Adapter_Base' => new Horde_Core_Binder_Db(),
+ 'Horde_Db' => new Horde_Core_Binder_Db(),
+ 'Horde_Db_Base' => new Horde_Core_Binder_DbBase(),
'Horde_Db_Pear' => new Horde_Core_Binder_DbPear(),
'Horde_Editor' => new Horde_Core_Binder_Editor(),
'Horde_History' => new Horde_Core_Binder_History(),
<file name="Cache.php" role="php" />
<file name="Data.php" role="php" />
<file name="Db.php" role="php" />
+ <file name="DbBase.php" role="php" />
<file name="DbPear.php" role="php" />
<file name="Dns.php" role="php" />
<file name="Editor.php" role="php" />
<file name="Share.php" role="php" />
</dir> <!-- /lib/Horde/Core/Binder -->
<dir name="Factory">
+ <file name="Db.php" role="php" />
<file name="DbPear.php" role="php" />
<file name="Data.php" role="php" />
<file name="Editor.php" role="php" />
<install name="lib/Horde/Core/Binder/Cache.php" as="Horde/Core/Binder/Cache.php" />
<install name="lib/Horde/Core/Binder/Data.php" as="Horde/Core/Binder/Data.php" />
<install name="lib/Horde/Core/Binder/Db.php" as="Horde/Core/Binder/Db.php" />
+ <install name="lib/Horde/Core/Binder/DbBase.php" as="Horde/Core/Binder/DbBase.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/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/Binder/Share.php" as="Horde/Core/Binder/Share.php" />
+ <install name="lib/Horde/Core/Factory/Db.php" as="Horde/Core/Factory/Db.php" />
<install name="lib/Horde/Core/Factory/DbPear.php" as="Horde/Core/Factory/DbPear.php" />
<install name="lib/Horde/Core/Factory/Data.php" as="Horde/Core/Factory/Data.php" />
<install name="lib/Horde/Core/Factory/Editor.php" as="Horde/Core/Factory/Editor.php" />
*
* @package Horde_Image
*/
+
require_once dirname(__FILE__) . '/../../../horde/lib/Application.php';
Horde_Registry::appInit('horde', array('authentication' => 'none'));
-$db = $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base');
// Putting these here so they don't interfere with timing/memory data when
// profiling.
$logger->debug("$driver, $effect, $time, $memory");
-// global $driver, $logger, $db;
+// global $driver, $logger;
+// $db = $GLOBALS['injector']->getInstance('Horde_Db_Base');
// $sql = "INSERT INTO image_tests (test, driver, peak_memory, execution_time) VALUES (?, ?, ?, ?);";
// $db->insert($sql, array('test' => $effect,
// 'driver' => $driver,
public function getAdapter()
{
- return $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base');
+ return $GLOBALS['injector']->getInstance('Horde_Db_Base');
}
}
public function getAdapter()
{
- return $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base');
+ return $GLOBALS['injector']->getInstance('Horde_Db_Base');
}
}
'cli' => true
));
-$dbh = $injector->getInstance('Horde_Db_Adapter_Base');
+$dbh = $injector->getInstance('Horde_Db_Base');
// read sql file for statements to run
$statements = new Horde_Db_StatementParser($_SERVER['argv'][1]);
$deviceID = Horde_Util::getPost('deviceID');
/* Get the state machine */
- $state_params = $GLOBALS['conf']['activesync']['state']['params'];
- $state_params['db'] = $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base');
+ $state_params = $conf['activesync']['state']['params'];
+ $state_params['db'] = $injector->getInstance('Horde_Db_Base');
$stateMachine = new Horde_ActiveSync_State_History($state_params);
- $stateMachine->setLogger($GLOBALS['injector']->getInstance('Horde_Log_Logger'));
+ $stateMachine->setLogger($injector->getInstance('Horde_Log_Logger'));
switch ($actionID) {
case 'wipe':
}
Horde::addScriptFile('activesyncadmin.js');
-if (!empty($GLOBALS['conf']['activesync']['enabled'])) {
- $state_params = $GLOBALS['conf']['activesync']['state']['params'];
- $state_params['db'] = $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base');
+if (!empty($conf['activesync']['enabled'])) {
+ $state_params = $conf['activesync']['state']['params'];
+ $state_params['db'] = $injector->getInstance('Horde_Db_Base');
$stateMachine = new Horde_ActiveSync_State_History($state_params);
} else {
throw new Horde_Exception_PermissionDenied(_("ActiveSync not activated."));
}
$app = $args[0];
-if (!in_array($app, $GLOBALS['registry']->listApps(array('inactive', 'hidden', 'notoolbar', 'admin', 'active')))) {
+if (!in_array($app, $registry->listApps(array('inactive', 'hidden', 'notoolbar', 'admin', 'active')))) {
$cli->fatal("$app is not a configured Horde application");
}
// Run
$dir = $registry->get('fileroot', $app) . '/migration/';
-$db = $injector->getInstance('Horde_Db_Adapter_Base');
+$db = $injector->getInstance('Horde_Db_Base');
$logger = new Horde_Log_Logger(new Horde_Log_Handler_Stream(STDOUT));
$migrator = new Horde_Db_Migration_Migrator($db, $logger, array('migrationsPath' => $dir, 'schemaTableName' => $app . '_schema_info'));
{
if (!empty($GLOBALS['conf']['activesync']['enabled'])) {
$state_params = $GLOBALS['conf']['activesync']['state']['params'];
- $state_params['db'] = $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base');
+ $state_params['db'] = $GLOBALS['injector']->getInstance('Horde_Db_Base');
$stateMachine = new Horde_ActiveSync_State_History($state_params);
} else {
return _("ActiveSync not activated.");
protected function _updateActiveSyncManagement($ui)
{
$state_params = $GLOBALS['conf']['activesync']['state']['params'];
- $state_params['db'] = $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base');
+ $state_params['db'] = $GLOBALS['injector']->getInstance('Horde_Db_Base');
$stateMachine = new Horde_ActiveSync_State_History($state_params);
$stateMachine->setLogger($GLOBALS['injector']->getInstance('Horde_Log_Logger'));
if ($ui->vars->wipeid) {
Horde_Registry::appInit('horde', array('authentication' => 'none', 'nocompress' => $nocompress, 'session_control' => $session_control));
/* Check if we are even enabled for AS */
- if (!empty($GLOBALS['conf']['activesync']['enabled'])) {
+ if (!empty($conf['activesync']['enabled'])) {
$request = new Horde_Controller_Request_Http(array('session_control' => $session_control));
- if ($GLOBALS['conf']['activesync']['logging']['type'] == 'custom') {
+ if ($conf['activesync']['logging']['type'] == 'custom') {
$params['logger'] = new Horde_Log_Logger(new Horde_Log_Handler_Stream(fopen($conf['activesync']['logging']['path'], 'a')));
} else {
- $params['logger'] = $GLOBALS['injector']->getInstance('Horde_Log_Logger');
+ $params['logger'] = $injector->getInstance('Horde_Log_Logger');
}
- $mailer = $GLOBALS['injector']->getInstance('Horde_Mail');
+ $mailer = $injector->getInstance('Horde_Mail');
/* TODO: Probably want to bind a factory to injector for this? */
- $params['registry'] = $GLOBALS['registry'];
+ $params['registry'] = $registry;
$connector = new Horde_ActiveSync_Driver_Horde_Connector_Registry($params);
- switch ($GLOBALS['conf']['activesync']['state']['driver']) {
+ switch ($conf['activesync']['state']['driver']) {
case 'file':
- $stateMachine = new Horde_ActiveSync_State_File($GLOBALS['conf']['activesync']['state']['params']);
+ $stateMachine = new Horde_ActiveSync_State_File($conf['activesync']['state']['params']);
break;
case 'history':
- $state_params = $GLOBALS['conf']['activesync']['state']['params'];
- $state_params['db'] = $GLOBALS['injector']->getInstance('Horde_Db_Adapter_Base');
+ $state_params = $conf['activesync']['state']['params'];
+ $state_params['db'] = $injector->getInstance('Horde_Db_Base');
$stateMachine = new Horde_ActiveSync_State_History($state_params);
}
-
+
$driver_params = array('connector' => $connector,
'state_basic' => $stateMachine,
'mail' => $mailer,
- 'ping' => $GLOBALS['conf']['activesync']['ping']);
+ 'ping' => $conf['activesync']['ping']);
- if ($params['provisioning'] = $GLOBALS['conf']['activesync']['securitypolicies']['provisioning']) {
- $driver_params['policies'] = $GLOBALS['conf']['activesync']['securitypolicies'];
+ if ($params['provisioning'] = $conf['activesync']['securitypolicies']['provisioning']) {
+ $driver_params['policies'] = $conf['activesync']['securitypolicies'];
}
$params['backend'] = new Horde_ActiveSync_Driver_Horde($driver_params);
$params['server'] = new Horde_ActiveSync($params['backend'],
/* Make sure we have a logger */
if (empty($params['logger'])) {
- $params['logger'] = $GLOBALS['injector']->getInstance('Horde_Log_Logger');
+ $params['logger'] = $injector->getInstance('Horde_Log_Logger');
}
/* Load the RPC backend based on $serverType. */
$params = Horde::getDriverConfig('sentmail', $driver);
if (strcasecmp($driver, 'Sql') === 0) {
- $params['db'] = $injector->getInstance('Horde_Db_Adapter_Base');
+ $params['db'] = $injector->getInstance('Horde_Db')->getOb('imp', 'sentmail');
} elseif (strcasecmp($driver, 'None') === 0) {
$driver = 'Null';
}