Exemple #1
0
 static function SetupDBTables($old_ver = null)
 {
     global $wpdb;
     $queries = array();
     $tbl_cats = $wpdb->prefix . 'wpfb_cats';
     $tbl_files = $wpdb->prefix . 'wpfb_files';
     $tbl_files_id3 = $wpdb->prefix . 'wpfb_files_id3';
     $queries[] = "CREATE TABLE IF NOT EXISTS `{$tbl_cats}` (\n  `cat_id` int(8) unsigned NOT NULL auto_increment,\n  `cat_name` varchar(255) NOT NULL default '',\n  `cat_description` text,\n  `cat_folder` varchar(300) NOT NULL,\n  `cat_path` varchar(2000) NOT NULL,\n  `cat_parent` int(8) unsigned NOT NULL default '0',\n  `cat_num_files` int(8) unsigned NOT NULL default '0',\n  `cat_num_files_total` int(8) unsigned NOT NULL default '0',\n  `cat_user_roles` text NOT NULL default '',\n  `cat_owner` bigint(20) unsigned default NULL,\n  `cat_icon` varchar(255) default NULL,\n  `cat_exclude_browser` enum('0','1') NOT NULL default '0',\n  `cat_order` int(8) NOT NULL default '0',\n  `cat_wp_term_id` bigint(20) NOT NULL default '0',\n  `cat_scan_lock` bigint(20) unsigned NOT NULL default '0',\n  PRIMARY KEY  (`cat_id`),\n  FULLTEXT KEY `USER_ROLES` (`cat_user_roles`)\n) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
     $queries[] = "CREATE TABLE IF NOT EXISTS `{$tbl_files}` (\n  `file_id` bigint(20) unsigned NOT NULL auto_increment,\n  `file_name` varchar(300) NOT NULL default '',\n  `file_name_original` varchar(300) NOT NULL default '',\n  `file_path` varchar(2000) NOT NULL default '',\n  `file_size` bigint(20) unsigned NOT NULL default '0',\n  `file_date` datetime NOT NULL default '0000-00-00 00:00:00',\n  `file_mtime` bigint(20) unsigned NOT NULL default '0',\n  `file_hash` char(32) NOT NULL,\n  `file_remote_uri` varchar(2000) NOT NULL default '',\n  `file_thumbnail` varchar(255) default NULL,\n  `file_display_name` varchar(255) NOT NULL default '',\n  `file_description` text,\n  `file_tags` varchar(255) NOT NULL default '',\n  `file_requirement` varchar(255) default NULL,\n  `file_version` varchar(64) default NULL,\n  `file_author` varchar(255) default NULL,\n  `file_language` varchar(255) default NULL,\n  `file_platform` varchar(255) default NULL,\n  `file_license` varchar(255) NOT NULL default '',\n  `file_user_roles` text NOT NULL default '',\n  `file_offline` enum('0','1') NOT NULL default '0',\n  `file_direct_linking` enum('0','1','2') NOT NULL default '0',\n  `file_force_download` enum('0','1') NOT NULL default '0',\n  `file_category` int(8) unsigned NOT NULL default '0',\n  `file_category_name` varchar(127) NOT NULL default '',\n  `file_update_of` bigint(20) unsigned default NULL,\n  `file_post_id` bigint(20) unsigned default NULL,\n  `file_attach_order` int(8) NOT NULL default '0',\n  `file_wpattach_id` bigint(20) NOT NULL default '0',\n  `file_added_by` bigint(20) unsigned default NULL,\n  `file_hits` bigint(20) unsigned NOT NULL default '0',\n  `file_ratings` bigint(20) unsigned NOT NULL default '0',\n  `file_rating_sum` bigint(20) unsigned NOT NULL default '0',\n  `file_last_dl_ip` varchar(100) NOT NULL default '',\n  `file_last_dl_time` datetime NOT NULL default '0000-00-00 00:00:00',\n  `file_rescan_pending` tinyint(4) NOT NULL default '0',\n  `file_scan_lock` bigint(20) unsigned NOT NULL default '0',\n  " . "\n  PRIMARY KEY  (`file_id`),\n  FULLTEXT KEY `DESCRIPTION` (`file_description`),\n  FULLTEXT KEY `USER_ROLES` (`file_user_roles`)\n) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
     $queries[] = "CREATE TABLE IF NOT EXISTS `{$tbl_files_id3}` (\n  `file_id` bigint(20) unsigned NOT NULL auto_increment,\n  `analyzetime` INT(11) NOT NULL DEFAULT '0',\n  `value` LONGTEXT NOT NULL,\n  `keywords` TEXT NOT NULL,\n  PRIMARY KEY  (`file_id`),\n  FULLTEXT KEY `KEYWORDS` (`keywords`)\n) ENGINE=MyISAM  DEFAULT CHARSET=utf8";
     // errors of queries starting with @ are supressed
     $queries[] = "@ALTER TABLE `{$tbl_cats}` DROP INDEX `FULLTEXT`";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` DROP INDEX `CAT_NAME`";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` DROP INDEX `CAT_FOLDER`";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD UNIQUE `UNIQUE_FOLDER` ( `cat_folder` , `cat_parent` ) ";
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD UNIQUE `UNIQUE_FILE` ( `file_name` , `file_category` )";
     // <= v0.1.2.2
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_icon` VARCHAR(255) NULL DEFAULT NULL";
     // since v0.2.0.0
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_remote_uri` VARCHAR( 2000 ) NULL DEFAULT NULL AFTER `file_hash`";
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_force_download` enum('0','1') NOT NULL default '0'";
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_path` varchar(255) NOT NULL default '' AFTER `file_name`";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_exclude_browser` enum('0','1') NOT NULL default '0'";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_path` varchar(255) NOT NULL default '' AFTER `cat_folder`";
     // removed since 0.2.9.25
     //$queries[] = "@ALTER TABLE `$tbl_cats` ADD UNIQUE `UNIQUE_PATH` ( `cat_path` ) ";
     //$queries[] = "@ALTER TABLE `$tbl_files` ADD UNIQUE `UNIQUE_PATH` ( `file_path` )";
     // the new cat file counters
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_num_files` int(8) unsigned NOT NULL default '0' AFTER `cat_parent`";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` CHANGE `cat_files` `cat_num_files_total` INT( 8 ) UNSIGNED NOT NULL DEFAULT '0'";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_num_files_total` int(8) unsigned NOT NULL default '0' AFTER `cat_num_files`";
     // since 0.2.8
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_category_name` varchar(127) NOT NULL default '' AFTER `file_category`";
     // since 0.2.9.1
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_user_roles` varchar(2000) NOT NULL default '' AFTER `file_license`";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_user_roles` varchar(2000) NOT NULL default '' AFTER `cat_num_files_total`";
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_attach_order` int(8) NOT NULL default '0'  AFTER `file_post_id`";
     // since 0.2.9.3
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_wpattach_id` bigint(20) NOT NULL default '0'  AFTER `file_attach_order`";
     // since 0.2.9.9
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_tags` varchar(255) NOT NULL default ''  AFTER `file_description`";
     // 0.2.9.10
     $queries[] = "@ALTER TABLE `{$tbl_files_id3}` CHANGE `value` `value` LONGTEXT";
     // 0.2.9.12
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_order` int(8) NOT NULL default '0'  AFTER `cat_exclude_browser`";
     // since 0.2.9.25
     $queries[] = "@ALTER TABLE  `{$tbl_cats}` DROP INDEX  `UNIQUE_PATH`";
     $queries[] = "@ALTER TABLE  `{$tbl_files}` DROP INDEX  `UNIQUE_PATH`";
     $queries[] = "ALTER TABLE  `{$tbl_cats}` CHANGE  `cat_path`  `cat_path` VARCHAR( 2000 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT  ''";
     $queries[] = "ALTER TABLE  `{$tbl_files}` CHANGE  `file_path`  `file_path` VARCHAR( 2000 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT  ''";
     $queries[] = "ALTER TABLE  `{$tbl_cats}` CHANGE  `cat_folder`  `cat_folder` VARCHAR( 300 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT  ''";
     $queries[] = "ALTER TABLE  `{$tbl_files}` CHANGE  `file_name`  `file_name` VARCHAR( 300 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT  ''";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_owner` bigint(20) unsigned NOT NULL default 0 AFTER `cat_user_roles`";
     // add fulltext indices
     if (!empty($old_ver) && version_compare($old_ver, '0.2.9.24') < 0) {
         // TODO: search fields fulltext index!
         $queries[] = "@ALTER TABLE `{$tbl_files}` ADD FULLTEXT `USER_ROLES` (`file_user_roles`)";
         $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD FULLTEXT `USER_ROLES` (`cat_user_roles`)";
         $queries[] = "@ALTER TABLE `{$tbl_files_id3}` ADD FULLTEXT `KEYWORDS` (`keywords`)";
     }
     // 2 is for file pages
     if (!empty($old_ver) && version_compare($old_ver, '0.2.9.24') < 0) {
         $queries[] = "ALTER TABLE  `{$tbl_files}` CHANGE  `file_direct_linking`  `file_direct_linking` ENUM(  '0',  '1',  '2' ) NOT NULL DEFAULT '0'";
     }
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_rescan_pending` tinyint(4) NOT NULL default '0'";
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD `file_scan_lock` bigint(20) unsigned NOT NULL default '0'";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_scan_lock` bigint(20) unsigned NOT NULL default '0'";
     // since 0.2.9.25
     // fix (0,1,3) => (0,1,2)
     $queries[] = "@ALTER TABLE `{$tbl_files}` CHANGE  `file_direct_linking`  `file_direct_linking` ENUM(  '0',  '1',  '2' )  NOT NULL DEFAULT  '0'";
     // roles text
     $queries[] = "ALTER TABLE  `{$tbl_files}` CHANGE  `file_user_roles`  `file_user_roles` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT  ''";
     $queries[] = "ALTER TABLE  `{$tbl_cats}` CHANGE  `cat_user_roles`  `cat_user_roles` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT  ''";
     $queries[] = "@ALTER TABLE `{$tbl_files}` ADD  `file_name_original` varchar(300) NOT NULL default '' AFTER `file_name`";
     $queries[] = "@ALTER TABLE `{$tbl_cats}` ADD `cat_wp_term_id` bigint(20) NOT NULL default '0'";
     $queries[] = "ALTER TABLE  `{$tbl_files}` CHANGE  `file_remote_uri`  `file_remote_uri` VARCHAR( 2000 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT  ''";
     $queries[] = "OPTIMIZE TABLE `{$tbl_cats}`";
     $queries[] = "OPTIMIZE TABLE `{$tbl_files}`";
     // dont use wpdb->query, because it prints errors
     foreach ($queries as $sql) {
         if ($sql[0] == '@') {
             $sql = substr($sql, 1);
             $wpdb->suppress_errors();
             $wpdb->query($sql);
             $wpdb->suppress_errors(false);
         } else {
             $wpdb->query($sql);
         }
     }
     // since 0.2.9.13 : file_mtime, use file_date as default
     if (!$wpdb->get_var("SHOW COLUMNS FROM `{$tbl_files}` LIKE 'file_mtime'")) {
         $wpdb->query("ALTER TABLE `{$tbl_files}` ADD `file_mtime` bigint(20) unsigned NOT NULL default '0' AFTER `file_date`");
         $files = $wpdb->get_results("SELECT file_id,file_date FROM {$tbl_files}");
         foreach ((array) $files as $file) {
             $wpdb->query("UPDATE `{$tbl_files}` SET `file_mtime` = '" . mysql2date('U', $file->file_date) . "' WHERE `file_id` = {$file->file_id}");
         }
         // this is faster, but UNIX_TIMESTAMP adds leap seconds, so all files will be synced again!
         //$wpdb->query("UPDATE `$tbl_files` SET `file_mtime` = UNIX_TIMESTAMP(`file_date`) WHERE file_mtime = 0;");
     }
     // convert all required_level -> user_roles
     if (!!$wpdb->get_var("SHOW COLUMNS FROM `{$tbl_files}` LIKE 'file_required_level'")) {
         $files = $wpdb->get_results("SELECT file_id,file_required_level FROM {$tbl_files} WHERE file_required_level <> 0");
         foreach ((array) $files as $file) {
             $wpdb->query("UPDATE `{$tbl_files}` SET `file_user_roles` = '|" . WPFB_Setup::UserLevel2Role($file->file_required_level - 1) . "' WHERE `file_id` = {$file->file_id}");
         }
         $wpdb->query("ALTER TABLE `{$tbl_files}` DROP `file_required_level`");
     }
     if (!!$wpdb->get_var("SHOW COLUMNS FROM `{$tbl_cats}` LIKE 'cat_required_level'")) {
         $cats = $wpdb->get_results("SELECT cat_id,cat_required_level FROM {$tbl_cats} WHERE cat_required_level <> 0");
         foreach ((array) $cats as $cat) {
             $wpdb->query("UPDATE `{$tbl_cats}` SET `cat_user_roles` = '|" . WPFB_Setup::UserLevel2Role($cat->cat_required_level - 1) . "' WHERE `cat_id` = {$cat->cat_id}");
         }
         $wpdb->query("ALTER TABLE `{$tbl_cats}` DROP `cat_required_level`");
     }
     /* NOT neeeded since using fulltext index!
     	// add leading | to user_roles
     	if(!empty($old_ver) && version_compare($old_ver, '0.2.9.24') < 0) {
     		$wpdb->query("UPDATE `$tbl_files` SET `file_user_roles` = CONCAT('|', `file_user_roles`) WHERE LEFT(`file_user_roles`, 1) <> '|'");
     		$wpdb->query("UPDATE `$tbl_cats` SET `cat_user_roles` = CONCAT('|', `cat_user_roles`) WHERE LEFT(`cat_user_roles`, 1) <> '|'");
     	}
     	*/
 }