diff --git a/inc/Storage.class.php b/inc/Storage.class.php
index fbd6c9d..ecc6fa5 100644
--- a/inc/Storage.class.php
+++ b/inc/Storage.class.php
@@ -28,7 +28,7 @@ class Storage {
break;
case 'key':
- $return = 'INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY';
+ $return = 'INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY';
break;
case 'float':
@@ -117,7 +117,7 @@ class Storage {
$value_array = substr($value_array, 2);
elseif(substr($value_array, 0, 1) == ">" || substr($value_array, 0, 1) == "<")
$value_array = substr($value_array, 1);
-
+
$query->bindValue(':'.$field.$key, $value_array);
}
}
@@ -162,7 +162,7 @@ class Storage {
$query .= ' WHERE id='.$this->id;
}
else {
- $query = 'INSERT INTO '.MYSQL_PREFIX.$this->TABLE_NAME.'(';
+ $query = 'INSERT IGNORE INTO '.MYSQL_PREFIX.$this->TABLE_NAME.'(';
$i = false;
foreach($this->fields as $field=>$type) {
@@ -172,11 +172,11 @@ class Storage {
}
$query .= ') VALUES(';
-
+
$i = false;
foreach($this->fields as $field=>$type) {
if($i) { $query .= ','; } else { $i = true; }
-
+
$query .= ':'.$field;
}
@@ -194,7 +194,7 @@ class Storage {
$query->bindValue(':'.$field, $value);
}
-
+
$query->execute();
(empty($this->id) ? $this->setId($this->connection->lastInsertId()) : $this->setId($this->id));
@@ -209,7 +209,7 @@ class Storage {
foreach($this->fields as $field=>$type) {
if(!empty($this->$field)) {
if($i) { $query .= ' AND '; } else { $i = true; }
-
+
$query .= $field.'=:'.$field;
}
}
diff --git a/inc/User.class.php b/inc/User.class.php
index ce1a263..81a5f0d 100644
--- a/inc/User.class.php
+++ b/inc/User.class.php
@@ -101,7 +101,7 @@ class User extends Storage {
case 2: // Global paybacks only
$this->notifications = 2;
break;
-
+
case 3: // Everything concerning you
$this->notifications = 3;
break;
@@ -137,7 +137,7 @@ class User extends Storage {
public function exists() {
$user_data = $this->load(array('login'=>$this->login), true);
- if(count($user_data) == 1) {
+ if(count($user_data) == 1) {
return $user_data;
}
else {
@@ -173,7 +173,7 @@ class User extends Storage {
$this->setStaySignedInToken($user_data['stay_signed_in_token']);
}
- // Check wether a user already exists or not
+ // Check wether a user already exists or not
// (a user = a unique login and display_name)
// =========================================
public function isUnique() {
diff --git a/inc/functions.php b/inc/functions.php
index dde3b77..16707c5 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -71,7 +71,7 @@
if ($handle = opendir($dir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".." && $entry != 'json' && is_dir($dir.$entry)) {
- $return[] = array('value'=>$entry, 'option'=>str_replace(array('_en', '_fr'), array(' (English)', ' (French)'), $entry));
+ $return[] = array('value'=>$entry.'/', 'option'=>$entry);
}
}
closedir($handle);
diff --git a/install.php b/install.php
index 68806c3..a058a08 100644
--- a/install.php
+++ b/install.php
@@ -1,5 +1,6 @@
Your Bouffe@Ulm instance is already configured. You should either delete data/config.php to access this page or delete the install.php for security reasons if you are ok with the configuration. Go to your instance.
');
@@ -13,49 +14,97 @@
$block_form = true;
}
if(!is_writable('tmp/')) {
- $error = "The script seems to be unable to write to tmp/ folder (to store the cached files for templates). You should give write (chmod 777 -R tmp/.";
+ $error = "The script seems to be unable to write to tmp/ folder (to store the cached files for templates). You should give write access to this folder.";
$block_form = true;
}
if(!is_writable('db_backups/')) {
- $error = "The script seems to be unable to write to db_backups/ folder (to write the database backups). You should give write access.";
+ $error = "The script seems to be unable to write to db_backups/ folder (to write the database backups). You should give write access to this folder.";
$block_form = true;
}
- if(!empty($_POST['mysql_host']) && !empty($_POST['mysql_login']) && !empty($_POST['mysql_db']) && !empty($_POST['admin_login']) && !empty($_POST['admin_password']) && !empty($_POST['currency']) && !empty($_POST['instance_title']) && !empty($_POST['base_url']) && !empty($_POST['timezone']) && !empty($_POST['email_webmaster']) && check_token(600, 'install') && !empty($_POST['lang'])) {
- $mysql_host = $_POST['mysql_host'];
- $mysql_login = $_POST['mysql_login'];
- $mysql_db = $_POST['mysql_db'];
- $mysql_password = $_POST['mysql_password'];
+ if(!empty($_POST['mysql_host']) && !empty($_POST['mysql_login']) && !empty($_POST['mysql_password']) && !empty($_POST['mysql_db']) && !empty($_POST['instance_title']) && !empty($_POST['base_url']) && !empty($_POST['currency']) && !empty($_POST['timezone']) && !empty($_POST['lang']) && !empty($_POST['template']) && !empty($_POST['admin_login']) && !empty($_POST['admin_password']) && check_token(600, 'install')) {
$mysql_prefix = (!empty($_POST['mysql_prefix'])) ? $_POST['mysql_prefix'] : '';
- $instance_title = (!empty($_POST['instance_title'])) ? $_POST['instance_title'] : 'Bouffe@Ulm';
+ $current_template = $_POST['template'];
try {
- $db = new PDO('mysql:host='.$mysql_host.';dbname='.$mysql_db, $mysql_login, $mysql_password);
+ $db = new PDO('mysql:host='.$_POST['mysql_host'].';dbname='.$_POST['mysql_db'], $_POST['mysql_login'], $_POST['mysql_password']);
//Create table "Users"
- $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Users (id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, login VARCHAR(255), email VARCHAR(255), display_name VARCHAR(255), password VARCHAR(130), admin TINYINT(1), json_token VARCHAR(32), notifications TINYINT(1), stay_signed_in_token VARCHAR(32)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
+ $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Users (
+ id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ login VARCHAR(255),
+ email VARCHAR(255),
+ display_name VARCHAR(255),
+ password VARCHAR(130),
+ admin TINYINT(1),
+ json_token VARCHAR(32),
+ notifications TINYINT(1),
+ stay_signed_in_token VARCHAR(32),
+ UNIQUE (login),
+ UNIQUE (display_name),
+ UNIQUE (json_token),
+ UNIQUE (stay_signed_in_token)
+ ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
//Create table "Invoices"
- $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Invoices (id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, date DATETIME, buyer INT(11), amount INT(11), what TEXT) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
+ $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Invoices (
+ id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ date DATETIME,
+ buyer INT(11),
+ FOREIGN KEY (buyer) REFERENCES '.$mysql_prefix.'Users(id) ON DELETE CASCADE,
+ amount INT(11),
+ what TEXT
+ ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
//Create table "Users_in_invoices"
- $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Users_in_invoices (invoice_id INT(11) NOT NULL, KEY invoice_id (invoice_id), user_id INT(11), KEY user_id (user_id), guests INT(11)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
+ $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Users_in_invoices (
+ invoice_id INT(11) NOT NULL,
+ FOREIGN KEY (invoice_id) REFERENCES '.$mysql_prefix.'Invoices(id) ON DELETE CASCADE,
+ user_id INT(11),
+ FOREIGN KEY (user_id) REFERENCES '.$mysql_prefix.'Users(id) ON DELETE CASCADE,
+ guests INT(11)
+ ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
//Create table "Paybacks"
- $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Paybacks (id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, date DATETIME, invoice_id INT(11), KEY invoice_id (invoice_id), amount INT(11), from_user INT(11), to_user INT(11)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
+ $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Paybacks (
+ id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ date DATETIME,
+ invoice_id INT(11),
+ FOREIGN KEY (invoice_id) REFERENCES '.$mysql_prefix.'Invoices(id) ON DELETE CASCADE,
+ amount INT(11),
+ from_user INT(11),
+ FOREIGN KEY (from_user) REFERENCES '.$mysql_prefix.'Users(id) ON DELETE CASCADE,
+ to_user INT(11)
+ FOREIGN KEY (to_user) REFERENCES '.$mysql_prefix.'Users(id) ON DELETE CASCADE,
+ ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
// Create table "GlobalPaybacks"
- $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'GlobalPaybacks (id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, date DATETIME, closed TINYINT(1)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
+ $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'GlobalPaybacks (
+ id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ date DATETIME,
+ closed TINYINT(1)
+ ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
// Create table "Users_in_GlobalPaybacks"
- $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Users_in_GlobalPaybacks (global_payback_id INT(11) NOT NULL, KEY global_payback_id (global_payback_id), user1_id INT(11), user2_id INT(11), amount INT(11)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
+ $db->query('CREATE TABLE IF NOT EXISTS '.$mysql_prefix.'Users_in_GlobalPaybacks (
+ global_payback_id INT(11) NOT NULL,
+ FOREIGN KEY (global_payback_id) REFERENCES '.$mysql_prefix.'GlobalPaybacks(id) ON DELETE CASCADE,
+ user1_id INT(11),
+ FOREIGN KEY (user1_id) REFERENCES '.$mysql_prefix.'Users(id) ON DELETE CASCADE,
+ user2_id INT(11),
+ FOREIGN KEY (user2_id) REFERENCES '.$mysql_prefix.'Users(id) ON DELETE CASCADE,
+ amount INT(11)
+ ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
} catch (PDOException $e) {
- $error = 'Unable to connect to database and create database, check your credentials and config. Error message : '.$e->getMessage().'.';
+ $error = 'Unable to connect to database and create database, check your credentials and config. Error message: '.$e->getMessage().'.';
}
- if(!filter_var($_POST['email_webmaster'], FILTER_VALIDATE_EMAIL)) {
- $email = 'Webmaster\'s e-mail address is invalid.';
+ if(!empty($_POST['email_webmaster']) && !filter_var($_POST['email_webmaster'], FILTER_VALIDATE_EMAIL)) {
+ $error = "Webmaster's email address is invalid.";
+ }
+ else {
+ $email_webmaster = !empty($_POST['email_webmaster']) ? $_POST['email_webmaster'] : '';
}
if(empty($error)) {
@@ -70,17 +119,17 @@
$config = "setLogin($_POST['admin_login']);
- $admin->setDisplayName($_POST['admin_display_name']);
+ $admin->setDisplayName(!empty($_POST['admin_display_name']) ? $_POST['admin_display_name'] : '');
$admin->setPassword($admin->encrypt($_POST['admin_password']));
$admin->setAdmin(true);
- $admin->setEmail($_POST['email_webmaster']);
+ $admin->setEmail($email_webmaster);
$admin->setStaySignedInToken("");
$admin->setNotifications(3);
$admin->newJsonToken();
@@ -103,13 +152,17 @@
header('location: index.php');
exit();
} catch (Exception $e) {
- $error = 'An error occurred when inserting user in the database. Error message : '.$e->getMessage().'.';
+ $error = 'An error occurred when inserting user in the database. Error message: '.$e->getMessage().'.';
}
}
- else
+ else {
$error = 'Unable to write configuration to config file data/config.php.';
+ }
}
}
+ else {
+ $current_template = 'default';
+ }
$token = generate_token('install');
?>
@@ -118,8 +171,8 @@
Bouffe@Ulm - Installation
-
-
+
+
Bouffe@Ulm - Installation
@@ -135,37 +188,48 @@
diff --git a/tpl/default_en/connection.html b/tpl/default/connection.html
similarity index 100%
rename from tpl/default_en/connection.html
rename to tpl/default/connection.html
diff --git a/tpl/default_en/css/style.css b/tpl/default/css/style.css
similarity index 100%
rename from tpl/default_en/css/style.css
rename to tpl/default/css/style.css
diff --git a/tpl/default_en/css/style.min.css b/tpl/default/css/style.min.css
similarity index 100%
rename from tpl/default_en/css/style.min.css
rename to tpl/default/css/style.min.css
diff --git a/tpl/default_en/edit_users.html b/tpl/default/edit_users.html
similarity index 100%
rename from tpl/default_en/edit_users.html
rename to tpl/default/edit_users.html
diff --git a/tpl/default_en/favicon-144.png b/tpl/default/favicon-144.png
similarity index 100%
rename from tpl/default_en/favicon-144.png
rename to tpl/default/favicon-144.png
diff --git a/tpl/default_en/favicon-152.png b/tpl/default/favicon-152.png
similarity index 100%
rename from tpl/default_en/favicon-152.png
rename to tpl/default/favicon-152.png
diff --git a/tpl/default_en/favicon-16.png b/tpl/default/favicon-16.png
similarity index 100%
rename from tpl/default_en/favicon-16.png
rename to tpl/default/favicon-16.png
diff --git a/tpl/default_en/favicon-32.png b/tpl/default/favicon-32.png
similarity index 100%
rename from tpl/default_en/favicon-32.png
rename to tpl/default/favicon-32.png
diff --git a/tpl/default_en/favicon.ico b/tpl/default/favicon.ico
similarity index 100%
rename from tpl/default_en/favicon.ico
rename to tpl/default/favicon.ico
diff --git a/tpl/default_en/footer.html b/tpl/default/footer.html
similarity index 100%
rename from tpl/default_en/footer.html
rename to tpl/default/footer.html
diff --git a/tpl/default_en/header.html b/tpl/default/header.html
similarity index 100%
rename from tpl/default_en/header.html
rename to tpl/default/header.html
diff --git a/tpl/default_en/img/toggleVisible.png b/tpl/default/img/toggleVisible.png
similarity index 100%
rename from tpl/default_en/img/toggleVisible.png
rename to tpl/default/img/toggleVisible.png
diff --git a/tpl/default_en/index.html b/tpl/default/index.html
similarity index 100%
rename from tpl/default_en/index.html
rename to tpl/default/index.html
diff --git a/tpl/default_en/js/jquery-1.10.2.min.js b/tpl/default/js/jquery-1.10.2.min.js
similarity index 100%
rename from tpl/default_en/js/jquery-1.10.2.min.js
rename to tpl/default/js/jquery-1.10.2.min.js
diff --git a/tpl/default_en/js/main.js b/tpl/default/js/main.js
similarity index 100%
rename from tpl/default_en/js/main.js
rename to tpl/default/js/main.js
diff --git a/tpl/default_en/js/main.min.js b/tpl/default/js/main.min.js
similarity index 100%
rename from tpl/default_en/js/main.min.js
rename to tpl/default/js/main.min.js
diff --git a/tpl/default_en/manage_paybacks.html b/tpl/default/manage_paybacks.html
similarity index 100%
rename from tpl/default_en/manage_paybacks.html
rename to tpl/default/manage_paybacks.html
diff --git a/tpl/default_en/new_invoice.html b/tpl/default/new_invoice.html
similarity index 100%
rename from tpl/default_en/new_invoice.html
rename to tpl/default/new_invoice.html
diff --git a/tpl/default_en/see_paybacks.html b/tpl/default/see_paybacks.html
similarity index 100%
rename from tpl/default_en/see_paybacks.html
rename to tpl/default/see_paybacks.html
diff --git a/tpl/default_en/settings.html b/tpl/default/settings.html
similarity index 100%
rename from tpl/default_en/settings.html
rename to tpl/default/settings.html