--- /dev/null
+<?php
+/**
+ * Create Nag base tables (as of Nag 2.x).
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ * @category Horde
+ * @license http://www.fsf.org/copyleft/gpl.html GPL
+ * @package Nag
+ */
+class NagBaseTables extends Horde_Db_Migration_Base
+{
+ /**
+ * Upgrade.
+ */
+ public function up()
+ {
+ $tableList = $this->tables();
+
+ if (!in_array('nag_tasks', $tableList)) {
+ $t = $this->createTable('nag_tasks', array('primaryKey' => false));
+ $t->column('task_id', 'string', array('limit' => 32, 'null' => false));
+ $t->column('task_owner', 'string', array('null' => false));
+ $t->column('task_creator', 'string', array('null' => false));
+ $t->column('task_parent', 'string');
+ $t->column('task_assignee', 'string');
+ $t->column('task_name', 'string', array('null' => false));
+ $t->column('task_uid', 'string', array('null' => false));
+ $t->column('task_desc', 'text');
+ $t->column('task_start', 'integer');
+ $t->column('task_due', 'integer');
+ $t->column('task_priority', 'integer', array('default' => 0, 'null' => false));
+ $t->column('task_estimate', 'float');
+ $t->column('task_category', 'string', array('limit' => 80));
+ $t->column('task_completed', 'integer', array('limit' => 1, 'default' => 0, 'null' => false));
+ $t->column('task_completed_date', 'integer');
+ $t->column('task_alarm', 'integer', array('default' => 0, 'null' => false));
+ $t->column('task_alarm_methods', 'text');
+ $t->column('task_private', 'integer', array('limit' => 1, 'default' => 0, 'null' => false));
+ $t->primaryKey(array('task_id'));
+ $t->end();
+
+ $this->addIndex('nag_tasks', 'task_owner');
+ $this->addIndex('nag_tasks', 'task_uid');
+ $this->addIndex('nag_tasks', 'task_start');
+ }
+
+ if (!in_array('nag_shares', $tableList)) {
+ $t = $this->createTable('nag_shares', array('primaryKey' => 'share_id'));
+ $t->column('share_id', 'integer', array('null' => false));
+ $t->column('share_name', 'string', array('null' => false));
+ $t->column('share_owner', 'string');
+ $t->column('share_flags', 'integer', array('limit' => 2, 'default' => 0, 'null' => false));
+ $t->column('perm_creator', 'integer', array('limit' => 2, 'default' => 0, 'null' => false));
+ $t->column('perm_default', 'integer', array('limit' => 2, 'default' => 0, 'null' => false));
+ $t->column('perm_guest', 'integer', array('limit' => 2, 'default' => 0, 'null' => false));
+ $t->column('attribute_name', 'string', array('null' => false));
+ $t->column('attribute_desc', 'string');
+ $t->column('attribute_color', 'string', array('limit' => 7));
+ $t->primaryKey(array('share_id'));
+ $t->end();
+
+ $this->addIndex('nag_shares', 'share_name');
+ $this->addIndex('nag_shares', 'share_owner');
+ $this->addIndex('nag_shares', 'perm_creator');
+ $this->addIndex('nag_shares', 'perm_default');
+ $this->addIndex('nag_shares', 'perm_guest');
+ }
+
+ if (!in_array('nag_shares_groups', $tableList)) {
+ $t = $this->createTable('nag_shares_groups', array('primaryKey' => false));
+ $t->column('share_id', 'integer', array('null' => false));
+ $t->column('group_uid', 'string', array('null' => false));
+ $t->column('perm', 'integer', array('limit' => 2, 'null' => false));
+ $t->end();
+
+ $this->addIndex('nag_shares_groups', 'share_id');
+ $this->addIndex('nag_shares_groups', 'group_uid');
+ $this->addIndex('nag_shares_groups', 'perm');
+ }
+
+ if (!in_array('nag_shares_users', $tableList)) {
+ $t = $this->createTable('nag_shares_users', array('primaryKey' => false));
+ $t->column('share_id', 'integer', array('null' => false));
+ $t->column('user_uid', 'string', array('null' => false));
+ $t->column('perm', 'integer', array('limit' => 2, 'null' => false));
+ $t->end();
+
+ $this->addIndex('nag_shares_users', 'share_id');
+ $this->addIndex('nag_shares_users', 'user_uid');
+ $this->addIndex('nag_shares_users', 'perm');
+ }
+ }
+
+ /**
+ * Downgrade.
+ */
+ public function down()
+ {
+ $this->dropTable('nag_tasks');
+ $this->dropTable('nag_shares');
+ $this->dropTable('nag_shares_groups');
+ $this->dropTable('nag_shares_users');
+ }
+}
+++ /dev/null
-CREATE TABLE nag_tasks (
- task_id VARCHAR(32) NOT NULL,
- task_owner VARCHAR(255) NOT NULL,
- task_creator VARCHAR(255) NOT NULL,
- task_parent VARCHAR(255),
- task_assignee VARCHAR(255),
- task_name VARCHAR(255) NOT NULL,
- task_uid VARCHAR(255) NOT NULL,
- task_desc VARCHAR(MAX),
- task_start INT,
- task_due INT,
- task_priority INT DEFAULT 0 NOT NULL,
- task_estimate FLOAT,
- task_category VARCHAR(80),
- task_completed SMALLINT DEFAULT 0 NOT NULL,
- task_completed_date INT,
- task_alarm INT DEFAULT 0 NOT NULL,
- task_alarm_methods VARCHAR(MAX),
- task_private SMALLINT DEFAULT 0 NOT NULL,
---
- PRIMARY KEY (task_id)
-);
-
-CREATE INDEX nag_tasklist_idx ON nag_tasks (task_owner);
-CREATE INDEX nag_uid_idx ON nag_tasks (task_uid);
-CREATE INDEX nag_start_idx ON nag_tasks (task_start);
-
-CREATE TABLE nag_shares (
- share_id INT NOT NULL,
- share_name VARCHAR(255) NOT NULL,
- share_owner VARCHAR(255),
- share_flags SMALLINT DEFAULT 0 NOT NULL,
- perm_creator SMALLINT DEFAULT 0 NOT NULL,
- perm_default SMALLINT DEFAULT 0 NOT NULL,
- perm_guest SMALLINT DEFAULT 0 NOT NULL,
- attribute_name VARCHAR(255) NOT NULL,
- attribute_desc VARCHAR(255),
- attribute_color VARCHAR(7),
- PRIMARY KEY (share_id)
-);
-
-CREATE INDEX nag_shares_share_name_idx ON nag_shares (share_name);
-CREATE INDEX nag_shares_share_owner_idx ON nag_shares (share_owner);
-CREATE INDEX nag_shares_perm_creator_idx ON nag_shares (perm_creator);
-CREATE INDEX nag_shares_perm_default_idx ON nag_shares (perm_default);
-CREATE INDEX nag_shares_perm_guest_idx ON nag_shares (perm_guest);
-
-CREATE TABLE nag_shares_groups (
- share_id INT NOT NULL,
- group_uid VARCHAR(255) NOT NULL,
- perm SMALLINT NOT NULL
-);
-
-CREATE INDEX nag_shares_groups_share_id_idx ON nag_shares_groups (share_id);
-CREATE INDEX nag_shares_groups_group_uid_idx ON nag_shares_groups (group_uid);
-CREATE INDEX nag_shares_groups_perm_idx ON nag_shares_groups (perm);
-
-CREATE TABLE nag_shares_users (
- share_id INT NOT NULL,
- user_uid VARCHAR(255) NOT NULL,
- perm SMALLINT NOT NULL
-);
-
-CREATE INDEX nag_shares_users_share_id_idx ON nag_shares_users (share_id);
-CREATE INDEX nag_shares_users_user_uid_idx ON nag_shares_users (user_uid);
-CREATE INDEX nag_shares_users_perm_idx ON nag_shares_users (perm);
+++ /dev/null
-CREATE TABLE nag_tasks (
- task_id VARCHAR2(32) NOT NULL,
- task_owner VARCHAR2(255) NOT NULL,
- task_creator VARCHAR2(255) NOT NULL,
- task_parent VARCHAR2(255),
- task_assignee VARCHAR2(255),
- task_name VARCHAR2(255) NOT NULL,
- task_uid VARCHAR2(255) NOT NULL,
- task_desc CLOB,
- task_start NUMBER(16),
- task_due NUMBER(16),
- task_priority NUMBER(16) DEFAULT 0 NOT NULL,
- task_estimate FLOAT,
- task_category VARCHAR2(80),
- task_completed NUMBER(8) DEFAULT 0 NOT NULL,
- task_completed_date NUMBER(16),
- task_alarm NUMBER(16) DEFAULT 0 NOT NULL,
- task_alarm_methods CLOB,
- task_private NUMBER(8) DEFAULT 0 NOT NULL,
---
- PRIMARY KEY (task_id)
-);
-
-CREATE INDEX nag_tasklist_idx ON nag_tasks (task_owner);
-CREATE INDEX nag_uid_idx ON nag_tasks (task_uid);
-CREATE INDEX nag_start_idx ON nag_tasks (task_start);
-
-CREATE TABLE nag_shares (
- share_id NUMBER(16) NOT NULL,
- share_name VARCHAR2(255) NOT NULL,
- share_owner VARCHAR2(25),
- share_flags NUMBER(8) DEFAULT 0 NOT NULL,
- perm_creator NUMBER(8) DEFAULT 0 NOT NULL,
- perm_default NUMBER(8) DEFAULT 0 NOT NULL,
- perm_guest NUMBER(8) DEFAULT 0 NOT NULL,
- attribute_name VARCHAR2(255) NOT NULL,
- attribute_desc VARCHAR2(255),
- attribute_color VARCHAR2(7),
- PRIMARY KEY (share_id)
-);
-
-CREATE INDEX nag_shares_name_idx ON nag_shares (share_name);
-CREATE INDEX nag_shares_owner_idx ON nag_shares (share_owner);
-CREATE INDEX nag_shares_creator_idx ON nag_shares (perm_creator);
-CREATE INDEX nag_shares_default_idx ON nag_shares (perm_default);
-CREATE INDEX nag_shares_guest_idx ON nag_shares (perm_guest);
-
-CREATE TABLE nag_shares_groups (
- share_id NUMBER(16) NOT NULL,
- group_uid VARCHAR2(255) NOT NULL,
- perm NUMBER(8) NOT NULL
-);
-
-CREATE INDEX nag_groups_share_id_idx ON nag_shares_groups (share_id);
-CREATE INDEX nag_groups_group_uid_idx ON nag_shares_groups (group_uid);
-CREATE INDEX nag_groups_perm_idx ON nag_shares_groups (perm);
-
-CREATE TABLE nag_shares_users (
- share_id NUMBER(16) NOT NULL,
- user_uid VARCHAR2(255) NOT NULL,
- perm NUMBER(8) NOT NULL
-);
-
-CREATE INDEX nag_users_share_id_idx ON nag_shares_users (share_id);
-CREATE INDEX nag_users_user_uid_idx ON nag_shares_users (user_uid);
-CREATE INDEX nag_users_perm_idx ON nag_shares_users (perm);
+++ /dev/null
-CREATE TABLE nag_tasks (
- task_id VARCHAR(32) NOT NULL,
- task_owner VARCHAR(255) NOT NULL,
- task_creator VARCHAR(255) NOT NULL,
- task_parent VARCHAR(255),
- task_assignee VARCHAR(255),
- task_name VARCHAR(255) NOT NULL,
- task_uid VARCHAR(255) NOT NULL,
- task_desc TEXT,
- task_start INT,
- task_due INT,
- task_priority INT DEFAULT 0 NOT NULL,
- task_estimate FLOAT,
- task_category VARCHAR(80),
- task_completed SMALLINT DEFAULT 0 NOT NULL,
- task_completed_date INT,
- task_alarm INT DEFAULT 0 NOT NULL,
- task_alarm_methods TEXT,
- task_private SMALLINT DEFAULT 0 NOT NULL,
---
- PRIMARY KEY (task_id)
-);
-
-CREATE INDEX nag_tasklist_idx ON nag_tasks (task_owner);
-CREATE INDEX nag_uid_idx ON nag_tasks (task_uid);
-CREATE INDEX nag_start_idx ON nag_tasks (task_start);
-
-CREATE TABLE nag_shares (
- share_id INT NOT NULL,
- share_name VARCHAR(255) NOT NULL,
- share_owner VARCHAR(255),
- share_flags SMALLINT DEFAULT 0 NOT NULL,
- perm_creator SMALLINT DEFAULT 0 NOT NULL,
- perm_default SMALLINT DEFAULT 0 NOT NULL,
- perm_guest SMALLINT DEFAULT 0 NOT NULL,
- attribute_name VARCHAR(255) NOT NULL,
- attribute_desc VARCHAR(255),
- attribute_color VARCHAR(7),
- PRIMARY KEY (share_id)
-);
-
-CREATE INDEX nag_shares_share_name_idx ON nag_shares (share_name);
-CREATE INDEX nag_shares_share_owner_idx ON nag_shares (share_owner);
-CREATE INDEX nag_shares_perm_creator_idx ON nag_shares (perm_creator);
-CREATE INDEX nag_shares_perm_default_idx ON nag_shares (perm_default);
-CREATE INDEX nag_shares_perm_guest_idx ON nag_shares (perm_guest);
-
-CREATE TABLE nag_shares_groups (
- share_id INT NOT NULL,
- group_uid VARCHAR(255) NOT NULL,
- perm SMALLINT NOT NULL
-);
-
-CREATE INDEX nag_shares_groups_share_id_idx ON nag_shares_groups (share_id);
-CREATE INDEX nag_shares_groups_group_uid_idx ON nag_shares_groups (group_uid);
-CREATE INDEX nag_shares_groups_perm_idx ON nag_shares_groups (perm);
-
-CREATE TABLE nag_shares_users (
- share_id INT NOT NULL,
- user_uid VARCHAR(255) NOT NULL,
- perm SMALLINT NOT NULL
-);
-
-CREATE INDEX nag_shares_users_share_id_idx ON nag_shares_users (share_id);
-CREATE INDEX nag_shares_users_user_uid_idx ON nag_shares_users (user_uid);
-CREATE INDEX nag_shares_users_perm_idx ON nag_shares_users (perm);
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<database>
-
- <name><variable>name</variable></name>
- <create>false</create>
- <overwrite>false</overwrite>
-
- <table>
-
- <name>nag_tasks</name>
-
- <declaration>
-
- <field>
- <name>task_id</name>
- <type>text</type>
- <length>32</length>
- <notnull>true</notnull>
- </field>
-
- <field>
- <name>task_owner</name>
- <type>text</type>
- <length>255</length>
- <notnull>true</notnull>
- </field>
-
- <field>
- <name>task_creator</name>
- <type>text</type>
- <length>255</length>
- <notnull>true</notnull>
- </field>
-
- <field>
- <name>task_parent</name>
- <type>text</type>
- <length>32</length>
- </field>
-
- <field>
- <name>task_assignee</name>
- <type>text</type>
- <length>255</length>
- </field>
-
- <field>
- <name>task_name</name>
- <type>text</type>
- <length>255</length>
- <notnull>true</notnull>
- </field>
-
- <field>
- <name>task_uid</name>
- <type>text</type>
- <length>255</length>
- <notnull>true</notnull>
- </field>
-
- <field>
- <name>task_desc</name>
- <type>clob</type>
- </field>
-
- <field>
- <name>task_start</name>
- <type>integer</type>
- </field>
-
- <field>
- <name>task_due</name>
- <type>integer</type>
- </field>
-
- <field>
- <name>task_priority</name>
- <type>integer</type>
- <notnull>true</notnull>
- <default>0</default>
- </field>
-
- <field>
- <name>task_estimate</name>
- <type>float</type>
- </field>
-
- <field>
- <name>task_category</name>
- <type>text</type>
- <length>80</length>
- </field>
-
- <field>
- <name>task_completed</name>
- <type>integer</type>
- <length>1</length>
- <notnull>true</notnull>
- <default>0</default>
- </field>
-
- <field>
- <name>task_completed_date</name>
- <type>integer</type>
- </field>
-
- <field>
- <name>task_alarm</name>
- <type>integer</type>
- <unsigned>false</unsigned>
- <notnull>true</notnull>
- <default>0</default>
- </field>
-
- <field>
- <name>task_alarm_methods</name>
- <type>clob</type>
- </field>
-
- <field>
- <name>task_private</name>
- <type>integer</type>
- <length>1</length>
- <notnull>true</notnull>
- <default>0</default>
- </field>
-
- <index>
- <name>nag_primary</name>
- <primary>true</primary>
- <field>
- <name>task_id</name>
- </field>
- </index>
-
- <index>
- <name>nag_tasklist</name>
- <field>
- <name>task_owner</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_uid</name>
- <field>
- <name>task_uid</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_start</name>
- <field>
- <name>task_start</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- </declaration>
-
- </table>
-
- <table>
-
- <name>nag_shares</name>
-
- <declaration>
-
- <field>
- <name>share_id</name>
- <type>integer</type>
- <default></default>
- <notnull>true</notnull>
- <length>4</length>
- </field>
-
- <field>
- <name>share_name</name>
- <type>text</type>
- <default></default>
- <notnull>true</notnull>
- <length>255</length>
- </field>
-
- <field>
- <name>share_owner</name>
- <type>text</type>
- <default></default>
- <length>255</length>
- </field>
-
- <field>
- <name>share_flags</name>
- <type>integer</type>
- <default>0</default>
- <notnull>true</notnull>
- <length>2</length>
- </field>
-
- <field>
- <name>perm_creator</name>
- <type>integer</type>
- <default>0</default>
- <notnull>true</notnull>
- <length>2</length>
- </field>
-
- <field>
- <name>perm_default</name>
- <type>integer</type>
- <default>0</default>
- <notnull>true</notnull>
- <length>2</length>
- </field>
-
- <field>
- <name>perm_guest</name>
- <type>integer</type>
- <default>0</default>
- <notnull>true</notnull>
- <length>2</length>
- </field>
-
- <field>
- <name>attribute_name</name>
- <type>text</type>
- <default></default>
- <notnull>true</notnull>
- <length>255</length>
- </field>
-
- <field>
- <name>attribute_desc</name>
- <type>text</type>
- <default></default>
- <notnull>false</notnull>
- <length>255</length>
- </field>
-
- <field>
- <name>attribute_color</name>
- <type>text</type>
- <default></default>
- <notnull>false</notnull>
- <length>7</length>
- </field>
-
- <index>
- <name>nag_shares_name</name>
- <field>
- <name>share_name</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_shares_owner</name>
- <field>
- <name>share_owner</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_shares_creator</name>
- <field>
- <name>perm_creator</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_shares_default</name>
- <field>
- <name>perm_default</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_shares_guest</name>
- <field>
- <name>perm_guest</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_shares_pKey</name>
- <primary>true</primary>
- <field>
- <name>share_id</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- </declaration>
-
- </table>
-
- <table>
-
- <name>nag_shares_groups</name>
-
- <declaration>
-
- <field>
- <name>share_id</name>
- <type>integer</type>
- <default></default>
- <notnull>true</notnull>
- <length>4</length>
- </field>
-
- <field>
- <name>group_uid</name>
- <type>text</type>
- <default></default>
- <notnull>true</notnull>
- <length>255</length>
- </field>
-
- <field>
- <name>perm</name>
- <type>integer</type>
- <default></default>
- <notnull>true</notnull>
- <length>2</length>
- </field>
-
- <index>
- <name>nag_groups_share_id</name>
- <field>
- <name>share_id</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_groups_group_uid</name>
- <field>
- <name>group_uid</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_groups_perm</name>
- <field>
- <name>perm</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- </declaration>
-
- </table>
-
- <table>
-
- <name>nag_shares_users</name>
-
- <declaration>
-
- <field>
- <name>share_id</name>
- <type>integer</type>
- <default></default>
- <notnull>true</notnull>
- <length>4</length>
- </field>
-
- <field>
- <name>user_uid</name>
- <type>text</type>
- <default></default>
- <notnull>true</notnull>
- <length>255</length>
- </field>
-
- <field>
- <name>perm</name>
- <type>integer</type>
- <default></default>
- <notnull>true</notnull>
- <length>2</length>
- </field>
-
- <index>
- <name>nag_users_share_id</name>
- <field>
- <name>share_id</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_users_user_uid</name>
- <field>
- <name>user_uid</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- <index>
- <name>nag_users_perm</name>
- <field>
- <name>perm</name>
- <sorting>ascending</sorting>
- </field>
- </index>
-
- </declaration>
-
- </table>
-
-</database>