summaryrefslogtreecommitdiff
path: root/app/Schema
diff options
context:
space:
mode:
authorFrédéric Guillot <fred@kanboard.net>2014-07-05 16:32:24 -0300
committerFrédéric Guillot <fred@kanboard.net>2014-07-05 16:32:24 -0300
commit035294798d891d1d2447a79586401b097d0c2ae4 (patch)
treeff5198d42ca7e66892e0f523b1b5c4977d9bb98b /app/Schema
parent23341b2326b560ddf71c90915bc55f49bed81446 (diff)
Add Postgresql support
Diffstat (limited to 'app/Schema')
-rw-r--r--app/Schema/Mysql.php1
-rw-r--r--app/Schema/Postgres.php166
-rw-r--r--app/Schema/Sqlite.php1
3 files changed, 168 insertions, 0 deletions
diff --git a/app/Schema/Mysql.php b/app/Schema/Mysql.php
index a30b0989..2c78d1e5 100644
--- a/app/Schema/Mysql.php
+++ b/app/Schema/Mysql.php
@@ -3,6 +3,7 @@
namespace Schema;
use Core\Security;
+
const VERSION = 20;
function version_20($pdo)
diff --git a/app/Schema/Postgres.php b/app/Schema/Postgres.php
new file mode 100644
index 00000000..8ac6631c
--- /dev/null
+++ b/app/Schema/Postgres.php
@@ -0,0 +1,166 @@
+<?php
+
+namespace Schema;
+
+use Core\Security;
+
+const VERSION = 1;
+
+function version_1($pdo)
+{
+ $pdo->exec("
+ CREATE TABLE config (
+ language CHAR(5) DEFAULT 'en_US',
+ webhooks_token VARCHAR(255),
+ timezone VARCHAR(50) DEFAULT 'UTC',
+ api_token VARCHAR(255)
+ );
+
+ CREATE TABLE users (
+ id SERIAL PRIMARY KEY,
+ username VARCHAR(50),
+ password VARCHAR(255),
+ is_admin BOOLEAN DEFAULT '0',
+ default_project_id INTEGER DEFAULT 0,
+ is_ldap_user BOOLEAN DEFAULT '0',
+ name VARCHAR(255),
+ email VARCHAR(255),
+ google_id VARCHAR(255),
+ github_id VARCHAR(30)
+ );
+
+ CREATE TABLE remember_me (
+ id SERIAL PRIMARY KEY,
+ user_id INTEGER,
+ ip VARCHAR(40),
+ user_agent VARCHAR(255),
+ token VARCHAR(255),
+ sequence VARCHAR(255),
+ expiration INTEGER,
+ date_creation INTEGER,
+ FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
+ );
+
+ CREATE TABLE last_logins (
+ id SERIAL PRIMARY KEY,
+ auth_type VARCHAR(25),
+ user_id INTEGER,
+ ip VARCHAR(40),
+ user_agent VARCHAR(255),
+ date_creation INTEGER,
+ FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
+ );
+
+ CREATE TABLE projects (
+ id SERIAL PRIMARY KEY,
+ name VARCHAR(255) UNIQUE,
+ is_active BOOLEAN DEFAULT '1',
+ token VARCHAR(255),
+ last_modified INTEGER DEFAULT 0
+ );
+
+ CREATE TABLE project_has_users (
+ id SERIAL PRIMARY KEY,
+ project_id INTEGER,
+ user_id INTEGER,
+ FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE,
+ FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
+ UNIQUE(project_id, user_id)
+ );
+
+ CREATE TABLE project_has_categories (
+ id SERIAL PRIMARY KEY,
+ name VARCHAR(255),
+ project_id INTEGER,
+ UNIQUE (project_id, name),
+ FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
+ );
+
+ CREATE TABLE columns (
+ id SERIAL PRIMARY KEY,
+ title VARCHAR(255),
+ position INTEGER,
+ project_id INTEGER,
+ task_limit INTEGER DEFAULT 0,
+ FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE,
+ UNIQUE (title, project_id)
+ );
+
+ CREATE TABLE tasks (
+ id SERIAL PRIMARY KEY,
+ title VARCHAR(255),
+ description TEXT,
+ date_creation INTEGER,
+ color_id VARCHAR(255),
+ project_id INTEGER,
+ column_id INTEGER,
+ owner_id INTEGER DEFAULT 0,
+ position INTEGER,
+ is_active BOOLEAN DEFAULT '1',
+ date_completed INTEGER,
+ score INTEGER,
+ date_due INTEGER,
+ category_id INTEGER DEFAULT 0,
+ FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE,
+ FOREIGN KEY(column_id) REFERENCES columns(id) ON DELETE CASCADE
+ );
+
+ CREATE TABLE task_has_subtasks (
+ id SERIAL PRIMARY KEY,
+ title VARCHAR(255),
+ status SMALLINT DEFAULT 0,
+ time_estimated INTEGER DEFAULT 0,
+ time_spent INTEGER DEFAULT 0,
+ task_id INTEGER,
+ user_id INTEGER,
+ FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE
+ );
+
+ CREATE TABLE task_has_files (
+ id SERIAL PRIMARY KEY,
+ name VARCHAR(255),
+ path VARCHAR(255),
+ is_image BOOLEAN DEFAULT '0',
+ task_id INTEGER,
+ FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE
+ );
+
+ CREATE TABLE comments (
+ id SERIAL PRIMARY KEY,
+ task_id INTEGER,
+ user_id INTEGER,
+ date INTEGER,
+ comment TEXT,
+ FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE,
+ FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
+ );
+
+ CREATE TABLE actions (
+ id SERIAL PRIMARY KEY,
+ project_id INTEGER,
+ event_name VARCHAR(50),
+ action_name VARCHAR(50),
+ FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
+ );
+
+ CREATE TABLE action_has_params (
+ id SERIAL PRIMARY KEY,
+ action_id INTEGER,
+ name VARCHAR(50),
+ value VARCHAR(50),
+ FOREIGN KEY(action_id) REFERENCES actions(id) ON DELETE CASCADE
+ );
+ ");
+
+ $pdo->exec("
+ INSERT INTO users
+ (username, password, is_admin)
+ VALUES ('admin', '".\password_hash('admin', PASSWORD_BCRYPT)."', '1')
+ ");
+
+ $pdo->exec("
+ INSERT INTO config
+ (webhooks_token, api_token)
+ VALUES ('".Security::generateToken()."', '".Security::generateToken()."')
+ ");
+}
diff --git a/app/Schema/Sqlite.php b/app/Schema/Sqlite.php
index 6ea0541c..e4de397d 100644
--- a/app/Schema/Sqlite.php
+++ b/app/Schema/Sqlite.php
@@ -1,6 +1,7 @@
<?php
namespace Schema;
+
use Core\Security;
const VERSION = 20;