aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-08-09 19:58:39 +0200
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2014-08-09 19:58:39 +0200
commitd477373ef2879bdeeaa3c157287c0fab98afefdc (patch)
tree14117dc0d2a8b1fd8124be3127eaf74b1a046d3b
parent737b206d8cc0819efb11beb9a3ad341827a29290 (diff)
SQLite: Bug creation new users
Not tested much yet. Some MySQL parts changed a bit too to double-check. https://github.com/marienfressinaud/FreshRSS/issues/574
-rw-r--r--app/Models/UserDAO.php35
-rw-r--r--app/SQL/install.sql.sqlite.php1
-rw-r--r--lib/Minz/ModelPdo.php20
3 files changed, 35 insertions, 21 deletions
diff --git a/app/Models/UserDAO.php b/app/Models/UserDAO.php
index 1763fac67..9f64fb4a7 100644
--- a/app/Models/UserDAO.php
+++ b/app/Models/UserDAO.php
@@ -4,18 +4,21 @@ class FreshRSS_UserDAO extends Minz_ModelPdo {
public function createUser($username) {
$db = Minz_Configuration::dataBase();
require_once(APP_PATH . '/SQL/install.sql.' . $db['type'] . '.php');
-
- if (defined('SQL_CREATE_TABLES')) {
+
+ $userPDO = new Minz_ModelPdo($username);
+
+ $ok = false;
+ if (defined('SQL_CREATE_TABLES')) { //E.g. MySQL
$sql = sprintf(SQL_CREATE_TABLES, $db['prefix'] . $username . '_', Minz_Translate::t('default_category'));
- $stm = $this->bd->prepare($sql);
+ $stm = $userPDO->bd->prepare($sql);
$ok = $stm && $stm->execute();
- } else {
+ } else { //E.g. SQLite
global $SQL_CREATE_TABLES;
if (is_array($SQL_CREATE_TABLES)) {
$ok = true;
foreach ($SQL_CREATE_TABLES as $instruction) {
$sql = sprintf($instruction, '', Minz_Translate::t('default_category'));
- $stm = $c->prepare($sql);
+ $stm = $userPDO->bd->prepare($sql);
$ok &= ($stm && $stm->execute());
}
}
@@ -24,7 +27,7 @@ class FreshRSS_UserDAO extends Minz_ModelPdo {
if ($ok) {
return true;
} else {
- $info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
+ $info = empty($stm) ? array(2 => 'syntax error') : $stm->errorInfo();
Minz_Log::record ('SQL error : ' . $info[2], Minz_Log::ERROR);
return false;
}
@@ -34,14 +37,20 @@ class FreshRSS_UserDAO extends Minz_ModelPdo {
$db = Minz_Configuration::dataBase();
require_once(APP_PATH . '/SQL/install.sql.' . $db['type'] . '.php');
- $sql = sprintf(SQL_DROP_TABLES, $db['prefix'] . $username . '_');
- $stm = $this->bd->prepare($sql);
- if ($stm && $stm->execute()) {
- return true;
+ if ($db['type'] === 'sqlite') {
+ return unlink(DATA_PATH . '/' . $username . '.sqlite');
} else {
- $info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
- Minz_Log::record ('SQL error : ' . $info[2], Minz_Log::ERROR);
- return false;
+ $userPDO = new Minz_ModelPdo($username);
+
+ $sql = sprintf(SQL_DROP_TABLES, $db['prefix'] . $username . '_');
+ $stm = $userPDO->bd->prepare($sql);
+ if ($stm && $stm->execute()) {
+ return true;
+ } else {
+ $info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
+ Minz_Log::record ('SQL error : ' . $info[2], Minz_Log::ERROR);
+ return false;
+ }
}
}
}
diff --git a/app/SQL/install.sql.sqlite.php b/app/SQL/install.sql.sqlite.php
index b90a5ef5e..7988ada04 100644
--- a/app/SQL/install.sql.sqlite.php
+++ b/app/SQL/install.sql.sqlite.php
@@ -1,4 +1,5 @@
<?php
+global $SQL_CREATE_TABLES;
$SQL_CREATE_TABLES = array(
'CREATE TABLE IF NOT EXISTS `%1$scategory` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
diff --git a/lib/Minz/ModelPdo.php b/lib/Minz/ModelPdo.php
index 1f56f09c2..45a1e9451 100644
--- a/lib/Minz/ModelPdo.php
+++ b/lib/Minz/ModelPdo.php
@@ -33,8 +33,8 @@ class Minz_ModelPdo {
* Créé la connexion à la base de données à l'aide des variables
* HOST, BASE, USER et PASS définies dans le fichier de configuration
*/
- public function __construct() {
- if (self::$useSharedBd && self::$sharedBd != null) {
+ public function __construct($currentUser = null) {
+ if (self::$useSharedBd && self::$sharedBd != null && $currentUser === null) {
$this->bd = self::$sharedBd;
$this->prefix = self::$sharedPrefix;
return;
@@ -42,6 +42,10 @@ class Minz_ModelPdo {
$db = Minz_Configuration::dataBase();
+ if ($currentUser === null) {
+ $currentUser = Minz_Session::param('currentUser', '_');
+ }
+
try {
$type = $db['type'];
if ($type === 'mysql') {
@@ -51,9 +55,9 @@ class Minz_ModelPdo {
$driver_options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
- $this->prefix = $db['prefix'] . Minz_Session::param('currentUser', '_') . '_';
+ $this->prefix = $db['prefix'] . $currentUser . '_';
} elseif ($type === 'sqlite') {
- $string = 'sqlite:' . DATA_PATH . '/' . Minz_Session::param('currentUser', '_') . '.sqlite';
+ $string = 'sqlite:' . DATA_PATH . '/' . $currentUser . '.sqlite';
$driver_options = array(
//PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);
@@ -67,7 +71,7 @@ class Minz_ModelPdo {
self::$sharedDbType = $type;
self::$sharedPrefix = $this->prefix;
- $this->bd = new FreshPDO(
+ $this->bd = new MinzPDO(
$string,
$db['user'],
$db['password'],
@@ -98,7 +102,7 @@ class Minz_ModelPdo {
}
}
-class FreshPDO extends PDO {
+class MinzPDO extends PDO {
private static function check($statement) {
if (preg_match('/^(?:UPDATE|INSERT|DELETE)/i', $statement)) {
invalidateHttpCache();
@@ -106,12 +110,12 @@ class FreshPDO extends PDO {
}
public function prepare($statement, $driver_options = array()) {
- FreshPDO::check($statement);
+ MinzPDO::check($statement);
return parent::prepare($statement, $driver_options);
}
public function exec($statement) {
- FreshPDO::check($statement);
+ MinzPDO::check($statement);
return parent::exec($statement);
}
}