2016-12-15 08:20:54 -05:00
< ? php
/**
* [ Discuz ! ] ( C ) 2001 - 2099 Comsenz Inc .
* This is NOT a freeware , use is subject to license terms
*
* $Id : update . php 36284 2016 - 12 - 12 00 : 47 : 50 Z nemohou $
*/
include_once ( '../source/class/class_core.php' );
include_once ( '../source/function/function_core.php' );
@ set_time_limit ( 0 );
$cachelist = array ();
$discuz = C :: app ();
$discuz -> cachelist = $cachelist ;
$discuz -> init_cron = false ;
$discuz -> init_setting = true ;
$discuz -> init_user = false ;
$discuz -> init_session = false ;
$discuz -> init_misc = false ;
$discuz -> init ();
$config = array (
'dbcharset' => $_G [ 'config' ][ 'db' ][ '1' ][ 'dbcharset' ],
'charset' => $_G [ 'config' ][ 'output' ][ 'charset' ],
'tablepre' => $_G [ 'config' ][ 'db' ][ '1' ][ 'tablepre' ]
);
$theurl = 'update.php' ;
$_G [ 'siteurl' ] = preg_replace ( '/\/install\/$/i' , '/' , $_G [ 'siteurl' ]);
if ( $_GET [ 'from' ]) {
if ( md5 ( $_GET [ 'from' ] . $_G [ 'config' ][ 'security' ][ 'authkey' ]) != $_GET [ 'frommd5' ]) {
$refererarr = parse_url ( dreferer ());
list ( $dbreturnurl , $dbreturnurlmd5 ) = explode ( " \t " , authcode ( $_GET [ 'from' ]));
if ( md5 ( $dbreturnurl ) == $dbreturnurlmd5 ) {
$dbreturnurlarr = parse_url ( $dbreturnurl );
} else {
$dbreturnurlarr = parse_url ( $_GET [ 'from' ]);
}
parse_str ( $dbreturnurlarr [ 'query' ], $dbreturnurlparamarr );
$operation = $dbreturnurlparamarr [ 'operation' ];
$version = $dbreturnurlparamarr [ 'version' ];
$release = $dbreturnurlparamarr [ 'release' ];
if ( ! $operation || ! $version || ! $release ) {
show_msg ( '请求的参数不正确' );
}
$time = $_G [ 'timestamp' ];
dheader ( 'Location: ' . $_G [ 'siteurl' ] . basename ( $refererarr [ 'path' ]) . '?action=upgrade&operation=' . $operation . '&version=' . $version . '&release=' . $release . '&ungetfrom=' . $time . '&ungetfrommd5=' . md5 ( $time . $_G [ 'config' ][ 'security' ][ 'authkey' ]));
}
}
$lockfile = DISCUZ_ROOT . './data/update.lock' ;
if ( file_exists ( $lockfile ) && ! $_GET [ 'from' ]) {
show_msg ( '请您先登录服务器ftp, 手工删除 ./data/update.lock 文件,再次运行本文件进行升级。' );
}
$devmode = file_exists ( DISCUZ_ROOT . './install/data/install_dev.sql' );
$sqlfile = DISCUZ_ROOT . ( $devmode ? './install/data/install_dev.sql' : './install/data/install.sql' );
if ( ! file_exists ( $sqlfile )) {
show_msg ( 'SQL文件 ' . $sqlfile . ' 不存在' );
}
$first_to_2_5 = ! C :: t ( 'common_setting' ) -> skey_exists ( 'strongpw' );
$first_to_3_0 = ! C :: t ( 'common_setting' ) -> skey_exists ( 'antitheft' );
if ( $_POST [ 'delsubmit' ]) {
if ( ! empty ( $_POST [ 'deltables' ])) {
foreach ( $_POST [ 'deltables' ] as $tname => $value ) {
DB :: query ( " DROP TABLE ` " . DB :: table ( $tname ) . " ` " );
}
}
if ( ! empty ( $_POST [ 'delcols' ])) {
foreach ( $_POST [ 'delcols' ] as $tname => $cols ) {
foreach ( $cols as $col => $indexs ) {
if ( $col == 'PRIMARY' ) {
DB :: query ( " ALTER TABLE " . DB :: table ( $tname ) . " DROP PRIMARY KEY " , 'SILENT' );
} elseif ( $col == 'KEY' || $col == 'UNIQUE' ) {
foreach ( $indexs as $index => $value ) {
DB :: query ( " ALTER TABLE " . DB :: table ( $tname ) . " DROP INDEX ` $index ` " , 'SILENT' );
}
} else {
DB :: query ( " ALTER TABLE " . DB :: table ( $tname ) . " DROP ` $col ` " );
}
}
}
}
show_msg ( '删除表和字段操作完成了' , $theurl . '?step=style' );
}
function waitingdb ( $curstep , $sqlarray ) {
global $theurl ;
foreach ( $sqlarray as $key => $sql ) {
$sqlurl .= '&sql[]=' . md5 ( $sql );
$sendsql .= '<img width="1" height="1" src="' . $theurl . '?step=' . $curstep . '&waitingdb=1&sqlid=' . $key . '">' ;
}
show_msg ( " 优化数据表 " , $theurl . '?step=waitingdb&nextstep=' . $curstep . $sqlurl . '&sendsql=' . base64_encode ( $sendsql ), 5000 , 1 );
}
if ( empty ( $_GET [ 'step' ])) $_GET [ 'step' ] = 'start' ;
if ( $_GET [ 'step' ] == 'start' ) {
include_once ( '../config/config_ucenter.php' );
include_once ( '../uc_client/client.php' );
$version = uc_check_version ();
$version = $version [ 'db' ];
if ( ! $devmode && ! C :: t ( 'common_setting' ) -> fetch ( 'bbclosed' )) {
C :: t ( 'common_setting' ) -> update ( 'bbclosed' , 1 );
require_once libfile ( 'function/cache' );
updatecache ( 'setting' );
show_msg ( '您的站点未关闭,正在关闭,请稍后...' , $theurl . '?step=start' , 5000 );
}
if ( version_compare ( $version , '1.5.2' ) <= 0 ) {
show_msg ( '请先升级 UCenter 到 1.6.0 以上版本。<br>如果使用为Discuz! X自带UCenter, 请先下载 UCenter 1.6.0, 在 utilities 目录下找到对应的升级程序,复制或上传到 Discuz! X 的 uc_server 目录下,运行该程序进行升级' );
} else {
show_msg ( ' 说明: < br > 本升级程序会参照最新的SQL文件, 对数据库进行同步升级。 < br >
请确保当前目录下 ./ data / install . sql 文件为最新版本。 < br >< br >
升级完成后会关闭所有插件以确保正常运行,请站长逐个开启每一个插件检测是否兼容新版本。 < br >< br >
< a href = " '. $theurl .'?step=prepare'.( $_GET['from'] ? '&from='.rawurlencode( $_GET['from'] ).'&frommd5='.rawurlencode( $_GET['frommd5'] ) : '').' " > 准备完毕,升级开始 </ a > ' );
}
} elseif ( $_GET [ 'step' ] == 'waitingdb' ) {
$query = DB :: fetch_all ( " SHOW FULL PROCESSLIST " );
foreach ( $query as $row ) {
if ( in_array ( md5 ( $row [ 'Info' ]), $_GET [ 'sql' ])) {
$list .= '[时长]:' . $row [ 'Time' ] . '秒 [状态]:<b>' . $row [ 'State' ] . '</b>[信息]:' . $row [ 'Info' ] . '<br><br>' ;
}
}
if ( empty ( $list ) && empty ( $_GET [ 'sendsql' ])) {
$msg = '准备进入下一步操作,请稍后...' ;
$notice = '' ;
$url = " ?step= $_GET[nextstep] " ;
$time = 5 ;
} else {
$msg = '正在升级数据,请稍后...' ;
$notice = '<br><br><b>以下是正在执行的数据库升级语句:</b><br>' . $list . base64_decode ( $_GET [ 'sendsql' ]);
$sqlurl = implode ( '&sql[]=' , $_GET [ 'sql' ]);
$url = " ?step=waitingdb&nextstep= $_GET[nextstep] &sql[]= " . $sqlurl ;
$time = 20 ;
}
show_msg ( $msg , $theurl . $url , $time * 1000 , 0 , $notice );
} elseif ( $_GET [ 'step' ] == 'prepare' ) {
if ( ! C :: t ( 'common_setting' ) -> skey_exists ( 'group_recommend' )) {
C :: t ( 'forum_groupinvite' ) -> truncate ();
}
if ( DB :: fetch_first ( " SHOW COLUMNS FROM " . DB :: table ( 'forum_activityapply' ) . " LIKE 'contact' " )) {
$query = DB :: query ( " UPDATE " . DB :: table ( 'forum_activityapply' ) . " SET message=CONCAT_WS(' 联系方式:', message, contact) WHERE contact<>'' " );
DB :: query ( " ALTER TABLE " . DB :: table ( 'forum_activityapply' ) . " DROP contact " );
}
if ( $row = DB :: fetch_first ( " SHOW COLUMNS FROM " . DB :: table ( 'forum_postcomment' ) . " LIKE 'authorid' " )) {
if ( strstr ( $row [ 'Type' ], 'unsigned' )) {
DB :: query ( " ALTER TABLE " . DB :: table ( 'forum_postcomment' ) . " CHANGE authorid authorid mediumint(8) NOT NULL default '0' " );
DB :: query ( " UPDATE " . DB :: table ( 'forum_postcomment' ) . " SET authorid='-1' WHERE authorid='0' " );
}
}
if ( ! $row = DB :: fetch_first ( " SHOW COLUMNS FROM " . DB :: table ( 'common_failedlogin' ) . " LIKE 'username' " )) {
DB :: query ( " TRUNCATE " . DB :: table ( 'common_failedlogin' ));
DB :: query ( " ALTER TABLE " . DB :: table ( 'common_failedlogin' ) . " ADD username char(32) NOT NULL default '' AFTER ip " );
DB :: query ( " ALTER TABLE " . DB :: table ( 'common_failedlogin' ) . " DROP PRIMARY KEY " );
DB :: query ( " ALTER TABLE " . DB :: table ( 'common_failedlogin' ) . " ADD PRIMARY KEY ipusername (ip,username) " );
}
if ( ! $row = DB :: fetch_first ( " SHOW COLUMNS FROM " . DB :: table ( 'forum_forumfield' ) . " LIKE 'seodescription' " )) {
DB :: query ( " ALTER TABLE " . DB :: table ( 'forum_forumfield' ) . " ADD seodescription text NOT NULL default '' COMMENT '版块seo描述' AFTER keywords " );
DB :: query ( " UPDATE " . DB :: table ( 'forum_forumfield' ) . " SET seodescription=description WHERE membernum='0' " );
}
if ( DB :: fetch_first ( " SHOW TABLES LIKE ' " . DB :: table ( 'common_tagitem' ) . " ' " )) {
$noexist_itemkey = true ;
$query = DB :: query ( " SHOW INDEX FROM " . DB :: table ( 'common_tagitem' ));
while ( $row = DB :: fetch ( $query )) {
if ( $row [ 'Key_name' ] == 'item' ) {
$noexist_itemkey = false ;
break ;
}
}
if ( $noexist_itemkey ) {
$query = DB :: query ( " SELECT *, count(idtype) AS rcount FROM " . DB :: table ( 'common_tagitem' ) . " GROUP BY tagid,itemid,idtype ORDER BY rcount DESC " );
while ( $row = DB :: fetch ( $query )) {
if ( $row [ 'rcount' ] > 1 ) {
DB :: query ( " DELETE FROM " . DB :: table ( 'common_tagitem' ) . " WHERE tagid=' $row[tagid] ' AND itemid=' $row[itemid] ' AND idtype=' $row[idtype] ' LIMIT " . ( $row [ 'rcount' ] - 1 ));
} else {
break ;
}
}
}
}
$posttables = get_special_tables_array ( 'forum_post' );
$posttables [] = 'forum_post' ;
foreach ( $posttables as $post_tablename ) {
if ( ! DB :: fetch_first ( " SHOW COLUMNS FROM " . DB :: table ( $post_tablename ) . " LIKE 'position' " )) {
$sql [] = " ALTER TABLE " . DB :: table ( $post_tablename ) . " ORDER BY tid ASC, first DESC, pid ASC " ;
$replycreditsql = '' ;
if ( DB :: fetch_first ( " SHOW COLUMNS FROM " . DB :: table ( $post_tablename ) . " LIKE 'replycredit' " )) {
$replycreditsql = " CHANGE `replycredit` `replycredit` int(10) NOT NULL default '0', " ;
}
$sql [] = " ALTER TABLE " . DB :: table ( $post_tablename ) . " CHANGE `pid` `pid` INT(10) UNSIGNED NOT NULL, $replycreditsql CHANGE `status` `status` int(10) NOT NULL default '0', ADD UNIQUE KEY pid (pid), DROP PRIMARY KEY, ADD `position` INT(8) UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(`tid`, `position`), DROP INDEX authorid, ADD INDEX authorid (authorid,invisible) " ;
if ( ! $_GET [ 'waitingdb' ]) {
waitingdb ( 'prepare' , $sql );
} else {
if ( $sql [ $_GET [ sqlid ]]) {
DB :: query ( $sql [ $_GET [ sqlid ]], array (), false , true );
}
}
exit ();
}
}
$diydata = array ( 'common_diy_data' => 0 , 'common_template_block' => 0 );
foreach ( DB :: fetch_all ( 'SHOW KEYS FROM ' . DB :: table ( 'common_diy_data' )) as $_key ) {
if ( $_key [ 'Key_name' ] == 'PRIMARY' ) {
$diydata [ 'common_diy_data' ] ++ ;
}
}
foreach ( DB :: fetch_all ( 'SHOW KEYS FROM ' . DB :: table ( 'common_template_block' )) as $_key ) {
if ( $_key [ 'Key_name' ] == 'PRIMARY' ) {
$diydata [ 'common_template_block' ] ++ ;
}
}
if ( $diydata [ 'common_diy_data' ] == 1 ) {
DB :: query ( 'ALTER TABLE ' . DB :: table ( 'common_diy_data' ) . ' DROP PRIMARY KEY' );
}
if ( $diydata [ 'common_template_block' ] == 2 ) {
DB :: query ( 'ALTER TABLE ' . DB :: table ( 'common_template_block' ) . ' DROP PRIMARY KEY' );
}
show_msg ( '准备完毕,进入下一步数据库结构升级' , $theurl . '?step=sql' );
} elseif ( $_GET [ 'step' ] == 'sql' ) {
$sql = implode ( '' , file ( $sqlfile ));
preg_match_all ( " /CREATE \ s+TABLE.+?pre \ _(.+?) \ s* \ ((.+?) \ ) \ s*(ENGINE|TYPE) \ s*= \ s*( \ w+)/is " , $sql , $matches );
$newtables = empty ( $matches [ 1 ]) ? array () : $matches [ 1 ];
$newsqls = empty ( $matches [ 0 ]) ? array () : $matches [ 0 ];
if ( empty ( $newtables ) || empty ( $newsqls )) {
show_msg ( 'SQL文件内容为空, 请确认' );
}
$i = empty ( $_GET [ 'i' ]) ? 0 : intval ( $_GET [ 'i' ]);
$count_i = count ( $newtables );
if ( $i >= $count_i ) {
show_msg ( '数据库结构升级完毕,进入下一步数据升级操作' , $theurl . '?step=data' );
}
$newtable = $newtables [ $i ];
$specid = intval ( $_GET [ 'specid' ]);
if ( $specid && in_array ( $newtable , array ( 'forum_post' , 'forum_thread' ))) {
$spectable = $newtable ;
$newtable = get_special_table_by_num ( $newtable , $specid );
}
$newcols = getcolumn ( $newsqls [ $i ]);
if ( ! $query = DB :: query ( " SHOW CREATE TABLE " . DB :: table ( $newtable ), 'SILENT' )) {
preg_match ( " /(CREATE TABLE .+?) \ s*(ENGINE|TYPE) \ s*= \ s*( \ w+)/is " , $newsqls [ $i ], $maths );
$maths [ 3 ] = strtoupper ( $maths [ 3 ]);
if ( $maths [ 3 ] == 'MEMORY' || $maths [ 3 ] == 'HEAP' ) {
$type = helper_dbtool :: dbversion () > '4.1' ? " ENGINE=MEMORY " . ( empty ( $config [ 'dbcharset' ]) ? '' : " DEFAULT CHARSET= $config[dbcharset] " ) : " TYPE=HEAP " ;
} else {
$type = helper_dbtool :: dbversion () > '4.1' ? " ENGINE=MYISAM " . ( empty ( $config [ 'dbcharset' ]) ? '' : " DEFAULT CHARSET= $config[dbcharset] " ) : " TYPE=MYISAM " ;
}
$usql = $maths [ 1 ] . $type ;
$usql = str_replace ( " CREATE TABLE IF NOT EXISTS pre_ " , 'CREATE TABLE IF NOT EXISTS ' . $config [ 'tablepre' ], $usql );
$usql = str_replace ( " CREATE TABLE pre_ " , 'CREATE TABLE ' . $config [ 'tablepre' ], $usql );
if ( ! DB :: query ( $usql , 'SILENT' )) {
show_msg ( '添加表 ' . DB :: table ( $newtable ) . ' 出错,请手工执行以下SQL语句后,再重新运行本升级程序:<br><br>' . dhtmlspecialchars ( $usql ));
} else {
$msg = '添加表 ' . DB :: table ( $newtable ) . ' 完成' ;
}
} else {
$value = DB :: fetch ( $query );
$oldcols = getcolumn ( $value [ 'Create Table' ]);
$updates = array ();
$allfileds = array_keys ( $newcols );
foreach ( $newcols as $key => $value ) {
if ( $key == 'PRIMARY' ) {
if ( $value != $oldcols [ $key ]) {
if ( ! empty ( $oldcols [ $key ])) {
$usql = " RENAME TABLE " . DB :: table ( $newtable ) . " TO " . DB :: table ( $newtable . '_bak' );
if ( ! DB :: query ( $usql , 'SILENT' )) {
show_msg ( '升级表 ' . DB :: table ( $newtable ) . ' 出错,请手工执行以下升级语句后,再重新运行本升级程序:<br><br><b>升级SQL语句</b>:<div style=\"position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;\">' . dhtmlspecialchars ( $usql ) . " </div><br><b>Error</b>: " . DB :: error () . " <br><b>Errno.</b>: " . DB :: errno ());
} else {
$msg = '表改名 ' . DB :: table ( $newtable ) . ' 完成!' ;
show_msg ( $msg , $theurl . '?step=sql&i=' . $_GET [ 'i' ]);
}
}
$updates [] = " ADD PRIMARY KEY $value " ;
}
} elseif ( $key == 'KEY' ) {
foreach ( $value as $subkey => $subvalue ) {
if ( ! empty ( $oldcols [ 'KEY' ][ $subkey ])) {
if ( $subvalue != $oldcols [ 'KEY' ][ $subkey ]) {
$updates [] = " DROP INDEX ` $subkey ` " ;
$updates [] = " ADD INDEX ` $subkey ` $subvalue " ;
}
} else {
$updates [] = " ADD INDEX ` $subkey ` $subvalue " ;
}
}
} elseif ( $key == 'UNIQUE' ) {
foreach ( $value as $subkey => $subvalue ) {
if ( ! empty ( $oldcols [ 'UNIQUE' ][ $subkey ])) {
if ( $subvalue != $oldcols [ 'UNIQUE' ][ $subkey ]) {
$updates [] = " DROP INDEX ` $subkey ` " ;
$updates [] = " ADD UNIQUE INDEX ` $subkey ` $subvalue " ;
}
} else {
$usql = " ALTER TABLE " . DB :: table ( $newtable ) . " DROP INDEX ` $subkey ` " ;
DB :: query ( $usql , 'SILENT' );
$updates [] = " ADD UNIQUE INDEX ` $subkey ` $subvalue " ;
}
}
} else {
if ( ! empty ( $oldcols [ $key ])) {
if ( strtolower ( $value ) != strtolower ( $oldcols [ $key ])) {
$updates [] = " CHANGE ` $key ` ` $key ` $value " ;
}
} else {
$i = array_search ( $key , $allfileds );
$fieldposition = $i > 0 ? 'AFTER `' . $allfileds [ $i - 1 ] . '`' : 'FIRST' ;
$updates [] = " ADD ` $key ` $value $fieldposition " ;
}
}
}
if ( ! empty ( $updates )) {
$usql = " ALTER TABLE " . DB :: table ( $newtable ) . " " . implode ( ', ' , $updates );
if ( ! DB :: query ( $usql , 'SILENT' )) {
show_msg ( '升级表 ' . DB :: table ( $newtable ) . ' 出错,请手工执行以下升级语句后,再重新运行本升级程序:<br><br><b>升级SQL语句</b>:<div style=\"position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;\">' . dhtmlspecialchars ( $usql ) . " </div><br><b>Error</b>: " . DB :: error () . " <br><b>Errno.</b>: " . DB :: errno ());
} else {
$msg = '升级表 ' . DB :: table ( $newtable ) . ' 完成!' ;
}
} else {
$msg = '检查表 ' . DB :: table ( $newtable ) . ' 完成,不需升级,跳过' ;
}
}
if ( $specid ) {
$newtable = $spectable ;
}
if ( get_special_table_by_num ( $newtable , $specid + 1 )) {
$next = $theurl . '?step=sql&i=' . ( $_GET [ 'i' ]) . '&specid=' . ( $specid + 1 );
} else {
$next = $theurl . '?step=sql&i=' . ( $_GET [ 'i' ] + 1 );
}
show_msg ( " [ $i / $count_i ] " . $msg , $next );
} elseif ( $_GET [ 'step' ] == 'data' ) {
if ( empty ( $_GET [ 'op' ]) || $_GET [ 'op' ] == 'realname' ) {
$nextop = 'profile' ;
$p = 1000 ;
$i = ! empty ( $_GET [ 'i' ]) ? intval ( $_GET [ 'i' ]) : 0 ;
$n = 0 ;
if ( $i == 0 ) {
$value = DB :: fetch_first ( 'SELECT * FROM ' . DB :: table ( 'common_member_profile_setting' ) . " WHERE fieldid = 'realname' " );
if ( ! empty ( $value )) {
show_msg ( " 实名功能升级完毕 " , " $theurl ?step=data&op= $nextop " );
}
DB :: query ( " INSERT INTO " . DB :: table ( 'common_member_profile_setting' ) . " VALUES ('realname', '1', '0', '1', '真实姓名', '', '0', '0', '0', '0', '1', 'text', '0', '', '', '0', '0') " );
}
$t = DB :: result_first ( 'SELECT uid FROM ' . DB :: table ( 'common_member' ) . " ORDER BY uid DESC LIMIT 1 " );
$names = $uids = array ();
$query = DB :: query ( 'SELECT * FROM ' . DB :: table ( 'common_member' ) . " WHERE uid>' $i ' AND realname != '' LIMIT $p " );
while ( $value = DB :: fetch ( $query )) {
$n = intval ( $value [ 'uid' ]);
$value [ 'uid' ] = intval ( $value [ 'uid' ]);
$value [ 'realname' ] = $value [ 'realname' ];
C :: t ( 'common_member' ) -> update ( $value [ 'uid' ], array ( 'realname' => '' ));
C :: t ( 'common_member_profile' ) -> update ( $value [ 'uid' ], array ( 'realname' => $value [ 'realname' ]));
$names [ $value [ 'uid' ]] = $value [ 'realname' ];
}
if ( $n > 0 ) {
show_msg ( " 实名功能升级中[ $n / $t ] " , " $theurl ?step=data&op=realname&i= $n " );
} else {
show_msg ( " 实名功能升级完毕 " , " $theurl ?step=data&op= $nextop " );
}
} elseif ( $_GET [ 'op' ] == 'profile' ) {
$nextop = 'setting' ;
$value = DB :: result_first ( 'SELECT count(*) FROM ' . DB :: table ( 'common_member_profile_setting' ) . " WHERE fieldid = 'birthdist' " );
if ( ! $value ) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_member_profile_setting' ) . " VALUES ('birthdist', 1, 0, 0, '出生县', '出生行政区/县', 0, 0, 0, 0, 0, 0, 0, 'select', 0, '', '') " );
DB :: query ( " INSERT INTO " . DB :: table ( 'common_member_profile_setting' ) . " VALUES ('birthcommunity', 1, 0, 0, '出生小区', '', 0, 0, 0, 0, 0, 0, 0, 'select', 0, '', '') " );
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='出生地' WHERE fieldid = 'birthcity' " );
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='居住地' WHERE fieldid = 'residecity' " );
}
$count = DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_district' ) . " WHERE `level`='1' AND `usetype`>'0' " );
if ( ! $count ) {
DB :: query ( " UPDATE " . DB :: table ( 'common_district' ) . " SET `usetype`='3' WHERE `level` = '1' " );
}
$profile = DB :: fetch_first ( 'SELECT * FROM ' . DB :: table ( 'common_member_profile_setting' ) . " WHERE fieldid = 'birthday' " );
if ( $profile [ 'title' ] == '出生日期' ) {
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='生日' WHERE fieldid = 'birthday' " );
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='证件类型' WHERE fieldid = 'idcardtype' " );
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='支付宝' WHERE fieldid = 'alipay' " );
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='ICQ' WHERE fieldid = 'icq' " );
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='QQ' WHERE fieldid = 'qq' " );
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='MSN' WHERE fieldid = 'msn' " );
DB :: query ( " UPDATE " . DB :: table ( 'common_member_profile_setting' ) . " SET title='阿里旺旺' WHERE fieldid = 'taobao' " );
}
show_msg ( " 用户栏目升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'setting' ) {
$nextop = 'admingroup' ;
$settings = $newsettings = array ();
$settings = C :: t ( 'common_setting' ) -> fetch_all ();
if ( ! isset ( $settings [ 'relatetime' ])) {
$newsettings [ 'relatetime' ] = 60 ;
}
if ( ! isset ( $settings [ 'portalstatus' ])) {
$newsettings [ 'portalstatus' ] = 1 ;
}
if ( ! isset ( $settings [ 'homestatus' ])) {
$newsettings [ 'homestatus' ] = 1 ;
}
if ( isset ( $settings [ 'thumbsource' ]) && ! $settings [ 'sourcewidth' ] && ! $settings [ 'sourceheight' ]) {
$newsettings [ 'sourcewidth' ] = $setting [ 'thumbwidth' ];
$newsettings [ 'sourceheight' ] = $setting [ 'thumbheight' ];
}
if ( empty ( $settings [ 'my_siteid' ]) && ! empty ( $settings [ 'connectsiteid' ])) {
$newsettings [ 'my_siteid' ] = $settings [ 'connectsiteid' ];
C :: t ( 'common_setting' ) -> delete ( 'connectsiteid' );
}
if ( empty ( $settings [ 'my_sitekey' ]) && ! empty ( $settings [ 'connectsitekey' ])) {
$newsettings [ 'my_sitekey' ] = $settings [ 'connectsitekey' ];
C :: t ( 'common_setting' ) -> delete ( 'connectsitekey' );
}
$newsettings [ 'adminnotifytypes' ] = 'verifythread,verifypost,verifyuser,verifyblog,verifydoing,verifypic,verifyshare,verifycommontes,verifyrecycle,verifyrecyclepost,verifyarticle,verifyacommont,verifymedal,verify_1,verify_2,verify_3,verify_4,verify_5,verify_6,verify_7' ;
if ( ! isset ( $settings [ 'allowwidthauto' ])) {
$newsettings [ 'allowwidthauto' ] = 1 ;
$newsettings [ 'switchwidthauto' ] = 1 ;
}
if ( ! $settings [ 'activitypp' ]) {
$newsettings [ 'activitypp' ] = 8 ;
}
if ( ! $settings [ 'followretainday' ]) {
$newsettings [ 'followretainday' ] = 7 ;
}
if ( ! isset ( $settings [ 'allowpostcomment' ])) {
$newsettings [ 'allowpostcomment' ] = array ( '1' );
}
if ( ! isset ( $settings [ 'styleid1' ])) {
$newsettings [ 'styleid1' ] = 1 ;
}
if ( ! isset ( $settings [ 'styleid2' ])) {
$newsettings [ 'styleid2' ] = 1 ;
}
if ( ! isset ( $settings [ 'styleid3' ])) {
$newsettings [ 'styleid3' ] = 1 ;
}
if ( $settings [ 'heatthread' ]) {
$settings [ 'heatthread' ] = dunserialize ( $settings [ 'heatthread' ]);
if ( empty ( $settings [ 'heatthread' ][ 'type' ])) {
$settings [ 'heatthread' ][ 'type' ] = 1 ;
$settings [ 'heatthread' ][ 'period' ] = 15 ;
}
if ( empty ( $settings [ 'heatthread' ][ 'guidelimit' ])) {
$settings [ 'heatthread' ][ 'guidelimit' ] = 3 ;
}
$newsettings [ 'heatthread' ] = $settings [ 'heatthread' ];
}
if ( $settings [ 'seotitle' ] && dunserialize ( $settings [ 'seotitle' ]) === FALSE ) {
$rownew = array ( 'forum' => $settings [ 'seotitle' ]);
$newsettings [ 'seotitle' ] = $rownew ;
}
if ( $settings [ 'seokeywords' ] && dunserialize ( $settings [ 'seokeywords' ]) === FALSE ) {
$rownew = array ( 'forum' => $settings [ 'seokeywords' ]);
$newsettings [ 'seokeywords' ] = $rownew ;
}
if ( $settings [ 'seodescription' ] && dunserialize ( $settings [ 'seodescription' ]) === FALSE ) {
$rownew = array ( 'forum' => $settings [ 'seodescription' ]);
$newsettings [ 'seodescription' ] = $rownew ;
}
if ( $settings [ 'watermarkminheight' ] && dunserialize ( $settings [ 'watermarkminheight' ]) === FALSE ) {
$rownew = array ( 'portal' => $settings [ 'watermarkminheight' ], 'forum' => $settings [ 'watermarkminheight' ], 'album' => $settings [ 'watermarkminheight' ]);
$newsettings [ 'watermarkminheight' ] = $rownew ;
}
if ( $settings [ 'watermarkminwidth' ] && dunserialize ( $settings [ 'watermarkminwidth' ]) === FALSE ) {
$rownew = array ( 'portal' => $settings [ 'watermarkminwidth' ], 'forum' => $settings [ 'watermarkminwidth' ], 'album' => $settings [ 'watermarkminwidth' ]);
$newsettings [ 'watermarkminwidth' ] = $rownew ;
}
if ( $settings [ 'watermarkquality' ] && dunserialize ( $settings [ 'watermarkquality' ]) === FALSE ) {
$rownew = array ( 'portal' => $settings [ 'watermarkquality' ], 'forum' => $settings [ 'watermarkquality' ], 'album' => $settings [ 'watermarkquality' ]);
$newsettings [ 'watermarkquality' ] = $rownew ;
}
if ( $settings [ 'watermarkstatus' ] && dunserialize ( $settings [ 'watermarkstatus' ]) === FALSE ) {
$rownew = array ( 'portal' => $settings [ 'watermarkstatus' ], 'forum' => $settings [ 'watermarkstatus' ], 'album' => $settings [ 'watermarkstatus' ]);
$newsettings [ 'watermarkstatus' ] = $rownew ;
}
if ( $settings [ 'watermarktrans' ] && dunserialize ( $settings [ 'watermarktrans' ]) === FALSE ) {
$rownew = array ( 'portal' => $settings [ 'watermarktrans' ], 'forum' => $settings [ 'watermarktrans' ], 'album' => $settings [ 'watermarktrans' ]);
$newsettings [ 'watermarktrans' ] = $rownew ;
}
if ( $settings [ 'watermarktype' ] && dunserialize ( $settings [ 'watermarktype' ]) === FALSE ) {
$watermarktype_map = array (
0 => 'gif' ,
1 => 'png' ,
2 => 'text' ,
);
$rownew = array ( 'portal' => $watermarktype_map [ $settings [ 'watermarktype' ]], 'forum' => $watermarktype_map [ $settings [ 'watermarktype' ]], 'album' => $watermarktype_map [ $settings [ 'watermarktype' ]]);
$newsettings [ 'watermarktype' ] = $rownew ;
}
if ( $settings [ 'watermarktext' ] && dunserialize ( $settings [ 'watermarktext' ]) === FALSE ) {
$rownew = array ();
$watermarktext = ( array ) dunserialize ( $settings [ 'watermarktext' ]);
foreach ( $watermarktext as $data_k => $data_v ) {
$rownew [ $data_k ][ 'portal' ] = $data_v ;
$rownew [ $data_k ][ 'forum' ] = $data_v ;
$rownew [ $data_k ][ 'album' ] = $data_v ;
}
$newsettings [ 'watermarktext' ] = $rownew ;
}
if ( ! $settings [ 'mobile' ]) {
$newsettings [ 'mobile' ] = array ( 'allowmobile' => 0 , 'mobilepreview' => 1 );
}
if ( ! $settings [ 'card' ]) {
$newsettings [ 'card' ] = array ( 'open' => 0 );
}
$newsettings [ 'group_allowfeed' ] = '1' ;
if ( empty ( $settings [ 'relatenum' ])) {
$newsettings [ 'relatenum' ] = '10' ;
}
if ( ! isset ( $settings [ 'profilegroup' ])) {
$profilegroupnew = array (
'base' =>
array (
'available' => 1 ,
'displayorder' => 0 ,
'title' => '基本资料' ,
'field' =>
array (
'realname' => 'realname' ,
'gender' => 'gender' ,
'birthday' => 'birthday' ,
'birthcity' => 'birthcity' ,
'residecity' => 'residecity' ,
'residedist' => 'residedist' ,
'affectivestatus' => 'affectivestatus' ,
'lookingfor' => 'lookingfor' ,
'bloodtype' => 'bloodtype' ,
'field1' => 'field1' ,
'field2' => 'field2' ,
'field3' => 'field3' ,
'field4' => 'field4' ,
'field5' => 'field5' ,
'field6' => 'field6' ,
'field7' => 'field7' ,
'field8' => 'field8' ,
),
),
'contact' =>
array (
'title' => '联系方式' ,
'available' => '1' ,
'displayorder' => '1' ,
'field' =>
array (
'telephone' => 'telephone' ,
'mobile' => 'mobile' ,
'icq' => 'icq' ,
'qq' => 'qq' ,
'yahoo' => 'yahoo' ,
'msn' => 'msn' ,
'taobao' => 'taobao' ,
),
),
'edu' =>
array (
'available' => 1 ,
'displayorder' => 2 ,
'title' => '教育情况' ,
'field' =>
array (
'graduateschool' => 'graduateschool' ,
'education' => 'education' ,
),
),
'work' =>
array (
'available' => 1 ,
'displayorder' => 3 ,
'title' => '工作情况' ,
'field' =>
array (
'occupation' => 'occupation' ,
'company' => 'company' ,
'position' => 'position' ,
'revenue' => 'revenue' ,
),
),
'info' =>
array (
'title' => '个人信息' ,
'available' => '1' ,
'displayorder' => '4' ,
'field' =>
array (
'idcardtype' => 'idcardtype' ,
'idcard' => 'idcard' ,
'address' => 'address' ,
'zipcode' => 'zipcode' ,
'site' => 'site' ,
'bio' => 'bio' ,
'interest' => 'interest' ,
'sightml' => 'sightml' ,
'customstatus' => 'customstatus' ,
'timeoffset' => 'timeoffset' ,
),
),
);
$newsettings [ 'profilegroup' ] = $profilegroupnew ;
}
if ( ! isset ( $settings [ 'ranklist' ])) {
$newsettings [ 'ranklist' ] = array (
'status' => '0' ,
'cache_time' => '1' ,
'index_select' => 'thisweek' ,
'member' => array ( 'available' => '0' , 'cache_time' => '5' , 'show_num' => '20' ,),
'thread' => array ( 'available' => '0' , 'cache_time' => '5' , 'show_num' => '20' ,),
'blog' => array ( 'available' => '0' , 'cache_time' => '5' , 'show_num' => '20' ,),
'poll' => array ( 'available' => '0' , 'cache_time' => '5' , 'show_num' => '20' ,),
'activity' => array ( 'available' => '0' , 'cache_time' => '5' , 'show_num' => '20' ,),
'picture' => array ( 'available' => '0' , 'cache_time' => '5' , 'show_num' => '20' ,),
'forum' => array ( 'available' => '0' , 'cache_time' => '5' , 'show_num' => '20' ,),
'group' => array ( 'available' => '0' , 'cache_time' => '5' , 'show_num' => '20' ,),
);
}
if ( ! isset ( $settings [ 'ipregctrltime' ])) {
$newsettings [ 'ipregctrltime' ] = '72' ;
}
DB :: query ( " REPLACE INTO " . DB :: table ( 'common_setting' ) . " VALUES ('regname', 'register') " );
$newsettings [ 'regname' ] = 'register' ;
if ( empty ( $settings [ 'reglinkname' ])) {
$newsettings [ 'reglinkname' ] = '注册' ;
}
if ( empty ( $settings [ 'domain' ])) {
$newsettings [ 'domain' ] = array (
'defaultindex' => 'forum.php' ,
'holddomain' => 'www|*blog*|*space*' ,
'list' => array (),
'app' => array ( 'portal' => '' , 'forum' => '' , 'group' => '' , 'home' => '' , 'default' => '' ,),
'root' => array ( 'home' => '' , 'group' => '' , 'forum' => '' , 'topic' => '' , 'channel' => '' ,),
);
}
if ( empty ( $settings [ 'group_recommend' ])) {
if ( $settings [ 'newbiespan' ] > 0 ) {
$newsettings [ 'newbiespan' ] = round ( $settings [ 'newbiespan' ] * 60 );
}
DB :: query ( " UPDATE " . DB :: table ( 'common_member_field_forum' ) . " SET attentiongroup='' " );
$query = DB :: query ( " SELECT f.fid, f.name, ff.description, ff.icon FROM " . DB :: table ( 'forum_forum' ) . " f LEFT JOIN " . DB :: table ( 'forum_forumfield' ) . " ff USING(fid) WHERE f.status='3' AND f.type='sub' ORDER BY f.commoncredits desc LIMIT 8 " );
while ( $row = DB :: fetch ( $query )) {
$row [ 'name' ] = addslashes ( $row [ 'name' ]);
$settings [ 'attachurl' ] .= substr ( $settings [ 'attachurl' ], - 1 , 1 ) != '/' ? '/' : '' ;
if ( $row [ 'icon' ]) {
$row [ 'icon' ] = $settings [ 'attachurl' ] . 'group/' . $row [ 'icon' ];
} else {
$row [ 'icon' ] = 'static/image/common/groupicon.gif' ;
}
$row [ 'description' ] = addslashes ( $row [ 'description' ]);
$group_recommend [ $row [ fid ]] = $row ;
}
$newsettings [ 'group_recommend' ] = $group_recommend ;
}
if ( ! DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_magic' ) . " WHERE credit>'0' " )) {
$creditstranssi = explode ( ',' , $settings [ 'creditstrans' ]);
$creditstran = $creditstranssi [ 3 ] ? $creditstranssi [ 3 ] : $creditstranssi [ 0 ];
DB :: update ( 'common_magic' , array ( 'credit' => $creditstran ));
}
if ( ! isset ( $settings [ 'allowviewuserthread' ])) {
$allowviewuserthread = array ( 'allow' => '1' , 'fids' => array ());
$query = DB :: query ( 'SELECT ff.fid,ff.viewperm FROM ' . DB :: table ( 'forum_forum' ) . ' f LEFT JOIN ' . DB :: table ( 'forum_forumfield' ) . " ff ON f.fid = ff.fid WHERE f.status='1' AND f.type IN ('forum','sub') " );
while ( $value = DB :: fetch ( $query )) {
$arr = ! empty ( $value [ 'viewperm' ]) ? explode ( " \t " , $value [ 'viewperm' ]) : array ();
if ( empty ( $value [ 'viewperm' ]) || in_array ( '7' , $arr ) || in_array ( $settings [ 'newusergroupid' ], $arr ) ) {
$allowviewuserthread [ 'fids' ][] = $value [ 'fid' ];
}
}
$newsettings [ 'allowviewuserthread' ] = $allowviewuserthread ;
}
if ( ! isset ( $settings [ 'focus' ])) {
$focusnew = array ( 'title' => '站长推荐' , 'cookie' => 1 );
$newsettings [ 'focus' ] = $focusnew ;
} else {
$focus = dunserialize ( $settings [ 'focus' ]);
if ( ! isset ( $focus [ 'cookie' ])) {
$focus [ 'cookie' ] = 1 ;
$newsettings [ 'focus' ] = $focus ;
}
}
if ( ! isset ( $settings [ 'onlyacceptfriendpm' ])) {
$onlyacceptfriendpmnew = '0' ;
$newsettings [ 'onlyacceptfriendpm' ] = $onlyacceptfriendpmnew ;
}
if ( ! isset ( $settings [ 'pmreportuser' ])) {
$pmreportusernew = '1' ;
$newsettings [ 'pmreportuser' ] = $pmreportusernew ;
}
if ( ! isset ( $settings [ 'chatpmrefreshtime' ])) {
$chatpmrefreshtimenew = '8' ;
$newsettings [ 'chatpmrefreshtime' ] = $chatpmrefreshtimenew ;
}
if ( ! isset ( $settings [ 'preventrefresh' ])) {
$preventrefreshnew = '1' ;
$newsettings [ 'preventrefresh' ] = $preventrefreshnew ;
}
if ( ! isset ( $settings [ 'targetblank' ])) {
$targetblanknew = '0' ;
$newsettings [ 'targetblank' ] = $targetblanknew ;
}
if ( ! isset ( $settings [ 'article_tags' ])) {
$article_tagsnew = array ( 1 => '原创' , 2 => '热点' , 3 => '组图' , 4 => '爆料' , 5 => '头条' , 6 => '幻灯' , 7 => '滚动' , 8 => '推荐' );
$newsettings [ 'article_tags' ] = $article_tagsnew ;
}
if ( empty ( $settings [ 'anonymoustext' ])) {
$newsettings [ 'anonymoustext' ] = '匿名' ;
}
if ( ! $word_type_count = DB :: result_first ( " SELECT count(*) FROM " . DB :: table ( 'common_word_type' ) . " " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_word_type' ) . " VALUES('1', '政治'),('2', '广告') " );
}
if ( ! isset ( $settings [ 'userreasons' ])) {
$newsettings [ 'userreasons' ] = '很给力!\r\n神马都是浮云\r\n赞一个!\r\n山寨\r\n淡定' ;
}
if ( ! $forum_typevar_search = C :: t ( 'forum_typevar' ) -> count_by_search ( 2 )) {
C :: t ( 'forum_typevar' ) -> update_by_search ( 1 , array ( 'search' => 3 ));
}
if (( $seccodecheck = $settings [ 'seccodestatus' ])) {
if ( ! ( $seccodecheck & 16 )) {
$seccodecheck = setstatus ( 5 , 1 , $seccodecheck );
$newsettings [ 'seccodestatus' ] = $seccodecheck ;
}
}
$seccodedata = dunserialize ( $setting [ 'seccodedata' ]);
if ( ! $seccodedata [ 'rule' ]) {
$seccodestatuss = sprintf ( '%05b' , $seccodecheck );
$seccodedata [ 'rule' ][ 'register' ][ 'allow' ] = $seccodestatuss { 4 };
$seccodedata [ 'rule' ][ 'login' ][ 'allow' ] = $seccodestatuss { 3 };
$seccodedata [ 'rule' ][ 'post' ][ 'allow' ] = $seccodestatuss { 2 };
$seccodedata [ 'rule' ][ 'password' ][ 'allow' ] = $seccodestatuss { 1 };
$seccodedata [ 'rule' ][ 'card' ][ 'allow' ] = $seccodestatuss { 0 };
$newsettings [ 'seccodedata' ] = serialize ( $seccodedata );
}
if ( ! isset ( $settings [ 'collectionteamworkernum' ])) {
$newsettings [ 'collectionteamworkernum' ] = '3' ;
}
if ( ! isset ( $settings [ 'collectionnum' ])) {
$newsettings [ 'collectionnum' ] = '5' ;
}
if ( ! $settings [ 'numbercard' ]) {
$newsettings [ 'numbercard' ] = 'a:1:{s:3:"row";a:3:{i:1;s:7:"threads";i:2;s:5:"posts";i:3;s:7:"credits";}}' ;
}
if ( ! isset ( $settings [ 'threadguestlite' ])) {
$newsettings [ 'threadguestlite' ] = '1' ;
}
$settings [ 'search' ] = dunserialize ( $settings [ 'search' ]);
if ( ! is_array ( $settings [ 'search' ][ 'collection' ])) {
$newsettings [ 'search' ] = $settings [ 'search' ];
$newsettings [ 'search' ][ 'collection' ][ 'status' ] = '1' ;
$newsettings [ 'search' ][ 'collection' ][ 'searchctrl' ] = '10' ;
$newsettings [ 'search' ][ 'collection' ][ 'maxspm' ] = '10' ;
$newsettings [ 'search' ][ 'collection' ][ 'maxsearchresults' ] = '500' ;
DB :: query ( " UPDATE " . DB :: table ( 'common_usergroup_field' ) . " SET allowsearch = allowsearch | 64 WHERE groupid<'4' OR groupid>'9' " );
}
if ( empty ( $settings [ 'lazyload' ])) {
$newsettings [ 'lazyload' ] = 0 ;
}
if ( empty ( $settings [ 'guide' ])) {
$newsettings [ 'guide' ] = array ( 'hotdt' => 604800 , 'digestdt' => 604800 );
}
$settings [ 'memory' ] = isset ( $settings [ 'memory' ]) ? dunserialize ( $settings [ 'memory' ]) : array ();
if ( empty ( $settings [ 'memory' ]) || isset ( $settings [ 'memory' ][ 'diyblock' ][ 'enable' ])) {
$memory = array ();
if ( isset ( $settings [ 'memory' ][ 'diyblock' ][ 'enable' ])) {
foreach ( $settings [ 'memory' ] as $k => $v ) {
if ( ! empty ( $v [ 'enable' ])) {
$memory [ 'memory' ][ $k ] = $v [ 'ttl' ];
}
}
}
unset ( $memory [ 'forum_post' ]);
$newsettings [ 'memory' ] = array_merge ( array ( 'common_member' => 0 , 'common_member_count' => 0 , 'common_member_status' => 0 , 'common_member_profile' => 0 ,
'common_member_field_home' => 0 , 'common_member_field_forum' => 0 , 'common_member_verify' => 0 ,
'forum_thread' => 172800 , 'forum_thread_forumdisplay' => 300 , 'forum_collectionrelated' => 0 , 'forum_postcache' => 300 ,
'forum_collection' => 300 , 'home_follow' => 86400 , 'forumindex' => 30 , 'diyblock' => 300 , 'diyblockoutput' => 30 ), $memory );
}
if ( ! isset ( $settings [ 'blockmaxaggregationitem' ])) {
$newsettings [ 'blockmaxaggregationitem' ] = 20000 ;
}
if ( ! isset ( $settings [ 'showfollowcollection' ])) {
$newsettings [ 'showfollowcollection' ] = 8 ;
}
if ( ! isset ( $settings [ 'antitheft' ])) {
$newsettings [ 'antitheft' ] = array ( 'allow' => 0 , 'max' => 200 );
}
if ( ! isset ( $settings [ 'repliesrank' ])) {
$newsettings [ 'repliesrank' ] = 1 ;
$newsettings [ 'threadblacklist' ] = 1 ;
$newsettings [ 'threadhotreplies' ] = 3 ;
$newsettings [ 'threadfilternum' ] = 10 ;
$newsettings [ 'hidefilteredpost' ] = 1 ;
$newsettings [ 'nofilteredpost' ] = 0 ;
$newsettings [ 'filterednovote' ] = 1 ;
}
$group_userperm = dunserialize ( $settings [ 'group_userperm' ]);
if ( ! isset ( $group_userperm [ 'allowlivethread' ])) {
$group_userperm [ 'allowlivethread' ] = '1' ;
$newsettings [ 'group_userperm' ] = serialize ( $group_userperm );
}
if ( ! isset ( $settings [ 'darkroom' ])) {
$newsettings [ 'darkroom' ] = '1' ;
}
if ( ! isset ( $settings [ 'showfjump' ])) {
$newsettings [ 'showfjump' ] = 1 ;
}
if ( ! isset ( $settings [ 'grid' ])) {
$newsettings [ 'grid' ] = 'a:8:{s:8:"showgrid";s:1:"0";s:8:"gridtype";s:1:"0";s:8:"textleng";s:2:"30";s:4:"fids";a:1:{i:0;i:0;}s:9:"highlight";s:1:"1";s:11:"targetblank";s:1:"1";s:8:"showtips";s:1:"1";s:9:"cachelife";s:3:"600";}' ;
}
if ( ! empty ( $newsettings )) {
C :: t ( 'common_setting' ) -> update_batch ( $newsettings );
}
if ( ! DB :: result_first ( " SELECT allowreplycredit FROM " . DB :: table ( 'common_usergroup_field' ) . " WHERE groupid = 1 " )) {
DB :: query ( " UPDATE " . DB :: table ( 'common_usergroup_field' ) . " SET allowreplycredit = '1' WHERE groupid = 1 " );
}
show_msg ( " 配置项升级完成 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'admingroup' ) {
$nextop = 'updatethreadtype' ;
if ( ! DB :: result_first ( " SELECT allowclearrecycle FROM " . DB :: table ( 'common_admingroup' ) . " WHERE allowclearrecycle='1' " )) {
DB :: query ( 'UPDATE ' . DB :: table ( 'common_admingroup' ) . " SET allowclearrecycle='1' WHERE admingid='1' OR admingid='2' " );
}
DB :: query ( 'UPDATE ' . DB :: table ( 'common_admingroup' ) . " SET allowmanagetag='1' WHERE admingid IN ('1', '2', '3') " );
DB :: query ( 'UPDATE ' . DB :: table ( 'common_admingroup' ) . " SET allowlivethread='1' WHERE admingid IN ('1', '2', '3') " );
DB :: query ( 'UPDATE ' . DB :: table ( 'common_usergroup_field' ) . " SET allowposttag='1' WHERE groupid=1 " );
if ( DB :: result_first ( " SELECT cpgroupid FROM " . DB :: table ( 'common_admincp_group' ) . " WHERE cpgroupid='3' " )) {
if ( ! DB :: result_first ( " SELECT cpgroupid FROM " . DB :: table ( 'common_admincp_perm' ) . " WHERE cpgroupid='3' AND perm='threads_group' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_admincp_perm' ) . " VALUES ('3', 'threads_group') " );
DB :: query ( " INSERT INTO " . DB :: table ( 'common_admincp_perm' ) . " VALUES ('3', 'prune_group') " );
DB :: query ( " INSERT INTO " . DB :: table ( 'common_admincp_perm' ) . " VALUES ('3', 'attach_group') " );
DB :: query ( " ALTER TABLE " . DB :: table ( 'common_admingroup' ) . " DROP `disablepostctrl` " );
DB :: query ( " UPDATE " . DB :: table ( 'common_usergroup_field' ) . " SET allowgroupdirectpost='3' " );
DB :: query ( " UPDATE " . DB :: table ( 'common_usergroup_field' ) . " SET allowgroupposturl='3' WHERE groupid='1' " );
}
}
if ( DB :: result_first ( " SELECT cpgroupid FROM " . DB :: table ( 'common_admincp_group' ) . " WHERE cpgroupid='1' " )) {
if ( ! DB :: result_first ( " SELECT cpgroupid FROM " . DB :: table ( 'common_admincp_perm' ) . " WHERE cpgroupid='1' AND perm='postcomment' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_admincp_perm' ) . " VALUES ('1', 'postcomment') " );
}
}
if ( ! DB :: result_first ( " SELECT allowbanvisituser FROM " . DB :: table ( 'common_admingroup' ) . " WHERE allowbanvisituser='1' " )) {
DB :: query ( 'UPDATE ' . DB :: table ( 'common_admingroup' ) . " SET allowbanvisituser='1' WHERE admingid='1' OR admingid='2' " );
}
if ( $first_to_2_5 ) {
DB :: query ( 'UPDATE ' . DB :: table ( 'common_admingroup' ) . " SET allowmanagecollection='1' WHERE admingid='1' OR admingid='2' " );
}
DB :: query ( 'UPDATE ' . DB :: table ( 'common_admingroup' ) . " SET allowmakehtml='1' WHERE admingid=1 " );
show_msg ( " 管理组设置升级完成 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'updatethreadtype' ) {
$nextop = 'updatecron' ;
$selectoption = array ();
$query = DB :: query ( " SELECT * FROM " . DB :: table ( 'forum_typeoption' ) . " WHERE type='select' " );
while ( $typeoptionarr = DB :: fetch ( $query )) {
$selectoption [] = $typeoptionarr [ 'identifier' ];
}
$query = C :: t ( 'forum_threadtype' ) -> range ();
foreach ( $query as $threadtypearr ) {
if ( DB :: num_rows ( DB :: query ( " SHOW TABLES LIKE ' " . DB :: table ( 'forum_optionvalue' ) . " $threadtypearr[typeid] ' " )) != 1 ) {
continue ;
}
$varnames = array ();
$queryoptionvalue = DB :: query ( " SELECT * FROM " . DB :: table ( 'forum_optionvalue' ) . " $threadtypearr[typeid] LIMIT 1 " );
if ( $optionvaluearr = DB :: fetch ( $queryoptionvalue )) {
foreach ( $optionvaluearr as $key => $value ) {
if ( in_array ( $key , $selectoption )) {
$varnames [] = 'CHANGE `' . $key . '` `' . $key . '` VARCHAR(50) NOT NULL' ;
}
}
}
if ( ! empty ( $varnames )) {
DB :: query ( " ALTER TABLE " . DB :: table ( 'forum_optionvalue' ) . " $threadtypearr[typeid] " . implode ( ',' , $varnames ));
}
}
show_msg ( " 分类信息升级完成 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'updatecron' ) {
$nextop = 'updatemagic' ;
if ( ! DB :: result_first ( " SELECT filename FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_cleanfeed.php' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_cron' ) . " VALUES ('', '1','system','清理过期动态','cron_cleanfeed.php','1269746634','1269792000','-1','-1','0','0') " );
}
if ( ! DB :: result_first ( " SELECT filename FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_checkpatch_daily.php' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_cron' ) . " VALUES ('', '1','system','每日获取安全补丁','cron_checkpatch_daily.php','1269746639','1269792000','-1','-1','2','22') " );
}
if ( ! DB :: result_first ( " SELECT filename FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_publish_halfhourly.php' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_cron' ) . " VALUES ('', '1','system','定时发布主题','cron_publish_halfhourly.php','1269746639','1269792000','-1','-1','-1','0 30') " );
}
if ( ! DB :: result_first ( " SELECT filename FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_follow_daily.php' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_cron' ) . " VALUES ('','1','system','每周广播归档','cron_follow_daily.php','1269746639','1269792000','-1','-1','02','0') " );
}
if ( ! DB :: result_first ( " SELECT filename FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_todayviews_daily.php' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_cron' ) . " VALUES ('','1','system','更新每日查看数','cron_todayviews_daily.php','1321500558','1321556400','-1','-1','3','0 5 10 15 20 25 30 35 40 45 50 55') " );
}
if ( ! DB :: result_first ( " SELECT filename FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_member_optimize_daily.php' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_cron' ) . " VALUES ('','0','system','每日用户表优化','cron_member_optimize_daily.php','1321500558','1321556400','-1','-1','2','0 5 10 15 20 25 30 35 40 45 50 55') " );
}
if ( DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_birthday_daily.php' " )) {
DB :: query ( " DELETE FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_birthday_daily.php' " );
}
if ( ! DB :: result_first ( " SELECT filename FROM " . DB :: table ( 'common_cron' ) . " WHERE filename='cron_todayheats_daily.php' " )) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_cron' ) . " VALUES ('','1','system','统计今日热帖','cron_todayheats_daily.php','1269746623','1269792000','-1','-1','0','0') " );
}
show_msg ( " 计划任务升级完成 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'updatemagic' ) {
$nextop = 'updatereport' ;
if ( DB :: result_first ( " SELECT name FROM " . DB :: table ( 'common_magic' ) . " WHERE identifier='highlight' " )) {
DB :: query ( " UPDATE " . DB :: table ( 'common_magic' ) . " SET name='变色卡', description='可以将帖子或日志的标题高亮,变更颜色' WHERE identifier='highlight' " );
}
if ( DB :: result_first ( " SELECT name FROM " . DB :: table ( 'common_magic' ) . " WHERE identifier='namepost' " )) {
DB :: query ( " UPDATE " . DB :: table ( 'common_magic' ) . " SET name='显身卡', description='可以查看一次匿名用户的真实身份。' WHERE identifier='namepost' " );
}
if ( DB :: result_first ( " SELECT name FROM " . DB :: table ( 'common_magic' ) . " WHERE identifier='anonymouspost' " )) {
DB :: query ( " UPDATE " . DB :: table ( 'common_magic' ) . " SET name='匿名卡', description='在指定的地方,让自己的名字显示为匿名。' WHERE identifier='anonymouspost' " );
}
show_msg ( " 道具升级完成 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'updatereport' ) {
$nextop = 'myappcount' ;
if ( ! C :: t ( 'common_setting' ) -> skey_exists ( 'report_reward' )) {
$report_uids = array ();
$founders = $_G [ 'config' ][ 'admincp' ][ 'founder' ] !== '' ? explode ( ',' , str_replace ( ' ' , '' , addslashes ( $_G [ 'config' ][ 'admincp' ][ 'founder' ]))) : array ();
if ( $founders ) {
$founderexists = true ;
$fuid = $fuser = array ();
foreach ( $founders as $founder ) {
if ( is_numeric ( $founder )) {
$fuid [] = $founder ;
} else {
$fuser [] = $founder ;
}
}
$query = DB :: query ( " SELECT uid, username FROM " . DB :: table ( 'common_member' ) . " WHERE " . ( $fuid ? " uid IN ( " . dimplode ( $fuid ) . " ) " : '0' ) . " OR " . ( $fuser ? " username IN ( " . dimplode ( $fuser ) . " ) " : '0' ));
while ( $founder = DB :: fetch ( $query )) {
$report_uids [] = $founder [ 'uid' ];
}
}
$query = DB :: query ( " SELECT uid FROM " . DB :: table ( 'common_admincp_perm' ) . " ap LEFT JOIN " . DB :: table ( 'common_admincp_member' ) . " am ON am.cpgroupid=ap.cpgroupid where perm='report' " );
while ( $user = DB :: fetch ( $query )) {
if ( empty ( $users [ $user [ uid ]])) {
$report_uids [] = $user [ 'uid' ];
}
}
if ( $report_uids ) {
$report_receive = array ( 'adminuser' => $report_uids , 'supmoderator' => array ());
C :: t ( 'common_setting' ) -> update ( 'report_receive' , $report_receive );
}
$report_reward = array ();
$report_reward [ 'min' ] = '-3' ;
$report_reward [ 'max' ] = '3' ;
C :: t ( 'common_setting' ) -> update ( 'report_reward' , $report_receive );
}
show_msg ( " 举报升级完成 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'myappcount' ) {
$nextop = 'nav' ;
$needupgrade = DB :: query ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_myapp_count' ), 'SILENT' );
if ( $needupgrade ) {
DB :: query ( " DROP TABLE ` " . DB :: table ( 'common_myapp_count' ) . " ` " );
DB :: query ( " DROP TABLE ` " . DB :: table ( 'home_userapp_stat' ) . " ` " );
}
show_msg ( " 漫游应用统计升级完成 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'nav' ) {
$nextop = 'forumstatus' ;
$parentids = $navs = $subnavs = array ();
$query = DB :: query ( " SELECT * FROM " . DB :: table ( 'common_nav' ) . " WHERE navtype='0' AND parentid<>'0' " );
while ( $nav = DB :: fetch ( $query )) {
$parentids [ $nav [ 'parentid' ]] = $nav [ 'parentid' ];
}
$query = DB :: query ( " SELECT * FROM " . DB :: table ( 'common_nav' ) . " WHERE type='0' " );
while ( $nav = DB :: fetch ( $query )) {
if ( $nav [ 'identifier' ] == 5 && $nav [ 'navtype' ] == 0 && $nav [ 'available' ] == - 1 ) {
$nav [ 'available' ] = 1 ;
}
$navs [] = $nav ;
if ( $parentids [ $nav [ 'id' ]]) {
$subnavs [ $nav [ 'id' ]] = $nav [ 'id' ];
}
}
$navid = DB :: result_first ( " SELECT id FROM " . DB :: table ( 'common_nav' ) . " WHERE navtype=0 AND type=0 AND identifier=12 " );
DB :: delete ( 'common_nav' , " type='0' " );
DB :: delete ( 'common_nav' , " name=' { hr}' " );
DB :: delete ( 'common_nav' , " name=' { userpanelarea1}' " );
DB :: delete ( 'common_nav' , " name=' { userpanelarea2}' " );
$sql = implode ( '' , file ( DISCUZ_ROOT . './install/data/install_data.sql' ));
preg_match ( " / \ [update \ _nav \ ](.+?) \ [ \ /update \ _nav \ ]/is " , $sql , $a );
runquery ( $a [ 1 ]);
foreach ( $navs as $nav ) {
if ( $nav [ 'identifier' ]) {
if ( $nav [ 'identifier' ] == 4 ) {
$homestatus = C :: t ( 'common_setting' ) -> fetch ( 'homestatus' );
$nav [ 'available' ] = $homestatus ? $nav [ 'available' ] : - 1 ;
if ( ! $navid ) {
DB :: update ( 'common_nav' , array ( 'available' => $homestatus ? 0 : - 1 ),
" navtype IN(0, 2, 3) AND type=0 AND identifier IN('feed', 'blog', 'album', 'share', 'doing', 'wall', '12', '13', '14', '15') " );
if ( $homestatus ) {
DB :: update ( 'common_nav' , array ( 'available' => 1 ),
" navtype=2 AND type=0 AND identifier IN('feed', 'blog', 'album', 'share', 'doing', 'wall') " );
}
DB :: query ( " REPLACE INTO " . DB :: table ( 'common_setting' ) . " VALUES ('homestyle', '1'),('homepagestyle', '1'),('feedstatus', ' $homestatus '),('blogstatus', ' $homestatus '),('doingstatus', ' $homestatus '),('albumstatus', ' $homestatus '),('sharestatus', ' $homestatus '),('wallstatus', ' $homestatus ') " );
}
}
DB :: update ( 'common_nav' , array ( 'name' => $nav [ 'name' ], 'available' => $nav [ 'available' ], 'displayorder' => $nav [ 'displayorder' ]),
" navtype=' $nav[navtype] ' AND identifier=' $nav[identifier] ' " );
if ( $subnavs [ $nav [ 'id' ]]) {
$parentid = DB :: result_first ( " SELECT id FROM " . DB :: table ( 'common_nav' ) . " WHERE navtype=' $nav[navtype] ' AND identifier=' $nav[identifier] ' " );
DB :: update ( 'common_nav' , array ( 'parentid' => $parentid ), " parentid=' $nav[id] ' " );
}
}
}
show_msg ( " 导航数据升级完成 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'forumstatus' ) {
$nextop = 'usergroup' ;
$query = DB :: query ( " SELECT fid FROM " . DB :: table ( 'forum_forum' ) . " WHERE status='2' " );
if ( DB :: num_rows ( $query )) {
while ( $row = DB :: fetch ( $query )) {
$fids [] = $row [ 'fid' ];
}
DB :: update ( 'forum_forum' , array ( 'status' => 1 ), " status='2' " );
}
show_msg ( " 版块状态升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'usergroup' ) {
$nextop = 'creditrule' ;
DB :: update ( 'common_usergroup' , array ( 'allowvisit' => 2 ), " groupid='1' " );
DB :: update ( 'common_usergroup_field' , array ( 'allowbegincode' => 1 ), " groupid='1' " );
if ( DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'forum_forum' ) . " WHERE allowmediacode>'0' " ) &&
! DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_usergroup_field' ) . " WHERE allowmediacode>'0' " )) {
DB :: update ( 'common_usergroup_field' , array ( 'allowmediacode' => 1 ), " groupid<'4' OR groupid>'9' " );
}
show_msg ( " 用户升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'creditrule' ) {
$nextop = 'bbcode' ;
$delrule = array ( 'register' , 'realname' , 'invitefriend' , 'report' , 'uploadimage' , 'editrealname' , 'editrealemail' , 'delavatar' );
$count = DB :: result ( DB :: query ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_credit_rule' ) . " WHERE action IN( " . dimplode ( $delrule ) . " ) " ), 0 );
if ( $count ) {
DB :: query ( " DELETE FROM " . DB :: table ( 'common_credit_rule' ) . " WHERE action IN( " . dimplode ( $delrule ) . " ) " );
}
DB :: update ( 'common_credit_rule' , array ( 'rulename' => '每天登录' ), " rulename='每天登陆' " );
$count = DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_credit_rule' ) . " WHERE action='portalcomment' " );
if ( ! $count ) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_credit_rule' ) . " (`rulename`, `action`, `cycletype`, `cycletime`, `rewardnum`, `norepeat`, `extcredits1`, `extcredits2`, `extcredits3`, `extcredits4`, `extcredits5`, `extcredits6`, `extcredits7`, `extcredits8`, `fids`) VALUES ('文章评论','portalcomment','1','0','40','1','0','1','0','0','0','0','0','0','') " );
}
$count = DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_credit_rule' ) . " WHERE action='followedcollection' " );
if ( ! $count ) {
DB :: query ( " INSERT INTO " . DB :: table ( 'common_credit_rule' ) . " (`rulename`, `action`, `cycletype`, `cycletime`, `rewardnum`, `norepeat`, `extcredits1`, `extcredits2`, `extcredits3`, `extcredits4`, `extcredits5`, `extcredits6`, `extcredits7`, `extcredits8`, `fids`) VALUES ('淘专辑被订阅','followedcollection','1','0','3','0','0','1','0','0','0','0','0','0','') " );
}
show_msg ( " 积分规则升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'bbcode' ) {
$nextop = 'stamp' ;
$allowcusbbcodes = array ();
$query = DB :: query ( " SELECT * FROM " . DB :: table ( 'common_usergroup_field' ));
while ( $row = DB :: fetch ( $query )) {
if ( $row [ 'allowcusbbcode' ]) {
$allowcusbbcodes [] = $row [ 'groupid' ];
}
}
if ( $allowcusbbcodes ) {
DB :: query ( " UPDATE " . DB :: table ( 'forum_bbcode' ) . " SET perm=' " . implode ( " \t " , $allowcusbbcodes ) . " ' WHERE perm='' " );
}
show_msg ( " 自定义代码权限升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'stamp' ) {
$nextop = 'block_item' ;
$stampnew = DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'forum_thread' ) . " WHERE stamp>'0' " );
if ( ! $stampnew ) {
$query = DB :: query ( " SELECT t.tid, tm.stamp FROM " . DB :: table ( 'forum_thread' ) . " t
INNER JOIN " .DB::table('forum_threadmod'). " tm ON t . tid = tm . tid AND tm . action = 'SPA'
WHERE t . status | 16 = t . status " );
while ( $row = DB :: fetch ( $query )) {
DB :: query ( " UPDATE " . DB :: table ( 'forum_thread' ) . " SET stamp=' $row[stamp] ' WHERE tid=' $row[tid] ' " , 'UNBUFFERED' );
}
}
if ( ! DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_smiley' ) . " WHERE url='010.gif' " )) {
DB :: query ( " REPLACE INTO " . DB :: table ( 'common_smiley' ) . " (typeid, displayorder, type, code, url) VALUES ('4','19','stamp','编辑采用','010.gif') " );
}
if ( ! DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_smiley' ) . " WHERE url='010.small.gif' " )) {
DB :: query ( " REPLACE INTO " . DB :: table ( 'common_smiley' ) . " (typeid, displayorder, type, code, url) VALUES ('0','18','stamplist','编辑采用','010.small.gif') " );
}
if ( ! DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_smiley' ) . " WHERE url='011.small.gif' " )) {
DB :: query ( " REPLACE INTO " . DB :: table ( 'common_smiley' ) . " (typeid, displayorder, type, code, url) VALUES ('0','20','stamplist','新人帖','011.small.gif') " );
$setnewbie = true ;
}
require_once libfile ( 'function/cache' );
updatecache ( 'stamps' );
updatecache ( 'stamptypeid' );
if ( $setnewbie ) {
$id = DB :: result_first ( " SELECT displayorder FROM " . DB :: table ( 'common_smiley' ) . " WHERE url='011.small.gif' " );
DB :: query ( " REPLACE INTO " . DB :: table ( 'common_setting' ) . " VALUES ('newbie', ' $id ') " );
}
show_msg ( " 鉴定图章升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'block_item' ) {
$nextop = 'block_permission' ;
$bids = $items = $blocks = array ();
$query = DB :: query ( " SELECT itemid, bid, pic, picflag, thumbpath FROM " . DB :: table ( 'common_block_item' ) . " WHERE makethumb='1' " );
while ( $row = DB :: fetch ( $query )) {
if ( empty ( $row [ 'thumbpath' ])) {
$bids [ $row [ 'bid' ]] = $row [ 'bid' ];
$items [] = $row ;
}
}
if ( $bids ) {
$query = DB :: query ( " SELECT bid, picwidth, picheight FROM " . DB :: table ( 'common_block' ) . " WHERE bid IN( " . dimplode ( $bids ) . " ) " );
while ( $value = DB :: fetch ( $query )) {
$blocks [ $value [ 'bid' ]] = $value ;
}
foreach ( $items as $item ) {
$block = $blocks [ $item [ 'bid' ]];
$hash = md5 ( $item [ 'pic' ] . '-' . $item [ 'picflag' ] . ':' . $block [ 'picwidth' ] . '|' . $block [ 'picheight' ]);
$thumbpath = 'block/' . substr ( $hash , 0 , 2 ) . '/' . $hash . '.jpg' ;
DB :: update ( 'common_block_item' , array ( 'thumbpath' => $thumbpath ), " itemid=' $item[itemid] ' " );
}
}
show_msg ( " 模块缩略图权限升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'block_permission' ) {
$nextop = 'portalcategory_permission' ;
if ( ! C :: t ( 'common_setting' ) -> skey_exists ( 'group_recommend' )) {
DB :: query ( " UPDATE " . DB :: table ( 'common_block_permission' ) . " SET allowmanage=allowsetting,allowrecommend=allowdata " );
}
if ( ! DB :: result_first ( 'SELECT inheritedtplname FROM ' . DB :: table ( 'common_template_permission' ) . " WHERE inheritedtplname != '' LIMIT 1 " )) {
$query = DB :: query ( 'SELECT * FROM ' . DB :: table ( 'common_template_permission' ) . " WHERE inheritedtplname = '' " );
$templatearr = array ();
while ( $value = DB :: fetch ( $query )) {
$templatearr [ $value [ 'targettplname' ]][] = $value ;
}
if ( ! empty ( $templatearr )) {
require_once libfile ( 'class/blockpermission' );
$tplpermissions = new template_permission ();
foreach ( $templatearr as $tplname => $users ) {
$tplpermissions -> add_users ( $tplname , $users );
}
}
}
show_msg ( " 模块权限升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'portalcategory_permission' ) {
$nextop = 'portal_comment' ;
if ( ! DB :: result_first ( 'SELECT inheritedcatid FROM ' . DB :: table ( 'portal_category_permission' ) . " WHERE inheritedcatid > '0' LIMIT 1 " )) {
$query = DB :: query ( 'SELECT * FROM ' . DB :: table ( 'portal_category_permission' ) . " WHERE inheritedcatid = '0' " );
$catearr = array ();
while ( $value = DB :: fetch ( $query )) {
$catearr [ $value [ 'catid' ]][] = $value ;
}
if ( ! empty ( $catearr )) {
require_once libfile ( 'class/portalcategory' );
$categorypermissions = new portal_category ();
foreach ( $catearr as $catid => $users ) {
$categorypermissions -> add_users_perm ( $catid , $users );
}
}
}
show_msg ( " 门户频道权限升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'portal_comment' ) {
$nextop = 'portal_article_cover_img' ;
$one = DB :: fetch_first ( 'SELECT * FROM ' . DB :: table ( 'portal_comment' ) . " WHERE id=0 AND idtype='' LIMIT 1 " );
if ( $one && isset ( $one [ 'aid' ])) {
DB :: query ( " UPDATE " . DB :: table ( 'portal_comment' ) . " SET id=aid,idtype='aid' WHERE aid>0 " );
}
show_msg ( " 文章评论升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'portal_article_cover_img' ) {
$nextop = 'block_style' ;
$pic = DB :: result_first ( 'SELECT pic FROM ' . DB :: table ( 'portal_article_title' ) . " WHERE LENGTH(pic)>6 LIMIT 1 " );
if ( $pic && is_numeric ( substr ( $pic , 0 , strpos ( $pic , '/' )))) {
DB :: query ( " UPDATE " . DB :: table ( 'portal_article_title' ) . " SET pic=CONCAT('portal/',pic) WHERE LENGTH(pic)>6 " );
}
show_msg ( " 文章封面图升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'block_style' ) {
$nextop = 'block_script' ;
$sql = implode ( '' , file ( DISCUZ_ROOT . './install/data/install_data.sql' ));
preg_match ( " / \ [block \ _style \ ](.+?) \ [ \ /block \ _style \ ]/is " , $sql , $a );
unset ( $sql );
preg_match_all ( " / \ [key \ :(.+?) \ ](.+?) \ [ \ /key \ ]/is " , $a [ 1 ], $aa );
$data = array ();
if ( ! empty ( $aa [ 1 ])) {
foreach ( $aa [ 1 ] as $key => $value ){
$data [ $value ] = $aa [ 2 ][ $key ];
}
$hashs = array_keys ( $data );
$query = DB :: query ( 'SELECT hash FROM ' . DB :: table ( 'common_block_style' ) . " WHERE hash IN ( " . dimplode ( $hashs ) . " ) " );
while ( $value = DB :: fetch ( $query )) {
unset ( $data [ $value [ 'hash' ]]);
}
if ( ! empty ( $data )) {
$sql = implode ( " \r \n " , $data );
runquery ( $sql );
}
DB :: query ( " UPDATE " . DB :: table ( 'common_block_style' ) . " SET name = replace(`name`, 'X1.5', '内置') " );
DB :: query ( " UPDATE " . DB :: table ( 'common_block_style' ) . " SET name = replace(`name`, 'X2.0', '内置') " );
}
show_msg ( " 模块模板升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'block_script' ) {
$nextop = 'common_usergroup_field' ;
include_once libfile ( 'function/block' );
$blocks = $styles = $styleids = array ();
$query = DB :: query ( 'SELECT * FROM ' . DB :: table ( 'common_block' ) . " WHERE blockclass='forum_attachment' OR blockclass='group_attachment' " );
while ( $value = DB :: fetch ( $query )) {
$blocks [ $value [ 'bid' ]] = $value ;
if ( empty ( $value [ 'blockstyle' ])) {
$styleids [ $value [ 'styleid' ]] = $value [ 'styleid' ];
}
}
if ( $styleids ) {
$query = DB :: query ( 'SELECT * FROM ' . DB :: table ( 'common_block_style' ) . " WHERE styleid IN ( " . dimplode ( $styleids ) . " ) " );
while ( $value = DB :: fetch ( $query )) {
$value [ 'template' ] = dunserialize ( $value [ 'template' ]);
$styles [ $value [ 'styleid' ]] = $value ;
}
}
foreach ( $blocks as $bid => $block ) {
unset ( $block [ 'bid' ]);
if ( empty ( $block [ 'blockstyle' ])) {
$block [ 'blockstyle' ] = $styles [ $block [ 'styleid' ]];
} else {
$block [ 'blockstyle' ] = dunserialize ( $block [ 'blockstyle' ]);
}
$block = block_conver_to_thread ( $block );
DB :: update ( 'common_block' , $block , array ( 'bid' => $bid ));
DB :: query ( 'DELETE FROM ' . DB :: table ( 'common_block_style' ) . " WHERE blockclass='forum_attachment' OR blockclass='group_attachment' " );
$_G [ 'block' ][ $bid ] = $block ;
block_updatecache ( $bid , true );
}
show_msg ( " 模块脚本升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'common_usergroup_field' ) {
$nextop = 'group_index' ;
if ( ! C :: t ( 'common_setting' ) -> skey_exists ( 'group_recommend' )) {
DB :: query ( " UPDATE " . DB :: table ( 'common_usergroup_field' ) . "
SET allowcommentarticle = allowcomment , allowblogmod = allowblog , allowdoingmod = allowdoing , allowuploadmod = allowupload , allowsharemod = allowshare , allowdownlocalimg = allowpostarticle " );
}
$queryraterange = DB :: query ( " SELECT groupid, raterange FROM " . DB :: table ( 'common_usergroup_field' ));
while ( $usergroupfield = DB :: fetch ( $queryraterange )) {
if ( $usergroupfield [ 'raterange' ]) {
$raterangearray = array ();
foreach ( explode ( " \n " , $usergroupfield [ 'raterange' ]) as $range ) {
$range = explode ( " \t " , $range );
if ( count ( $range ) == 4 ) {
$raterangearray [ $range [ 0 ]] = implode ( " \t " , array ( $range [ 0 ], 'isself' => 0 , 'min' => $range [ 1 ], 'max' => $range [ 2 ], 'mrpd' => $range [ 3 ]));
}
}
if ( ! empty ( $raterangearray )) {
DB :: query ( " UPDATE " . DB :: table ( 'common_usergroup_field' ) . " SET raterange=' " . implode ( " \n " , $raterangearray ) . " ' WHERE groupid=' " . $usergroupfield [ 'groupid' ] . " ' " );
}
}
}
if ( $first_to_2_5 ) {
DB :: query ( 'UPDATE ' . DB :: table ( 'common_usergroup_field' ) . " SET allowat='50' WHERE groupid=1 " );
DB :: query ( 'UPDATE ' . DB :: table ( 'common_usergroup_field' ) . " SET allowcreatecollection='5',allowcommentcollection='1',allowfollowcollection='30' WHERE groupid<'4' OR groupid>'9' " );
}
show_msg ( " 用户组权限升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'group_index' ) {
$nextop = 'domain' ;
if ( ! C :: t ( 'common_setting' ) -> skey_exists ( 'group_recommend' )) {
$arr = array (
0 => array ( 'importfile' => './data/group_index.xml' , 'primaltplname' => 'group/index' , 'targettplname' => 'group/index' ),
);
foreach ( $arr as $v ) {
import_diy ( $v [ 'importfile' ], $v [ 'primaltplname' ], $v [ 'targettplname' ]);
}
}
show_msg ( " 群组首页升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'domain' ) {
$nextop = 'pm' ;
$newsettings = array ();
if ( ! empty ( $_G [ 'config' ][ 'app' ][ 'domain' ])) {
$update = 0 ;
foreach ( $_G [ 'config' ][ 'app' ][ 'domain' ] as $key => $value ) {
if ( $value && ! $_G [ 'setting' ][ 'domain' ][ 'app' ][ $key ]) {
$update = 1 ;
}
}
if ( $update ) {
$domain = array (
'defaultindex' => ! empty ( $_G [ 'config' ][ 'app' ][ 'default' ]) ? $_G [ 'config' ][ 'app' ][ 'default' ] . '.php' : '' ,
'app' => $_G [ 'config' ][ 'app' ][ 'domain' ],
);
$newsettings [ 'domain' ] = $domain ;
}
}
if ( ! empty ( $_G [ 'config' ][ 'app' ][ 'default' ]) && ! $_G [ 'setting' ][ 'defaultindex' ]) {
$newsettings [ 'defaultindex' ] = $_G [ 'config' ][ 'app' ][ 'default' ] . '.php' ;
}
if ( ! empty ( $_G [ 'config' ][ 'home' ][ 'holddomain' ]) && ! $_G [ 'setting' ][ 'holddomain' ]) {
$holddomain = implode ( '|' , explode ( ',' , $_G [ 'config' ][ 'home' ][ 'holddomain' ]));
$newsettings [ 'holddomain' ] = $holddomain ;
}
if ( ! empty ( $_G [ 'config' ][ 'home' ][ 'allowdomain' ]) && ! $_G [ 'setting' ][ 'allowspacedomain' ]) {
$newsettings [ 'allowspacedomain' ] = 1 ;
}
if ( ! DB :: result_first ( " SELECT domain FROM " . DB :: table ( 'common_domain' ) . " WHERE idtype='home' " )) {
$domainroot = $_G [ 'config' ][ 'home' ][ 'domainroot' ] ? $_G [ 'config' ][ 'home' ][ 'domainroot' ] : '' ;
DB :: query ( " INSERT INTO " . DB :: table ( 'common_domain' ) . " (domain, domainroot, id, idtype) SELECT domain, ' $domainroot ', uid, 'home' FROM " . DB :: table ( 'common_member_field_home' ) . " WHERE domain<>'' " );
}
if ( ! empty ( $newsettings )) {
C :: t ( 'common_setting' ) -> update_batch ( $newsettings );
}
show_msg ( " 域名设置升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'pm' ) {
$nextop = 'allowgetimage' ;
DB :: query ( " UPDATE " . DB :: table ( 'common_member' ) . " SET newpm='0', newprompt='0' " );
show_msg ( " 新短消息状态重置完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'allowgetimage' ) {
$nextop = 'verify' ;
if ( ! DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_usergroup_field' ) . " WHERE allowgetimage='1' " )) {
$query = DB :: query ( " SELECT groupid, allowgetattach FROM " . DB :: table ( 'common_usergroup_field' ));
while ( $row = DB :: fetch ( $query )) {
DB :: query ( 'UPDATE ' . DB :: table ( 'common_usergroup_field' ) . " SET allowgetimage=' " . intval ( $row [ 'allowgetattach' ]) . " ' WHERE groupid=' $row[groupid] ' " );
}
$query = DB :: query ( " SELECT uid, allowgetattach FROM " . DB :: table ( 'forum_access' ));
while ( $row = DB :: fetch ( $query )) {
DB :: query ( 'UPDATE ' . DB :: table ( 'forum_access' ) . " SET allowgetimage=' " . intval ( $row [ 'allowgetattach' ]) . " ' WHERE uid=' $row[uid] ' " );
}
}
show_msg ( " 查看图片权限升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'verify' ) {
$nextop = 'threadimage' ;
$settings = $verifys = array ();
$settings = C :: t ( 'common_setting' ) -> fetch_all ( array ( 'verify' , 'realname' , 'videophoto' , 'video_allowviewspace' ));
$verifys = ( array ) dunserialize ( $settings [ 'verify' ]);
$updateverify = $_GET [ 'updateverify' ] ? true : false ;
if ( ! isset ( $verifys [ 6 ])) {
$verifys [ 6 ] = array (
'title' => '实名认证' ,
'available' => $settings [ 'realname' ],
'showicon' => 0 ,
'viewrealname' => 0 ,
'field' => array ( 'realname' => realname ),
'icon' => ''
);
$verifys [ 7 ] = array (
'title' => '视频认证' ,
'available' => $settings [ 'videophoto' ],
'showicon' => 0 ,
'viewvideophoto' => $settings [ 'video_allowviewspace' ],
'icon' => ''
);
if ( $verifys [ 'enabled' ] && ( $settings [ 'realname' ] || $settings [ 'videophoto' ])) {
$verifys [ 'enabled' ] = 1 ;
}
C :: t ( 'common_setting' ) -> update ( 'verify' , $verifys );
$updateverify = true ;
}
if ( $updateverify ) {
$p = 1000 ;
$i = ! empty ( $_GET [ 'i' ]) ? intval ( $_GET [ 'i' ]) : 0 ;
$n = 0 ;
$t = DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_member_profile' ) . " WHERE realname != '' " );
if ( $t ) {
$query = DB :: query ( 'SELECT mp.realname, m.* FROM ' . DB :: table ( 'common_member_profile' ) . " mp LEFT JOIN " . DB :: table ( 'common_member' ) . " m USING(uid) WHERE mp.uid>' $i ' AND mp.realname != '' LIMIT $p " );
while ( $value = DB :: fetch ( $query )) {
$n = intval ( $value [ 'uid' ]);
$havauser = DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_member_verify' ) . " WHERE uid=' $n ' " );
$data = array (
'verify6' => '1' ,
'verify7' => $value [ 'videophotostatus' ] ? 1 : 0 ,
);
if ( $havauser ) {
DB :: update ( 'common_member_verify' , $data , array ( 'uid' => $n ));
} else {
$data [ 'uid' ] = $n ;
DB :: insert ( 'common_member_verify' , $data );
}
}
if ( $n ) {
show_msg ( " 实名认证升级中[ $n / $t ] " , " $theurl ?step=data&op=verify&i= $n &updateverify=true " );
}
}
}
show_msg ( " 认证数据升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'forumattach' ) {
$nextop = 'forumstatlog' ;
$limit = 10000 ;
$start = ! empty ( $_GET [ 'start' ]) ? $_GET [ 'start' ] : 0 ;
$needupgrade = DB :: query ( " SELECT COUNT(*) FROM " . DB :: table ( 'forum_attachmentfield' ), 'SILENT' );
$count = DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'forum_attachment' ));
if ( $needupgrade && $count ) {
if ( ! $start ) {
for ( $i = 0 ; $i < 10 ; $i ++ ) {
DB :: query ( " TRUNCATE " . DB :: table ( 'forum_attachment_' . $i ));
}
}
$query = DB :: query ( " SELECT a.*,af.description FROM " . DB :: table ( 'forum_attachment' ) . " a
LEFT JOIN " .DB::table('forum_attachmentfield'). " af USING ( aid )
ORDER BY aid LIMIT $start , $limit " );
if ( DB :: num_rows ( $query )) {
while ( $row = DB :: fetch ( $query )) {
$tid = ( string ) $row [ 'tid' ];
$tableid = $tid { strlen ( $tid ) - 1 };
DB :: update ( 'forum_attachment' , array ( 'tableid' => $tableid ), array ( 'aid' => $row [ 'aid' ]));
DB :: insert ( 'forum_attachment_' . $tableid , array (
'aid' => $row [ 'aid' ],
'tid' => $row [ 'tid' ],
'pid' => $row [ 'pid' ],
'uid' => $row [ 'uid' ],
'dateline' => $row [ 'dateline' ],
'filename' => $row [ 'filename' ],
'filesize' => $row [ 'filesize' ],
'attachment' => $row [ 'attachment' ],
'remote' => $row [ 'remote' ],
'description' => $row [ 'description' ],
'readperm' => $row [ 'readperm' ],
'price' => $row [ 'price' ],
'isimage' => $row [ 'isimage' ],
'width' => $row [ 'width' ],
'thumb' => $row [ 'thumb' ],
'picid' => $row [ 'picid' ],
));
}
$start += $limit ;
show_msg ( " 论坛附件表升级中 ... $start / $count " , " $theurl ?step=data&op=forumattach&start= $start " );
}
DB :: query ( " DROP TABLE ` " . DB :: table ( 'forum_attachmentfield' ) . " ` " );
$dropsql = array ();
$dropfields = array ( 'width' , 'dateline' , 'readperm' , 'price' , 'filename' , 'filetype' , 'filesize' , 'attachment' , 'isimage' , 'thumb' , 'remote' , 'picid' );
$query = DB :: query ( 'SHOW COLUMNS FROM `' . DB :: table ( 'forum_attachment' ) . '`' );
while ( $field = DB :: fetch ( $query )) {
if ( in_array ( $field [ 'Field' ], $dropfields , true )) {
$dropsql [] = 'DROP `' . $field [ 'Field' ] . '`' ;
}
}
if ( $dropsql ) {
DB :: query ( " ALTER TABLE " . DB :: table ( 'forum_attachment' ) . ' ' . implode ( ', ' , $dropsql ));
}
}
show_msg ( " 论坛附件表升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'forumstatlog' ) {
$nextop = 'moderate' ;
DB :: query ( 'DELETE FROM ' . DB :: table ( 'forum_statlog' ) . " WHERE logdate='0000-00-00' " );
show_msg ( " 论坛版块统计数据升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'threadimage' ) {
$nextop = 'forumattach' ;
$defaultmonth = 10 ;
$limit = 1000 ;
$start = ! empty ( $_GET [ 'start' ]) ? $_GET [ 'start' ] : 0 ;
$needupgraded = DB :: query ( " SELECT COUNT(*) FROM " . DB :: table ( 'forum_attachmentfield' ), 'SILENT' );
if ( $needupgraded ) {
$cachefile = DISCUZ_ROOT . './data/threadimage.cache' ;
if ( ! file_exists ( $cachefile )) {
$dateline = time () - 86400 * $defaultmonth * 30 ;
$query = DB :: query ( " SELECT tid from " . DB :: table ( 'forum_thread' ) . " WHERE dateline>' $dateline ' AND attachment='2' AND posttableid='0' " );
$data = array ();
while ( $row = DB :: fetch ( $query )) {
$data [] = $row [ 'tid' ];
}
if ( $data && @ $fp = fopen ( $cachefile , 'w' )) {
fwrite ( $fp , implode ( '|' , $data ));
fclose ( $fp );
} else {
show_msg ( " 主题图片表无法处理,跳过 " , " $theurl ?step=data&op= $nextop " );
}
} else {
$data = @ file ( $cachefile );
if ( ! $data ) {
show_msg ( " 主题图片表无法处理,跳过 " , " $theurl ?step=data&op= $nextop " );
}
$data = explode ( '|' , $data [ 0 ]);
}
$tids = array_slice ( $data , $start , $limit );
if ( ! $tids ) {
@ unlink ( $cachefile );
show_msg ( " 主题图片表处理完毕 " , " $theurl ?step=data&op= $nextop " );
}
$insertsql = array ();
foreach ( C :: t ( 'forum_post' ) -> fetch_all_by_tid ( 0 , $tids , false , '' , 0 , 0 , 1 ) as $row ) {
$threadimage = DB :: fetch_first ( " SELECT attachment, remote FROM " . DB :: table ( getattachtablebytid ( $row [ 'tid' ])) . " WHERE pid=' $row[pid] ' AND isimage IN ('1', '-1') ORDER BY width DESC LIMIT 1 " );
if ( $threadimage [ 'attachment' ]) {
$threadimage = daddslashes ( $threadimage );
$insertsql [ $row [ 'tid' ]] = " (' $row[tid] ', ' $threadimage[attachment] ', ' $threadimage[remote] ') " ;
}
}
if ( $insertsql ) {
DB :: query ( " INSERT INTO " . DB :: table ( 'forum_threadimage' ) . " (`tid`, `attachment`, `remote`) VALUES " . implode ( ',' , $insertsql ));
}
$start += $limit ;
show_msg ( " 主题图片表处理中 ... $start " , " $theurl ?step=data&op=threadimage&start= $start " );
} else {
show_msg ( " 主题图片表无法处理,跳过 " , " $theurl ?step=data&op= $nextop " );
}
} elseif ( $_GET [ 'op' ] == 'moderate' ) {
$nextop = 'moderate_update' ;
if ( DB :: fetch_first ( " SHOW TABLES LIKE ' " . DB :: table ( 'common_moderate' ) . " ' " )) {
$modcount = DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_moderate' ), array (), true );
} else {
$modcount = false ;
}
if ( ! $modcount ) {
$query = DB :: query ( " SELECT tid FROM " . DB :: table ( 'forum_thread' ) . " WHERE displayorder='-2' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'tid' , $row [ 'tid' ]);
}
loadcache ( 'posttable_info' );
$posttables = array ();
if ( ! empty ( $_G [ 'cache' ][ 'posttable_info' ]) && is_array ( $_G [ 'cache' ][ 'posttable_info' ])) {
foreach ( $_G [ 'cache' ][ 'posttable_info' ] as $posttableid => $data ) {
$posttables [] = $posttableid ;
}
} else {
$posttables [] = 0 ;
}
foreach ( $posttables as $postableid ) {
$query = DB :: query ( " SELECT pid FROM " . DB :: table ( getposttable ( $postableid )) . " WHERE invisible='-2' AND first='0' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'pid' , $row [ 'pid' ]);
}
}
$query = DB :: query ( " SELECT blogid FROM " . DB :: table ( 'home_blog' ) . " WHERE status='1' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'blogid' , $row [ 'blogid' ]);
}
$query = DB :: query ( " SELECT doid FROM " . DB :: table ( 'home_doing' ) . " WHERE status='1' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'doid' , $row [ 'doid' ]);
}
$query = DB :: query ( " SELECT picid FROM " . DB :: table ( 'home_pic' ) . " WHERE status='1' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'picid' , $row [ 'picid' ]);
}
$query = DB :: query ( " SELECT sid FROM " . DB :: table ( 'home_share' ) . " WHERE status='1' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'sid' , $row [ 'sid' ]);
}
$query = DB :: query ( " SELECT idtype, cid FROM " . DB :: table ( 'home_comment' ) . " WHERE status='1' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( $row [ 'idtype' ] . '_cid' , $row [ 'cid' ]);
}
$query = DB :: query ( " SELECT aid FROM " . DB :: table ( 'portal_article_title' ) . " WHERE status='1' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'aid' , $row [ 'aid' ]);
}
$query = DB :: query ( " SELECT cid FROM " . DB :: table ( 'portal_comment' ) . " WHERE idtype='aid' AND status='1' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'aid_cid' , $row [ 'cid' ]);
}
$query = DB :: query ( " SELECT cid FROM " . DB :: table ( 'portal_comment' ) . " WHERE idtype='topic' AND status='1' " );
while ( $row = DB :: fetch ( $query )) {
updatemoderate ( 'topicid_cid' , $row [ 'cid' ]);
}
}
show_msg ( " 审核数据升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'moderate_update' ) {
$nextop = 'founder' ;
if ( $first_to_2_5 && DB :: fetch_first ( " SHOW TABLES LIKE ' " . DB :: table ( 'common_moderate' ) . " ' " )) {
$tables = array (
'tid' => 'forum_thread_moderate' ,
'pid' => 'forum_post_moderate' ,
'blogid' => 'home_blog_moderate' ,
'picid' => 'home_pic_moderate' ,
'doid' => 'home_doing_moderate' ,
'sid' => 'home_share_moderate' ,
'aid' => 'portal_article_moderate' ,
'aid_cid' => 'portal_article_comment_moderate' ,
'topicid_cid' => 'portal_comment_moderate' ,
'uid_cid' => 'home_comment_moderate' ,
'blogid_cid' => 'home_comment_moderate' ,
'sid_cid' => 'home_comment_moderate' ,
'picid_cid' => 'home_comment_moderate' ,
);
$query = DB :: query ( " SELECT * FROM " . DB :: table ( 'common_moderate' ));
while ( $row = DB :: fetch ( $query )) {
if ( isset ( $tables [ $row [ 'idtype' ]])) {
$row = daddslashes ( $row );
$table = $tables [ $row [ 'idtype' ]];
if ( $table != 'home_comment_moderate' ) {
unset ( $row [ 'idtype' ]);
}
DB :: insert ( $table , $row , false , true );
}
}
}
show_msg ( " 审核数据转换完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'founder' ) {
$nextop = 'threadprofile' ;
$founders = explode ( ',' , str_replace ( ' ' , '' , $_G [ 'config' ][ 'admincp' ][ 'founder' ]));
if ( $founders ) {
foreach ( $founders as $founder ) {
if ( is_numeric ( $founder )) {
$fuid [] = $founder ;
} else {
$fuser [] = $founder ;
}
}
$query = DB :: query ( " SELECT uid FROM " . DB :: table ( 'common_member' ) . " WHERE " . ( $fuid ? " uid IN ( " . dimplode ( $fuid ) . " ) " : '0' ) . " OR " . ( $fuser ? " username IN ( " . dimplode ( $fuser ) . " ) " : '0' ));
$founders = array ();
while ( $founder = DB :: fetch ( $query )) {
$founders [] = $founder [ 'uid' ];
}
if ( $founders ) {
C :: t ( 'common_member' ) -> update_admincp_manage ( $founders );
}
}
show_msg ( " 创始人数据升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'threadprofile' ) {
$nextop = 'plugin' ;
if ( ! DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( " forum_threadprofile " ) . " WHERE global=1 " )) {
DB :: query ( " INSERT INTO " . DB :: table ( " forum_threadprofile " ) . " (`id`, `name`, `template`, `global`) VALUES
( 1 , '默认方案' , 'a:2:{s:4:\"left\";s:399:\"{numbercard}\r\n{groupicon}<p>{*}</p>{/groupicon}\r\n{authortitle}<p><em>{*}</em></p>{/authortitle}\r\n{customstatus}<p class=\"xg1\">{*}</p>{/customstatus}\r\n{star}<p>{*}</p>{/star}\r\n{upgradeprogress}<p>{*}</p>{/upgradeprogress}\r\n<dl class=\"pil cl\">\r\n\t<dt>{baseinfo=credits,1}</dt><dd>{baseinfo=credits,0}</dd>\r\n</dl>\r\n{medal}<p class=\"md_ctrl\">{*}</p>{/medal}\r\n<dl class=\"pil cl\">{baseinfo=field_qq,0}</dl>\";s:3:\"top\";s:82:\"<dl class=\"cl\">\r\n<dt>{baseinfo=credits,1}</dt><dd>{baseinfo=credits,0}</dd>\r\n</dl>\";}' , 1 ); " );
2017-01-12 21:08:27 -05:00
DB :: query ( " REPLACE INTO " . DB :: table ( " forum_bbcode " ) . " VALUES ('2','2','qq','bb_qq.gif','<a href= \" http://wpa.qq.com/msgrd?v=3&uin= { 1}&site=[Discuz!]&from=discuz&menu=yes \" target= \" _blank \" ><img src= \" static/image/common/qq_big.gif \" border= \" 0 \" ></a>','[qq]688888[/qq]','显示 QQ 在线状态,点这个图标可以和他(她)聊天','1','请输入 QQ 号码:<a href= \" \" class= \" xi2 \" onclick= \" this.href= \ 'http://wp.qq.com/set.html?from=discuz&uin= \ '+ $ ( \ 'e_cst1_qq_param_1 \ ').value \" target= \" _blank \" style= \" float:right; \" >设置QQ在线状态 </a>','1','21','1 2 3 10 11 12 13 14 15 16 17 18 19'); " );
2016-12-15 08:20:54 -05:00
}
show_msg ( " 布局方案设置升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'plugin' ) {
$nextop = 'notification' ;
loadcache ( 'pluginlanguage_script' );
loadcache ( 'pluginlanguage_template' );
loadcache ( 'pluginlanguage_install' );
if ( ! $_G [ 'cache' ][ 'pluginlanguage_script' ] && ! $_G [ 'cache' ][ 'pluginlanguage_template' ] && ! $_G [ 'cache' ][ 'pluginlanguage_install' ]) {
$query = DB :: query ( " SELECT identifier, pluginid, modules FROM " . DB :: table ( 'common_plugin' ));
while ( $plugin = DB :: fetch ( $query )) {
$plugin [ 'modules' ] = dunserialize ( $plugin [ 'modules' ]);
if ( ! empty ( $plugin [ 'modules' ][ 'extra' ][ 'langexists' ])) {
@ include DISCUZ_ROOT . './data/plugindata/' . $plugin [ 'identifier' ] . '.lang.php' ;
if ( ! empty ( $scriptlang )) {
$_G [ 'cache' ][ 'pluginlanguage_script' ][ $plugin [ 'identifier' ]] = $scriptlang [ $plugin [ 'identifier' ]];
}
if ( ! empty ( $templatelang )) {
$_G [ 'cache' ][ 'pluginlanguage_template' ][ $plugin [ 'identifier' ]] = $templatelang [ $plugin [ 'identifier' ]];
}
if ( ! empty ( $installlang )) {
$_G [ 'cache' ][ 'pluginlanguage_install' ][ $plugin [ 'identifier' ]] = $installlang [ $plugin [ 'identifier' ]];
}
}
}
savecache ( 'pluginlanguage_script' , $_G [ 'cache' ][ 'pluginlanguage_script' ]);
savecache ( 'pluginlanguage_template' , $_G [ 'cache' ][ 'pluginlanguage_template' ]);
savecache ( 'pluginlanguage_install' , $_G [ 'cache' ][ 'pluginlanguage_install' ]);
}
show_msg ( " 插件语言包数据升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'notification' ) {
$nextop = 'medal' ;
if ( ! DB :: result_first ( " SELECT id FROM " . DB :: table ( 'home_notification' ) . " WHERE category>0 " )) {
$_G [ 'notice_structure' ][ 'follow' ] = array ( 'follow' );
$_G [ 'notice_structure' ][ 'follower' ] = array ( 'follower' );
foreach ( $_G [ 'notice_structure' ] as $key => $val ) {
switch ( $key ) {
case 'mypost' : $category = 1 ; break ;
case 'interactive' : $category = 2 ; break ;
case 'system' : $category = 3 ; break ;
case 'manage' : $category = 4 ; break ;
case 'follow' : $category = 5 ; break ;
case 'follower' : $category = 6 ; break ;
default : $category = 0 ;
}
if ( $category ) {
DB :: query ( " UPDATE " . DB :: table ( 'home_notification' ) . " SET category= $category WHERE type IN( " . dimplode ( $val ) . " ) " );
}
}
DB :: query ( " UPDATE " . DB :: table ( 'home_notification' ) . " SET category=2,type='comment' WHERE type IN('piccomment','blogcomment','sharecomment','doing') " );
DB :: query ( " UPDATE " . DB :: table ( 'home_notification' ) . " SET category=3,type='click' WHERE type IN('clickblog','clickarticle','clickpic') " );
}
show_msg ( " 提醒数据升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'medal' ) {
$nextop = 'closeswitch' ;
if ( ! DB :: result_first ( " SELECT COUNT(*) FROM " . DB :: table ( 'common_member_medal' ))) {
$query = DB :: query ( " SELECT uid, medals FROM " . DB :: table ( 'common_member_field_forum' ) . " WHERE medals != '' " );
while ( $member = DB :: fetch ( $query )) {
$medals = explode ( " \t " , $member [ 'medals' ]);
foreach ( $medals as $medalid ) {
$medalid = intval ( $medalid );
DB :: insert ( 'common_member_medal' , array (
'uid' => $member [ 'uid' ],
'medalid' => $medalid
), 0 , 1 );
}
}
}
show_msg ( " 用户勋章数据升级完毕 " , " $theurl ?step=data&op= $nextop " );
} elseif ( $_GET [ 'op' ] == 'closeswitch' ) {
$nextop = 'end' ;
if ( $first_to_2_5 ) {
$newsettings = array ();
$newsettings [ 'strongpw' ] = 0 ;
$newsettings [ 'pwlength' ] = 0 ;
C :: t ( 'common_setting' ) -> update_batch ( $newsettings );
}
show_msg ( " 数据升级结束 " , " $theurl ?step=data&op= $nextop " );
} else {
$deletevar = array ( 'app' , 'home' ); //config中需要删除的项目
$default_config = $_config = array ();
$default_configfile = DISCUZ_ROOT . './config/config_global_default.php' ;
if ( ! file_exists ( $default_configfile )) {
exit ( 'config_global_default.php was lost, please reupload this file.' );
} else {
include $default_configfile ;
$default_config = $_config ;
}
$configfile = DISCUZ_ROOT . './config/config_global.php' ;
include $configfile ;
DB :: query ( " UPDATE " . DB :: table ( 'common_plugin' ) . " SET available='0' WHERE modules NOT LIKE '%s:6: \" system \" ;i:2;%' " );
if ( save_config_file ( $configfile , $_config , $default_config , $deletevar )) {
show_msg ( " 数据处理完成 " , " $theurl ?step=delete " );
} else {
show_msg ( '"config/config_global.php" 文件已更新,由于 "config/" 目录不可写入,我们已将更新的文件保存到 "data/" 目录下,请通过 FTP 软件将其转移到 "config/" 目录下覆盖源文件。<br /><br /><a href="' . $theurl . '?step=delete">当您完成上述操作后点击这里继续</a>' );
}
}
} elseif ( $_GET [ 'step' ] == 'delete' ) {
if ( ! $devmode ) {
show_msg ( " 数据删除不处理,进入下一步 " , " $theurl ?step=style " );
}
$oldtables = array ();
$query = DB :: query ( " SHOW TABLES LIKE ' $config[tablepre] %' " );
while ( $value = DB :: fetch ( $query )) {
$values = array_values ( $value );
$oldtables [] = $values [ 0 ];
}
$sql = implode ( '' , file ( $sqlfile ));
preg_match_all ( " /CREATE \ s+TABLE.+?pre \ _(.+?) \ s+ \ ((.+?) \ ) \ s*(ENGINE|TYPE) \ s* \ =/is " , $sql , $matches );
$newtables = empty ( $matches [ 1 ]) ? array () : $matches [ 1 ];
$connecttables = array ( 'common_member_connect' , 'common_uin_black' , 'connect_feedlog' , 'connect_memberbindlog' , 'connect_tlog' , 'connect_tthreadlog' , 'common_connect_guest' , 'connect_disktask' );
$newsqls = empty ( $matches [ 0 ]) ? array () : $matches [ 0 ];
$deltables = array ();
$delcolumns = array ();
foreach ( $oldtables as $tname ) {
$tname = substr ( $tname , strlen ( $config [ 'tablepre' ]));
if ( in_array ( $tname , $newtables )) {
$query = DB :: query ( " SHOW CREATE TABLE " . DB :: table ( $tname ));
$cvalue = DB :: fetch ( $query );
$oldcolumns = getcolumn ( $cvalue [ 'Create Table' ]);
$i = array_search ( $tname , $newtables );
$newcolumns = getcolumn ( $newsqls [ $i ]);
foreach ( $oldcolumns as $colname => $colstruct ) {
if ( $colname == 'UNIQUE' || $colname == 'KEY' ) {
foreach ( $colstruct as $key_index => $key_value ) {
if ( empty ( $newcolumns [ $colname ][ $key_index ])) {
$delcolumns [ $tname ][ $colname ][ $key_index ] = $key_value ;
}
}
} else {
if ( empty ( $newcolumns [ $colname ])) {
$delcolumns [ $tname ][] = $colname ;
}
}
}
} else {
if ( ! strexists ( $tname , 'uc_' ) && ! strexists ( $tname , 'ucenter_' ) && ! preg_match ( '/forum_(thread|post)_(\d+)$/i' , $tname ) && ! in_array ( $tname , $connecttables )) {
$deltables [] = $tname ;
}
}
}
show_header ();
echo '<form method="post" autocomplete="off" action="' . $theurl . '?step=delete' . ( $_GET [ 'from' ] ? '&from=' . rawurlencode ( $_GET [ 'from' ]) . '&frommd5=' . rawurlencode ( $_GET [ 'frommd5' ]) : '' ) . '">' ;
$deltablehtml = '' ;
if ( $deltables ) {
$deltablehtml .= '<table>' ;
foreach ( $deltables as $tablename ) {
$deltablehtml .= " <tr><td><input type= \" checkbox \" name= \" deltables[ $tablename ] \" value= \" 1 \" ></td><td> { $config [ 'tablepre' ] } $tablename </td></tr> " ;
}
$deltablehtml .= '</table>' ;
echo " <p>以下 <strong>数据表</strong> 与标准数据库相比是多余的:<br>您可以根据需要自行决定是否删除</p> $deltablehtml " ;
}
$delcolumnhtml = '' ;
if ( $delcolumns ) {
$delcolumnhtml .= '<table>' ;
foreach ( $delcolumns as $tablename => $cols ) {
foreach ( $cols as $coltype => $col ) {
if ( is_array ( $col )) {
foreach ( $col as $index => $indexvalue ) {
$delcolumnhtml .= " <tr><td><input type= \" checkbox \" name= \" delcols[ $tablename ][ $coltype ][ $index ] \" value= \" 1 \" ></td><td> { $config [ 'tablepre' ] } $tablename </td><td>索引( $coltype ) $index $indexvalue </td></tr> " ;
}
} else {
$delcolumnhtml .= " <tr><td><input type= \" checkbox \" name= \" delcols[ $tablename ][ $col ] \" value= \" 1 \" ></td><td> { $config [ 'tablepre' ] } $tablename </td><td>字段 $col </td></tr> " ;
}
}
}
$delcolumnhtml .= '</table>' ;
echo " <p>以下 <strong>字段</strong> 与标准数据库相比是多余的:<br>您可以根据需要自行决定是否删除</p> $delcolumnhtml " ;
}
if ( empty ( $deltables ) && empty ( $delcolumns )) {
echo " <p>与标准数据库相比,没有需要删除的数据表和字段</p><a href= \" $theurl ?step=style " . ( $_GET [ 'from' ] ? '&from=' . rawurlencode ( $_GET [ 'from' ]) . '&frommd5=' . rawurlencode ( $_GET [ 'frommd5' ]) : '' ) . " \" >请点击进入下一步</a></p> " ;
} else {
echo " <p><input type= \" submit \" name= \" delsubmit \" value= \" 提交删除 \" ></p><p>您也可以忽略多余的表和字段<br><a href= \" $theurl ?step=style " . ( $_GET [ 'from' ] ? '&from=' . rawurlencode ( $_GET [ 'from' ]) . '&frommd5=' . rawurlencode ( $_GET [ 'frommd5' ]) : '' ) . " \" >直接进入下一步</a></p> " ;
}
echo '</form>' ;
show_footer ();
exit ();
} elseif ( $_GET [ 'step' ] == 'style' ) {
if ( empty ( $_GET [ 'confirm' ])) {
show_msg ( " 请确认是否要恢复默认风格?<br /><br /><a href= \" $theurl ?step=style&confirm=yes " . ( $_GET [ 'from' ] ? '&from=' . rawurlencode ( $_GET [ 'from' ]) . '&frommd5=' . rawurlencode ( $_GET [ 'frommd5' ]) : '' ) . " \" >[ 是 ]</a> <a href= \" $theurl ?step=cache " . ( $_GET [ 'from' ] ? '&from=' . rawurlencode ( $_GET [ 'from' ]) . '&frommd5=' . rawurlencode ( $_GET [ 'frommd5' ]) : '' ) . " \" >[ 否 ]</a> " , '' );
}
define ( 'IN_ADMINCP' , true );
require_once libfile ( 'function/admincp' );
require_once libfile ( 'function/importdata' );
$dir = DB :: result_first ( " SELECT t.directory FROM " . DB :: table ( 'common_style' ) . " s LEFT JOIN " . DB :: table ( 'common_template' ) . " t ON t.templateid=s.templateid WHERE s.styleid='1' " );
import_styles ( 1 , $dir , 1 , 0 , 0 );
C :: t ( 'common_setting' ) -> update ( 'styleid' , 1 );
show_msg ( " 默认风格已恢复,进入下一步 " , " $theurl ?step=cache " );
} elseif ( $_GET [ 'step' ] == 'cache' ) {
$appService = Cloud :: loadClass ( 'Service_App' );
try {
$cloudstatus = $appService -> checkCloudStatus ();
} catch ( Exception $e ) {
}
$result = false ;
if ( $cloudstatus == 'cloud' && ! $appService -> getCloudAppStatus ( 'search' )) {
try {
$cloudAppService = Cloud :: loadClass ( 'Service_Client_Cloud' );
$result = $cloudAppService -> appOpen ();
} catch ( Exception $e ) {
}
}
if ( $result == true ) {
$opensoso = '<br><br>友情提示:<br>为更好的降低论坛搜索时的数据压力,本次升级已经帮本站开通纵横搜索服务。<br>你可以在 <a href=\\\'../admin.php?frames=yes&action=cloud&operation=search\\\' target=\\\'_blank\\\'>站点后台->应用->纵横搜索 进行管理</a>。' ;
}
if ( ! $devmode && @ $fp = fopen ( $lockfile , 'w' )) {
fwrite ( $fp , ' ' );
fclose ( $fp );
}
dir_clear ( ROOT_PATH . './data/template' );
dir_clear ( ROOT_PATH . './data/cache' );
dir_clear ( ROOT_PATH . './data/threadcache' );
dir_clear ( ROOT_PATH . './uc_client/data' );
dir_clear ( ROOT_PATH . './uc_client/data/cache' );
savecache ( 'setting' , '' );
if ( $_GET [ 'from' ]) {
show_msg ( '<span id="finalmsg">缓存更新中,请稍候 ...</span><iframe src="../misc.php?mod=initsys" style="display:none;" onload="window.location.href=\'' . $_GET [ 'from' ] . '\'"></iframe>' );
} else {
show_msg ( '<span id="finalmsg">缓存更新中,请稍候 ...</span><iframe src="../misc.php?mod=initsys" style="display:none;" onload="document.getElementById(\'finalmsg\').innerHTML = \'恭喜,数据库结构升级完成!为了数据安全,请删除本文件。' . $opensoso . '\'"></iframe>' );
}
}
function has_another_special_table ( $tablename , $key ) {
if ( ! $key ) {
return $tablename ;
}
$tables_array = get_special_tables_array ( $tablename );
if ( $key > count ( $tables_array )) {
return FALSE ;
} else {
return TRUE ;
}
}
function get_special_tables_array ( $tablename ) {
$tablename = DB :: table ( $tablename );
$tablename = str_replace ( '_' , '\_' , $tablename );
$query = DB :: query ( " SHOW TABLES LIKE ' { $tablename } \ _%' " );
$dbo = DB :: object ();
$tables_array = array ();
while ( $row = $dbo -> fetch_array ( $query , $dbo -> drivertype == 'mysqli' ? MYSQLI_NUM : MYSQL_NUM )) {
if ( preg_match ( " /^ { $tablename } _( \\ d+) $ /i " , $row [ 0 ])) {
$prefix_len = strlen ( $dbo -> tablepre );
$row [ 0 ] = substr ( $row [ 0 ], $prefix_len );
$tables_array [] = $row [ 0 ];
}
}
return $tables_array ;
}
function get_special_table_by_num ( $tablename , $num ) {
$tables_array = get_special_tables_array ( $tablename );
$num -- ;
return isset ( $tables_array [ $num ]) ? $tables_array [ $num ] : FALSE ;
}
function getcolumn ( $creatsql ) {
$creatsql = preg_replace ( " / COMMENT '.*?'/i " , '' , $creatsql );
preg_match ( " / \ ((.+) \ ) \ s*(ENGINE|TYPE) \ s* \ =/is " , $creatsql , $matchs );
$cols = explode ( " \n " , $matchs [ 1 ]);
$newcols = array ();
foreach ( $cols as $value ) {
$value = trim ( $value );
if ( empty ( $value )) continue ;
$value = remakesql ( $value );
if ( substr ( $value , - 1 ) == ',' ) $value = substr ( $value , 0 , - 1 );
$vs = explode ( ' ' , $value );
$cname = $vs [ 0 ];
if ( $cname == 'KEY' || $cname == 'INDEX' || $cname == 'UNIQUE' ) {
$name_length = strlen ( $cname );
if ( $cname == 'UNIQUE' ) $name_length = $name_length + 4 ;
$subvalue = trim ( substr ( $value , $name_length ));
$subvs = explode ( ' ' , $subvalue );
$subcname = $subvs [ 0 ];
$newcols [ $cname ][ $subcname ] = trim ( substr ( $value , ( $name_length + 2 + strlen ( $subcname ))));
} elseif ( $cname == 'PRIMARY' ) {
$newcols [ $cname ] = trim ( substr ( $value , 11 ));
} else {
$newcols [ $cname ] = trim ( substr ( $value , strlen ( $cname )));
}
}
return $newcols ;
}
function remakesql ( $value ) {
$value = trim ( preg_replace ( " / \ s+/ " , ' ' , $value ));
$value = str_replace ( array ( '`' , ', ' , ' ,' , '( ' , ' )' , 'mediumtext' ), array ( '' , ',' , ',' , '(' , ')' , 'text' ), $value );
return $value ;
}
function show_msg ( $message , $url_forward = '' , $time = 1 , $noexit = 0 , $notice = '' ) {
if ( $url_forward ) {
$url_forward = $_GET [ 'from' ] ? $url_forward . '&from=' . rawurlencode ( $_GET [ 'from' ]) . '&frommd5=' . rawurlencode ( $_GET [ 'frommd5' ]) : $url_forward ;
$message = " <a href= \" $url_forward\ " > $message ( 跳转中 ... ) </ a >< br > $notice < script > setTimeout ( \ " window.location.href =' $url_forward '; \" , $time );</script> " ;
}
show_header ();
print <<< END
< table >
< tr >< td > $message </ td ></ tr >
</ table >
END ;
show_footer ();
! $noexit && exit ();
}
function show_header () {
global $config ;
$nowarr = array ( $_GET [ 'step' ] => ' class="current"' );
if ( in_array ( $_GET [ 'step' ], array ( 'waitingdb' , 'prepare' ))) {
$nowarr = array ( 'sql' => ' class="current"' );
}
print <<< END
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head >
< meta http - equiv = " Content-Type " content = " text/html; charset= $config[charset] " />
< title > 数据库升级程序 </ title >
< style type = " text/css " >
* { font - size : 12 px ; font - family : Verdana , Arial , Helvetica , sans - serif ; line - height : 1.5 em ; word - break : break - all ; }
body { text - align : center ; margin : 0 ; padding : 0 ; background : #F5FBFF; }
. bodydiv { margin : 40 px auto 0 ; width : 720 px ; text - align : left ; border : solid #86B9D6; border-width: 5px 1px 1px; background: #FFF; }
h1 { font - size : 18 px ; margin : 1 px 0 0 ; line - height : 50 px ; height : 50 px ; background : #E8F7FC; color: #5086A5; padding-left: 10px; }
#menu {width: 100%; margin: 10px auto; text-align: center; }
#menu td { height: 30px; line-height: 30px; color: #999; border-bottom: 3px solid #EEE; }
. current { font - weight : bold ; color : #090 !important; border-bottom-color: #F90 !important; }
input { border : 1 px solid #B2C9D3; padding: 5px; background: #F5FCFF; }
#footer { font-size: 10px; line-height: 40px; background: #E8F7FC; text-align: center; height: 38px; overflow: hidden; color: #5086A5; margin-top: 20px; }
</ style >
</ head >
< body >
< div class = " bodydiv " >
< h1 > 数据库升级工具 </ h1 >
< div style = " width:90%;margin:0 auto; " >
< table id = " menu " >
< tr >
< td { $nowarr [ start ]} > 升级开始 </ td >
< td { $nowarr [ sql ]} > 数据库结构添加与更新 </ td >
< td { $nowarr [ data ]} > 数据更新 </ td >
< td { $nowarr [ delete ]} > 数据库结构删除 </ td >
< td { $nowarr [ cache ]} > 升级完成 </ td >
</ tr >
</ table >
< br >
END ;
}
function show_footer () {
print <<< END
</ div >
< div id = " footer " >& copy ; Comsenz Inc . 2001 - 2017 http :// www . comsenz . com </ div >
</ div >
< br >
</ body >
</ html >
END ;
}
function runquery ( $sql ) {
global $_G ;
$tablepre = $_G [ 'config' ][ 'db' ][ 1 ][ 'tablepre' ];
$dbcharset = $_G [ 'config' ][ 'db' ][ 1 ][ 'dbcharset' ];
$sql = str_replace ( " \r " , " \n " , str_replace ( array ( ' {tablepre}' , ' cdb_' , ' `cdb_' , ' pre_' , ' `pre_' ), array ( ' ' . $tablepre , ' ' . $tablepre , ' `' . $tablepre , ' ' . $tablepre , ' `' . $tablepre ), $sql ));
$ret = array ();
$num = 0 ;
foreach ( explode ( " ; \n " , trim ( $sql )) as $query ) {
$queries = explode ( " \n " , trim ( $query ));
foreach ( $queries as $query ) {
$ret [ $num ] .= $query [ 0 ] == '#' || $query [ 0 ] . $query [ 1 ] == '--' ? '' : $query ;
}
$num ++ ;
}
unset ( $sql );
foreach ( $ret as $query ) {
$query = trim ( $query );
if ( $query ) {
if ( substr ( $query , 0 , 12 ) == 'CREATE TABLE' ) {
$name = preg_replace ( " /CREATE TABLE ([a-z0-9_]+) .*/is " , " \\ 1 " , $query );
DB :: query ( create_table ( $query , $dbcharset ));
} else {
DB :: query ( $query );
}
}
}
}
function import_diy ( $importfile , $primaltplname , $targettplname ) {
global $_G ;
$css = $html = '' ;
$arr = array ();
$content = file_get_contents ( realpath ( $importfile ));
if ( empty ( $content )) return $arr ;
require_once DISCUZ_ROOT . './source/class/class_xml.php' ;
$diycontent = xml2array ( $content );
if ( $diycontent ) {
foreach ( $diycontent [ 'layoutdata' ] as $key => $value ) {
if ( ! empty ( $value )) getframeblock ( $value );
}
$newframe = array ();
foreach ( $_G [ 'curtplframe' ] as $value ) {
$newframe [] = $value [ 'type' ] . random ( 6 );
}
$mapping = array ();
if ( ! empty ( $diycontent [ 'blockdata' ])) {
$mapping = block_import ( $diycontent [ 'blockdata' ]);
unset ( $diycontent [ 'blockdata' ]);
}
$oldbids = $newbids = array ();
if ( ! empty ( $mapping )) {
foreach ( $mapping as $obid => $nbid ) {
$oldbids [] = 'portal_block_' . $obid ;
$newbids [] = 'portal_block_' . $nbid ;
}
}
require_once DISCUZ_ROOT . './source/class/class_xml.php' ;
$xml = array2xml ( $diycontent [ 'layoutdata' ], true );
$xml = str_replace ( $oldbids , $newbids , $xml );
$xml = str_replace (( array ) array_keys ( $_G [ 'curtplframe' ]), $newframe , $xml );
$diycontent [ 'layoutdata' ] = xml2array ( $xml );
$css = str_replace ( $oldbids , $newbids , $diycontent [ 'spacecss' ]);
$css = str_replace (( array ) array_keys ( $_G [ 'curtplframe' ]), $newframe , $css );
$arr [ 'spacecss' ] = $css ;
$arr [ 'layoutdata' ] = $diycontent [ 'layoutdata' ];
$arr [ 'style' ] = $diycontent [ 'style' ];
save_diy_data ( $primaltplname , $targettplname , $arr , true );
}
return $arr ;
}
function save_config_file ( $filename , $config , $default , $deletevar ) {
$config = setdefault ( $config , $default , $deletevar );
$date = gmdate ( " Y-m-d H:i:s " , time () + 3600 * 8 );
$content = <<< EOT
< ? php
\ $_config = array ();
EOT ;
$content .= getvars ( array ( '_config' => $config ));
$content .= " \r \n // " . str_pad ( ' THE END ' , 50 , '-' , STR_PAD_BOTH ) . " // \r \n \r \n ?> " ;
if ( ! is_writable ( $filename ) || ! ( $len = file_put_contents ( $filename , $content ))) {
file_put_contents ( DISCUZ_ROOT . './data/config_global.php' , $content );
return 0 ;
}
return 1 ;
}
function setdefault ( $var , $default , $deletevar = array ()) {
foreach ( $default as $k => $v ) {
if ( ! isset ( $var [ $k ])) {
$var [ $k ] = $default [ $k ];
} elseif ( is_array ( $v )) {
$var [ $k ] = setdefault ( $var [ $k ], $default [ $k ]);
}
}
foreach ( $deletevar as $k ) {
unset ( $var [ $k ]);
}
return $var ;
}
function getvars ( $data , $type = 'VAR' ) {
$evaluate = '' ;
foreach ( $data as $key => $val ) {
if ( ! preg_match ( " /^[a-zA-Z_ \x7f - \xff ][a-zA-Z0-9_ \x7f - \xff ]* $ / " , $key )) {
continue ;
}
if ( is_array ( $val )) {
$evaluate .= buildarray ( $val , 0 , " \$ { $key } " ) . " \r \n " ;
} else {
$val = addcslashes ( $val , '\'\\' );
$evaluate .= $type == 'VAR' ? " \$ $key = ' $val '; \n " : " define(' " . strtoupper ( $key ) . " ', ' $val '); \n " ;
}
}
return $evaluate ;
}
function buildarray ( $array , $level = 0 , $pre = '$_config' ) {
static $ks ;
if ( $level == 0 ) {
$ks = array ();
$return = '' ;
}
foreach ( $array as $key => $val ) {
if ( $level == 0 ) {
$newline = str_pad ( ' CONFIG ' . strtoupper ( $key ) . ' ' , 70 , '-' , STR_PAD_BOTH );
$return .= " \r \n // $newline // \r \n " ;
if ( $key == 'admincp' ) {
$newline = str_pad ( ' Founders: $_config[\'admincp\'][\'founder\'] = \'1,2,3\'; ' , 70 , '-' , STR_PAD_BOTH );
$return .= " // $newline // \r \n " ;
}
}
$ks [ $level ] = $ks [ $level - 1 ] . " [' $key '] " ;
if ( is_array ( $val )) {
$ks [ $level ] = $ks [ $level - 1 ] . " [' $key '] " ;
$return .= buildarray ( $val , $level + 1 , $pre );
} else {
$val = is_string ( $val ) || strlen ( $val ) > 12 || ! preg_match ( " /^ \ -?[1-9] \ d* $ / " , $val ) ? '\'' . addcslashes ( $val , '\'\\' ) . '\'' : $val ;
$return .= $pre . $ks [ $level - 1 ] . " [' $key '] " . " = $val ; \r \n " ;
}
}
return $return ;
}
function dir_clear ( $dir ) {
global $lang ;
if ( $directory = @ dir ( $dir )) {
while ( $entry = $directory -> read ()) {
$filename = $dir . '/' . $entry ;
if ( is_file ( $filename )) {
@ unlink ( $filename );
}
}
$directory -> close ();
@ touch ( $dir . '/index.htm' );
}
}
function block_conver_to_thread ( $block ){
if ( $block [ 'blockclass' ] == 'forum_attachment' ) {
$block [ 'blockclass' ] = 'forum_thread' ;
$block [ 'script' ] = 'thread' ;
} else if ( $block [ 'blockclass' ] == 'group_attachment' ) {
$block [ 'blockclass' ] = 'group_thread' ;
$block [ 'script' ] = 'groupthread' ;
}
$block [ 'param' ] = is_array ( $block [ 'param' ]) ? $block [ 'param' ] : ( array ) dunserialize ( $block [ 'param' ]);
unset ( $block [ 'param' ][ 'threadmethod' ]);
$block [ 'param' ][ 'special' ] = array ( 0 );
$block [ 'param' ][ 'picrequired' ] = 1 ;
$block [ 'param' ] = serialize ( $block [ 'param' ]);
$block [ 'styleid' ] = 0 ;
$block [ 'blockstyle' ] = block_style_conver_to_thread ( $block [ 'blockstyle' ], $block [ 'blockclass' ]);
return $block ;
}
function block_style_conver_to_thread ( $style , $blockclass ) {
$template = block_build_template ( $style [ 'template' ]);
$search = array ( 'threadurl' , 'threadsubject' , 'threadsummary' , 'filesize' , 'downloads' );
$replace = array ( 'url' , 'title' , 'summary' , '' );
$template = str_replace ( $search , $replace , $template );
$arr = array (
'name' => '' ,
'blockclass' => $blockclass ,
);
block_parse_template ( $template , $arr );
$arr [ 'fields' ] = dunserialize ( $arr [ 'fields' ]);
$arr [ 'template' ] = dunserialize ( $arr [ 'template' ]);
$arr = serialize ( $arr );
return $arr ;
}
function create_table ( $sql , $dbcharset ) {
$type = strtoupper ( preg_replace ( " /^ \ s*CREATE TABLE \ s+.+ \ s+ \ (.+? \ ).*(ENGINE|TYPE) \ s*= \ s*([a-z]+?).* $ /isU " , " \\ 2 " , $sql ));
$type = in_array ( $type , array ( 'MYISAM' , 'HEAP' , 'MEMORY' )) ? $type : 'MYISAM' ;
return preg_replace ( " /^ \ s*(CREATE TABLE \ s+.+ \ s+ \ (.+? \ )).* $ /isU " , " \\ 1 " , $sql ) .
( helper_dbtool :: dbversion () > '4.1' ? " ENGINE= $type DEFAULT CHARSET= " . $dbcharset : " TYPE= $type " );
}
?>