function forum_create($webtag, $forum_name, $owner_uid, $database_name, $access, &$error_str = '') { if (!is_numeric($owner_uid)) { return false; } if (!is_numeric($access)) { return false; } if (!preg_match("/^[A-Z]{1}[A-Z0-9_]+\$/Du", $webtag)) { return false; } $current_datetime = date(MYSQL_DATETIME, time()); $forum_table_prefix = install_format_table_prefix($database_name, $webtag); if (!($db = db::get())) { return false; } $sql = "SELECT FID FROM FORUMS WHERE WEBTAG = '{$webtag}'"; if (!($result = @$db->query($sql))) { return false; } if ($result->num_rows > 0) { $error_str = gettext("The selected webtag is already in use. Please choose another."); return false; } if ($conflicting_tables_array = install_check_table_conflicts($database_name, $webtag, true, false, false)) { $error_str = gettext("The selected database contains conflicting tables. Conflicting table names are:"); $error_str .= sprintf("<p>%s</p>\n", implode(", ", $conflicting_tables_array)); return false; } try { $sql = "CREATE TABLE `{$forum_table_prefix}ADMIN_LOG` ("; $sql .= " ID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " CREATED DATETIME DEFAULT NULL,"; $sql .= " ACTION MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " ENTRY LONGBLOB,"; $sql .= " PRIMARY KEY (ID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table ADMIN_LOG'); } $sql = "CREATE TABLE `{$forum_table_prefix}BANNED` ("; $sql .= " ID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT, "; $sql .= " BANTYPE TINYINT(4) NOT NULL DEFAULT '0', "; $sql .= " BANDATA VARCHAR(255) NOT NULL DEFAULT '', "; $sql .= " COMMENT VARCHAR(255) NOT NULL DEFAULT '', "; $sql .= " EXPIRES DATETIME DEFAULT NULL, "; $sql .= " PRIMARY KEY (ID), "; $sql .= " KEY BANTYPE (BANTYPE, BANDATA)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table BANNED'); } $sql = "CREATE TABLE `{$forum_table_prefix}FOLDER` ("; $sql .= " FID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT, "; $sql .= " TITLE VARCHAR(32) DEFAULT NULL, "; $sql .= " DESCRIPTION VARCHAR(255) DEFAULT NULL, "; $sql .= " CREATED datetime default NULL, "; $sql .= " MODIFIED datetime default NULL, "; $sql .= " PREFIX VARCHAR(16) DEFAULT NULL, "; $sql .= " ALLOWED_TYPES TINYINT(3) DEFAULT NULL, "; $sql .= " POSITION MEDIUMINT(8) UNSIGNED DEFAULT '0', "; $sql .= " PERM INT(32) UNSIGNED DEFAULT NULL, "; $sql .= " PRIMARY KEY (FID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table FOLDER'); } $sql = "CREATE TABLE `{$forum_table_prefix}FORUM_LINKS` ("; $sql .= " LID SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " POS MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " URI VARCHAR(255) DEFAULT NULL,"; $sql .= " TITLE VARCHAR(64) DEFAULT NULL,"; $sql .= " PRIMARY KEY (LID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table FORUM_LINKS'); } $sql = "CREATE TABLE `{$forum_table_prefix}LINKS` ("; $sql .= " LID SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " FID SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " URI VARCHAR(255) NOT NULL DEFAULT '',"; $sql .= " TITLE VARCHAR(64) NOT NULL DEFAULT '',"; $sql .= " DESCRIPTION TEXT NOT NULL,"; $sql .= " CREATED DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',"; $sql .= " APPROVED DATETIME DEFAULT NULL,"; $sql .= " APPROVED_BY MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " VISIBLE CHAR(1) NOT NULL DEFAULT 'N',"; $sql .= " CLICKS MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " PRIMARY KEY (LID),"; $sql .= " KEY FID (FID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table LINKS'); } $sql = "CREATE TABLE `{$forum_table_prefix}LINKS_COMMENT` ("; $sql .= " CID SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " LID SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " CREATED DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',"; $sql .= " COMMENT TEXT NOT NULL,"; $sql .= " PRIMARY KEY (CID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table LINKS_COMMENT'); } $sql = "CREATE TABLE `{$forum_table_prefix}LINKS_FOLDERS` ("; $sql .= " FID SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " PARENT_FID SMALLINT(5) UNSIGNED DEFAULT '1',"; $sql .= " NAME VARCHAR(32) NOT NULL DEFAULT '',"; $sql .= " VISIBLE CHAR(1) NOT NULL DEFAULT '',"; $sql .= " PRIMARY KEY (FID),"; $sql .= " KEY PARENT_FID (PARENT_FID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table LINKS_FOLDERS'); } $sql = "CREATE TABLE `{$forum_table_prefix}LINKS_VOTE` ("; $sql .= " LID SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " RATING SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " VOTED DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',"; $sql .= " PRIMARY KEY (LID,UID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table LINKS_VOTE'); } $sql = "CREATE TABLE `{$forum_table_prefix}POLL` ("; $sql .= " `TID` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " `CLOSES` DATETIME DEFAULT NULL,"; $sql .= " `CHANGEVOTE` TINYINT(1) NOT NULL DEFAULT '1',"; $sql .= " `POLLTYPE` TINYINT(1) NOT NULL DEFAULT '0',"; $sql .= " `SHOWRESULTS` TINYINT(1) NOT NULL DEFAULT '1',"; $sql .= " `VOTETYPE` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " `OPTIONTYPE` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " `ALLOWGUESTS` TINYINT(1) NOT NULL DEFAULT '0',"; $sql .= " PRIMARY KEY (`TID`)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table POLL'); } $sql = "CREATE TABLE `{$forum_table_prefix}POLL_QUESTIONS` ("; $sql .= " `TID` MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " `QUESTION_ID` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " `QUESTION` VARCHAR(255) NOT NULL,"; $sql .= " `ALLOW_MULTI` CHAR(1) NOT NULL DEFAULT 'N',"; $sql .= " PRIMARY KEY (`TID`,`QUESTION_ID`)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table POLL_QUESTIONS'); } $sql = "CREATE TABLE `{$forum_table_prefix}POLL_VOTES` ("; $sql .= " `TID` MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " `QUESTION_ID` MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " `OPTION_ID` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " `OPTION_NAME` VARCHAR(255) NOT NULL,"; $sql .= " PRIMARY KEY (`TID`,`QUESTION_ID`,`OPTION_ID`)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table POLL_VOTES'); } $sql = "CREATE TABLE `{$forum_table_prefix}POST` ("; $sql .= " TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " PID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " REPLY_TO_PID MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " FROM_UID MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " TO_UID MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " VIEWED DATETIME DEFAULT NULL,"; $sql .= " CREATED DATETIME DEFAULT NULL,"; $sql .= " STATUS TINYINT(4) DEFAULT '0',"; $sql .= " APPROVED DATETIME DEFAULT NULL,"; $sql .= " APPROVED_BY MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " EDITED DATETIME DEFAULT NULL,"; $sql .= " EDITED_BY MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " IPADDRESS VARCHAR(255) DEFAULT NULL,"; $sql .= " MOVED_TID MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " MOVED_PID MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " PRIMARY KEY (TID,PID),"; $sql .= " KEY TO_UID (TO_UID),"; $sql .= " KEY FROM_UID (FROM_UID),"; $sql .= " KEY IPADDRESS (IPADDRESS, FROM_UID),"; $sql .= " KEY APPROVED (APPROVED),"; $sql .= " KEY CREATED (CREATED)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!($result = $db->query($sql))) { throw new Exception('Failed to create table POST'); } $sql = "CREATE TABLE `{$forum_table_prefix}POST_CONTENT` ("; $sql .= " TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " PID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " CONTENT TEXT,"; $sql .= " PRIMARY KEY (TID,PID),"; $sql .= " FULLTEXT KEY CONTENT (CONTENT)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table POST_CONTENT'); } $sql = "CREATE TABLE `{$forum_table_prefix}POST_SEARCH_ID` ("; $sql .= " SID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " TID MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " PID MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " INDEXED DATETIME DEFAULT NULL,"; $sql .= " PRIMARY KEY (SID,TID,PID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table POST_CONTENT'); } $sql = "CREATE TABLE `{$forum_table_prefix}PROFILE_ITEM` ("; $sql .= " PIID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " PSID MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " NAME VARCHAR(64) DEFAULT NULL,"; $sql .= " TYPE TINYINT(3) UNSIGNED DEFAULT '0',"; $sql .= " OPTIONS TEXT NOT NULL, "; $sql .= " POSITION MEDIUMINT(3) UNSIGNED DEFAULT '0',"; $sql .= " PRIMARY KEY (PIID),"; $sql .= " KEY PSID (PSID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table PROFILE_ITEM'); } $sql = "INSERT INTO `{$forum_table_prefix}PROFILE_ITEM` "; $sql .= "(PSID, NAME, TYPE, OPTIONS, POSITION) "; $sql .= "VALUES (1, 'Location', 0, '', 1)"; if (!@$db->query($sql)) { throw new Exception('Failed to create location profile item'); } $sql = "INSERT INTO `{$forum_table_prefix}PROFILE_ITEM` "; $sql .= "(PSID, NAME, TYPE, OPTIONS, POSITION) "; $sql .= "VALUES (1, 'Age', 0, '', 2)"; if (!@$db->query($sql)) { throw new Exception('Failed to create age profile item'); } $sql = "INSERT INTO `{$forum_table_prefix}PROFILE_ITEM` "; $sql .= "(PSID, NAME, TYPE, OPTIONS, POSITION) VALUES "; $sql .= "(1, 'Gender', 5, 'Male\nFemale\nUnspecified', 3)"; if (!@$db->query($sql)) { throw new Exception('Failed to create gender profile item'); } $sql = "INSERT INTO `{$forum_table_prefix}PROFILE_ITEM` "; $sql .= "(PSID, NAME, TYPE, OPTIONS, POSITION) "; $sql .= "VALUES (1, 'Quote', 0, '', 4)"; if (!@$db->query($sql)) { throw new Exception('Failed to create quote profile item'); } $sql = "INSERT INTO `{$forum_table_prefix}PROFILE_ITEM` "; $sql .= "(PSID, NAME, TYPE, OPTIONS, POSITION) "; $sql .= "VALUES (1, 'Occupation', 0, '', 5)"; if (!@$db->query($sql)) { throw new Exception('Failed to create occupation profile item'); } $sql = "CREATE TABLE `{$forum_table_prefix}PROFILE_SECTION` ("; $sql .= " PSID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " NAME VARCHAR(64) DEFAULT NULL,"; $sql .= " POSITION MEDIUMINT(3) UNSIGNED DEFAULT '0',"; $sql .= " PRIMARY KEY (PSID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table PROFILE_SECTION'); } $sql = "INSERT INTO `{$forum_table_prefix}PROFILE_SECTION` "; $sql .= "(NAME, POSITION) VALUES ('Personal', 1)"; if (!@$db->query($sql)) { throw new Exception('Failed to create first profile section.'); } $sql = "CREATE TABLE `{$forum_table_prefix}RSS_FEEDS` ("; $sql .= " RSSID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " NAME VARCHAR(255) NOT NULL DEFAULT '',"; $sql .= " UID MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " FID MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " URL VARCHAR(255) DEFAULT NULL,"; $sql .= " PREFIX VARCHAR(16) DEFAULT NULL,"; $sql .= " FREQUENCY MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " LAST_RUN DATETIME DEFAULT NULL,"; $sql .= " MAX_ITEM_COUNT MEDIUMINT(8) UNSIGNED DEFAULT NULL, "; $sql .= " PRIMARY KEY (RSSID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table RSS_FEEDS'); } $sql = "CREATE TABLE `{$forum_table_prefix}RSS_HISTORY` ("; $sql .= " RSSID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " LINK VARCHAR(255) DEFAULT NULL,"; $sql .= " KEY RSSID (RSSID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table RSS_HISTORY'); } $sql = "CREATE TABLE `{$forum_table_prefix}STATS` ("; $sql .= " ID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " MOST_USERS_DATE DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',"; $sql .= " MOST_USERS_COUNT MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " MOST_POSTS_DATE DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',"; $sql .= " MOST_POSTS_COUNT MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " PRIMARY KEY (ID),"; $sql .= " KEY MOST_POSTS_COUNT (MOST_POSTS_COUNT), "; $sql .= " KEY MOST_USERS_COUNT (MOST_USERS_COUNT) "; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table STATS'); } $sql = "CREATE TABLE `{$forum_table_prefix}THREAD` ("; $sql .= " TID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT, "; $sql .= " FID MEDIUMINT(8) UNSIGNED DEFAULT NULL, "; $sql .= " BY_UID MEDIUMINT(8) UNSIGNED DEFAULT NULL, "; $sql .= " TITLE VARCHAR(64) DEFAULT NULL, "; $sql .= " LENGTH MEDIUMINT(8) UNSIGNED DEFAULT NULL, "; $sql .= " UNREAD_PID MEDIUMINT(8) UNSIGNED DEFAULT NULL, "; $sql .= " POLL_FLAG CHAR(1) DEFAULT NULL, "; $sql .= " CREATED DATETIME DEFAULT NULL, "; $sql .= " MODIFIED DATETIME DEFAULT NULL, "; $sql .= " CLOSED DATETIME DEFAULT NULL, "; $sql .= " STICKY CHAR(1) DEFAULT NULL, "; $sql .= " STICKY_UNTIL DATETIME DEFAULT NULL, "; $sql .= " ADMIN_LOCK DATETIME DEFAULT NULL, "; $sql .= " DELETED CHAR(1) NOT NULL DEFAULT 'N', "; $sql .= " PRIMARY KEY (TID), "; $sql .= " KEY STICKY (STICKY, MODIFIED, FID, LENGTH, DELETED), "; $sql .= " KEY MODIFIED (MODIFIED, FID, LENGTH, DELETED), "; $sql .= " FULLTEXT KEY TITLE (TITLE) "; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table THREAD'); } $sql = "CREATE TABLE `{$forum_table_prefix}THREAD_STATS` ("; $sql .= " TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " VIEWCOUNT MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " PRIMARY KEY (TID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table THREAD_STATS'); } $sql = "CREATE TABLE `{$forum_table_prefix}THREAD_TRACK` ("; $sql .= " TID MEDIUMINT(8) NOT NULL DEFAULT '0', "; $sql .= " NEW_TID MEDIUMINT(8) NOT NULL DEFAULT '0', "; $sql .= " CREATED DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', "; $sql .= " TRACK_TYPE TINYINT(4) NOT NULL DEFAULT '0', "; $sql .= " PRIMARY KEY (TID, NEW_TID), "; $sql .= " KEY NEW_TID (NEW_TID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table THREAD_TRACK'); } $sql = "CREATE TABLE `{$forum_table_prefix}USER_FOLDER` ("; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', "; $sql .= " FID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', "; $sql .= " INTEREST TINYINT(4) DEFAULT '0', "; $sql .= " PRIMARY KEY (UID, FID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table USER_FOLDER'); } $sql = "CREATE TABLE `{$forum_table_prefix}USER_PEER` ("; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', "; $sql .= " PEER_UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', "; $sql .= " RELATIONSHIP TINYINT(4) DEFAULT NULL, "; $sql .= " PEER_NICKNAME VARCHAR(32) DEFAULT NULL, "; $sql .= " PRIMARY KEY (UID, PEER_UID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table USER_PEER'); } $sql = "CREATE TABLE `{$forum_table_prefix}USER_POLL_VOTES` ("; $sql .= " `VOTE_ID` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,"; $sql .= " `TID` MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " `QUESTION_ID` MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " `OPTION_ID` MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " `UID` MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " `VOTED` DATETIME NOT NULL,"; $sql .= " PRIMARY KEY (`VOTE_ID`),"; $sql .= " KEY `TID` (`TID`),"; $sql .= " KEY `QUESTION_ID` (`QUESTION_ID`),"; $sql .= " KEY `OPTION_ID` (`OPTION_ID`),"; $sql .= " KEY `UID` (`UID`)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table USER_POLL_VOTES'); } $sql = "CREATE TABLE `{$forum_table_prefix}USER_PREFS` ("; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL,"; $sql .= " HOMEPAGE_URL VARCHAR(255) DEFAULT NULL,"; $sql .= " PIC_URL VARCHAR(255) DEFAULT NULL,"; $sql .= " EMAIL_NOTIFY CHAR(1) DEFAULT NULL,"; $sql .= " MARK_AS_OF_INT CHAR(1) DEFAULT NULL,"; $sql .= " POSTS_PER_PAGE CHAR(3) DEFAULT NULL,"; $sql .= " FONT_SIZE CHAR(2) DEFAULT NULL,"; $sql .= " STYLE VARCHAR(255) DEFAULT NULL,"; $sql .= " EMOTICONS VARCHAR(255) DEFAULT NULL,"; $sql .= " VIEW_SIGS CHAR(1) DEFAULT NULL,"; $sql .= " START_PAGE CHAR(3) DEFAULT NULL,"; $sql .= " LANGUAGE VARCHAR(32) DEFAULT NULL,"; $sql .= " SHOW_STATS CHAR(1) DEFAULT NULL,"; $sql .= " IMAGES_TO_LINKS CHAR(1) DEFAULT NULL,"; $sql .= " USE_WORD_FILTER CHAR(1) DEFAULT NULL,"; $sql .= " USE_ADMIN_FILTER CHAR(1) DEFAULT NULL,"; $sql .= " SHOW_THUMBS CHAR(2) DEFAULT NULL,"; $sql .= " ENABLE_WIKI_WORDS CHAR(1) DEFAULT NULL,"; $sql .= " USE_MOVER_SPOILER CHAR(1) DEFAULT NULL,"; $sql .= " USE_LIGHT_MODE_SPOILER CHAR(1) DEFAULT NULL,"; $sql .= " USE_OVERFLOW_RESIZE CHAR(1) DEFAULT NULL,"; $sql .= " PIC_AID VARCHAR(32) DEFAULT NULL,"; $sql .= " AVATAR_URL VARCHAR(255) DEFAULT NULL,"; $sql .= " AVATAR_AID VARCHAR(32) DEFAULT NULL,"; $sql .= " REPLY_QUICK CHAR(1) DEFAULT NULL,"; $sql .= " THREADS_BY_FOLDER CHAR(1) DEFAULT NULL,"; $sql .= " THREAD_LAST_PAGE CHAR(1) DEFAULT NULL,"; $sql .= " LEFT_FRAME_WIDTH SMALLINT(4) UNSIGNED DEFAULT NULL,"; $sql .= " SHOW_AVATARS CHAR(1) DEFAULT NULL,"; $sql .= " SHOW_SHARE_LINKS CHAR(1) DEFAULT NULL,"; $sql .= " PRIMARY KEY (UID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=utf8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table USER_PREFS'); } $sql = "CREATE TABLE `{$forum_table_prefix}USER_PROFILE` ("; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " PIID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " ENTRY VARCHAR(255) DEFAULT NULL,"; $sql .= " PRIVACY TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " PRIMARY KEY (UID,PIID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table USER_PROFILE'); } $sql = "CREATE TABLE `{$forum_table_prefix}USER_SIG` ("; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " CONTENT TEXT,"; $sql .= " HTML CHAR(1) DEFAULT NULL,"; $sql .= " PRIMARY KEY (UID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table USER_SIG'); } $sql = "CREATE TABLE `{$forum_table_prefix}USER_THREAD` ("; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " LAST_READ MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " LAST_READ_AT DATETIME DEFAULT NULL,"; $sql .= " INTEREST TINYINT(4) DEFAULT NULL,"; $sql .= " PRIMARY KEY (UID,TID),"; $sql .= " KEY TID (TID),"; $sql .= " KEY LAST_READ (LAST_READ),"; $sql .= " KEY INTEREST (INTEREST)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table USER_THREAD'); } $sql = "CREATE TABLE `{$forum_table_prefix}USER_TRACK` ("; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',"; $sql .= " DDKEY DATETIME DEFAULT NULL,"; $sql .= " LAST_POST DATETIME DEFAULT NULL,"; $sql .= " LAST_SEARCH DATETIME DEFAULT NULL,"; $sql .= " LAST_SEARCH_KEYWORDS TEXT DEFAULT NULL,"; $sql .= " LAST_SEARCH_SORT_BY TINYINT(3) UNSIGNED DEFAULT NULL, "; $sql .= " LAST_SEARCH_SORT_DIR TINYINT(3) UNSIGNED DEFAULT NULL, "; $sql .= " POST_COUNT MEDIUMINT(8) UNSIGNED DEFAULT NULL,"; $sql .= " USER_TIME_BEST DATETIME DEFAULT NULL,"; $sql .= " USER_TIME_TOTAL DATETIME DEFAULT NULL,"; $sql .= " USER_TIME_UPDATED DATETIME DEFAULT NULL,"; $sql .= " PRIMARY KEY (UID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table USER_TRACK'); } $sql = "CREATE TABLE `{$forum_table_prefix}WORD_FILTER` ("; $sql .= " UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', "; $sql .= " FID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT, "; $sql .= " FILTER_NAME VARCHAR(255) NOT NULL DEFAULT '', "; $sql .= " MATCH_TEXT TEXT NOT NULL, "; $sql .= " REPLACE_TEXT TEXT NOT NULL, "; $sql .= " FILTER_TYPE TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', "; $sql .= " FILTER_ENABLED TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', "; $sql .= " PRIMARY KEY (UID, FID)"; $sql .= ") ENGINE=MYISAM DEFAULT CHARSET=UTF8"; if (!@$db->query($sql)) { throw new Exception('Failed to create table WORD_FILTER'); } // Save Webtag, Database name and Access Level. $sql = "INSERT INTO FORUMS (WEBTAG, OWNER_UID, DATABASE_NAME, ACCESS_LEVEL) "; $sql .= "VALUES ('{$webtag}', '{$owner_uid}', '{$database_name}', {$access})"; if (!@$db->query($sql)) { throw new Exception('Failed to create FORUMS record'); } // Get the new FID so we can save the settings if (!($forum_fid = $db->insert_id)) { throw new Exception('Failed to get new forum fid'); } // Create General Folder $sql = "INSERT INTO `{$forum_table_prefix}FOLDER` (TITLE, CREATED, MODIFIED, ALLOWED_TYPES, POSITION, PERM) "; $sql .= "VALUES ('General', NOW(), NOW(), 3, 1, 14588)"; if (!@$db->query($sql)) { throw new Exception('Failed to create first folder'); } // Add some default forum links $sql = "INSERT INTO `{$forum_table_prefix}FORUM_LINKS` (POS, TITLE, URI) "; $sql .= "VALUES (2, 'Project Beehive Forum Home', 'http://www.beehiveforum.co.uk/')"; if (!@$db->query($sql)) { throw new Exception('Failed to create Beehive Forum link'); } $sql = "INSERT INTO `{$forum_table_prefix}FORUM_LINKS` (POS, TITLE, URI) "; $sql .= "VALUES (3, 'Project Beehive Forum on Facebook', 'http://www.facebook.com/pages/Project-Beehive-Forum/100468551205')"; if (!@$db->query($sql)) { throw new Exception('Failed to create Beehive Forum Facebook link'); } $sql = "INSERT INTO `{$forum_table_prefix}FORUM_LINKS` (POS, TITLE, URI) "; $sql .= "VALUES (2, 'Teh Forum', 'http://www.tehforum.co.uk/forum/')"; if (!@$db->query($sql)) { throw new Exception('Failed to create Teh Forum forum link'); } // Create user permissions for forum leader if (!perm_update_user_forum_permissions($forum_fid, $owner_uid, USER_PERM_ADMIN_TOOLS | USER_PERM_FOLDER_MODERATE)) { throw new Exception('Failed to set owner forum permissions'); } // Create 'Welcome' Thread $sql = "INSERT INTO `{$forum_table_prefix}THREAD` (FID, BY_UID, TITLE, LENGTH, "; $sql .= "POLL_FLAG, CREATED, MODIFIED, CLOSED, STICKY, STICKY_UNTIL, ADMIN_LOCK) "; $sql .= "VALUES (1, '{$owner_uid}', 'Welcome', 1, 'N', CAST('{$current_datetime}' AS DATETIME), "; $sql .= "CAST('{$current_datetime}' AS DATETIME), NULL, 'N', NULL, NULL)"; if (!@$db->query($sql)) { throw new Exception('Failed to create first thread'); } // Get the Thread ID. It should be 1, but just in case. if (!($new_tid = $db->insert_id)) { throw new Exception('Failed to get first thread tid'); } // Create the first post in the thread. Make it appear to be from // the Owner UID. $sql = "INSERT INTO `{$forum_table_prefix}POST` (TID, REPLY_TO_PID, FROM_UID, TO_UID, VIEWED, "; $sql .= "CREATED, STATUS, APPROVED, APPROVED_BY, EDITED, EDITED_BY, IPADDRESS) "; $sql .= "VALUES ('{$new_tid}', 0, '{$owner_uid}', 0, NULL, CAST('{$current_datetime}' AS DATETIME), "; $sql .= "0, CAST('{$current_datetime}' AS DATETIME), '{$owner_uid}', NULL, 0, '')"; if (!@$db->query($sql)) { throw new Exception('Failed to create first post'); } // Get the Post ID. Again should be 1, but trying to be tidy here. if (!($new_pid = $db->insert_id)) { throw new Exception('Fauled to fetch new post pid'); } // First Post content. $sql = "INSERT INTO `{$forum_table_prefix}POST_CONTENT` (TID, PID, CONTENT) "; $sql .= "VALUES ('{$new_tid}', '{$new_pid}', 'Welcome to your new Beehive Forum')"; if (!@$db->query($sql)) { throw new Exception('Failed to create first post content'); } // First Post search ID $sql = "INSERT INTO `{$forum_table_prefix}POST_SEARCH_ID` (TID, PID) "; $sql .= "VALUES ('{$new_tid}', '{$new_pid}')"; if (!@$db->query($sql)) { throw new Exception('Failed to create first post search index'); } // Create Top Level Links Folder $sql = "INSERT INTO `{$forum_table_prefix}LINKS_FOLDERS` "; $sql .= "(PARENT_FID, NAME, VISIBLE) VALUES (NULL, 'Top Level', 'Y')"; if (!@$db->query($sql)) { throw new Exception('Failed to create top level links folder'); } $forum_settings = array('wiki_integration_uri' => 'http://en.wikipedia.org/wiki/[WikiWord]', 'enable_wiki_quick_links' => 'Y', 'enable_wiki_integration' => 'N', 'minimum_post_frequency' => '0', 'maximum_post_length' => '6226', 'post_edit_time' => '0', 'allow_post_editing' => 'Y', 'require_post_approval' => 'N', 'forum_dl_saving' => 'Y', 'forum_timezone' => '27', 'default_language' => 'en', 'default_emoticons' => 'default', 'default_style' => 'default', 'forum_keywords' => 'A Beehive Forum, Beehive Forum, Project Beehive Forum', 'forum_desc' => 'A Beehive Forum', 'forum_email' => '*****@*****.**', 'forum_name' => $forum_name, 'show_links' => 'Y', 'allow_polls' => 'Y', 'show_stats' => 'Y', 'allow_search_spidering' => 'Y', 'guest_account_enabled' => 'Y', 'forum_links_top_link' => 'Forum Links:'); foreach ($forum_settings as $setting_name => $setting_value) { $setting_name = $db->escape($setting_name); $setting_value = $db->escape($setting_value); $sql = "INSERT INTO FORUM_SETTINGS (FID, SNAME, SVALUE) "; $sql .= "VALUES ({$forum_fid}, '{$setting_name}', '{$setting_value}')"; if (!@$db->query($sql)) { throw new Exception('Failed to save forum settings'); } } // Make sure at least the current user can // access the forum even if its not protected. $sql = "INSERT INTO USER_FORUM (UID, FID, ALLOWED) VALUES('{$owner_uid}', {$forum_fid}, 1)"; if (!@$db->query($sql)) { throw new Exception('Failed to set user access permissions'); } } catch (Exception $e) { $error_str = $e->getMessage(); forum_delete_tables($webtag, $database_name); return false; } return $forum_fid; }
header("Location: index.php"); exit; } require_once BH_INCLUDE_PATH . 'constants.inc.php'; require_once BH_INCLUDE_PATH . 'db.inc.php'; require_once BH_INCLUDE_PATH . 'install.inc.php'; require_once BH_INCLUDE_PATH . 'forum.inc.php'; require_once BH_INCLUDE_PATH . 'user.inc.php'; @set_time_limit(0); if (!isset($forum_webtag) || strlen(trim($forum_webtag)) < 1) { $error_array[] = "<h2>You must specify a forum webtag for your choosen type of installation.</h2>\n"; $valid = false; return; } $remove_conflicts = isset($remove_conflicts) && $remove_conflicts === true; if ($conflicting_tables = install_check_table_conflicts($config['db_database'], $forum_webtag, true, true, $remove_conflicts)) { $error_str = "<h2>Selected database contains tables which conflict with Beehive Forum. "; $error_str .= "If this database contains an existing Beehive Forum installation please "; $error_str .= "check that you have selected the correct install / upgrade method.</h2>\n"; $error_array[] = $error_str; $error_str = "<h2>If you continue to encounter errors you may want to consider enabling "; $error_str .= "the remove conflicts option at the bottom of the installer.</h2>\n"; $error_array[] = $error_str; $error_str = "<h2>Conflicting tables</h2>\n"; $error_str .= "<div id=\"conflicting_tables\" class=\"install_table_list\">\n"; $error_str .= sprintf("<ul><li>%s</li></ul>\n", implode("</li><li>", $conflicting_tables)); $error_str .= "</div>\n"; $error_array[] = $error_str; $valid = false; return; }