diff --git a/.gitignore b/.gitignore index 7a042d3..cd54252 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ node_modules/ public/build/ public/assets/themes/*/*.css public/assets/themes/*/maps/ +*.sqlite diff --git a/app/config/config.sample.php b/app/config/config.sample.php index 290403f..5badc12 100644 --- a/app/config/config.sample.php +++ b/app/config/config.sample.php @@ -2,11 +2,12 @@ return array( // Database Configuration 'db' => array( - // Database type: mysql + // Database type: mysql, sqlite 'type' => '', // Database name of mysql 'dbname' => '', // Database hostname/IP for mysql + // Database filename for sqlite 'hostname' => '', // User for mysql 'username' => '', diff --git a/app/install/base_sqlite_db.sql b/app/install/base_sqlite_db.sql new file mode 100644 index 0000000..aff65c5 --- /dev/null +++ b/app/install/base_sqlite_db.sql @@ -0,0 +1,74 @@ +CREATE TABLE "{{prefix}}apikey" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + keystring TEXT, + user_id NUMERIC, + expires NUMERIC, + disabled NUMERIC +);; + +CREATE TABLE "{{prefix}}category" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + description TEXT, + parent NUMERIC +);; + +INSERT INTO "{{prefix}}category" ("id", "description", "parent") VALUES +(1, 'Logs', 0);; + +CREATE TABLE "{{prefix}}cheesto" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id NUMERIC, + fullname TEXT, + status TEXT, + message TEXT, + returntime TEXT, + modified TEXT, + disabled NUMERIC +);; + +INSERT INTO "{{prefix}}cheesto" ("id", "user_id", "fullname", "status", "message", "returntime", "modified", "disabled") VALUES +(1, 1, 'Administrator', 'Available', '', '00:00:00', '2015-05-16 21:05:24', 0);; + +CREATE TABLE "{{prefix}}group" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT, + permissions TEXT +);; + +INSERT INTO "{{prefix}}group" ("id", "name", "permissions") VALUES +(1, 'user', 'a:15:{s:9:"createlog";b:1;s:7:"editlog";b:0;s:7:"viewlog";b:1;s:9:"createcat";b:1;s:7:"editcat";b:1;s:9:"deletecat";b:1;s:10:"createuser";b:0;s:8:"edituser";b:0;s:10:"deleteuser";b:0;s:11:"creategroup";b:0;s:9:"editgroup";b:0;s:11:"deletegroup";b:0;s:11:"viewcheesto";b:1;s:13:"updatecheesto";b:1;s:5:"admin";b:0;}'), +(2, 'admin', 'a:15:{s:9:"createlog";b:1;s:7:"editlog";b:1;s:7:"viewlog";b:1;s:9:"createcat";b:1;s:7:"editcat";b:1;s:9:"deletecat";b:1;s:10:"createuser";b:1;s:8:"edituser";b:1;s:10:"deleteuser";b:1;s:11:"creategroup";b:1;s:9:"editgroup";b:1;s:11:"deletegroup";b:1;s:11:"viewcheesto";b:1;s:13:"updatecheesto";b:1;s:5:"admin";b:1;}'), +(3, 'guest', 'a:15:{s:9:"createlog";b:0;s:7:"editlog";b:0;s:7:"viewlog";b:1;s:9:"createcat";b:0;s:7:"editcat";b:0;s:9:"deletecat";b:0;s:10:"createuser";b:0;s:8:"edituser";b:0;s:10:"deleteuser";b:0;s:11:"creategroup";b:0;s:9:"editgroup";b:0;s:11:"deletegroup";b:0;s:11:"viewcheesto";b:1;s:13:"updatecheesto";b:0;s:5:"admin";b:0;}');; + +CREATE TABLE "{{prefix}}log" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + date_created TEXT, + time_created TEXT, + title TEXT, + body TEXT, + user_id NUMERIC, + category TEXT, + is_edited NUMERIC +);; + +CREATE TABLE "{{prefix}}session" ( + id TEXT, + data TEXT, + last_accessed TEXT +);; + +CREATE TABLE "{{prefix}}user" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT, + password TEXT, + fullname TEXT, + group_id NUMERIC, + created TEXT, + initial_login NUMERIC, + logs_per_page NUMERIC, + theme TEXT, + disabled NUMERIC +);; + +INSERT INTO "{{prefix}}user" ("id", "username", "password", "fullname", "group_id", "created", "initial_login", "logs_per_page", "theme", "disabled") VALUES +(1, 'admin', '$2y$10$zibMP6jZw5PRMGHGdo/JzeXkb3re0WEIulmkgRe4PC76GwT4M8G5u', 'Administrator', 2, '2015-01-01', 1, 25, '', 0);; diff --git a/app/install/install.php b/app/install/install.php index 45e4fe8..57d5975 100644 --- a/app/install/install.php +++ b/app/install/install.php @@ -58,6 +58,11 @@ } break; + case 'sqlite': + $config['db']['hostname'] = $configDir.'/dandelion.sqlite'; + $db_connect = "sqlite:{$config['db']['hostname']}"; + break; + default: throw new Exception('No database driver loaded.'); break; @@ -71,8 +76,22 @@ // Replace the prefix placeholder with the user defined prefix $sql = str_replace('{{prefix}}', $config['db']['tablePrefix'], $sql); - $exec = $conn->prepare($sql); - $success = $exec->execute(); + if ($config['db']['type'] === 'sqlite') { + // SQLite doesn't like multiple statements in a single query + // so the file is separated by double semicolons for each + // statement in order to separate them and run them individually. + // MySQL doesn't have an issue with this. + $queries = explode(';;', $sql); + + foreach ($queries as $query) { + $query = trim($query); + if ($query) { + $success = $conn->query($query); + } + } + } else { // MySQL + $success = $conn->query($sql); + } if (!$success) { throw new Exception('Problem installing initial data into database.'); diff --git a/app/install/sqlite_schema.sql b/app/install/sqlite_schema.sql new file mode 100644 index 0000000..5ecb87b --- /dev/null +++ b/app/install/sqlite_schema.sql @@ -0,0 +1,78 @@ +BEGIN TRANSACTION; + +CREATE TABLE "dan_apikey" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + keystring TEXT, + user_id NUMERIC, + expires NUMERIC, + disabled NUMERIC +); + +CREATE TABLE "dan_category" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + description TEXT, + parent NUMERIC +); + +INSERT INTO "dan_category" ("id", "description", "parent") VALUES +(1, 'Logs', 0); + +CREATE TABLE "dan_cheesto" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id NUMERIC, + fullname TEXT, + status TEXT, + message TEXT, + returntime TEXT, + modified TEXT, + disabled NUMERIC +); + +INSERT INTO "dan_cheesto" ("id", "user_id", "fullname", "status", "message", "returntime", "modified", "disabled") VALUES +(1, 1, 'Administrator', 'Available', '', '00:00:00', '2015-05-16 21:05:24', 0); + +CREATE TABLE "dan_group" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT, + permissions TEXT +); + +INSERT INTO "dan_group" ("id", "name", "permissions") VALUES +(1, 'user', 'a:15:{s:9:"createlog";b:1;s:7:"editlog";b:0;s:7:"viewlog";b:1;s:9:"createcat";b:1;s:7:"editcat";b:1;s:9:"deletecat";b:1;s:10:"createuser";b:0;s:8:"edituser";b:0;s:10:"deleteuser";b:0;s:11:"creategroup";b:0;s:9:"editgroup";b:0;s:11:"deletegroup";b:0;s:11:"viewcheesto";b:1;s:13:"updatecheesto";b:1;s:5:"admin";b:0;}'), +(2, 'admin', 'a:15:{s:9:"createlog";b:1;s:7:"editlog";b:1;s:7:"viewlog";b:1;s:9:"createcat";b:1;s:7:"editcat";b:1;s:9:"deletecat";b:1;s:10:"createuser";b:1;s:8:"edituser";b:1;s:10:"deleteuser";b:1;s:11:"creategroup";b:1;s:9:"editgroup";b:1;s:11:"deletegroup";b:1;s:11:"viewcheesto";b:1;s:13:"updatecheesto";b:1;s:5:"admin";b:1;}'), +(3, 'guest', 'a:15:{s:9:"createlog";b:0;s:7:"editlog";b:0;s:7:"viewlog";b:1;s:9:"createcat";b:0;s:7:"editcat";b:0;s:9:"deletecat";b:0;s:10:"createuser";b:0;s:8:"edituser";b:0;s:10:"deleteuser";b:0;s:11:"creategroup";b:0;s:9:"editgroup";b:0;s:11:"deletegroup";b:0;s:11:"viewcheesto";b:1;s:13:"updatecheesto";b:0;s:5:"admin";b:0;}'); + +CREATE TABLE "dan_log" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + date_created TEXT, + time_created TEXT, + title TEXT, + body TEXT, + user_id NUMERIC, + category TEXT, + is_edited NUMERIC +); + +CREATE TABLE "dan_session" ( + id TEXT, + data TEXT, + last_accessed TEXT +); + +CREATE TABLE "dan_user" ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + username TEXT, + password TEXT, + fullname TEXT, + group_id NUMERIC, + created TEXT, + initial_login NUMERIC, + logs_per_page NUMERIC, + theme TEXT, + disabled NUMERIC +); + +INSERT INTO "dan_user" ("id", "username", "password", "fullname", "group_id", "created", "initial_login", "logs_per_page", "theme", "disabled") VALUES +(1, 'admin', '$2y$10$zibMP6jZw5PRMGHGdo/JzeXkb3re0WEIulmkgRe4PC76GwT4M8G5u', 'Administrator', 2, '2015-01-01', 1, 25, '', 0); + +COMMIT; diff --git a/app/repos/BaseRepo.php b/app/repos/BaseRepo.php index 2abf59b..4f6b3d1 100644 --- a/app/repos/BaseRepo.php +++ b/app/repos/BaseRepo.php @@ -16,9 +16,14 @@ public function __construct() { if (is_null(self::$dbconnection)) { // Create new database connection object and cache + $pdoParams = []; self::$dbconnection = new SC(); $dbConfig = Configuration::getConfig()['db']; + if ($dbConfig['type'] !== 'sqlite') { + $pdoParams = [\PDO::ATTR_PERSISTENT => true]; + } + // Connect to database self::$dbconnection->connect( $dbConfig['type'], @@ -26,10 +31,10 @@ public function __construct() $dbConfig['dbname'], $dbConfig['username'], $dbConfig['password'], - [\PDO::ATTR_PERSISTENT => true]); + $pdoParams); // Check for proper connection - if (!self::$dbconnection) { + if (!self::$dbconnection->pdo()) { throw new \Exception("Error Connecting to Database", 1); } } diff --git a/public/install.php b/public/install.php index e953cbb..b7e519f 100644 --- a/public/install.php +++ b/public/install.php @@ -51,7 +51,12 @@ - +
*Database Type: + +