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