Skip to content

Commit

Permalink
Added support for SQLite
Browse files Browse the repository at this point in the history
  • Loading branch information
lfkeitel committed Jun 6, 2015
1 parent 1f3f9de commit 3f22675
Show file tree
Hide file tree
Showing 7 changed files with 189 additions and 6 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ node_modules/
public/build/
public/assets/themes/*/*.css
public/assets/themes/*/maps/
*.sqlite
3 changes: 2 additions & 1 deletion app/config/config.sample.php
Original file line number Diff line number Diff line change
Expand Up @@ -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' => '',
Expand Down
74 changes: 74 additions & 0 deletions app/install/base_sqlite_db.sql
Original file line number Diff line number Diff line change
@@ -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);;
23 changes: 21 additions & 2 deletions app/install/install.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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.');
Expand Down
78 changes: 78 additions & 0 deletions app/install/sqlite_schema.sql
Original file line number Diff line number Diff line change
@@ -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;
9 changes: 7 additions & 2 deletions app/repos/BaseRepo.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,25 @@ 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'],
$dbConfig['hostname'],
$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);
}
}
Expand Down
7 changes: 6 additions & 1 deletion public/install.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,12 @@
<table>
<tr>
<td class="labels">*Database Type:</td>
<td class="field"><select name="db_type" onChange="showHide(this.value);"><option value="mysql">MySQL</option><!-- <option value="sqlite">SQLite</option>--></select></td>
<td class="field">
<select name="db_type" onChange="showHide(this.value);">
<option value="mysql">MySQL</option>
<option value="sqlite">SQLite</option>
</select>
</td>
</tr>
</table>
<table id="mysql_only" style="display:inline;">
Expand Down

0 comments on commit 3f22675

Please sign in to comment.