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);
}