You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

65 lines
1.7 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
class TikiDb_Initializer
{
private $connectors = [
'pdo' => 'TikiDb_Initializer_Pdo',
'adodb' => 'TikiDb_Initializer_Adodb',
];
private $preferred;
private $initializeCallback;
public function setPreferredConnector($connector)
{
if (isset($this->connectors[$connector])) {
$this->preferred = $connector;
}
}
public function setInitializeCallback($callback)
{
$this->initializeCallback = $callback;
}
public function getConnection(array $credentials)
{
if ($connector = $this->getInitializer($this->preferred)) {
return $this->initialize($connector, $credentials);
}
foreach (array_keys($this->connectors) as $name) {
if ($connector = $this->getInitializer($name)) {
return $this->initialize($connector, $credentials);
}
}
}
private function initialize($connector, $credentials)
{
if ($db = $connector->getConnection($credentials)) {
if ($callback = $this->initializeCallback) {
$callback($db);
}
return $db;
}
}
private function getInitializer($name)
{
if (! isset($this->connectors[$name])) {
return false;
}
$connector = new $this->connectors[$name]();
if ($connector->isSupported()) {
return $connector;
}
}
}