diff --git a/lib/Alchemy/Phrasea/Command/Setup/Install.php b/lib/Alchemy/Phrasea/Command/Setup/Install.php index a9b86dc62c..e07726088f 100644 --- a/lib/Alchemy/Phrasea/Command/Setup/Install.php +++ b/lib/Alchemy/Phrasea/Command/Setup/Install.php @@ -12,6 +12,7 @@ namespace Alchemy\Phrasea\Command\Setup; use Alchemy\Phrasea\Command\Command; +use Doctrine\DBAL\Connection; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -129,24 +130,36 @@ class Install extends Command $abName = $dialog->ask($output, "DB name (phraseanet) : ", 'phraseanet'); try { - $abConn = new \connection_pdo('appbox', $hostname, $port, $dbUser, $dbPassword, $abName, [], $this->container['debug']); + $abConn = $this->container['dbal.provider']->get([ + 'host' => $hostname, + 'port' => $port, + 'user' => $dbUser, + 'password' => $dbPassword, + 'dbname' => $abName, + ]); + $abConn->connect(); $output->writeln("\n\tApplication-Box : Connection successful !\n"); } catch (\Exception $e) { $output->writeln("\n\tInvalid connection parameters\n"); } } while (!$abConn); } else { - $abConn = new \connection_pdo('appbox', $input->getOption('db-host'), $input->getOption('db-port'), $input->getOption('db-user'), $input->getOption('db-password'), $input->getOption('appbox'), [], $this->container['debug']); + $abConn = $this->container['dbal.provider']->get([ + 'host' => $input->getOption('db-host'), + 'port' => $input->getOption('db-port'), + 'user' => $input->getOption('db-user'), + 'password' => $input->getOption('db-password'), + 'dbname' => $input->getOption('appbox'), + ]); + $abConn->connect(); $output->writeln("\n\tApplication-Box : Connection successful !\n"); } return $abConn; } - private function getDBConn(InputInterface $input, OutputInterface $output, \connection_pdo $abConn, DialogHelper $dialog) + private function getDBConn(InputInterface $input, OutputInterface $output, Connection $abConn, DialogHelper $dialog) { - $credentials = $abConn->get_credentials(); - $dbConn = $template = null; if (!$input->getOption('databox')) { do { @@ -155,7 +168,14 @@ class Install extends Command if ($dbName) { try { - $dbConn = new \connection_pdo('databox', $credentials['hostname'], $credentials['port'], $credentials['user'], $credentials['password'], $dbName, [], $this->container['debug']); + $dbConn = $this->container['dbal.provider']->get([ + 'host' => $abConn->getHost(), + 'port' => $abConn->getPort(), + 'user' => $abConn->getUsername(), + 'password' => $abConn->getPassword(), + 'dbname' => $dbName, + ]); + $dbConn->connect(); $output->writeln("\n\tData-Box : Connection successful !\n"); do { @@ -171,7 +191,14 @@ class Install extends Command } } while ($retry); } else { - $dbConn = new \connection_pdo('databox', $input->getOption('db-host'), $input->getOption('db-port'), $input->getOption('db-user'), $input->getOption('db-password'), $input->getOption('databox'), [], $this->container['debug']); + $dbConn = $this->container['dbal.provider']->get([ + 'host' => $input->getOption('db-host'), + 'port' => $input->getOption('db-port'), + 'user' => $input->getOption('db-user'), + 'password' => $input->getOption('db-password'), + 'dbname' => $input->getOption('databox'), + ]); + $dbConn->connect(); $output->writeln("\n\tData-Box : Connection successful !\n"); $template = $input->getOption('db-template') ? : 'en'; } diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php b/lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php index f3d118308a..4effbe92be 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Databoxes.php @@ -11,6 +11,7 @@ namespace Alchemy\Phrasea\Controller\Admin; +use Doctrine\DBAL\DBALException; use Silex\Application; use Silex\ControllerProviderInterface; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -78,7 +79,7 @@ class Databoxes implements ControllerProviderInterface $sbas[$sbasId] = [ 'version' => $databox->get_version(), 'image' => '/skins/icons/foldph20close_0.gif', - 'server_info' => $databox->get_connection()->server_info(), + 'server_info' => $databox->get_connection()->getWrappedConnection()->getAttribute(\PDO::ATTR_SERVER_VERSION), 'name' => \phrasea::sbas_labels($sbasId, $app) ]; } catch (\Exception $e) { @@ -157,8 +158,15 @@ class Databoxes implements ControllerProviderInterface $dataTemplate = new \SplFileInfo($app['root.path'] . '/lib/conf.d/data_templates/' . $dataTemplate . '.xml'); try { - $connbas = new \connection_pdo('databox_creation', $hostname, $port, $user, $password, $dbName, [], $app['debug']); - } catch (\PDOException $e) { + $connbas = $app['dbal.provider']->get([ + 'host' => $hostname, + 'port' => $port, + 'user' => $user, + 'password' => $password, + 'dbname' => $dbName, + ]); + $connbas->connect(); + } catch (DBALException $e) { return $app->redirectPath('admin_databases', ['success' => 0, 'error' => 'database-failed']); } @@ -183,7 +191,14 @@ class Databoxes implements ControllerProviderInterface try { $data_template = new \SplFileInfo($app['root.path'] . '/lib/conf.d/data_templates/' . $dataTemplate . '.xml'); - $connbas = new \connection_pdo('databox_creation', $hostname, $port, $userDb, $passwordDb, $dbName, [], $app['debug']); + $connbas = $app['dbal.provider']->get([ + 'host' => $hostname, + 'port' => $port, + 'user' => $userDb, + 'password' => $passwordDb, + 'dbname' => $dbName, + ]); + $connbas->connect(); try { $base = \databox::create($app, $connbas, $data_template); $base->registerAdmin($app['authentication']->getUser()); diff --git a/lib/Alchemy/Phrasea/Controller/Setup.php b/lib/Alchemy/Phrasea/Controller/Setup.php index 212a0374f0..5769c84557 100644 --- a/lib/Alchemy/Phrasea/Controller/Setup.php +++ b/lib/Alchemy/Phrasea/Controller/Setup.php @@ -18,6 +18,7 @@ use Alchemy\Phrasea\Setup\Requirements\LocalesRequirements; use Alchemy\Phrasea\Setup\Requirements\PhpRequirements; use Alchemy\Phrasea\Setup\Requirements\PhraseaRequirements; use Alchemy\Phrasea\Setup\Requirements\SystemRequirements; +use Doctrine\DBAL\Connection; use Silex\ControllerProviderInterface; use Silex\Application as SilexApplication; use Symfony\Component\HttpFoundation\Request; @@ -128,7 +129,14 @@ class Setup implements ControllerProviderInterface $databox_name = $request->request->get('db_name'); try { - $abConn = new \connection_pdo('appbox', $hostname, $port, $user_ab, $ab_password, $appbox_name, [], $app['debug']); + $abConn = $app['dbal.provider']->get([ + 'host' => $hostname, + 'port' => $port, + 'user' => $user_ab, + 'password' => $ab_password, + 'dbname' => $appbox_name, + ]); + $abConn->connect(); } catch (\Exception $e) { return $app->redirectPath('install_step2', [ 'error' => $app->trans('Appbox is unreachable'), @@ -137,7 +145,14 @@ class Setup implements ControllerProviderInterface try { if ($databox_name) { - $dbConn = new \connection_pdo('databox', $hostname, $port, $user_ab, $ab_password, $databox_name, [], $app['debug']); + $dbConn = $app['dbal.provider']->get([ + 'host' => $hostname, + 'port' => $port, + 'user' => $user_ab, + 'password' => $ab_password, + 'dbname' => $databox_name, + ]); + $dbConn->connect(); } } catch (\Exception $e) { return $app->redirectPath('install_step2', [ diff --git a/lib/Alchemy/Phrasea/Controller/Thesaurus/Thesaurus.php b/lib/Alchemy/Phrasea/Controller/Thesaurus/Thesaurus.php index 981d45d213..62677bb1eb 100644 --- a/lib/Alchemy/Phrasea/Controller/Thesaurus/Thesaurus.php +++ b/lib/Alchemy/Phrasea/Controller/Thesaurus/Thesaurus.php @@ -11,6 +11,7 @@ namespace Alchemy\Phrasea\Controller\Thesaurus; +use Doctrine\DBAL\Connection; use Silex\Application; use Silex\ControllerProviderInterface; use Symfony\Component\HttpFoundation\Request; @@ -133,7 +134,7 @@ class Thesaurus implements ControllerProviderInterface if ($request->get("typ") == "TH" || $request->get("typ") == "CT") { try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $databox->get_connection(); if ($request->get("typ") == "TH") { $domth = $databox->get_dom_thesaurus(); @@ -576,7 +577,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); $dom = $databox->get_dom_thesaurus(); @@ -783,7 +784,7 @@ class Thesaurus implements ControllerProviderInterface foreach ($rs as $row) { try { - \connection::getPDOConnection($app, $row['sbas_id']); + $app['phraseanet.appbox']->get_databox($row['sbas_id'])->get_connection()->connect(); } catch (\Exception $e) { continue; } @@ -956,7 +957,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); $meta_struct = $databox->get_meta_structure(); $domct = $databox->get_dom_cterms(); $domst = $databox->get_dom_structure(); @@ -1029,7 +1030,7 @@ class Thesaurus implements ControllerProviderInterface ]); } - private function fixThesaurus($app, \DOMDocument $domct, \DOMDocument $domth, \connection_interface $connbas) + private function fixThesaurus($app, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas) { $version = $domth->documentElement->getAttribute("version"); @@ -1064,7 +1065,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $request->get('bid')); - $connbas = \connection::getPDOConnection($app, $request->get('bid')); + $connbas = $databox->get_connection(); $domct = $databox->get_dom_cterms(); $domth = $databox->get_dom_thesaurus(); @@ -1261,7 +1262,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - \connection::getPDOConnection($app, $bid); + $databox->get_connection()->connect(); $dom = $databox->get_dom_cterms(); $xpath = new \DOMXPath($dom); @@ -1295,7 +1296,8 @@ class Thesaurus implements ControllerProviderInterface $sql = "UPDATE thit SET value = thit_new WHERE value = :thit_old"; try { - $connbas = \connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $connbas = $databox->get_connection(); $stmt = $connbas->prepare($sql); $stmt->execute([ ':thit_new' => $thit_newid, @@ -1336,7 +1338,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); $domct = $databox->get_dom_cterms(); $domth = $databox->get_dom_thesaurus(); @@ -1635,7 +1637,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); $s_thits = ''; $sql = "SELECT DISTINCT value FROM thit"; @@ -1729,8 +1731,8 @@ class Thesaurus implements ControllerProviderInterface } try { - $connbas = \connection::getPDOConnection($app, $bid); $databox = $app['phraseanet.appbox']->get_databox((int) $bid); + $connbas = $databox->get_connection(); $domct = $databox->get_dom_cterms(); $dom = $databox->get_dom_thesaurus(); @@ -1912,7 +1914,7 @@ class Thesaurus implements ControllerProviderInterface $snewid = str_replace(".", "d", $newid) . "d"; $l = strlen($soldid) + 1; - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); $sql = "UPDATE thit SET value=CONCAT('$snewid', SUBSTRING(value FROM $l)) WHERE value LIKE :like"; @@ -2050,7 +2052,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); if ($request->get('typ') == "CT") { $xqroot = "cterms"; @@ -2448,7 +2450,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); if ($request->get('typ') == "CT") { $xqroot = "cterms"; @@ -2633,8 +2635,8 @@ class Thesaurus implements ControllerProviderInterface } try { - $connbas = \connection::getPDOConnection($app, $bid); $databox = $app['phraseanet.appbox']->get_databox((int) $bid); + $connbas = $databox->get_connection(); $domth = $databox->get_dom_thesaurus(); if ($domth) { @@ -2862,7 +2864,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); $dom = $databox->get_dom_cterms(); @@ -2888,7 +2890,7 @@ class Thesaurus implements ControllerProviderInterface return new Response($ret->saveXML(), 200, ['Content-Type' => 'text/xml']); } - private function doRejectBranch(\connection_pdo $connbas, \DOMElement $node) + private function doRejectBranch(Connection $connbas, \DOMElement $node) { if (strlen($oldid = $node->getAttribute("id")) > 1) { $node->setAttribute("id", $newid = ("R" . substr($oldid, 1))); @@ -3053,7 +3055,7 @@ class Thesaurus implements ControllerProviderInterface try { $databox = $app['phraseanet.appbox']->get_databox((int) $bid); - $connbas = \connection::getPDOConnection($app, $bid); + $connbas = $databox->get_connection(); $s_thits = ';'; $sql = "SELECT DISTINCT value FROM thit"; diff --git a/lib/Alchemy/Phrasea/Controller/Thesaurus/Xmlhttp.php b/lib/Alchemy/Phrasea/Controller/Thesaurus/Xmlhttp.php index 258c4649f8..dc58dad014 100644 --- a/lib/Alchemy/Phrasea/Controller/Thesaurus/Xmlhttp.php +++ b/lib/Alchemy/Phrasea/Controller/Thesaurus/Xmlhttp.php @@ -445,7 +445,7 @@ class Xmlhttp implements ControllerProviderInterface private function getPresetHTMLList(Application $app, $sbas_id, $usr_id) { - $conn = \connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $html = ''; $sql = 'SELECT edit_preset_id, creation_date, title, xml @@ -827,7 +827,8 @@ class Xmlhttp implements ControllerProviderInterface $thid = implode('.', $tids); try { - $connbas = \connection::getPDOConnection($app, $sbid); + $databox = $app['phraseanet.appbox']->get_databox($sbid); + $connbas = $databox->get_connection(); $dbname = \phrasea::sbas_labels($sbid, $app); $t_nrec = []; diff --git a/lib/Alchemy/Phrasea/Controller/Utils/ConnectionTest.php b/lib/Alchemy/Phrasea/Controller/Utils/ConnectionTest.php index 427070868f..a1df538367 100644 --- a/lib/Alchemy/Phrasea/Controller/Utils/ConnectionTest.php +++ b/lib/Alchemy/Phrasea/Controller/Utils/ConnectionTest.php @@ -37,7 +37,13 @@ class ConnectionTest implements ControllerProviderInterface $connection_ok = $db_ok = $is_databox = $is_appbox = $empty = false; try { - $conn = new \connection_pdo('test', $hostname, $port, $user, $password, null, [], false); + $conn = $app['dbal.provider']->get([ + 'host' => $hostname, + 'port' => $port, + 'user' => $user, + 'password' => $password, + ]); + $conn->connect(); $connection_ok = true; } catch (\Exception $e) { @@ -45,7 +51,14 @@ class ConnectionTest implements ControllerProviderInterface if ($dbname && $connection_ok === true) { try { - $conn = new \connection_pdo('test', $hostname, $port, $user, $password, $dbname, [], false); + $conn = $app['dbal.provider']->get([ + 'host' => $hostname, + 'port' => $port, + 'user' => $user, + 'password' => $password, + 'dbname' => $dbname, + ]); + $conn->connect(); $db_ok = true; $sql = "SHOW TABLE STATUS"; diff --git a/lib/Alchemy/Phrasea/Core/Connection/ConnectionProvider.php b/lib/Alchemy/Phrasea/Core/Connection/ConnectionProvider.php new file mode 100644 index 0000000000..90f4b6000a --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Connection/ConnectionProvider.php @@ -0,0 +1,64 @@ +config = $config; + $this->eventManager = $eventManager; + } + + public function __destruct() + { + foreach ($this->connections as $conn) { + $conn->close(); + } + + $this->connections = []; + } + + /** + * @param $params + * + * @return Connection + */ + public function get(array $params) + { + $params = array_replace([ + 'driver' => 'pdo_mysql', + 'charset' => 'UTF8', + ], $params); + + $key = md5(serialize($params)); + + if (isset($this->connections[$key])) { + return $this->connections[$key]; + } + + return $this->connections[$key] = DriverManager::getConnection($params, $this->config, $this->eventManager);; + } +} + diff --git a/lib/Alchemy/Phrasea/Core/Provider/ORMServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/ORMServiceProvider.php index 135c30f81d..0985d294de 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/ORMServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/ORMServiceProvider.php @@ -11,6 +11,9 @@ namespace Alchemy\Phrasea\Core\Provider; +use Alchemy\Phrasea\Application as PhraseaApplication; +use Alchemy\Phrasea\Cache\ArrayCache; +use Alchemy\Phrasea\Core\Connection\ConnectionProvider; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Model\MonologSQLLogger; use Alchemy\Phrasea\Model\NativeQueryProvider; @@ -75,7 +78,7 @@ class ORMServiceProvider implements ServiceProviderInterface $app['EM.config'] = $app->share(function (Application $app) { $config = new ORMConfiguration(); - if ($app['debug']) { + if ($app->getEnvironment() === PhraseaApplication::ENV_DEV) { $config->setSQLLogger($app['EM.sql-logger']); } @@ -103,17 +106,33 @@ class ORMServiceProvider implements ServiceProviderInterface }); $app['EM.opcode-cache-type'] = $app->share(function (Application $app) { - return $app['conf']->get(['main', 'opcodecache', 'type']); + if ($app['configuration.store']->isSetup()) { + return $app['conf']->get(['main', 'opcodecache', 'type']); + } + + return 'ArrayCache'; }); $app['EM.opcode-cache-options'] = $app->share(function (Application $app) { - return $app['conf']->get(['main', 'opcodecache', 'options']); + if ($app['configuration.store']->isSetup()) { + return $app['conf']->get(['main', 'opcodecache', 'options']); + } + + return []; }); $app['EM.cache-type'] = $app->share(function (Application $app) { - return $app['conf']->get(['main', 'cache', 'type']); + if ($app['configuration.store']->isSetup()) { + return $app['conf']->get(['main', 'cache', 'type']); + } + + return 'ArrayCache'; }); $app['EM.cache-options'] = $app->share(function (Application $app) { - return $app['conf']->get(['main', 'cache', 'options']); + if ($app['configuration.store']->isSetup()) { + return $app['conf']->get(['main', 'cache', 'options']); + } + + return []; }); $app['EM.events-manager'] = $app->share(function (Application $app) { $evm = new EventManager(); @@ -130,6 +149,10 @@ class ORMServiceProvider implements ServiceProviderInterface return $app['conf']->get(['main', 'database']); }); + $app['dbal.provider'] = $app->share(function (Application $app) { + return new ConnectionProvider($app['EM.config'], $app['EM.events-manager']); + }); + $app['EM'] = $app->share(function (Application $app) { try { $em = EntityManager::create($app['EM.dbal-conf'], $app['EM.config'], $app['EM.events-manager']); diff --git a/lib/Alchemy/Phrasea/Helper/User/Edit.php b/lib/Alchemy/Phrasea/Helper/User/Edit.php index 78e25b8753..79357904f3 100644 --- a/lib/Alchemy/Phrasea/Helper/User/Edit.php +++ b/lib/Alchemy/Phrasea/Helper/User/Edit.php @@ -196,7 +196,7 @@ class Edit extends \Alchemy\Phrasea\Helper\Helper WHERE (u.id = " . implode(' OR u.id = ', $this->users) . ") AND bu.base_id = :base_id"; - $conn = \connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $stmt = $conn->prepare($sql); $stmt->execute([':base_id' => $this->base_id]); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); @@ -319,7 +319,7 @@ class Edit extends \Alchemy\Phrasea\Helper\Helper WHERE (u.id = " . implode(' OR u.id = ', $this->users) . ") AND bu.base_id = :base_id"; - $conn = \connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $stmt = $conn->prepare($sql); $stmt->execute([':base_id' => $this->base_id]); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); @@ -375,7 +375,7 @@ class Edit extends \Alchemy\Phrasea\Helper\Helper WHERE (u.id = " . implode(' OR u.id = ', $this->users) . ") AND b.sbas_id = :sbas_id"; - $conn = \connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $stmt = $conn->prepare($sql); $stmt->execute([':sbas_id' => $sbas_id]); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); diff --git a/lib/Alchemy/Phrasea/Model/Manager/UserManager.php b/lib/Alchemy/Phrasea/Model/Manager/UserManager.php index cf5f6aa41d..6d99f8893a 100644 --- a/lib/Alchemy/Phrasea/Model/Manager/UserManager.php +++ b/lib/Alchemy/Phrasea/Model/Manager/UserManager.php @@ -14,6 +14,7 @@ namespace Alchemy\Phrasea\Model\Manager; use Doctrine\Common\Persistence\ObjectManager; use Alchemy\Phrasea\Model\Entities\User; use Alchemy\Phrasea\Model\Entities\UserSetting; +use Doctrine\DBAL\Connection; use Doctrine\ORM\UnitOfWork AS UOW; class UserManager @@ -23,7 +24,7 @@ class UserManager /** @var \PDO */ protected $appboxConnection; - public function __construct(ObjectManager $om, \PDO $appboxConnection) + public function __construct(ObjectManager $om, Connection $appboxConnection) { $this->objectManager = $om; $this->appboxConnection = $appboxConnection; diff --git a/lib/Alchemy/Phrasea/Setup/Installer.php b/lib/Alchemy/Phrasea/Setup/Installer.php index 86a4e42fbf..ded34bff0f 100644 --- a/lib/Alchemy/Phrasea/Setup/Installer.php +++ b/lib/Alchemy/Phrasea/Setup/Installer.php @@ -12,6 +12,8 @@ namespace Alchemy\Phrasea\Setup; use Alchemy\Phrasea\Application; +use Doctrine\DBAL\Connection; +use Doctrine\DBAL\DBALException; use Doctrine\ORM\Tools\SchemaTool; use Alchemy\Phrasea\Model\Entities\User; @@ -25,7 +27,7 @@ class Installer $this->app = $app; } - public function install($email, $password, \connection_interface $abConn, $serverName, $dataPath, \connection_interface $dbConn = null, $template = null, array $binaryData = []) + public function install($email, $password, Connection $abConn, $serverName, $dataPath, Connection $dbConn = null, $template = null, array $binaryData = []) { $this->rollbackInstall($abConn, $dbConn); @@ -65,7 +67,7 @@ class Installer $this->app['conf']->set('registry', $this->app['registry.manipulator']->getRegistryData()); } - private function createDB(\connection_interface $dbConn = null, $template) + private function createDB(Connection $dbConn = null, $template) { $template = new \SplFileInfo(__DIR__ . '/../../../conf.d/data_templates/' . $template . '-simple.xml'); $databox = \databox::create($this->app, $dbConn, $template); @@ -115,7 +117,7 @@ class Installer $this->app['manipulator.user']->createUser(User::USER_GUEST, User::USER_GUEST); } - private function rollbackInstall(\connection_interface $abConn, \connection_interface $dbConn = null) + private function rollbackInstall(Connection $abConn, Connection $dbConn = null) { $structure = simplexml_load_file(__DIR__ . "/../../../conf.d/bases_structure.xml"); @@ -132,7 +134,7 @@ class Installer $stmt = $abConn->prepare($sql); $stmt->execute(); $stmt->closeCursor(); - } catch (\PDOException $e) { + } catch (DBALException $e) { } } @@ -143,7 +145,7 @@ class Installer $stmt = $dbConn->prepare($sql); $stmt->execute(); $stmt->closeCursor(); - } catch (\PDOException $e) { + } catch (DBALException $e) { } } @@ -169,14 +171,15 @@ class Installer $this->app['phraseanet.appbox']->insert_datas($this->app); } - private function createConfigFile($abConn, $serverName, $binaryData) + private function createConfigFile(Connection $abConn, $serverName, $binaryData) { $config = $this->app['configuration.store']->initialize(); - foreach ($abConn->get_credentials() as $key => $value) { - $key = $key == 'hostname' ? 'host' : $key; - $config['main']['database'][$key] = (string) $value; - } + $config['main']['database']['host'] = $abConn->getHost(); + $config['main']['database']['port'] = $abConn->getPort(); + $config['main']['database']['user'] = $abConn->getUsername(); + $config['main']['database']['password'] = $abConn->getPassword(); + $config['main']['database']['dbname'] = $abConn->getDatabase(); $config['main']['database']['driver'] = 'pdo_mysql'; $config['main']['database']['charset'] = 'UTF8'; diff --git a/lib/Alchemy/Phrasea/TaskManager/Job/RecordMoverJob.php b/lib/Alchemy/Phrasea/TaskManager/Job/RecordMoverJob.php index c7874b4b1e..54335fa9e4 100644 --- a/lib/Alchemy/Phrasea/TaskManager/Job/RecordMoverJob.php +++ b/lib/Alchemy/Phrasea/TaskManager/Job/RecordMoverJob.php @@ -324,7 +324,8 @@ class RecordMoverJob extends AbstractJob private function playTest(Application $app, $sbas_id, $sql) { - $connbas = \connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $connbas = $databox->get_connection(); $result = ['rids' => [], 'err' => '', 'n' => null]; $result['n'] = $connbas->query('SELECT COUNT(*) AS n FROM (' . $sql . ') AS x')->fetchColumn(); @@ -344,7 +345,8 @@ class RecordMoverJob extends AbstractJob private function calcWhere(Application $app, $sbas_id, &$sxtask) { - $connbas = \connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $connbas = $databox->get_connection(); $tw = []; $join = ''; diff --git a/lib/classes/Session/Logger.php b/lib/classes/Session/Logger.php index 4bf1f83eb2..00318c4b37 100644 --- a/lib/classes/Session/Logger.php +++ b/lib/classes/Session/Logger.php @@ -224,7 +224,8 @@ class Session_Logger try { $logger = $app['phraseanet.logger']($app['phraseanet.appbox']->get_databox($sbas_id)); - $connbas = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $connbas = $databox->get_connection(); $sql = 'SELECT appli FROM log WHERE id = :log_id'; $stmt = $connbas->prepare($sql); $stmt->execute([':log_id' => $logger->get_id()]); diff --git a/lib/classes/appbox.php b/lib/classes/appbox.php index 3bb6d00a39..1d59dcfc00 100644 --- a/lib/classes/appbox.php +++ b/lib/classes/appbox.php @@ -54,8 +54,8 @@ class appbox extends base public function __construct(Application $app) { $this->app = $app; - $this->connection = connection::getPDOConnection($app); $connexion = $app['conf']->get(['main', 'database']); + $this->connection = $app['dbal.provider']->get($connexion); $this->host = $connexion['host']; $this->port = $connexion['port']; diff --git a/lib/classes/base.php b/lib/classes/base.php index da2eb2cd58..32c1efcbe9 100644 --- a/lib/classes/base.php +++ b/lib/classes/base.php @@ -13,6 +13,7 @@ use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Core\Version as PhraseaVersion; use vierbergenlars\SemVer\version; use Alchemy\Phrasea\Model\Entities\User; +use Doctrine\DBAL\Connection; abstract class base implements cache_cacheableInterface { @@ -137,7 +138,7 @@ abstract class base implements cache_cacheableInterface /** * - * @return connection_pdo + * @return Connection */ public function get_connection() { diff --git a/lib/classes/cache/databox.php b/lib/classes/cache/databox.php index 7a801152ef..fc7f945038 100644 --- a/lib/classes/cache/databox.php +++ b/lib/classes/cache/databox.php @@ -52,7 +52,7 @@ class cache_databox return; } - $connsbas = \connection::getPDOConnection($app, $sbas_id); + $connsbas = $databox->get_connection(); $sql = 'SELECT type, value FROM memcached WHERE site_id = :site_id'; $stmt = $connsbas->prepare($sql); @@ -124,7 +124,7 @@ class cache_databox $app['phraseanet.appbox']->set_data_to_cache($now, 'memcached_update_' . $sbas_id); - $conn = \connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $sql = 'UPDATE sitepreff SET memcached_update = :date'; $stmt = $conn->prepare($sql); @@ -144,8 +144,8 @@ class cache_databox */ public static function update(Application $app, $sbas_id, $type, $value = '') { - - $connbas = \connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $connbas = $databox->get_connection(); $sql = 'SELECT distinct site_id as site_id FROM clients diff --git a/lib/classes/collection.php b/lib/classes/collection.php index e2d2cccf26..2e39306bb4 100644 --- a/lib/classes/collection.php +++ b/lib/classes/collection.php @@ -10,9 +10,9 @@ */ use Alchemy\Phrasea\Application; - use Alchemy\Phrasea\Exception\InvalidArgumentException; use Alchemy\Phrasea\Model\Entities\User; +use Doctrine\DBAL\Connection; class collection implements cache_cacheableInterface { @@ -92,7 +92,7 @@ class collection implements cache_cacheableInterface 'nl' => $row['label_nl'], ]; - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $sql = 'SELECT server_coll_id, sbas_id, base_id, active, ord FROM bas WHERE server_coll_id = :coll_id AND sbas_id = :sbas_id'; @@ -547,7 +547,7 @@ class collection implements cache_cacheableInterface return $this; } - private static function getNewOrder(\connection_pdo $conn, $sbas_id) + private static function getNewOrder(Connection $conn, $sbas_id) { $sql = "SELECT GREATEST(0, MAX(ord)) + 1 AS ord FROM bas WHERE sbas_id = :sbas_id"; $stmt = $conn->prepare($sql); diff --git a/lib/classes/connection.php b/lib/classes/connection.php deleted file mode 100644 index 46f476c5ee..0000000000 --- a/lib/classes/connection.php +++ /dev/null @@ -1,180 +0,0 @@ -app = $app; - } - - /** - * - */ - public function __destruct() - { - self::printLog($this->app); - - return; - } - - /** - * - * @return Void - */ - public static function printLog(Application $app) - { - if ($app->getEnvironment() !== Application::ENV_DEV) { - return; - } - - $totalTime = 0; - - foreach (self::$log as $entry) { - $query = $entry['query']; - do { - $query = str_replace(["\n", " "], " ", $query); - } while ($query != str_replace(["\n", " "], " ", $query)); - - $totalTime += $entry['time']; - $string = $entry['time'] . "\t" . ' - ' . $query . ' - ' . "\n"; - file_put_contents(__DIR__ . '/../../logs/mysql_log.log', $string, FILE_APPEND); - } - $string = count(self::$log) . ' queries - ' . $totalTime - . "\nEND OF QUERY " . $_SERVER['PHP_SELF'] - . "?"; - foreach ($_GET as $key => $value) { - $string .= $key . ' = ' . $value . ' & '; - } - $string .= "\nPOST datas :\n "; - foreach ($_POST as $key => $value) { - $string .= "\t\t" . $key . ' = ' . (is_scalar($value) ? $value : 'non-scalar value') . "\n"; - } - $string .= "\n\n\n\n"; - - file_put_contents(__DIR__ . '/../../logs/mysql_log.log', $string, FILE_APPEND); - - return; - } - - /** - * - * @return type - */ - protected static function instantiate(Application $app) - { - if (!self::$_selfinstance) - self::$_selfinstance = new self($app); - - return; - } - - /** - * - * @param Application $app - * @param string $name - * - * @return connection_pdo - */ - public static function getPDOConnection(Application $app, $name = null) - { - self::instantiate($app); - if (trim($name) == '') { - $name = 'appbox'; - } elseif (is_int((int) $name)) { - $name = (int) $name; - } else { - return false; - } - - if (!isset(self::$_PDO_instance[$name])) { - $hostname = $port = $user = $password = $dbname = false; - - $connection_params = []; - - if (trim($name) !== 'appbox') { - $connection_params = phrasea::sbas_params($app); - } else { - $connexion = $app['conf']->get(['main', 'database']); - - $hostname = $connexion['host']; - $port = $connexion['port']; - $user = $connexion['user']; - $password = $connexion['password']; - $dbname = $connexion['dbname']; - } - - if (isset($connection_params[$name])) { - $hostname = $connection_params[$name]['host']; - $port = $connection_params[$name]['port']; - $user = $connection_params[$name]['user']; - $password = $connection_params[$name]['pwd']; - $dbname = $connection_params[$name]['dbname']; - } - - try { - self::$_PDO_instance[$name] = new connection_pdo($name, $hostname, $port, $user, $password, $dbname, [], $app['debug']); - } catch (\Exception $e) { - throw new Exception('Connection not available'); - } - } - if (array_key_exists($name, self::$_PDO_instance)) { - return self::$_PDO_instance[$name]; - } - - throw new Exception('Connection not available'); - } - - /** - * - * @param type $name - * @return type - */ - public static function close_PDO_connection($name) - { - if (isset(self::$_PDO_instance[$name])) { - self::$_PDO_instance[$name] = null; - unset(self::$_PDO_instance[$name]); - } - - return; - } - - public static function close_connections() - { - foreach (self::$_PDO_instance as $name => $conn) { - self::close_PDO_connection($name); - } - - return; - } -} diff --git a/lib/classes/connection/abstract.php b/lib/classes/connection/abstract.php deleted file mode 100644 index 6c084d6c74..0000000000 --- a/lib/classes/connection/abstract.php +++ /dev/null @@ -1,85 +0,0 @@ -credentials; - } - - public function is_multi_db() - { - return $this->multi_db; - } - - /** - * - * @return string - */ - public function get_name() - { - return $this->name; - } - - public function ping() - { - try { - $this->query('SELECT 1'); - } catch (PDOException $e) { - return false; - } - - return true; - } - - /** - * - * @param string $statement - * @param array $driver_options - * @return PDOStatement - */ - public function prepare($statement, $driver_options = []) - { - return parent::prepare($statement, $driver_options); - } - - /** - * - * @return boolean - */ - public function beginTransaction() - { - return parent::beginTransaction(); - } - - /** - * - * @return boolean - */ - public function commit() - { - return parent::commit(); - } - - /** - * - * @return string - */ - public function server_info() - { - return parent::getAttribute(constant("PDO::ATTR_SERVER_VERSION")); - } -} diff --git a/lib/classes/connection/interface.php b/lib/classes/connection/interface.php deleted file mode 100644 index b8c5a9066f..0000000000 --- a/lib/classes/connection/interface.php +++ /dev/null @@ -1,32 +0,0 @@ -debug = $debug; - $this->name = $name; - if ($dbname) - $dsn = 'mysql:dbname=' . $dbname . ';host=' . $hostname . ';port=' . $port . ';'; - else - $dsn = 'mysql:host=' . $hostname . ';port=' . $port . ';'; - - $this->credentials['hostname'] = $hostname; - $this->credentials['port'] = $port; - $this->credentials['user'] = $user; - $this->credentials['password'] = $passwd; - if ($dbname) - $this->credentials['dbname'] = $dbname; - - parent::__construct($dsn, $user, $passwd, $options); - - $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $this->query(" - SET character_set_results = 'utf8', character_set_client = 'utf8', - character_set_connection = 'utf8', character_set_database = 'utf8', - character_set_server = 'utf8'"); - - return $this; - } - - /** - * - * @param type $statement - * @param type $driver_options - * @return PDOStatement - */ - public function prepare($statement, $driver_options = []) - { - if ($this->debug) { - return new connection_pdoStatementDebugger(parent::prepare($statement, $driver_options)); - } else { - return parent::prepare($statement, $driver_options); - } - } - - /** - * - * @return void - */ - public function close() - { - connection::close_PDO_connection($this->name); - } - - /** - * - * @param string $message - * @return connection_pdo - */ - protected function log($message) - { - file_put_contents(__DIR__ . '/../../../logs/sql_log.log', $message . "\n", FILE_APPEND); - - return $this; - } -} diff --git a/lib/classes/connection/pdoStatementDebugger.php b/lib/classes/connection/pdoStatementDebugger.php deleted file mode 100644 index 9f5a2b2a16..0000000000 --- a/lib/classes/connection/pdoStatementDebugger.php +++ /dev/null @@ -1,51 +0,0 @@ -statement = $statement; - - return $this; - } - - public function execute($params = []) - { - $start = microtime(true); - $exception = null; - try { - $result = $this->statement->execute($params); - } catch (\Exception $e) { - $exception = $e; - } - $time = microtime(true) - $start; - connection::$log[] = [ - 'query' => '' . str_replace(array_keys($params), array_values($params), $this->statement->queryString), - 'time' => $time - ]; - if ($exception instanceof Exception) - throw $exception; - - return $result; - } - - public function __call($function_name, $parameters) - { - return call_user_func_array([$this->statement, $function_name], $parameters); - } -} diff --git a/lib/classes/databox.php b/lib/classes/databox.php index dbe52b8861..0ac8b268d9 100644 --- a/lib/classes/databox.php +++ b/lib/classes/databox.php @@ -10,9 +10,10 @@ */ use Alchemy\Phrasea\Application; -use Symfony\Component\Filesystem\Filesystem; use Alchemy\Phrasea\Model\Entities\User; use Alchemy\Phrasea\Exception\InvalidArgumentException; +use Doctrine\DBAL\Connection; +use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Translation\TranslatorInterface; @@ -120,7 +121,13 @@ class databox extends base throw new NotFoundHttpException(sprintf('databox %d not found', $sbas_id)); } - $this->connection = connection::getPDOConnection($app, $sbas_id); + $this->connection = $app['dbal.provider']->get([ + 'host' => $connection_params[$sbas_id]['host'], + 'port' => $connection_params[$sbas_id]['port'], + 'user' => $connection_params[$sbas_id]['user'], + 'password' => $connection_params[$sbas_id]['pwd'], + 'dbname' => $connection_params[$sbas_id]['dbname'], + ]); $this->host = $connection_params[$sbas_id]['host']; $this->port = $connection_params[$sbas_id]['port']; @@ -225,7 +232,7 @@ class databox extends base } - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $sql = "SELECT b.server_coll_id FROM sbas s, bas b WHERE s.sbas_id = b.sbas_id AND b.sbas_id = :sbas_id @@ -492,24 +499,22 @@ class databox extends base return; } - public static function create(Application $app, connection_pdo $connection, \SplFileInfo $data_template) + public static function create(Application $app, Connection $connection, \SplFileInfo $data_template) { if ( ! file_exists($data_template->getRealPath())) { throw new \InvalidArgumentException($data_template->getRealPath() . " does not exist"); } - $credentials = $connection->get_credentials(); - $sql = 'SELECT sbas_id FROM sbas WHERE host = :host AND port = :port AND dbname = :dbname AND user = :user AND pwd = :password'; - $host = $credentials['hostname']; - $port = $credentials['port']; - $dbname = $credentials['dbname']; - $user = $credentials['user']; - $password = $credentials['password']; + $host = $connection->getHost(); + $port = $connection->getPort(); + $dbname = $connection->getDatabase(); + $user = $connection->getUsername(); + $password = $connection->getPassword(); $params = [ ':host' => $host @@ -589,7 +594,14 @@ class databox extends base */ public static function mount(Application $app, $host, $port, $user, $password, $dbname) { - new connection_pdo('test', $host, $port, $user, $password, $dbname, [], $app['debug']); + $conn = $app['dbal.provider']->get([ + 'host' => $host, + 'port' => $port, + 'user' => $user, + 'password' => $password, + 'dbname' => $dbname, + ]); + $conn->connect(); $conn = $app['phraseanet.appbox']->get_connection(); $sql = 'SELECT MAX(ord) as ord FROM sbas'; @@ -733,7 +745,7 @@ class databox extends base public function get_serialized_server_info() { - return sprintf("%s@%s:%s (MySQL %s)", $this->dbname, $this->host, $this->port, $this->get_connection()->server_info()); + return sprintf("%s@%s:%s (MySQL %s)", $this->dbname, $this->host, $this->port, $this->get_connection()->getWrappedConnection()->getAttribute(\PDO::ATTR_SERVER_VERSION)); } public static function get_available_dcfields() @@ -763,7 +775,7 @@ class databox extends base */ public function get_mountable_colls() { - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $colls = []; $sql = 'SELECT server_coll_id FROM bas WHERE sbas_id = :sbas_id'; @@ -798,7 +810,7 @@ class databox extends base public function get_activable_colls() { - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $base_ids = []; $sql = 'SELECT base_id FROM bas WHERE sbas_id = :sbas_id AND active = "0"'; @@ -973,7 +985,7 @@ class databox extends base */ public function registerAdmin(User $user) { - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $this->app['acl']->get($user) ->give_access_to_sbas([$this->id]) diff --git a/lib/classes/databox/field.php b/lib/classes/databox/field.php index 93ee32d6b1..377c133ea5 100644 --- a/lib/classes/databox/field.php +++ b/lib/classes/databox/field.php @@ -9,10 +9,12 @@ * file that was distributed with this source code. */ + use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Vocabulary; use Alchemy\Phrasea\Vocabulary\ControlProvider\ControlProviderInterface; use Alchemy\Phrasea\Metadata\Tag\Nosource; +use Doctrine\DBAL\Connection; use PHPExiftool\Driver\TagInterface; use PHPExiftool\Driver\TagFactory; use PHPExiftool\Exception\TagUnknown; @@ -303,7 +305,7 @@ class databox_field implements cache_cacheableInterface /** * - * @return connection_pdo + * @return Connection */ public function get_connection() { diff --git a/lib/classes/databox/status.php b/lib/classes/databox/status.php index 9ba255b976..3ca0be75e3 100644 --- a/lib/classes/databox/status.php +++ b/lib/classes/databox/status.php @@ -454,7 +454,7 @@ class databox_status public static function operation_and(Application $app, $stat1, $stat2) { - $conn = connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $status = '0'; @@ -481,7 +481,7 @@ class databox_status public static function operation_and_not(Application $app, $stat1, $stat2) { - $conn = connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $status = '0'; @@ -508,7 +508,7 @@ class databox_status public static function operation_or(Application $app, $stat1, $stat2) { - $conn = connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $status = '0'; @@ -541,7 +541,7 @@ class databox_status throw new \Exception(sprintf('`%s`is non-decimal value', $status)); } - $conn = connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $sql = 'select bin(' . $status . ') as result'; @@ -570,7 +570,7 @@ class databox_status throw new \Exception('Non-hexadecimal value'); } - $conn = connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $sql = 'select BIN( CAST( 0x' . trim($status) . ' AS UNSIGNED ) ) as result'; diff --git a/lib/classes/media/Permalink/Adapter.php b/lib/classes/media/Permalink/Adapter.php index d5c06766b8..a0d83aaec4 100644 --- a/lib/classes/media/Permalink/Adapter.php +++ b/lib/classes/media/Permalink/Adapter.php @@ -11,6 +11,7 @@ use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Exception\RuntimeException; +use Doctrine\DBAL\DBALException; class media_Permalink_Adapter implements media_Permalink_Interface, cache_cacheableInterface { @@ -333,7 +334,7 @@ class media_Permalink_Adapter implements media_Permalink_Interface, cache_cachea $stmt = $databox->get_connection()->prepare($sql); try { $stmt->execute($params); - } catch (\PDOException $e) { + } catch (DBALException $e) { $error = $e; } $stmt->closeCursor(); diff --git a/lib/classes/module/console/sphinxGenerateSuggestion.php b/lib/classes/module/console/sphinxGenerateSuggestion.php index 8e0b66e16e..a5fa5e435c 100644 --- a/lib/classes/module/console/sphinxGenerateSuggestion.php +++ b/lib/classes/module/console/sphinxGenerateSuggestion.php @@ -70,7 +70,7 @@ class module_console_sphinxGenerateSuggestion extends Command } try { - $connbas = connection::getPDOConnection($this->container, $sbas_id); + $connbas = $databox->get_connection()->connect(); } catch (\Exception $e) { continue; } diff --git a/lib/classes/module/report.php b/lib/classes/module/report.php index 9dcc6c5cf7..f3a96abd84 100644 --- a/lib/classes/module/report.php +++ b/lib/classes/module/report.php @@ -10,6 +10,7 @@ */ use Alchemy\Phrasea\Application; +use Doctrine\DBAL\DBALException; class module_report { @@ -820,7 +821,8 @@ class module_report return $this->report; } - $conn = connection::getPDOConnection($this->app, $this->sbas_id); + $databox = $this->app['phraseanet.appbox']->get_databox($this->sbas_id); + $conn = $databox->get_connection(); $this->buildReq($groupby, $on); @@ -830,7 +832,7 @@ class module_report $stmt->execute($this->params); $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt->closeCursor(); - } catch (PDOException $e) { + } catch (DBALException $e) { echo $e->getMessage(); return; diff --git a/lib/classes/module/report/activity.php b/lib/classes/module/report/activity.php index 2fdef6aee9..2062b5e729 100644 --- a/lib/classes/module/report/activity.php +++ b/lib/classes/module/report/activity.php @@ -617,7 +617,8 @@ class module_report_activity extends module_report public static function topTenUser(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $result = []; $result['top_ten_doc'] = []; $result['top_ten_prev'] = []; @@ -697,7 +698,8 @@ class module_report_activity extends module_report public static function activity(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $res = []; $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); @@ -743,7 +745,8 @@ class module_report_activity extends module_report public static function activityDay(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $result = []; $res = []; $datefilter = @@ -785,7 +788,8 @@ class module_report_activity extends module_report public static function activityQuestion(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $result = []; $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); @@ -825,7 +829,8 @@ class module_report_activity extends module_report public static function activiteTopQuestion(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $result = []; $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); @@ -868,7 +873,8 @@ class module_report_activity extends module_report public static function activiteTopTenSiteView(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $result = []; $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); $collfilter = module_report_sqlfilter::constructCollectionFilter($app, $list_coll_id); @@ -911,7 +917,8 @@ class module_report_activity extends module_report public static function activiteAddedDocument(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $result = []; $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); $collfilter = module_report_sqlfilter::constructCollectionFilter($app, $list_coll_id); @@ -946,7 +953,8 @@ class module_report_activity extends module_report public static function activiteEditedDocument(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $result = []; $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); $collfilter = module_report_sqlfilter::constructCollectionFilter($app, $list_coll_id); @@ -982,7 +990,8 @@ class module_report_activity extends module_report public static function activiteAddedTopTenUser(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $result = []; $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); $collfilter = module_report_sqlfilter::constructCollectionFilter($app, $list_coll_id); diff --git a/lib/classes/module/report/connexion.php b/lib/classes/module/report/connexion.php index 0f820b28e1..5de7a838e6 100644 --- a/lib/classes/module/report/connexion.php +++ b/lib/classes/module/report/connexion.php @@ -134,7 +134,8 @@ class module_report_connexion extends module_report public static function getNbConn(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); $collfilter = module_report_sqlfilter::constructCollectionFilter($app, $list_coll_id); diff --git a/lib/classes/module/report/dashboard/feed.php b/lib/classes/module/report/dashboard/feed.php index d6a9d5f413..3bc65d33f7 100644 --- a/lib/classes/module/report/dashboard/feed.php +++ b/lib/classes/module/report/dashboard/feed.php @@ -10,6 +10,7 @@ */ use Alchemy\Phrasea\Application; +use Doctrine\DBAL\DBALException; class module_report_dashboard_feed implements module_report_dashboard_componentInterface { @@ -206,7 +207,7 @@ class module_report_dashboard_feed implements module_report_dashboard_componentI $this->app, $this->dminsql, $this->dmaxsql, $this->sbasid, $this->collection ); } - } catch (PDOException $e) { + } catch (DBALException $e) { } diff --git a/lib/classes/module/report/download.php b/lib/classes/module/report/download.php index 76d54e8207..7d033372dc 100644 --- a/lib/classes/module/report/download.php +++ b/lib/classes/module/report/download.php @@ -171,7 +171,8 @@ class module_report_download extends module_report public static function getNbDl(Application $app, $dmin, $dmax, $sbas_id, $list_coll_id) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $params = [':site_id' => $app['conf']->get(['main', 'key'])]; $datefilter = module_report_sqlfilter::constructDateFilter($dmin, $dmax); diff --git a/lib/classes/module/report/nav.php b/lib/classes/module/report/nav.php index 3b7f6bfa51..29a336529e 100644 --- a/lib/classes/module/report/nav.php +++ b/lib/classes/module/report/nav.php @@ -534,7 +534,8 @@ class module_report_nav extends module_report public function buildTabInfoNav($tab = false, $navigator) { - $conn = connection::getPDOConnection($this->app, $this->sbas_id); + $databox = $this->app['phraseanet.appbox']->get_databox($this->sbas_id); + $conn = $databox->get_connection(); $this->title = $this->app->trans('report:: Information sur le navigateur %name%', ['%name%' => $navigator]); $sqlBuilder = new module_report_sql($this->app, $this); $filter = $sqlBuilder->getFilters(); diff --git a/lib/classes/module/report/sql.php b/lib/classes/module/report/sql.php index a8d2fc3066..970dd1ca03 100644 --- a/lib/classes/module/report/sql.php +++ b/lib/classes/module/report/sql.php @@ -15,13 +15,13 @@ class module_report_sql { /** * - * @var connection_PDO + * @var Connection */ public $conn; /** * - * @var connection_PDO + * @var Connection */ public $connbas; @@ -39,8 +39,8 @@ class module_report_sql public function __construct(Application $app, module_report $report) { - $this->conn = connection::getPDOConnection($app); - $this->connbas = connection::getPDOConnection($app, $report->getSbasId()); + $this->conn = $app['phraseanet.appbox']->get_connection(); + $this->connbas = $app['phraseanet.appbox']->get_databox($report->getSbasId())->get_connection(); $this->filter = new module_report_sqlfilter($app, $report); $this->sql = ''; $this->params = []; @@ -118,7 +118,7 @@ class module_report_sql /** * - * @return connection_PDO + * @return Connection */ public function getConnBas() { diff --git a/lib/classes/module/report/sqlfilter.php b/lib/classes/module/report/sqlfilter.php index 11ecb12c36..00f287b8c0 100644 --- a/lib/classes/module/report/sqlfilter.php +++ b/lib/classes/module/report/sqlfilter.php @@ -22,7 +22,7 @@ class module_report_sqlfilter public function __construct(Application $app, module_report $report) { $this->app = $app; - $this->conn = connection::getPDOConnection($app, $report->getSbasid()); + $this->conn = $app['phraseanet.appbox']->get_databox($report->getSbasId())->get_connection(); if (is_array($report->getTransQueryString())) $this->cor_query = $report->getTransQueryString(); diff --git a/lib/classes/patch/320alpha4a.php b/lib/classes/patch/320alpha4a.php index c37ff9cdec..aa8fe219e6 100644 --- a/lib/classes/patch/320alpha4a.php +++ b/lib/classes/patch/320alpha4a.php @@ -116,7 +116,7 @@ class patch_320alpha4a implements patchInterface $databox->delete_data_from_cache(databox::CACHE_STRUCTURE); $databox->delete_data_from_cache(databox::CACHE_META_STRUCT); - $conn = connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $sql = 'DELETE FROM `task2` WHERE class="readmeta"'; $stmt = $conn->prepare($sql); diff --git a/lib/classes/patch/360alpha1b.php b/lib/classes/patch/360alpha1b.php index 3c8a11b756..5b2dd6b5ad 100644 --- a/lib/classes/patch/360alpha1b.php +++ b/lib/classes/patch/360alpha1b.php @@ -10,6 +10,7 @@ */ use Alchemy\Phrasea\Application; +use Doctrine\DBAL\DBALException; class patch_360alpha1b implements patchInterface { @@ -62,7 +63,7 @@ class patch_360alpha1b implements patchInterface $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); - } catch (\PDOException $e) { + } catch (DBALException $e) { } diff --git a/lib/classes/patch/360alpha2b.php b/lib/classes/patch/360alpha2b.php index 27032d583d..9ee14ac99f 100644 --- a/lib/classes/patch/360alpha2b.php +++ b/lib/classes/patch/360alpha2b.php @@ -10,6 +10,7 @@ */ use Alchemy\Phrasea\Application; +use Doctrine\DBAL\DBALException; class patch_360alpha2b implements patchInterface { @@ -78,7 +79,7 @@ class patch_360alpha2b implements patchInterface $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); - } catch (\Exception $e) { + } catch (DBALException $e) { } @@ -88,7 +89,7 @@ class patch_360alpha2b implements patchInterface $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); $stmt->closeCursor(); - } catch (\PDOException $e) { + } catch (DBALException $e) { } diff --git a/lib/classes/patch/361alpha1a.php b/lib/classes/patch/361alpha1a.php index 694c0099ba..59d0615937 100644 --- a/lib/classes/patch/361alpha1a.php +++ b/lib/classes/patch/361alpha1a.php @@ -69,7 +69,7 @@ class patch_361alpha1a implements patchInterface $sbas_id = (int) $row['sbas_id']; try { - $connbas = connection::getPDOConnection($app, $sbas_id); + $connbas = $app['phraseanet.appbox']->get_databox($sbas_id)->get_connection()->connect(); } catch (\Exception $e) { $conn->exec('DELETE FROM ValidationDatas WHERE basket_element_id = ' . $row['id']); $conn->exec('DELETE FROM BasketElements WHERE id = ' . $row['id']); diff --git a/lib/classes/patch/370alpha7a.php b/lib/classes/patch/370alpha7a.php index fbe13f784e..76038a7fa2 100644 --- a/lib/classes/patch/370alpha7a.php +++ b/lib/classes/patch/370alpha7a.php @@ -12,6 +12,7 @@ use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Model\Entities\LazaretFile; use Alchemy\Phrasea\Model\Entities\LazaretSession; +use Doctrine\DBAL\DBALException; use MediaAlchemyst\Exception\ExceptionInterface as MediaAlchemystException; use MediaAlchemyst\Specification\Image as ImageSpec; @@ -68,7 +69,7 @@ class patch_370alpha7a extends patchAbstract $stmt = $conn->prepare($sql); $stmt->execute(); $rs = $stmt->fetchAll(); - } catch (\PDOException $e) { + } catch (DBALException $e) { // table not found if ($e->getCode() == '42S02') { diff --git a/lib/classes/patch/380alpha11a.php b/lib/classes/patch/380alpha11a.php index 581ed6e401..60810aa83e 100644 --- a/lib/classes/patch/380alpha11a.php +++ b/lib/classes/patch/380alpha11a.php @@ -12,6 +12,7 @@ use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Model\Entities\Session; use Alchemy\Phrasea\Model\Entities\SessionModule; +use Doctrine\DBAL\DBALException; class patch_380alpha11a extends patchAbstract { @@ -66,7 +67,7 @@ class patch_380alpha11a extends patchAbstract $stmt->execute(); $rs = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); - } catch (\PDOException $e) { + } catch (DBALException $e) { // this may fail on oldest versions return false; } diff --git a/lib/classes/patchthesaurus/100.php b/lib/classes/patchthesaurus/100.php index 814d7041ed..cf622e9fd1 100644 --- a/lib/classes/patchthesaurus/100.php +++ b/lib/classes/patchthesaurus/100.php @@ -9,9 +9,11 @@ * file that was distributed with this source code. */ +use Doctrine\DBAL\Connection; + class patchthesaurus_100 implements patchthesaurus_interface { - public function patch($version, \DOMDocument $domct, \DOMDocument $domth, \connection_interface $connbas, \unicode $unicode) + public function patch($version, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas, \unicode $unicode) { if ($version == "") { $th = $domth->documentElement; diff --git a/lib/classes/patchthesaurus/200.php b/lib/classes/patchthesaurus/200.php index 79fc41c854..bf55ae546e 100644 --- a/lib/classes/patchthesaurus/200.php +++ b/lib/classes/patchthesaurus/200.php @@ -9,9 +9,11 @@ * file that was distributed with this source code. */ +use Doctrine\DBAL\Connection; + class patchthesaurus_200 implements patchthesaurus_interface { - public function patch($version, \DOMDocument $domct, \DOMDocument $domth, \connection_interface $connbas, \unicode $unicode) + public function patch($version, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas, \unicode $unicode) { if ($version == "2.0.0") { $th = $domth->documentElement; diff --git a/lib/classes/patchthesaurus/201.php b/lib/classes/patchthesaurus/201.php index 4a37b0ac57..33d73c8b7e 100644 --- a/lib/classes/patchthesaurus/201.php +++ b/lib/classes/patchthesaurus/201.php @@ -9,9 +9,11 @@ * file that was distributed with this source code. */ +use Doctrine\DBAL\Connection; + class patchthesaurus_201 implements patchthesaurus_interface { - public function patch($version, \DOMDocument $domct, \DOMDocument $domth, \connection_interface $connbas, \unicode $unicode) + public function patch($version, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas, \unicode $unicode) { if ($version == "2.0.1") { $th = $domth->documentElement; diff --git a/lib/classes/patchthesaurus/202.php b/lib/classes/patchthesaurus/202.php index ee6243994a..61d1d89803 100644 --- a/lib/classes/patchthesaurus/202.php +++ b/lib/classes/patchthesaurus/202.php @@ -9,9 +9,11 @@ * file that was distributed with this source code. */ +use Doctrine\DBAL\Connection; + class patchthesaurus_202 implements patchthesaurus_interface { - public function patch($version, \DOMDocument $domct, \DOMDocument $domth, \connection_interface $connbas, \unicode $unicode) + public function patch($version, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas, \unicode $unicode) { if ($version == "2.0.2") { $th = $domth->documentElement; diff --git a/lib/classes/patchthesaurus/203.php b/lib/classes/patchthesaurus/203.php index dba63b13db..19b6573933 100644 --- a/lib/classes/patchthesaurus/203.php +++ b/lib/classes/patchthesaurus/203.php @@ -9,9 +9,11 @@ * file that was distributed with this source code. */ +use Doctrine\DBAL\Connection; + class patchthesaurus_203 implements patchthesaurus_interface { - public function patch($version, \DOMDocument $domct, \DOMDocument $domth, \connection_interface $connbas, \unicode $unicode) + public function patch($version, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas, \unicode $unicode) { $needreindex = false; @@ -93,7 +95,7 @@ class patchthesaurus_203 implements patchthesaurus_interface return($version); } - public function fixRejected(connection_pdo &$connbas, &$node, $rejected) + public function fixRejected(Connection $connbas, &$node, $rejected) { if ($node->nodeType != XML_ELEMENT_NODE) { return; @@ -123,7 +125,7 @@ class patchthesaurus_203 implements patchthesaurus_interface $this->fixRejected($connbas, $n, $rejected); } - public function fixIds(connection_pdo &$connbas, &$node) + public function fixIds(Connection $connbas, &$node) { if ($node->nodeType != XML_ELEMENT_NODE) { return; diff --git a/lib/classes/patchthesaurus/204.php b/lib/classes/patchthesaurus/204.php index 33c85fbe28..d8fe645dd5 100644 --- a/lib/classes/patchthesaurus/204.php +++ b/lib/classes/patchthesaurus/204.php @@ -9,9 +9,11 @@ * file that was distributed with this source code. */ +use Doctrine\DBAL\Connection; + class patchthesaurus_204 implements patchthesaurus_interface { - public function patch($version, \DOMDocument $domct, \DOMDocument $domth, \connection_interface $connbas, \unicode $unicode) + public function patch($version, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas, \unicode $unicode) { $needreindex = false; @@ -95,7 +97,7 @@ class patchthesaurus_204 implements patchthesaurus_interface return($version); } - public function fixRejected(connection_pdo &$connbas, &$node, $rejected) + public function fixRejected(Connection &$connbas, &$node, $rejected) { if ($node->nodeType != XML_ELEMENT_NODE) { return; @@ -125,7 +127,7 @@ class patchthesaurus_204 implements patchthesaurus_interface $this->fixRejected($connbas, $n, $rejected); } - public function fixIds(connection_pdo &$connbas, &$node) + public function fixIds(Connection $connbas, &$node) { if ($node->nodeType != XML_ELEMENT_NODE) { return; diff --git a/lib/classes/patchthesaurus/interface.php b/lib/classes/patchthesaurus/interface.php index a87fee7a8d..e332c477cb 100644 --- a/lib/classes/patchthesaurus/interface.php +++ b/lib/classes/patchthesaurus/interface.php @@ -9,7 +9,9 @@ * file that was distributed with this source code. */ +use Doctrine\DBAL\Connection; + interface patchthesaurus_interface { - public function patch($version, \DOMDocument $domct, \DOMDocument $domth, \connection_interface $connbas, \unicode $unicode); + public function patch($version, \DOMDocument $domct, \DOMDocument $domth, Connection $connbas, \unicode $unicode); } diff --git a/lib/classes/phrasea.php b/lib/classes/phrasea.php index a1dc39eb7a..408d294a04 100644 --- a/lib/classes/phrasea.php +++ b/lib/classes/phrasea.php @@ -119,7 +119,7 @@ class phrasea public static function baseFromColl($sbas_id, $coll_id, Application $app) { if (!self::$_coll2bas) { - $conn = connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $sql = 'SELECT base_id, server_coll_id, sbas_id FROM bas'; $stmt = $conn->prepare($sql); $stmt->execute(); @@ -169,7 +169,7 @@ class phrasea public static function collFromBas(Application $app, $base_id) { if (!self::$_bas2coll) { - $conn = connection::getPDOConnection($app); + $conn = $app['phraseanet.appbox']->get_connection(); $sql = 'SELECT base_id, server_coll_id FROM bas'; $stmt = $conn->prepare($sql); $stmt->execute(); diff --git a/lib/classes/random.php b/lib/classes/random.php index 656228ee4e..68eb88e72d 100644 --- a/lib/classes/random.php +++ b/lib/classes/random.php @@ -48,7 +48,7 @@ class random public function cleanTokens() { try { - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $date = new DateTime(); $date = $this->app['date-formatter']->format_mysql($date); @@ -120,7 +120,7 @@ class random public function getUrlToken($type, $usr, DateTime $end_date = null, $datas = '') { $this->cleanTokens(); - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $token = $test = false; switch ($type) { @@ -178,7 +178,7 @@ class random $this->cleanTokens(); try { - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $sql = 'DELETE FROM tokens WHERE value = :token'; $stmt = $conn->prepare($sql); $stmt->execute([':token' => $token]); @@ -195,7 +195,7 @@ class random public function updateToken($token, $datas) { try { - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $sql = 'UPDATE tokens SET datas = :datas WHERE value = :token'; @@ -216,7 +216,7 @@ class random { $this->cleanTokens(); - $conn = connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $sql = 'SELECT * FROM tokens WHERE value = :token AND (expire_on > NOW() OR expire_on IS NULL)'; @@ -243,7 +243,7 @@ class random */ public function getValidationToken($userId, $basketId) { - $conn = \connection::getPDOConnection($this->app); + $conn = $this->app['phraseanet.appbox']->get_connection(); $sql = ' SELECT value FROM tokens WHERE type = :type diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index 2088a2547e..00fb8376fc 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -295,7 +295,8 @@ class record_adapter implements record_Interface, cache_cacheableInterface throw new Exception('unrecognized document type'); } - $connbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connbas = $databox->get_connection(); $sql = 'UPDATE record SET type = :type WHERE record_id = :record_id'; $stmt = $connbas->prepare($sql); @@ -1099,7 +1100,8 @@ class record_adapter implements record_Interface, cache_cacheableInterface */ public function rebuild_subdefs() { - $connbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connbas = $databox->get_connection(); $sql = 'UPDATE record SET jeton=(jeton | ' . JETON_MAKE_SUBDEF . ') WHERE record_id = :record_id'; $stmt = $connbas->prepare($sql); $stmt->execute([':record_id' => $this->get_record_id()]); @@ -1113,7 +1115,8 @@ class record_adapter implements record_Interface, cache_cacheableInterface */ public function write_metas() { - $connbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connbas = $databox->get_connection(); $sql = 'UPDATE record SET jeton = ' . (JETON_WRITE_META_DOC | JETON_WRITE_META_SUBDEF) . ' WHERE record_id= :record_id'; @@ -1130,7 +1133,8 @@ class record_adapter implements record_Interface, cache_cacheableInterface */ public function set_binary_status($status) { - $connbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connbas = $databox->get_connection(); $sql = 'UPDATE record SET status = 0b' . $status . ' WHERE record_id= :record_id'; @@ -1333,7 +1337,8 @@ class record_adapter implements record_Interface, cache_cacheableInterface */ public static function get_record_by_sha(Application $app, $sbas_id, $sha256, $record_id = null) { - $conn = connection::getPDOConnection($app, $sbas_id); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + $conn = $databox->get_connection(); $sql = "SELECT record_id FROM record r @@ -1583,7 +1588,8 @@ class record_adapter implements record_Interface, cache_cacheableInterface public function log_view($log_id, $referrer, $gv_sit) { - $connbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connbas = $databox->get_connection(); $sql = 'INSERT INTO log_view (id, log_id, date, record_id, referrer, site_id) VALUES diff --git a/lib/classes/record/preview.php b/lib/classes/record/preview.php index a24a7fbd0a..355397faee 100644 --- a/lib/classes/record/preview.php +++ b/lib/classes/record/preview.php @@ -328,7 +328,8 @@ class record_preview extends record_adapter $report = $this->app['acl']->get($this->app['authentication']->getUser())->has_right_on_base($this->get_base_id(), 'canreport'); - $connsbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connsbas = $databox->get_connection(); $sql = 'SELECT d . * , l.user, l.usrid as usr_id, l.site FROM log_docs d, log l @@ -431,7 +432,8 @@ class record_preview extends record_adapter AND site_id = :site GROUP BY datee ORDER BY datee ASC'; - $connsbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connsbas = $databox->get_connection(); $stmt = $connsbas->prepare($sql); $stmt->execute( [ @@ -499,7 +501,8 @@ class record_preview extends record_adapter return $this->refferer_popularity; } - $connsbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connsbas = $databox->get_connection(); $sql = 'SELECT count( id ) AS views, referrer FROM `log_view` @@ -592,7 +595,8 @@ class record_preview extends record_adapter AND site= :site GROUP BY datee ORDER BY datee ASC'; - $connsbas = connection::getPDOConnection($this->app, $this->get_sbas_id()); + $databox = $this->app['phraseanet.appbox']->get_databox($this->get_sbas_id()); + $connsbas = $databox->get_connection(); $stmt = $connsbas->prepare($sql); $stmt->execute( [ diff --git a/tests/Alchemy/Tests/Phrasea/Command/Setup/InstallTest.php b/tests/Alchemy/Tests/Phrasea/Command/Setup/InstallTest.php index 24dcd99032..8229480097 100644 --- a/tests/Alchemy/Tests/Phrasea/Command/Setup/InstallTest.php +++ b/tests/Alchemy/Tests/Phrasea/Command/Setup/InstallTest.php @@ -84,7 +84,7 @@ class InstallTest extends \PhraseanetTestCase self::$DI['cli']['phraseanet.installer']->expects($this->once()) ->method('install') - ->with($email, $password, $this->isInstanceOf('\connection_interface'), $serverName, $dataPath, $this->isInstanceOf('\connection_interface'), $template, $this->anything()); + ->with($email, $password, $this->isInstanceOf('Doctrine\DBAL\Connection'), $serverName, $dataPath, $this->isInstanceOf('Doctrine\DBAL\Connection'), $template, $this->anything()); $command = new Install('system:check'); $command->setHelperSet($helperSet); diff --git a/tests/Alchemy/Tests/Phrasea/Command/Setup/XSendFileMappingGeneratorTest.php b/tests/Alchemy/Tests/Phrasea/Command/Setup/XSendFileMappingGeneratorTest.php index c26e9ae371..4d27ad3a66 100644 --- a/tests/Alchemy/Tests/Phrasea/Command/Setup/XSendFileMappingGeneratorTest.php +++ b/tests/Alchemy/Tests/Phrasea/Command/Setup/XSendFileMappingGeneratorTest.php @@ -29,11 +29,23 @@ class XSendFileMappingGeneratorTest extends \PhraseanetTestCase self::$DI['cli']['monolog'] = self::$DI['cli']->share(function () { return $this->getMockBuilder('Monolog\Logger')->disableOriginalConstructor()->getMock(); }); - self::$DI['cli']['conf'] = $this->getMockBuilder('Alchemy\Phrasea\Core\Configuration\PropertyAccess') + + $originalConf = self::$DI['cli']['conf']; + $conf = $this->getMockBuilder('Alchemy\Phrasea\Core\Configuration\PropertyAccess') ->disableOriginalConstructor() ->getMock(); - if ($option) { + $conf->expects($this->any()) + ->method('get') + ->will($this->returnCallback(function ($property) use ($originalConf) { + switch ($property) { + case ['main', 'database']: + return $originalConf->get($property); + break; + } + })); + self::$DI['cli']['conf'] = $conf; + if ($option) { self::$DI['cli']['conf']->expects($this->once()) ->method('set') ->with('xsendfile'); diff --git a/tests/Alchemy/Tests/Phrasea/Setup/AbstractSetupTester.php b/tests/Alchemy/Tests/Phrasea/Setup/AbstractSetupTester.php index da4aa67b19..6cb7bcc74c 100644 --- a/tests/Alchemy/Tests/Phrasea/Setup/AbstractSetupTester.php +++ b/tests/Alchemy/Tests/Phrasea/Setup/AbstractSetupTester.php @@ -29,7 +29,7 @@ abstract class AbstractSetupTester extends \PhraseanetTestCase protected function goBackTo31() { $app = new Application('test'); - $credentials = $app['phraseanet.appbox']->get_connection()->get_credentials(); + $conn = $app['phraseanet.appbox']->get_connection(); $this->uninstall(); @@ -38,10 +38,10 @@ abstract class AbstractSetupTester extends \PhraseanetTestCase file_put_contents( __DIR__ . '/../../../../../config/_GV.php', str_replace('http://local.phrasea/', 'http://local.phrasea.tester/', file_get_contents( __DIR__ . '/../../../../../config/_GV.php'))); file_put_contents(__DIR__ . '/../../../../../config/connexion.inc', "getHost()."'; +\$port = '".$conn->getPort()."'; +\$user = '".$conn->getUsername()."'; +\$password = '".$conn->getPassword()."'; \$dbname = 'ab_unitTests'; "); @@ -54,17 +54,17 @@ abstract class AbstractSetupTester extends \PhraseanetTestCase protected function goBackTo35() { $app = new Application('test'); - $credentials = $app['phraseanet.appbox']->get_connection()->get_credentials(); + $conn = $app['phraseanet.appbox']->get_connection(); $this->uninstall(); file_put_contents(__DIR__ . '/../../../../../config/config.inc', "getHost()."'; +\$port = '".$conn->getPort()."'; +\$user = '".$conn->getUsername()."'; +\$password = '".$conn->getPassword()."'; +\$dbname = '".$conn->getDatabase()."'; "); $this->tearDownHandlers[] = function () { diff --git a/tests/Alchemy/Tests/Phrasea/Setup/InstallerTest.php b/tests/Alchemy/Tests/Phrasea/Setup/InstallerTest.php index 2033eee439..ca4a2dc4f7 100644 --- a/tests/Alchemy/Tests/Phrasea/Setup/InstallerTest.php +++ b/tests/Alchemy/Tests/Phrasea/Setup/InstallerTest.php @@ -15,19 +15,16 @@ class InstallerTest extends \PhraseanetTestCase public function setUp() { parent::setUp(); - \connection::close_connections(); } public function tearDown() { - \connection::close_connections(); parent::tearDown(); } public static function tearDownAfterClass() { $app = new Application('test'); - \connection::close_connections(); \phrasea::reset_sbasDatas($app['phraseanet.appbox']); \phrasea::reset_baseDatas($app['phraseanet.appbox']); parent::tearDownAfterClass(); @@ -53,8 +50,22 @@ class InstallerTest extends \PhraseanetTestCase $app['configuration.store'] = new Configuration(new Yaml(), new Compiler(), $config, $compiled, true); - $abConn = new \connection_pdo('abConn', 'localhost', 3306, $credentials['user'], $credentials['password'], 'ab_unitTests'); - $dbConn = new \connection_pdo('dbConn', 'localhost', 3306, $credentials['user'], $credentials['password'], 'db_unitTests'); + $abConn = self::$DI['app']['dbal.provider']->get([ + 'host' => 'localhost', + 'port' => 3306, + 'user' => $credentials['user'], + 'password' => $credentials['password'], + 'dbname' => 'ab_unitTests', + ]); + $abConn->connect(); + $dbConn = self::$DI['app']['dbal.provider']->get([ + 'host' => 'localhost', + 'port' => 3306, + 'user' => $credentials['user'], + 'password' => $credentials['password'], + 'dbname' => 'db_unitTests', + ]); + $dbConn->connect(); $template = 'en'; $dataPath = __DIR__ . '/../../../../../datas/'; diff --git a/tests/classes/PhraseanetAuthenticatedWebTestCase.php b/tests/classes/PhraseanetAuthenticatedWebTestCase.php index 8f8e75f5cd..91a9d38684 100644 --- a/tests/classes/PhraseanetAuthenticatedWebTestCase.php +++ b/tests/classes/PhraseanetAuthenticatedWebTestCase.php @@ -1,5 +1,6 @@ get([ + 'host' => $connexion['host'], + 'port' => $connexion['port'], + 'user' => $connexion['user'], + 'password' => $connexion['password'], + 'dbname' => 'unit_test_db', + ]); + $conn->connect(); + } catch (DBALException $e) { $this->markTestSkipped('Could not reach DB'); } diff --git a/tests/classes/PhraseanetTestCase.php b/tests/classes/PhraseanetTestCase.php index 02a9f0c8b5..96e1b33866 100644 --- a/tests/classes/PhraseanetTestCase.php +++ b/tests/classes/PhraseanetTestCase.php @@ -70,6 +70,10 @@ abstract class PhraseanetTestCase extends WebTestCase { parent::setUp(); + if (null !== self::$DI) { + unset(self::$DI['app']['dbal.provider']); + } + self::$DI = new \Pimple(); ini_set('memory_limit', '4096M'); diff --git a/tests/classes/collectionTest.php b/tests/classes/collectionTest.php index 2f60edd634..0949bbd416 100644 --- a/tests/classes/collectionTest.php +++ b/tests/classes/collectionTest.php @@ -112,7 +112,7 @@ class collectionTest extends \PhraseanetAuthenticatedTestCase public function testGet_connection() { - $this->assertInstanceOf('connection_pdo', self::$object->get_connection()); + $this->assertInstanceOf('Doctrine\DBAL\Connection', self::$object->get_connection()); } /** diff --git a/tests/classes/databox/fieldTest.php b/tests/classes/databox/fieldTest.php index 9519023017..09f8927f10 100644 --- a/tests/classes/databox/fieldTest.php +++ b/tests/classes/databox/fieldTest.php @@ -70,8 +70,8 @@ class databox_fieldTest extends \PhraseanetTestCase public function testGet_connection() { - $this->assertInstanceOf('\connection_pdo', $this->object_mono->get_connection()); - $this->assertInstanceOf('\connection_pdo', $this->object_multi->get_connection()); + $this->assertInstanceOf('Doctrine\DBAL\Connection', $this->object_mono->get_connection()); + $this->assertInstanceOf('Doctrine\DBAL\Connection', $this->object_multi->get_connection()); } public function testGet_databox() diff --git a/tests/classes/report/sqlActionTest.php b/tests/classes/report/sqlActionTest.php index 557dc20bcd..b5f5a4e7e9 100644 --- a/tests/classes/report/sqlActionTest.php +++ b/tests/classes/report/sqlActionTest.php @@ -10,6 +10,9 @@ class report_sqlActionTest extends \PhraseanetAuthenticatedTestCase parent::setUp(); $this->mock = $this->getMock('module_report', [], [], '', false); + $this->mock->expects($this->any()) + ->method('getSbasId') + ->will($this->returnValue(self::$DI['collection']->get_databox()->get_sbas_id())); $this->action = new module_report_sqlaction(self::$DI['app'], $this->mock); } diff --git a/tests/classes/report/sqlTest.php b/tests/classes/report/sqlTest.php index 56bb099eaa..4d824b8da8 100644 --- a/tests/classes/report/sqlTest.php +++ b/tests/classes/report/sqlTest.php @@ -7,6 +7,9 @@ class report_sqlTest extends \PhraseanetAuthenticatedTestCase { parent::setUp(); $report = $this->getMock('module_report', [], [], '', false); + $report->expects($this->any()) + ->method('getSbasId') + ->will($this->returnValue(self::$DI['collection']->get_databox()->get_sbas_id())); $this->sql = new module_report_sql(self::$DI['app'], $report); }