xref: /webtrees/app/Schema/Migration0.php (revision c1010eda29c0909ed4d5d463f32d32bfefdd4dfe)
13bfb94b0SGreg Roach<?php
23bfb94b0SGreg Roach/**
33bfb94b0SGreg Roach * webtrees: online genealogy
41062a142SGreg Roach * Copyright (C) 2018 webtrees development team
53bfb94b0SGreg Roach * This program is free software: you can redistribute it and/or modify
63bfb94b0SGreg Roach * it under the terms of the GNU General Public License as published by
73bfb94b0SGreg Roach * the Free Software Foundation, either version 3 of the License, or
83bfb94b0SGreg Roach * (at your option) any later version.
93bfb94b0SGreg Roach * This program is distributed in the hope that it will be useful,
103bfb94b0SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
113bfb94b0SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
123bfb94b0SGreg Roach * GNU General Public License for more details.
133bfb94b0SGreg Roach * You should have received a copy of the GNU General Public License
143bfb94b0SGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>.
153bfb94b0SGreg Roach */
1676692c8bSGreg Roachnamespace Fisharebest\Webtrees\Schema;
1776692c8bSGreg Roach
183bfb94b0SGreg Roachuse Fisharebest\Webtrees\Database;
193bfb94b0SGreg Roachuse Fisharebest\Webtrees\Module;
203bfb94b0SGreg Roachuse Fisharebest\Webtrees\Site;
213bfb94b0SGreg Roach
223bfb94b0SGreg Roach/**
2376692c8bSGreg Roach * Upgrade the database schema from version 0 (empty database) to version 1.
243bfb94b0SGreg Roach */
25*c1010edaSGreg Roachclass Migration0 implements MigrationInterface
26*c1010edaSGreg Roach{
2776692c8bSGreg Roach    /**
2876692c8bSGreg Roach     * Upgrade to to the next version
2976692c8bSGreg Roach     */
30*c1010edaSGreg Roach    public function upgrade()
31*c1010edaSGreg Roach    {
323bfb94b0SGreg Roach        Database::exec(
333bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##gedcom` (" .
343bfb94b0SGreg Roach            " gedcom_id     INTEGER AUTO_INCREMENT NOT NULL," .
353bfb94b0SGreg Roach            " gedcom_name   VARCHAR(255)           NOT NULL," .
363bfb94b0SGreg Roach            " sort_order    INTEGER                NOT NULL DEFAULT 0," .
373bfb94b0SGreg Roach            " PRIMARY KEY                (gedcom_id)," .
383bfb94b0SGreg Roach            " UNIQUE  KEY `##gedcom_ix1` (gedcom_name)," .
393bfb94b0SGreg Roach            "         KEY `##gedcom_ix2` (sort_order)" .
403bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
413bfb94b0SGreg Roach        );
423bfb94b0SGreg Roach        Database::exec(
433bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##site_setting` (" .
443bfb94b0SGreg Roach            " setting_name  VARCHAR(32)  NOT NULL," .
453bfb94b0SGreg Roach            " setting_value VARCHAR(255) NOT NULL," .
463bfb94b0SGreg Roach            " PRIMARY KEY (setting_name)" .
473bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
483bfb94b0SGreg Roach        );
493bfb94b0SGreg Roach        Database::exec(
503bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##gedcom_setting` (" .
513bfb94b0SGreg Roach            " gedcom_id     INTEGER      NOT NULL," .
523bfb94b0SGreg Roach            " setting_name  VARCHAR(32)  NOT NULL," .
533bfb94b0SGreg Roach            " setting_value VARCHAR(255) NOT NULL," .
543bfb94b0SGreg Roach            " PRIMARY KEY                        (gedcom_id, setting_name)," .
553bfb94b0SGreg Roach            " FOREIGN KEY `##gedcom_setting_fk1` (gedcom_id) REFERENCES `##gedcom` (gedcom_id) /* ON DELETE CASCADE */" .
563bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
573bfb94b0SGreg Roach        );
583bfb94b0SGreg Roach        Database::exec(
593bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##user` (" .
603bfb94b0SGreg Roach            " user_id   INTEGER AUTO_INCREMENT NOT NULL," .
613bfb94b0SGreg Roach            " user_name VARCHAR(32)            NOT NULL," .
623bfb94b0SGreg Roach            " real_name VARCHAR(64)            NOT NULL," .
633bfb94b0SGreg Roach            " email     VARCHAR(64)            NOT NULL," .
643bfb94b0SGreg Roach            " password  VARCHAR(128)           NOT NULL," .
653bfb94b0SGreg Roach            " PRIMARY KEY              (user_id)," .
663bfb94b0SGreg Roach            " UNIQUE  KEY `##user_ix1` (user_name)," .
673bfb94b0SGreg Roach            " UNIQUE  KEY `##user_ix2` (email)" .
683bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
693bfb94b0SGreg Roach        );
703bfb94b0SGreg Roach        Database::exec(
713bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##user_setting` (" .
723bfb94b0SGreg Roach            " user_id       INTEGER      NOT NULL," .
733bfb94b0SGreg Roach            " setting_name  VARCHAR(32)  NOT NULL," .
743bfb94b0SGreg Roach            " setting_value VARCHAR(255) NOT NULL," .
753bfb94b0SGreg Roach            " PRIMARY KEY                      (user_id, setting_name)," .
763bfb94b0SGreg Roach            " FOREIGN KEY `##user_setting_fk1` (user_id) REFERENCES `##user` (user_id) /* ON DELETE CASCADE */" .
773bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
783bfb94b0SGreg Roach        );
793bfb94b0SGreg Roach        Database::exec(
803bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##user_gedcom_setting` (" .
813bfb94b0SGreg Roach            " user_id       INTEGER      NOT NULL," .
823bfb94b0SGreg Roach            " gedcom_id     INTEGER      NOT NULL," .
833bfb94b0SGreg Roach            " setting_name  VARCHAR(32)  NOT NULL," .
843bfb94b0SGreg Roach            " setting_value VARCHAR(255) NOT NULL," .
853bfb94b0SGreg Roach            " PRIMARY KEY                             (user_id, gedcom_id, setting_name)," .
863bfb94b0SGreg Roach            " FOREIGN KEY `##user_gedcom_setting_fk1` (user_id)   REFERENCES `##user` (user_id) /* ON DELETE CASCADE */," .
873bfb94b0SGreg Roach            " FOREIGN KEY `##user_gedcom_setting_fk2` (gedcom_id) REFERENCES `##gedcom` (gedcom_id) /* ON DELETE CASCADE */" .
883bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
893bfb94b0SGreg Roach        );
903bfb94b0SGreg Roach        Database::exec(
913bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##log` (" .
923bfb94b0SGreg Roach            " log_id      INTEGER AUTO_INCREMENT NOT NULL," .
933bfb94b0SGreg Roach            " log_time    TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP," .
943bfb94b0SGreg Roach            " log_type    ENUM('auth', 'config', 'debug', 'edit', 'error', 'media', 'search') NOT NULL," .
953bfb94b0SGreg Roach            " log_message TEXT         NOT NULL," .
963bfb94b0SGreg Roach            " ip_address  VARCHAR(40)  NOT NULL," .
973bfb94b0SGreg Roach            " user_id     INTEGER          NULL," .
983bfb94b0SGreg Roach            " gedcom_id   INTEGER          NULL," .
993bfb94b0SGreg Roach            " PRIMARY KEY             (log_id)," .
1003bfb94b0SGreg Roach            "         KEY `##log_ix1` (log_time)," .
1013bfb94b0SGreg Roach            "         KEY `##log_ix2` (log_type)," .
1023bfb94b0SGreg Roach            "         KEY `##log_ix3` (ip_address)," .
1033bfb94b0SGreg Roach            " FOREIGN KEY `##log_fk1` (user_id)   REFERENCES `##user`(user_id) /* ON DELETE SET NULL */," .
1043bfb94b0SGreg Roach            " FOREIGN KEY `##log_fk2` (gedcom_id) REFERENCES `##gedcom` (gedcom_id) /* ON DELETE SET NULL */" .
1053bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
1063bfb94b0SGreg Roach        );
1073bfb94b0SGreg Roach        Database::exec(
1083bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##change` (" .
1093bfb94b0SGreg Roach            " change_id      INTEGER AUTO_INCREMENT                  NOT NULL," .
1103bfb94b0SGreg Roach            " change_time    TIMESTAMP                               NOT NULL DEFAULT CURRENT_TIMESTAMP," .
1113bfb94b0SGreg Roach            " status         ENUM('accepted', 'pending', 'rejected') NOT NULL DEFAULT 'pending'," .
1123bfb94b0SGreg Roach            " gedcom_id      INTEGER                                 NOT NULL," .
1133bfb94b0SGreg Roach            " xref           VARCHAR(20)                             NOT NULL," .
1143bfb94b0SGreg Roach            " old_gedcom     MEDIUMTEXT                              NOT NULL," .
1153bfb94b0SGreg Roach            " new_gedcom     MEDIUMTEXT                              NOT NULL," .
1163bfb94b0SGreg Roach            " user_id        INTEGER                                 NOT NULL," .
1173bfb94b0SGreg Roach            " PRIMARY KEY                (change_id)," .
1183bfb94b0SGreg Roach            "         KEY `##change_ix1` (gedcom_id, status, xref)," .
1193bfb94b0SGreg Roach            " FOREIGN KEY `##change_fk1` (user_id)   REFERENCES `##user` (user_id) /* ON DELETE RESTRICT */," .
1203bfb94b0SGreg Roach            " FOREIGN KEY `##change_fk2` (gedcom_id) REFERENCES `##gedcom` (gedcom_id) /* ON DELETE CASCADE */" .
1213bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
1223bfb94b0SGreg Roach        );
1233bfb94b0SGreg Roach        Database::exec(
1243bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##message` (" .
1253bfb94b0SGreg Roach            " message_id INTEGER AUTO_INCREMENT NOT NULL," .
1263bfb94b0SGreg Roach            " sender     VARCHAR(64)            NOT NULL," . // username or email address
1273bfb94b0SGreg Roach            " ip_address VARCHAR(40)            NOT NULL," . // long enough for IPv6
1283bfb94b0SGreg Roach            " user_id    INTEGER                NOT NULL," .
1293bfb94b0SGreg Roach            " subject    VARCHAR(255)           NOT NULL," .
1303bfb94b0SGreg Roach            " body       TEXT                   NOT NULL," .
1313bfb94b0SGreg Roach            " created    TIMESTAMP              NOT NULL DEFAULT CURRENT_TIMESTAMP," .
1323bfb94b0SGreg Roach            " PRIMARY KEY                 (message_id)," .
1333bfb94b0SGreg Roach            " FOREIGN KEY `##message_fk1` (user_id)   REFERENCES `##user` (user_id) /* ON DELETE RESTRICT */" .
1343bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
1353bfb94b0SGreg Roach        );
1363bfb94b0SGreg Roach        Database::exec(
1373bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##default_resn` (" .
1383bfb94b0SGreg Roach            " default_resn_id INTEGER AUTO_INCREMENT                             NOT NULL," .
1393bfb94b0SGreg Roach            " gedcom_id       INTEGER                                            NOT NULL," .
1403bfb94b0SGreg Roach            " xref            VARCHAR(20)                                            NULL," .
1413bfb94b0SGreg Roach            " tag_type        VARCHAR(15)                                            NULL," .
1423bfb94b0SGreg Roach            " resn            ENUM ('none', 'privacy', 'confidential', 'hidden') NOT NULL," .
1433bfb94b0SGreg Roach            " comment         VARCHAR(255)                                           NULL," .
1443bfb94b0SGreg Roach            " updated         TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP," .
1453bfb94b0SGreg Roach            " PRIMARY KEY                      (default_resn_id)," .
1463bfb94b0SGreg Roach            " UNIQUE  KEY `##default_resn_ix1` (gedcom_id, xref, tag_type)," .
1473bfb94b0SGreg Roach            " FOREIGN KEY `##default_resn_fk1` (gedcom_id)  REFERENCES `##gedcom` (gedcom_id)" .
1483bfb94b0SGreg Roach            ") ENGINE=InnoDB COLLATE=utf8_unicode_ci"
1493bfb94b0SGreg Roach        );
1503bfb94b0SGreg Roach        Database::exec(
1513bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##individuals` (" .
1523bfb94b0SGreg Roach            " i_id     VARCHAR(20)         NOT NULL," .
1533bfb94b0SGreg Roach            " i_file   INTEGER             NOT NULL," .
1543bfb94b0SGreg Roach            " i_rin    VARCHAR(20)         NOT NULL," .
1553bfb94b0SGreg Roach            " i_sex    ENUM('U', 'M', 'F') NOT NULL," .
1563bfb94b0SGreg Roach            " i_gedcom MEDIUMTEXT          NOT NULL," .
1573bfb94b0SGreg Roach            " PRIMARY KEY                     (i_id, i_file)," .
1583bfb94b0SGreg Roach            " UNIQUE  KEY `##individuals_ix1` (i_file, i_id)" .
1593bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
1603bfb94b0SGreg Roach        );
1613bfb94b0SGreg Roach        Database::exec(
1623bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##families` (" .
1633bfb94b0SGreg Roach            " f_id      VARCHAR(20)  NOT NULL," .
1643bfb94b0SGreg Roach            " f_file    INTEGER      NOT NULL," .
1653bfb94b0SGreg Roach            " f_husb    VARCHAR(20)      NULL," .
1663bfb94b0SGreg Roach            " f_wife    VARCHAR(20)      NULL," .
1673bfb94b0SGreg Roach            " f_gedcom  MEDIUMTEXT   NOT NULL," .
1683bfb94b0SGreg Roach            " f_numchil INTEGER      NOT NULL," .
1693bfb94b0SGreg Roach            " PRIMARY KEY                  (f_id, f_file)," .
1703bfb94b0SGreg Roach            " UNIQUE  KEY `##families_ix1` (f_file, f_id)," .
1713bfb94b0SGreg Roach            "         KEY `##families_ix2` (f_husb)," .
1723bfb94b0SGreg Roach            "         KEY `##families_ix3` (f_wife)" .
1733bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
1743bfb94b0SGreg Roach        );
1753bfb94b0SGreg Roach        Database::exec(
1763bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##places` (" .
1773bfb94b0SGreg Roach            " p_id          INTEGER AUTO_INCREMENT NOT NULL," .
1783bfb94b0SGreg Roach            " p_place       VARCHAR(150)               NULL," .
1793bfb94b0SGreg Roach            " p_parent_id   INTEGER                    NULL," .
1803bfb94b0SGreg Roach            " p_file        INTEGER               NOT  NULL," .
1813bfb94b0SGreg Roach            " p_std_soundex TEXT                       NULL," .
1823bfb94b0SGreg Roach            " p_dm_soundex  TEXT                       NULL," .
1833bfb94b0SGreg Roach            " PRIMARY KEY                (p_id)," .
1843bfb94b0SGreg Roach            "         KEY `##places_ix1` (p_file, p_place)," .
1853bfb94b0SGreg Roach            " UNIQUE  KEY `##places_ix2` (p_parent_id, p_file, p_place)" .
1863bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
1873bfb94b0SGreg Roach        );
1883bfb94b0SGreg Roach        Database::exec(
1893bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##placelinks` (" .
1903bfb94b0SGreg Roach            " pl_p_id INTEGER NOT NULL," .
1913bfb94b0SGreg Roach            " pl_gid  VARCHAR(20)  NOT NULL," .
1923bfb94b0SGreg Roach            " pl_file INTEGER  NOT NULL," .
1933bfb94b0SGreg Roach            " PRIMARY KEY                    (pl_p_id, pl_gid, pl_file)," .
1943bfb94b0SGreg Roach            "         KEY `##placelinks_ix1` (pl_p_id)," .
1953bfb94b0SGreg Roach            "         KEY `##placelinks_ix2` (pl_gid)," .
1963bfb94b0SGreg Roach            "         KEY `##placelinks_ix3` (pl_file)" .
1973bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
1983bfb94b0SGreg Roach        );
1993bfb94b0SGreg Roach        Database::exec(
2003bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##dates` (" .
2013bfb94b0SGreg Roach            " d_day        TINYINT     NOT NULL," .
2023bfb94b0SGreg Roach            " d_month      CHAR(5)         NULL," .
2033bfb94b0SGreg Roach            " d_mon        TINYINT     NOT NULL," .
2043bfb94b0SGreg Roach            " d_year       SMALLINT    NOT NULL," .
2053bfb94b0SGreg Roach            " d_julianday1 MEDIUMINT   NOT NULL," .
2063bfb94b0SGreg Roach            " d_julianday2 MEDIUMINT   NOT NULL," .
2073bfb94b0SGreg Roach            " d_fact       VARCHAR(15) NOT NULL," .
2083bfb94b0SGreg Roach            " d_gid        VARCHAR(20) NOT NULL," .
2093bfb94b0SGreg Roach            " d_file       INTEGER     NOT NULL," .
2103bfb94b0SGreg Roach            " d_type       ENUM ('@#DGREGORIAN@', '@#DJULIAN@', '@#DHEBREW@', '@#DFRENCH R@', '@#DHIJRI@', '@#DROMAN@', '@#DJALALI@') NOT NULL," .
2113bfb94b0SGreg Roach            " KEY `##dates_ix1` (d_day)," .
2123bfb94b0SGreg Roach            " KEY `##dates_ix2` (d_month)," .
2133bfb94b0SGreg Roach            " KEY `##dates_ix3` (d_mon)," .
2143bfb94b0SGreg Roach            " KEY `##dates_ix4` (d_year)," .
2153bfb94b0SGreg Roach            " KEY `##dates_ix5` (d_julianday1)," .
2163bfb94b0SGreg Roach            " KEY `##dates_ix6` (d_julianday2)," .
2173bfb94b0SGreg Roach            " KEY `##dates_ix7` (d_gid)," .
2183bfb94b0SGreg Roach            " KEY `##dates_ix8` (d_file)," .
2193bfb94b0SGreg Roach            " KEY `##dates_ix9` (d_type)," .
2203bfb94b0SGreg Roach            " KEY `##dates_ix10` (d_fact, d_gid)" .
2213bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
2223bfb94b0SGreg Roach        );
2233bfb94b0SGreg Roach        Database::exec(
2243bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##media` (" .
2253bfb94b0SGreg Roach            " m_id       VARCHAR(20)            NOT NULL," .
2263bfb94b0SGreg Roach            " m_ext      VARCHAR(6)                 NULL," .
2273bfb94b0SGreg Roach            " m_type     VARCHAR(20)                NULL," .
2283bfb94b0SGreg Roach            " m_titl     VARCHAR(255)               NULL," .
2293bfb94b0SGreg Roach            " m_filename VARCHAR(512)               NULL," .
2303bfb94b0SGreg Roach            " m_file     INTEGER                NOT NULL," .
2313bfb94b0SGreg Roach            " m_gedcom   MEDIUMTEXT                 NULL," .
2323bfb94b0SGreg Roach            " PRIMARY KEY               (m_file, m_id)," .
2333bfb94b0SGreg Roach            " UNIQUE  KEY `##media_ix1` (m_id, m_file)," .
2343bfb94b0SGreg Roach            "         KEY `##media_ix2` (m_ext, m_type)," .
2353bfb94b0SGreg Roach            "         KEY `##media_ix3` (m_titl)" .
2363bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
2373bfb94b0SGreg Roach        );
2383bfb94b0SGreg Roach        Database::exec(
2393bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##next_id` (" .
2403bfb94b0SGreg Roach            " gedcom_id   INTEGER     NOT NULL," .
2413bfb94b0SGreg Roach            " record_type VARCHAR(15) NOT NULL," .
2423bfb94b0SGreg Roach            " next_id     DECIMAL(20) NOT NULL," .
2433bfb94b0SGreg Roach            " PRIMARY KEY                 (gedcom_id, record_type)," .
2443bfb94b0SGreg Roach            " FOREIGN KEY `##next_id_fk1` (gedcom_id) REFERENCES `##gedcom` (gedcom_id) /* ON DELETE CASCADE */" .
2453bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
2463bfb94b0SGreg Roach        );
2473bfb94b0SGreg Roach        Database::exec(
2483bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##other` (" .
2493bfb94b0SGreg Roach            " o_id     VARCHAR(20) NOT NULL," .
2503bfb94b0SGreg Roach            " o_file   INTEGER     NOT NULL," .
2513bfb94b0SGreg Roach            " o_type   VARCHAR(15) NOT NULL," .
2523bfb94b0SGreg Roach            " o_gedcom MEDIUMTEXT      NULL," .
2533bfb94b0SGreg Roach            " PRIMARY KEY               (o_id, o_file)," .
2543bfb94b0SGreg Roach            " UNIQUE  KEY `##other_ix1` (o_file, o_id)" .
2553bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
2563bfb94b0SGreg Roach        );
2573bfb94b0SGreg Roach        Database::exec(
2583bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##sources` (" .
2593bfb94b0SGreg Roach            " s_id     VARCHAR(20)    NOT NULL," .
2603bfb94b0SGreg Roach            " s_file   INTEGER        NOT NULL," .
2613bfb94b0SGreg Roach            " s_name   VARCHAR(255)   NOT NULL," .
2623bfb94b0SGreg Roach            " s_gedcom MEDIUMTEXT     NOT NULL," .
2633bfb94b0SGreg Roach            " PRIMARY KEY                 (s_id, s_file)," .
2643bfb94b0SGreg Roach            " UNIQUE  KEY `##sources_ix1` (s_file, s_id)," .
2653bfb94b0SGreg Roach            "         KEY `##sources_ix2` (s_name)" .
2663bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
2673bfb94b0SGreg Roach        );
2683bfb94b0SGreg Roach        Database::exec(
2693bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##link` (" .
2703bfb94b0SGreg Roach            " l_file    INTEGER     NOT NULL," .
2713bfb94b0SGreg Roach            " l_from    VARCHAR(20) NOT NULL," .
2723bfb94b0SGreg Roach            " l_type    VARCHAR(15) NOT NULL," .
2733bfb94b0SGreg Roach            " l_to      VARCHAR(20) NOT NULL," .
2743bfb94b0SGreg Roach            " PRIMARY KEY              (l_from, l_file, l_type, l_to)," .
2753bfb94b0SGreg Roach            " UNIQUE  KEY `##link_ix1` (l_to, l_file, l_type, l_from)" .
2763bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
2773bfb94b0SGreg Roach        );
2783bfb94b0SGreg Roach        Database::exec(
2793bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##name` (" .
2803bfb94b0SGreg Roach            " n_file             INTEGER      NOT NULL," .
2813bfb94b0SGreg Roach            " n_id               VARCHAR(20)  NOT NULL," .
2823bfb94b0SGreg Roach            " n_num              INTEGER      NOT NULL," .
2833bfb94b0SGreg Roach            " n_type             VARCHAR(15)  NOT NULL," .
2843bfb94b0SGreg Roach            " n_sort             VARCHAR(255) NOT NULL," . // e.g. “GOGH,VINCENT WILLEM”
2853bfb94b0SGreg Roach            " n_full             VARCHAR(255) NOT NULL," . // e.g. “Vincent Willem van GOGH”
2863bfb94b0SGreg Roach            // These fields are only used for INDI records
2873bfb94b0SGreg Roach            " n_surname          VARCHAR(255)     NULL," . // e.g. “van GOGH”
2883bfb94b0SGreg Roach            " n_surn             VARCHAR(255)     NULL," . // e.g. “GOGH”
2893bfb94b0SGreg Roach            " n_givn             VARCHAR(255)     NULL," . // e.g. “Vincent Willem”
2903bfb94b0SGreg Roach            " n_soundex_givn_std VARCHAR(255)     NULL," .
2913bfb94b0SGreg Roach            " n_soundex_surn_std VARCHAR(255)     NULL," .
2923bfb94b0SGreg Roach            " n_soundex_givn_dm  VARCHAR(255)     NULL," .
2933bfb94b0SGreg Roach            " n_soundex_surn_dm  VARCHAR(255)     NULL," .
2943bfb94b0SGreg Roach            " PRIMARY KEY              (n_id, n_file, n_num)," .
2953bfb94b0SGreg Roach            "         KEY `##name_ix1` (n_full, n_id, n_file)," .
2963bfb94b0SGreg Roach            "         KEY `##name_ix2` (n_surn, n_file, n_type, n_id)," .
2973bfb94b0SGreg Roach            "         KEY `##name_ix3` (n_givn, n_file, n_type, n_id)" .
2983bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
2993bfb94b0SGreg Roach        );
3003bfb94b0SGreg Roach        Database::exec(
3013bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##module` (" .
3023bfb94b0SGreg Roach            " module_name   VARCHAR(32)                 NOT NULL," .
3033bfb94b0SGreg Roach            " status        ENUM('enabled', 'disabled') NOT NULL DEFAULT 'enabled'," .
3043bfb94b0SGreg Roach            " tab_order     INTEGER                         NULL, " .
3053bfb94b0SGreg Roach            " menu_order    INTEGER                         NULL, " .
3063bfb94b0SGreg Roach            " sidebar_order INTEGER                         NULL," .
3073bfb94b0SGreg Roach            " PRIMARY KEY (module_name)" .
3083bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
3093bfb94b0SGreg Roach        );
3103bfb94b0SGreg Roach        Database::exec(
3113bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##module_setting` (" .
3123bfb94b0SGreg Roach            " module_name   VARCHAR(32) NOT NULL," .
3133bfb94b0SGreg Roach            " setting_name  VARCHAR(32) NOT NULL," .
3143bfb94b0SGreg Roach            " setting_value MEDIUMTEXT  NOT NULL," .
3153bfb94b0SGreg Roach            " PRIMARY KEY                        (module_name, setting_name)," .
3163bfb94b0SGreg Roach            " FOREIGN KEY `##module_setting_fk1` (module_name) REFERENCES `##module` (module_name) /* ON DELETE CASCADE */" .
3173bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
3183bfb94b0SGreg Roach        );
3193bfb94b0SGreg Roach        Database::exec(
3203bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##module_privacy` (" .
3213bfb94b0SGreg Roach            " module_name   VARCHAR(32) NOT NULL," .
3223bfb94b0SGreg Roach            " gedcom_id     INTEGER     NOT NULL," .
3233bfb94b0SGreg Roach            " component     ENUM('block', 'chart', 'menu', 'report', 'sidebar', 'tab', 'theme') NOT NULL," .
3243bfb94b0SGreg Roach            " access_level  TINYINT     NOT NULL," .
3253bfb94b0SGreg Roach            " PRIMARY KEY                        (module_name, gedcom_id, component)," .
3263bfb94b0SGreg Roach            " FOREIGN KEY `##module_privacy_fk1` (module_name) REFERENCES `##module` (module_name) /* ON DELETE CASCADE */," .
3273bfb94b0SGreg Roach            " FOREIGN KEY `##module_privacy_fk2` (gedcom_id)   REFERENCES `##gedcom` (gedcom_id)   /* ON DELETE CASCADE */" .
3283bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
3293bfb94b0SGreg Roach        );
3303bfb94b0SGreg Roach        Database::exec(
3313bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##block` (" .
3323bfb94b0SGreg Roach            " block_id    INTEGER AUTO_INCREMENT NOT NULL," .
3333bfb94b0SGreg Roach            " gedcom_id   INTEGER                    NULL," .
3343bfb94b0SGreg Roach            " user_id     INTEGER                    NULL," .
3353bfb94b0SGreg Roach            " xref        VARCHAR(20)                NULL," .
3363bfb94b0SGreg Roach            " location    ENUM('main', 'side')       NULL," .
3373bfb94b0SGreg Roach            " block_order INTEGER                NOT NULL," .
3383bfb94b0SGreg Roach            " module_name VARCHAR(32)            NOT NULL," .
3393bfb94b0SGreg Roach            " PRIMARY KEY               (block_id)," .
3403bfb94b0SGreg Roach            " FOREIGN KEY `##block_fk1` (gedcom_id)   REFERENCES `##gedcom` (gedcom_id),  /* ON DELETE CASCADE */" .
3413bfb94b0SGreg Roach            " FOREIGN KEY `##block_fk2` (user_id)     REFERENCES `##user`   (user_id),    /* ON DELETE CASCADE */" .
3423bfb94b0SGreg Roach            " FOREIGN KEY `##block_fk3` (module_name) REFERENCES `##module` (module_name) /* ON DELETE CASCADE */" .
3433bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
3443bfb94b0SGreg Roach        );
3453bfb94b0SGreg Roach        Database::exec(
3463bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##block_setting` (" .
3473bfb94b0SGreg Roach            " block_id      INTEGER     NOT NULL," .
3483bfb94b0SGreg Roach            " setting_name  VARCHAR(32) NOT NULL," .
3493bfb94b0SGreg Roach            " setting_value TEXT        NOT NULL," .
3503bfb94b0SGreg Roach            " PRIMARY KEY                       (block_id, setting_name)," .
3513bfb94b0SGreg Roach            " FOREIGN KEY `##block_setting_fk1` (block_id) REFERENCES `##block` (block_id) /* ON DELETE CASCADE */" .
3523bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
3533bfb94b0SGreg Roach        );
3543bfb94b0SGreg Roach        Database::exec(
3553bfb94b0SGreg Roach            "CREATE TABLE IF NOT EXISTS `##hit_counter` (" .
3563bfb94b0SGreg Roach            " gedcom_id      INTEGER     NOT NULL," .
3573bfb94b0SGreg Roach            " page_name      VARCHAR(32) NOT NULL," .
3583bfb94b0SGreg Roach            " page_parameter VARCHAR(32) NOT NULL," .
3593bfb94b0SGreg Roach            " page_count     INTEGER     NOT NULL," .
3603bfb94b0SGreg Roach            " PRIMARY KEY                     (gedcom_id, page_name, page_parameter)," .
3613bfb94b0SGreg Roach            " FOREIGN KEY `##hit_counter_fk1` (gedcom_id) REFERENCES `##gedcom` (gedcom_id) /* ON DELETE CASCADE */" .
3623bfb94b0SGreg Roach            ") COLLATE utf8_unicode_ci ENGINE=InnoDB"
3633bfb94b0SGreg Roach        );
3643bfb94b0SGreg Roach
3653bfb94b0SGreg Roach        // Set the default site preferences
3663bfb94b0SGreg Roach        Site::setPreference('INDEX_DIRECTORY', 'data/');
3673bfb94b0SGreg Roach        Site::setPreference('USE_REGISTRATION_MODULE', '1');
3683bfb94b0SGreg Roach        Site::setPreference('ALLOW_USER_THEMES', '1');
3693bfb94b0SGreg Roach        Site::setPreference('ALLOW_CHANGE_GEDCOM', '1');
3703bfb94b0SGreg Roach        Site::setPreference('SESSION_TIME', '7200');
3713bfb94b0SGreg Roach        Site::setPreference('SMTP_ACTIVE', 'internal');
3723bfb94b0SGreg Roach        Site::setPreference('SMTP_HOST', 'localhost');
3733bfb94b0SGreg Roach        Site::setPreference('SMTP_PORT', '25');
3743bfb94b0SGreg Roach        Site::setPreference('SMTP_AUTH', '1');
3753bfb94b0SGreg Roach        Site::setPreference('SMTP_SSL', 'none');
3763bfb94b0SGreg Roach        Site::setPreference('SMTP_HELO', $_SERVER['SERVER_NAME']);
3773bfb94b0SGreg Roach        Site::setPreference('SMTP_FROM_NAME', $_SERVER['SERVER_NAME']);
3783bfb94b0SGreg Roach
3793bfb94b0SGreg Roach        // Search for all installed modules, and enable them.
3803bfb94b0SGreg Roach        Module::getInstalledModules('enabled');
3813bfb94b0SGreg Roach    }
3823bfb94b0SGreg Roach}
383