📄 upgrade5.php
字号:
dateline int(10) UNSIGNED NOT NULL,
action char(3) NOT NULL,
PRIMARY KEY (tid)
) TYPE=MyISAM;
DROP TABLE IF EXISTS cdb_adminnotes;
CREATE TABLE cdb_adminnotes (
id mediumint(8) unsigned NOT NULL auto_increment,
admin varchar(15) NOT NULL default '',
access tinyint(3) NOT NULL default '0',
adminid tinyint(3) NOT NULL default '0',
dateline int(10) unsigned NOT NULL default '0',
expiration int(10) unsigned NOT NULL default '0',
message text NOT NULL,
PRIMARY KEY (id)
) Type=MyISAM;
DROP TABLE IF EXISTS cdb_onlinetime;
CREATE TABLE cdb_onlinetime (
uid mediumint(8) unsigned NOT NULL,
thismonth smallint(6) UNSIGNED NOT NULL default '0',
total mediumint(8) UNSIGNED NOT NULL default '0',
PRIMARY KEY (uid)
) Type=MyISAM;
DROP TABLE IF EXISTS cdb_forumfields;
CREATE TABLE cdb_forumfields (
fid smallint(6) UNSIGNED NOT NULL,
description text NOT NULL,
password varchar(12) NOT NULL,
icon varchar(255) NOT NULL,
postcredits varchar(255) NOT NULL,
replycredits varchar(255) NOT NULL,
redirect varchar(255) NOT NULL,
attachextensions varchar(255) NOT NULL,
moderators text NOT NULL,
rules text NOT NULL,
threadtypes text NOT NULL,
viewperm text NOT NULL,
postperm text NOT NULL,
replyperm text NOT NULL,
getattachperm text NOT NULL,
postattachperm text NOT NULL,
PRIMARY KEY (fid)
) TYPE=MyISAM;
DROP TABLE IF EXISTS cdb_validating;
CREATE TABLE cdb_validating (
uid mediumint(8) unsigned NOT NULL,
submitdate int(10) unsigned NOT NULL,
moddate int(10) unsigned NOT NULL,
admin varchar(15) NOT NULL,
submittimes tinyint(3) unsigned NOT NULL,
status tinyint(1) NOT NULL,
message text NOT NULL,
remark text NOT NULL,
PRIMARY KEY (uid),
KEY (status)
) Type=MyISAM;
DROP TABLE IF EXISTS cdb_paymentlog;
CREATE TABLE cdb_paymentlog (
uid mediumint(8) UNSIGNED NOT NULL,
tid mediumint(8) UNSIGNED NOT NULL,
authorid mediumint(8) UNSIGNED NOT NULL,
dateline int(10) UNSIGNED NOT NULL,
amount smallint(6) NOT NULL,
netamount smallint(6) NOT NULL,
PRIMARY KEY (tid, uid),
INDEX (uid),
INDEX (authorid)
) TYPE=MyISAM;
DROP TABLE IF EXISTS cdb_creditslog;
CREATE TABLE cdb_creditslog (
uid mediumint(8) UNSIGNED NOT NULL,
fromto char(15) NOT NULL,
sendcredits tinyint(1) NOT NULL,
receivecredits tinyint(1) NOT NULL,
send int(10) UNSIGNED NOT NULL,
receive int(10) UNSIGNED NOT NULL,
dateline int(10) UNSIGNED NOT NULL,
operation char(3) NOT NULL,
INDEX (uid, dateline)
) TYPE=MyISAM;
DROP TABLE IF EXISTS cdb_rsscaches;
CREATE TABLE cdb_rsscaches (
lastupdate int(10) UNSIGNED NOT NULL,
fid smallint(6) UNSIGNED NOT NULL,
tid mediumint(8) UNSIGNED NOT NULL,
dateline int(10) UNSIGNED NOT NULL,
forum char(50) NOT NULL,
author char(15) NOT NULL,
subject char(80) NOT NULL,
description char(255) NOT NULL,
INDEX (fid, dateline)
) TYPE=MyISAM;
EOT;
$upgrade2 = <<<EOT
DROP TABLE IF EXISTS cdb_memberfields;
CREATE TABLE cdb_memberfields (
uid mediumint(8) unsigned NOT NULL,
origgroup VARCHAR(10) NOT NULL,
site varchar(75) NOT NULL default '',
icq varchar(12) NOT NULL default '',
oicq varchar(12) NOT NULL default '',
yahoo varchar(40) NOT NULL default '',
msn varchar(40) NOT NULL default '',
location varchar(30) NOT NULL default '',
customstatus varchar(30) NOT NULL default '',
avatar varchar(100) NOT NULL default '',
avatarwidth tinyint(3) unsigned NOT NULL default '0',
avatarheight tinyint(3) unsigned NOT NULL default '0',
bio text NOT NULL,
signature text NOT NULL,
sightml text NOT NULL,
ignorepm text NOT NULL,
authstr varchar(20) NOT NULL default '',
\$str_table
PRIMARY KEY (uid)
) TYPE=MyISAM;
ALTER TABLE cdb_pms DROP INDEX msgtoid, ADD INDEX msgtoid (msgtoid, folder, dateline), DROP INDEX msgfromid, ADD INDEX msgfromid (msgfromid, folder, dateline);
EOT;
$upgrade4_3 = <<<EOT
ALTER TABLE cdb_posts ADD attachment TINYINT(1) NOT NULL AFTER parseurloff,
ADD invisible TINYINT(1) NOT NULL AFTER useip,
ADD htmlon TINYINT(1) NOT NULL AFTER usesig,
DROP INDEX tid,
ADD INDEX (invisible),
ADD INDEX displayorder (tid, invisible, dateline),
ADD first tinyint(1) NOT NULL AFTER tid,
ADD INDEX first (tid, first),
DROP INDEX dotfolder;
EOT;
$upgrade5_3 = <<<EOT
UPDATE cdb_posts SET attachment=1 WHERE aid>0;
ALTER TABLE cdb_attachments ADD INDEX (tid), CHANGE downloads downloads MEDIUMINT(8) DEFAULT '0' NOT NULL, CHANGE creditsrequire readperm tinyint(3) UNSIGNED NOT NULL, ADD description char(100) NOT NULL AFTER filename, ADD dateline int(10) UNSIGNED NOT NULL AFTER pid, ADD INDEX pid (pid, aid);
UPDATE cdb_attachments SET readperm=20 WHERE readperm>100;
EOT;
$upgrade6_3 = <<<EOT
ALTER TABLE cdb_posts DROP aid;
EOT;
$upgrade4_4 = <<<EOT
ALTER TABLE cdb_posts CHANGE aid attachment TINYINT(1) NOT NULL AFTER parseurloff,
ADD invisible TINYINT(1) NOT NULL AFTER useip,
ADD htmlon TINYINT(1) NOT NULL AFTER usesig,
DROP INDEX tid,
ADD INDEX (invisible),
ADD INDEX displayorder (tid, invisible, dateline),
ADD first tinyint(1) NOT NULL AFTER tid,
ADD INDEX first (tid, first),
DROP INDEX dotfolder;
EOT;
$upgrade5_4 = <<<EOT
UPDATE cdb_posts SET attachment=1 WHERE attachment>0;
EOT;
$upgrade6_4 = <<<EOT
ALTER TABLE cdb_attachments ADD INDEX (tid), ADD INDEX pid (pid,aid), CHANGE downloads downloads MEDIUMINT(8) DEFAULT '0' NOT NULL, CHANGE creditsrequire readperm tinyint(3) UNSIGNED NOT NULL, ADD description char(100) NOT NULL AFTER filename, ADD dateline int(10) UNSIGNED NOT NULL AFTER pid;
UPDATE cdb_attachments SET readperm=20 WHERE readperm>100;
EOT;
$upgrade7 = <<<EOT
ALTER TABLE cdb_members DROP site, DROP icq, DROP oicq, DROP yahoo, DROP msn, DROP location, DROP bio,
DROP avatar, DROP avatarwidth, DROP avatarheight, DROP customstatus, DROP ignorepm, DROP identifying,
CHANGE username username char(15) NOT NULL default '',
CHANGE password password char(32) NOT NULL default '',
CHANGE secques secques char(8) NOT NULL default '',
CHANGE regip regip char(15) NOT NULL default '',
CHANGE lastip lastip char(15) NOT NULL default '',
CHANGE email email char(50) NOT NULL default '',
CHANGE dateformat dateformat char(10) NOT NULL default '',
CHANGE timeformat timeformat tinyint(1) NOT NULL default '0',
CHANGE signature sigstatus tinyint(1) NOT NULL default 0,
CHANGE postnum posts MEDIUMINT(8) UNSIGNED NOT NULL default '0',
CHANGE credit credits int(10) NOT NULL,
CHANGE showemail showemail tinyint(1) NOT NULL default '0',
CHANGE timeoffset timeoffset CHAR(4) NOT NULL,
ADD digestposts SMALLINT(6) UNSIGNED NOT NULL AFTER posts,
ADD groupexpiry INT(10) UNSIGNED NOT NULL AFTER groupid,
ADD pmsound TINYINT(1) NOT NULL AFTER timeformat,
CHANGE extracredit extcredits1 int(10) NOT NULL,
ADD extcredits5 int(10) NOT NULL AFTER extcredits1,
ADD extcredits4 int(10) NOT NULL AFTER extcredits1,
ADD extcredits3 int(10) NOT NULL AFTER extcredits1,
ADD extcredits2 int(10) NOT NULL AFTER extcredits1,
ADD extgroupids char(60) NOT NULL AFTER groupexpiry,
ADD avatarshowid int(10) UNSIGNED NOT NULL default '0' AFTER extcredits5,
ADD extcredits8 int(10) NOT NULL AFTER extcredits5,
ADD extcredits7 int(10) NOT NULL AFTER extcredits5,
ADD extcredits6 int(10) NOT NULL AFTER extcredits5,
ADD pageviews mediumint(8) UNSIGNED NOT NULL AFTER digestposts,
ADD oltime smallint(6) UNSIGNED NOT NULL AFTER digestposts,
DROP INDEX username,
ADD UNIQUE (username),
ADD INDEX (email)
\$str_fields;
EOT;
$upgrade8 = <<<EOT
UPDATE cdb_members SET extcredits1=credits, showemail='-1', timeoffset='9999', timeformat='0', dateformat='', pmsound='1';
ALTER TABLE cdb_memberfields CHANGE oicq qq varchar(12) NOT NULL, ADD nickname varchar(30) NOT NULL AFTER uid, CHANGE avatar avatar varchar(255) NOT NULL, ADD medals varchar(255) NOT NULL AFTER customstatus;
ALTER TABLE cdb_forums DROP moderator,
DROP password,
DROP icon,
DROP viewperm,
DROP postperm,
DROP replyperm,
DROP getattachperm,
ADD inheritedmod tinyint(1) NOT NULL AFTER allowimgcode,
ADD autoclose smallint(6) NOT NULL AFTER replycredits,
ADD modnewposts tinyint(1) NOT NULL AFTER allowimgcode,
ADD recyclebin tinyint(1) NOT NULL AFTER allowimgcode,
ADD allowblog TINYINT(1) NOT NULL AFTER allowimgcode,
ADD jammer TINYINT(1) NOT NULL AFTER modnewposts,
ADD todayposts MEDIUMINT(8) UNSIGNED NOT NULL AFTER posts,
ADD INDEX (fup);
DELETE FROM cdb_attachments WHERE pid='0' OR aid='0' OR tid='0';
UPDATE cdb_forums SET allowblog='1';
DELETE FROM cdb_posts WHERE dateline=0;
DELETE FROM cdb_threads WHERE dateline=0;
EOT;
$upgrade9 = <<<EOT
ALTER TABLE cdb_usergroups ADD public tinyint(1) NOT NULL AFTER radminid, ADD allowmultigroups tinyint(1) NOT NULL AFTER allowvote, CHANGE allowcstatus allowcstatus1 tinyint(1) NOT NULL, CHANGE allowavatar allowavatar1 tinyint(1) NOT NULL, ADD allowcstatus tinyint(1) NOT NULL AFTER allowsearch, ADD allowavatar tinyint(1) NOT NULL AFTER allowsearch, ADD allowreply tinyint(1) NOT NULL AFTER allowpost, ADD raterange char(120) NOT NULL AFTER attachextensions, ADD maxprice smallint(6) UNSIGNED NOT NULL NOT NULL AFTER reasonpm, ADD allowtransfer tinyint(1) NOT NULL AFTER allowinvisible, ADD disableperiodctrl tinyint(1) NOT NULL AFTER allowviewstats;
UPDATE cdb_usergroups SET allowcstatus=allowcstatus1, allowavatar=allowavatar1, allowreply=allowpost, raterange=CONCAT_WS('\t', allowkarma, minkarmarate, maxkarmarate, maxrateperday);
UPDATE cdb_usergroups SET allowmultigroups=1 WHERE groupid NOT IN (4,5,6,7,8) AND (type<>'member' OR (type='member' AND creditshigher>=500));
UPDATE cdb_usergroups SET raterange='' WHERE raterange LIKE '0\t0\t0\t%';
UPDATE cdb_usergroups SET allowtransfer=1, disableperiodctrl=1, maxprice=(4-groupid)*10 WHERE groupid IN (1,2,3);
ALTER TABLE cdb_usergroups DROP allowcstatus1, DROP allowavatar1, DROP allowkarma, DROP minkarmarate, DROP maxkarmarate, DROP maxrateperday, CHANGE attachextensions attachextensions CHAR(100) NOT NULL;
ALTER TABLE cdb_buddys ADD dateline int(10) UNSIGNED NOT NULL, ADD description CHAR(255) NOT NULL;
UPDATE cdb_buddys SET dateline=UNIX_TIMESTAMP();
ALTER TABLE cdb_profilefields ADD unchangeable TINYINT(1) NOT NULL AFTER required;
ALTER TABLE cdb_failedlogins ADD PRIMARY KEY (ip);
DELETE FROM cdb_settings WHERE variable IN ('maintspans');
ALTER TABLE cdb_settings ORDER BY variable;
ALTER TABLE cdb_onlinetime ADD lastupdate int(10) UNSIGNED NOT NULL;
ALTER TABLE cdb_usergroups ADD system char(8) NOT NULL default 'private' AFTER type;
UPDATE cdb_usergroups SET system='0\t0' WHERE public<>0;
ALTER TABLE cdb_usergroups DROP public;
ALTER TABLE cdb_memberfields ADD groupterms text NOT NULL AFTER ignorepm;
REPLACE INTO cdb_smilies (id, displayorder, type, code, url) VALUES ('25', '0', 'icon', '', 'icon7.gif');
UPDATE cdb_usergroups SET system='0\t0' WHERE system<>'private';
UPDATE cdb_forums SET threads=0, posts=0 WHERE type='group';
ALTER TABLE cdb_usergroups CHANGE raterange raterange CHAR(150) NOT NULL;
ALTER TABLE cdb_forums ADD alloweditrules TINYINT(1) NOT NULL AFTER allowblog, ADD allowtrade TINYINT(1) NOT NULL AFTER allowblog;
UPDATE cdb_forums SET allowtrade='3' WHERE type IN ('forum', 'sub');
DELETE FROM cdb_settings WHERE variable IN ('ec_allowposttrade', 'ec_allowpaytoauthor');
ALTER TABLE cdb_memberfields ADD alipay VARCHAR(50) NOT NULL AFTER site, ADD taobao varchar(40) NOT NULL AFTER msn;
REPLACE INTO cdb_settings (variable, value) VALUES ('modratelimit', '0');
ALTER TABLE cdb_forums ADD disablewatermark TINYINT(1) NOT NULL AFTER jammer;
EOT;
if(!$action) {
echo"本程序用于升级 Discuz! 3.1.2 到 Discuz! 4.0.0,请确认之前已经顺利安装 Discuz! 3.1.2<br><br><br>";
echo"<b><font color=\"red\">本升级程序只能从 3.1.2 升级到 4.0.0,运行之前,请确认已经上传 3.1.2 的全部文件和目录</font></b><br>";
echo"<b><font color=\"red\">升级前请打开浏览器 JavaScript 支持,整个过程是自动完成的,不需人工点击和干预.<br>升级之前务必备份数据库资料,否则可能产生无法恢复的后果!<br></font></b><br><br>";
echo"正确的升级方法为:<br>1. 关闭原有论坛,上传 Discuz! 4.0.0 版的全部文件和目录,覆盖服务器上的 3.1.2<br>2. 上传本程序到 Discuz! 目录中;<br>4. 运行本程序,直到出现升级完成的提示;<br><br>";
echo"<a href=\"$PHP_SELF?action=upgrade&step=1\">如果您已确认完成上面的步骤,请点这里升级</a>";
} else {
$db = new dbstuff;
$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
$db->select_db($dbname);
unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
if($step == 1) {
$query = $db->query("SELECT value FROM {$tablepre}settings WHERE variable='version'");
if(!in_array(($db->result($query, 0)), array('3.1', '3.1.2'))) {
exit('您当前数据库数据版本不是3.1或3.1.2,无法升级');
}
dir_clear('./forumdata/cache');
dir_clear('./forumdata/templates');
$query = $db->query("SELECT username, count(*) AS count FROM {$tablepre}members GROUP BY username HAVING count>1");
while($member = $db->fetch_array($query)) {
$uids = 0;
$member['count']--;
$member['username'] = addslashes($member['username']);
$querymem = $db->query("SELECT uid FROM {$tablepre}members WHERE username='$member[username]' ORDER BY adminid>0, postnum, credit LIMIT $member[count]", 'SILENT');
while($mem = $db->fetch_array($querymem)) {
$uids .= ",$mem[uid]";
}
$db->query("DELETE FROM {$tablepre}members WHERE uid IN ($uids)");
}
runquery($upgrade1);
echo "第 1 步升级成功<br><br>";
redirect("?action=upgrade&step=2");
} elseif($step == 2 || $step == 3) {
$fieldids = array();
$str_table = '';
$query = $db->query("SELECT fieldid, size FROM {$tablepre}profilefields");
while($field = $db->fetch_array($query)) {
$str_table .= "\nfield_$field[fieldid] varchar($field[size]) NOT NULL default '',";
$fieldids[] = $field['fieldid'];
}
if($step == 2) {
eval("\$upgrade2 = \"$upgrade2\";");
runquery($upgrade2);
echo "第 2 步升级成功<br><br>";
redirect("?action=upgrade&step=3&start=0");
} else {
$start = intval($start);
$fields = 'uid, site, icq, oicq, yahoo, msn, location, bio, signature, avatar, avatarwidth, avatarheight, customstatus, ignorepm';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -