193 lines
5.6 KiB
PHP
193 lines
5.6 KiB
PHP
|
<?php
|
||
|
|
||
|
use Phinx\Migration\AbstractMigration;
|
||
|
|
||
|
class InitialMigration extends AbstractMigration {
|
||
|
|
||
|
/**
|
||
|
* Create basic database schema
|
||
|
*/
|
||
|
public function change()
|
||
|
{
|
||
|
// Session storage table
|
||
|
if ( ! $this->hasTable('todo_ci_sessions'))
|
||
|
{
|
||
|
$this->table('todo_ci_sessions', [
|
||
|
'id' => FALSE,
|
||
|
'primary_key' => 'session_id'
|
||
|
])->addColumn('session_id' , 'string', ['limit' => 40])
|
||
|
->addColumn('ip_address', 'string', ['limit' => 40])
|
||
|
->addColumn('user_agent', 'string', ['limit' => 255])
|
||
|
->addColumn('last_activity', 'integer')
|
||
|
->addColumn('user_data', 'text')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// User table
|
||
|
if ( ! $this->hasTable('todo_user'))
|
||
|
{
|
||
|
$this->table('todo_user')
|
||
|
->addColumn('username', 'string', ['limit' => 255])
|
||
|
->addColumn('password', 'string', ['limit' => 255])
|
||
|
->addColumn('email', 'string', ['limit' => 128])
|
||
|
->addColumn('enabled', 'integer', ['default' => 1])
|
||
|
->addColumn('timezone', 'string', ['limit' => 32, 'default' => 'America/Detroit'])
|
||
|
->addColumn('num_format', 'integer', ['default' => 0])
|
||
|
->addColumn('reset_token', 'string', ['limit' => 128])
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Group table
|
||
|
if ( ! $this->hasTable('todo_group'))
|
||
|
{
|
||
|
$this->table('todo_group')
|
||
|
->addColumn('name', 'string', ['limit' => 128])
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Category table
|
||
|
if ( ! $this->hasTable('todo_category'))
|
||
|
{
|
||
|
$this->table('todo_category')
|
||
|
->addColumn('title', 'string', ['limit' => 128])
|
||
|
->addColumn('description', 'text', ['null' => FALSE])
|
||
|
->addColumn('group_id', 'integer', ['default' => 0])
|
||
|
->addForeignKey('group_id', 'todo_group', 'id')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Priority list table
|
||
|
if ( ! $this->hasTable('todo_priority'))
|
||
|
{
|
||
|
$this->table('todo_priority')
|
||
|
->addColumn('value', 'string')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Status list table
|
||
|
if ( ! $this->hasTable('todo_status'))
|
||
|
{
|
||
|
$this->table('todo_status')
|
||
|
->addColumn('value', 'string')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Task table
|
||
|
if ( ! $this->hasTable('todo_item'))
|
||
|
{
|
||
|
$this->table('todo_item')
|
||
|
->addColumn('user_id', 'integer')
|
||
|
->addColumn('category_id', 'integer')
|
||
|
->addColumn('priority', 'integer')
|
||
|
->addColumn('status', 'integer', ['default' => 0])
|
||
|
->addColumn('title', 'string', ['limit' => 128])
|
||
|
->addColumn('description', 'text', ['null' => FALSE])
|
||
|
->addColumn('due', 'integer', ['default' => 0])
|
||
|
->addColumn('modified', 'integer')
|
||
|
->addColumn('created', 'integer')
|
||
|
->addForeignKey('category_id', 'todo_category', 'id')
|
||
|
->addForeignKey('priority', 'todo_priority', 'id')
|
||
|
->addForeignKey('status', 'todo_status', 'id')
|
||
|
->addForeignKey('user_id', 'todo_user', 'id')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Checklist table
|
||
|
if ( ! $this->hasTable('todo_checklist'))
|
||
|
{
|
||
|
$this->table('todo_checklist')
|
||
|
->addColumn('task_id', 'integer')
|
||
|
->addColumn('desc', 'string', ['limit' => 128])
|
||
|
->addColumn('is_checked', 'integer')
|
||
|
->addForeignKey('task_id', 'todo_item', 'id')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
|
||
|
// Group task sharing table
|
||
|
if ( ! $this->hasTable('todo_group_task_link'))
|
||
|
{
|
||
|
$this->table('todo_group_task_link', [
|
||
|
'id' => FALSE,
|
||
|
'primary_key' => ['group_id', 'task_id']
|
||
|
])->addColumn('group_id', 'integer')
|
||
|
->addColumn('task_id', 'integer')
|
||
|
->addColumn('permissions', 'integer')
|
||
|
->addForeignKey('group_id', 'todo_group', 'id')
|
||
|
->addForeignKey('task_id', 'todo_item', 'id')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Group user sharing table
|
||
|
if ( ! $this->hasTable('todo_group_users_link'))
|
||
|
{
|
||
|
$this->table('todo_group_users_link', [
|
||
|
'id' => FALSE,
|
||
|
'primary_key' => ['group_id', 'user_id']
|
||
|
])->addColumn('group_id', 'integer')
|
||
|
->addColumn('user_id', 'integer')
|
||
|
->addColumn('is_admin', 'integer')
|
||
|
->addForeignKey('group_id', 'todo_group', 'id')
|
||
|
->addForeignKey('user_id', 'todo_user', 'id')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Task comments table
|
||
|
if ( ! $this->hasTable('todo_item_comments'))
|
||
|
{
|
||
|
$this->table('todo_item_comments')
|
||
|
->addColumn('user_id', 'integer')
|
||
|
->addColumn('item_id', 'integer')
|
||
|
->addColumn('comment', 'text')
|
||
|
->addColumn('time_posted', 'integer')
|
||
|
->addColumn('status', 'integer')
|
||
|
->addForeignKey('item_id', 'todo_item', 'id')
|
||
|
->addForeignKey('status', 'todo_status', 'id')
|
||
|
->addForeignKey('user_id', 'todo_user', 'id')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Reminder table
|
||
|
if ( ! $this->hasTable('todo_reminder'))
|
||
|
{
|
||
|
$this->table('todo_reminder')
|
||
|
->addColumn('task_id', 'integer')
|
||
|
->addColumn('reminder_time', 'integer')
|
||
|
->addColumn('sent', 'integer', ['default' => 0])
|
||
|
->addColumn('user_id', 'integer')
|
||
|
->addForeignKey('task_id', 'todo_item', 'id')
|
||
|
->addForeignKey('user_id', 'todo_user', 'id', [
|
||
|
'update' => 'cascade',
|
||
|
'delete' => 'cascade'
|
||
|
])->create();
|
||
|
}
|
||
|
|
||
|
// Friend link table
|
||
|
if ( ! $this->hasTable('todo_user_friend_link'))
|
||
|
{
|
||
|
$this->table('todo_user_friend_link', [
|
||
|
'id' => FALSE,
|
||
|
'primary_key' => ['user_id', 'user_friend_id']
|
||
|
])->addColumn('user_id', 'integer')
|
||
|
->addColumn('user_friend_id', 'integer')
|
||
|
->addColumn('confirmed', 'integer', ['default' => -1])
|
||
|
->addForeignKey('user_friend_id', 'todo_user', 'id')
|
||
|
->addForeignKey('user_id', 'todo_user', 'id')
|
||
|
->create();
|
||
|
}
|
||
|
|
||
|
// Task shared by user table
|
||
|
if ( ! $this->hasTable('todo_user_task_link'))
|
||
|
{
|
||
|
$this->table('todo_user_task_link', [
|
||
|
'id' => FALSE,
|
||
|
'primary_key' => ['task_id', 'user_id']
|
||
|
])->addColumn('user_id', 'integer')
|
||
|
->addColumn('task_id', 'integer')
|
||
|
->addColumn('permissions', 'integer')
|
||
|
->addForeignKey('task_id', 'todo_item', 'id')
|
||
|
->addForeignKey('user_id', 'todo_user', 'id')
|
||
|
->create();
|
||
|
}
|
||
|
}
|
||
|
}
|