|
@@ -9,6 +9,20 @@ if (!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
|
|
|
|
class Database extends Module {
|
|
class Database extends Module {
|
|
|
|
|
|
|
|
+ private static $versions = array(
|
|
|
|
+ '020100',
|
|
|
|
+ '020101',
|
|
|
|
+ '020200',
|
|
|
|
+ '020500',
|
|
|
|
+ '020505',
|
|
|
|
+ '020601',
|
|
|
|
+ '020602',
|
|
|
|
+ '020700',
|
|
|
|
+ '030000',
|
|
|
|
+ '030001',
|
|
|
|
+ '030003'
|
|
|
|
+ );
|
|
|
|
+
|
|
static function connect($host = 'localhost', $user, $password, $name = 'lychee') {
|
|
static function connect($host = 'localhost', $user, $password, $name = 'lychee') {
|
|
|
|
|
|
|
|
|
|
@@ -26,44 +40,34 @@ class Database extends Module {
|
|
|
|
|
|
$database->query('SET NAMES utf8;');
|
|
$database->query('SET NAMES utf8;');
|
|
|
|
|
|
-
|
|
+
|
|
- if (!$database->select_db($name))
|
|
+ if (!self::createDatabase($database, $name)) exit('Error: Could not create database!');
|
|
- if (!Database::createDatabase($database, $name)) exit('Error: Could not create database!');
|
|
+
|
|
|
|
+
|
|
|
|
+ if (!self::createTables($database)) exit('Error: Could not create tables!');
|
|
|
|
|
|
-
|
|
+
|
|
- $query = Database::prepare($database, 'SELECT * FROM ?, ?, ?, ? LIMIT 0', array(LYCHEE_TABLE_PHOTOS, LYCHEE_TABLE_ALBUMS, LYCHEE_TABLE_SETTINGS, LYCHEE_TABLE_LOG));
|
|
+ if (!self::update($database, $name)) exit('Error: Could not update database and tables!');
|
|
- if (!$database->query($query))
|
|
|
|
- if (!Database::createTables($database)) exit('Error: Could not create tables!');
|
|
|
|
|
|
|
|
return $database;
|
|
return $database;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- static function update($database, $dbName, $version = 0) {
|
|
+ private static function update($database, $dbName) {
|
|
|
|
|
|
|
|
|
|
Module::dependencies(isset($database, $dbName));
|
|
Module::dependencies(isset($database, $dbName));
|
|
- if (!isset($version)) return true;
|
|
+
|
|
-
|
|
+
|
|
-
|
|
+ $query = self::prepare($database, "SELECT * FROM ? WHERE `key` = 'version'", array(LYCHEE_TABLE_SETTINGS));
|
|
- $updates = array(
|
|
+ $results = $database->query($query);
|
|
- '020100',
|
|
+ $current = $results->fetch_object()->value;
|
|
- '020101',
|
|
|
|
- '020200',
|
|
|
|
- '020500',
|
|
|
|
- '020505',
|
|
|
|
- '020601',
|
|
|
|
- '020602',
|
|
|
|
- '020700',
|
|
|
|
- '030000',
|
|
|
|
- '030001',
|
|
|
|
- '030003'
|
|
|
|
- );
|
|
|
|
|
|
|
|
|
|
|
|
- foreach ($updates as $update) {
|
|
+ foreach (self::$versions as $version) {
|
|
|
|
|
|
- if ($update<=$version) continue;
|
|
+
|
|
|
|
+ if ($version<=$current) continue;
|
|
|
|
|
|
|
|
|
|
include(__DIR__ . '/../database/update_' . $update . '.php');
|
|
include(__DIR__ . '/../database/update_' . $update . '.php');
|
|
@@ -74,7 +78,7 @@ class Database extends Module {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- static function createConfig($host = 'localhost', $user, $password, $name = 'lychee', $prefix = '') {
|
|
+ public static function createConfig($host = 'localhost', $user, $password, $name = 'lychee', $prefix = '') {
|
|
|
|
|
|
|
|
|
|
Module::dependencies(isset($host, $user, $password, $name));
|
|
Module::dependencies(isset($host, $user, $password, $name));
|
|
@@ -83,15 +87,8 @@ class Database extends Module {
|
|
|
|
|
|
if ($database->connect_errno) return 'Warning: Connection failed!';
|
|
if ($database->connect_errno) return 'Warning: Connection failed!';
|
|
|
|
|
|
-
|
|
+
|
|
- if (!$database->select_db($name)) {
|
|
+ if (!self::createDatabase($database, $name)) return 'Warning: Creation failed!';
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- $result = Database::createDatabase($database, $name);
|
|
|
|
- if ($result===false) return 'Warning: Creation failed!';
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
$host = mysqli_real_escape_string($database, $host);
|
|
$host = mysqli_real_escape_string($database, $host);
|
|
@@ -127,13 +124,16 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- static function createDatabase($database, $name = 'lychee') {
|
|
+ private static function createDatabase($database, $name = 'lychee') {
|
|
|
|
|
|
|
|
|
|
Module::dependencies(isset($database, $name));
|
|
Module::dependencies(isset($database, $name));
|
|
|
|
|
|
|
|
+
|
|
|
|
+ if ($database->select_db($name)) return true;
|
|
|
|
+
|
|
|
|
|
|
- $query = Database::prepare($database, 'CREATE DATABASE IF NOT EXISTS ?', array($name));
|
|
+ $query = self::prepare($database, 'CREATE DATABASE IF NOT EXISTS ?', array($name));
|
|
$result = $database->query($query);
|
|
$result = $database->query($query);
|
|
|
|
|
|
if (!$database->select_db($name)||!$result) return false;
|
|
if (!$database->select_db($name)||!$result) return false;
|
|
@@ -141,13 +141,17 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- static function createTables($database) {
|
|
+ private static function createTables($database) {
|
|
|
|
|
|
|
|
|
|
Module::dependencies(isset($database));
|
|
Module::dependencies(isset($database));
|
|
|
|
|
|
|
|
+
|
|
|
|
+ $query = self::prepare($database, 'SELECT * FROM ?, ?, ?, ? LIMIT 0', array(LYCHEE_TABLE_PHOTOS, LYCHEE_TABLE_ALBUMS, LYCHEE_TABLE_SETTINGS, LYCHEE_TABLE_LOG));
|
|
|
|
+ if ($database->query($query)) return true;
|
|
|
|
+
|
|
|
|
|
|
- $exist = Database::prepare($database, 'SELECT * FROM ? LIMIT 0', array(LYCHEE_TABLE_LOG));
|
|
+ $exist = self::prepare($database, 'SELECT * FROM ? LIMIT 0', array(LYCHEE_TABLE_LOG));
|
|
if (!$database->query($exist)) {
|
|
if (!$database->query($exist)) {
|
|
|
|
|
|
|
|
|
|
@@ -157,13 +161,13 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
if (!isset($query)||$query===false) return false;
|
|
if (!isset($query)||$query===false) return false;
|
|
|
|
|
|
|
|
|
|
- $query = Database::prepare($database, $query, array(LYCHEE_TABLE_LOG));
|
|
+ $query = self::prepare($database, $query, array(LYCHEE_TABLE_LOG));
|
|
if (!$database->query($query)) return false;
|
|
if (!$database->query($query)) return false;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- $exist = Database::prepare($database, 'SELECT * FROM ? LIMIT 0', array(LYCHEE_TABLE_SETTINGS));
|
|
+ $exist = self::prepare($database, 'SELECT * FROM ? LIMIT 0', array(LYCHEE_TABLE_SETTINGS));
|
|
if (!$database->query($exist)) {
|
|
if (!$database->query($exist)) {
|
|
|
|
|
|
|
|
|
|
@@ -176,7 +180,7 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- $query = Database::prepare($database, $query, array(LYCHEE_TABLE_SETTINGS));
|
|
+ $query = self::prepare($database, $query, array(LYCHEE_TABLE_SETTINGS));
|
|
if (!$database->query($query)) {
|
|
if (!$database->query($query)) {
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
return false;
|
|
return false;
|
|
@@ -192,7 +196,7 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- $query = Database::prepare($database, $query, array(LYCHEE_TABLE_SETTINGS));
|
|
+ $query = self::prepare($database, $query, array(LYCHEE_TABLE_SETTINGS));
|
|
if (!$database->query($query)) {
|
|
if (!$database->query($query)) {
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
return false;
|
|
return false;
|
|
@@ -200,7 +204,7 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
|
|
|
|
|
|
|
|
$identifier = md5(microtime(true));
|
|
$identifier = md5(microtime(true));
|
|
- $query = Database::prepare($database, "UPDATE `?` SET `value` = '?' WHERE `key` = 'identifier' LIMIT 1", array(LYCHEE_TABLE_SETTINGS, $identifier));
|
|
+ $query = self::prepare($database, "UPDATE `?` SET `value` = '?' WHERE `key` = 'identifier' LIMIT 1", array(LYCHEE_TABLE_SETTINGS, $identifier));
|
|
if (!$database->query($query)) {
|
|
if (!$database->query($query)) {
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
return false;
|
|
return false;
|
|
@@ -209,7 +213,7 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- $exist = Database::prepare($database, 'SELECT * FROM ? LIMIT 0', array(LYCHEE_TABLE_ALBUMS));
|
|
+ $exist = self::prepare($database, 'SELECT * FROM ? LIMIT 0', array(LYCHEE_TABLE_ALBUMS));
|
|
if (!$database->query($exist)) {
|
|
if (!$database->query($exist)) {
|
|
|
|
|
|
|
|
|
|
@@ -222,7 +226,7 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- $query = Database::prepare($database, $query, array(LYCHEE_TABLE_ALBUMS));
|
|
+ $query = self::prepare($database, $query, array(LYCHEE_TABLE_ALBUMS));
|
|
if (!$database->query($query)) {
|
|
if (!$database->query($query)) {
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
return false;
|
|
return false;
|
|
@@ -231,7 +235,7 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- $exist = Database::prepare($database, 'SELECT * FROM ? LIMIT 0', array(LYCHEE_TABLE_PHOTOS));
|
|
+ $exist = self::prepare($database, 'SELECT * FROM ? LIMIT 0', array(LYCHEE_TABLE_PHOTOS));
|
|
if (!$database->query($exist)) {
|
|
if (!$database->query($exist)) {
|
|
|
|
|
|
|
|
|
|
@@ -244,7 +248,7 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- $query = Database::prepare($database, $query, array(LYCHEE_TABLE_PHOTOS));
|
|
+ $query = self::prepare($database, $query, array(LYCHEE_TABLE_PHOTOS));
|
|
if (!$database->query($query)) {
|
|
if (!$database->query($query)) {
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
Log::error($database, __METHOD__, __LINE__, $database->error);
|
|
return false;
|
|
return false;
|
|
@@ -256,9 +260,9 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- static function setVersion($database, $version) {
|
|
+ public static function setVersion($database, $version) {
|
|
|
|
|
|
- $query = Database::prepare($database, "UPDATE ? SET value = '?' WHERE `key` = 'version'", array(LYCHEE_TABLE_SETTINGS, $version));
|
|
+ $query = self::prepare($database, "UPDATE ? SET value = '?' WHERE `key` = 'version'", array(LYCHEE_TABLE_SETTINGS, $version));
|
|
$result = $database->query($query);
|
|
$result = $database->query($query);
|
|
if (!$result) {
|
|
if (!$result) {
|
|
Log::error($database, __METHOD__, __LINE__, 'Could not update database (' . $database->error . ')');
|
|
Log::error($database, __METHOD__, __LINE__, 'Could not update database (' . $database->error . ')');
|
|
@@ -267,7 +271,7 @@ if(!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- static function prepare($database, $query, $data) {
|
|
+ public static function prepare($database, $query, $data) {
|
|
|
|
|
|
|
|
|
|
Module::dependencies(isset($database, $query, $data));
|
|
Module::dependencies(isset($database, $query, $data));
|