770 lines
24 KiB
PHP
770 lines
24 KiB
PHP
<?php
|
|
|
|
/**
|
|
* DiscuzX Convert
|
|
*
|
|
* $Id: global.func.php 20661 2011-03-01 08:08:07Z shanzongjun $
|
|
*/
|
|
|
|
function remaintime($time) {
|
|
$seconds = $time % 60;
|
|
$minutes = $time % 3600 / 60;
|
|
$hours = $time % 86400 / 3600;
|
|
$days = $time / 86400;
|
|
return array((int)$days, (int)$hours, (int)$minutes, (int)$seconds);
|
|
}
|
|
|
|
function daddslashes($string, $trim = '0') {
|
|
if(is_array($string)) {
|
|
foreach($string as $key => $val) {
|
|
$string[$key] = daddslashes($val);
|
|
}
|
|
} else {
|
|
$string = $trim ? trim(addslashes($string)) : addslashes($string);
|
|
}
|
|
return $string;
|
|
}
|
|
|
|
function cutstr($string, $length, $dot = '') {
|
|
global $discuz_charset;
|
|
|
|
if(strlen($string) <= $length) {
|
|
return $string;
|
|
}
|
|
$strcut = '';
|
|
if(strtolower($discuz_charset) == 'utf8') {
|
|
|
|
$n = $tn = $noc = 0;
|
|
while ($n < strlen($string)) {
|
|
|
|
$t = ord($string[$n]);
|
|
if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
|
|
$tn = 1; $n++; $noc++;
|
|
} elseif(194 <= $t && $t <= 223) {
|
|
$tn = 2; $n += 2; $noc += 2;
|
|
} elseif(224 <= $t && $t < 239) {
|
|
$tn = 3; $n += 3; $noc += 2;
|
|
} elseif(240 <= $t && $t <= 247) {
|
|
$tn = 4; $n += 4; $noc += 2;
|
|
} elseif(248 <= $t && $t <= 251) {
|
|
$tn = 5; $n += 5; $noc += 2;
|
|
} elseif($t == 252 || $t == 253) {
|
|
$tn = 6; $n += 6; $noc += 2;
|
|
} else {
|
|
$n++;
|
|
}
|
|
|
|
if ($noc >= $length) {
|
|
break;
|
|
}
|
|
|
|
}
|
|
if ($noc > $length) {
|
|
$n -= $tn;
|
|
}
|
|
|
|
$strcut = substr($string, 0, $n);
|
|
|
|
} else {
|
|
for($i = 0; $i < $length - strlen($dot) - 1; $i++) {
|
|
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
|
|
}
|
|
}
|
|
return $strcut.$dot;
|
|
}
|
|
|
|
function parseqqicq($qqicq, $minlen = 5, $maxlen = 12) {// qq 转换
|
|
return $qqicq ? (preg_match("/^([0-9]+)$/", $qqicq) && strlen($qqicq) >= $minlen && strlen($qqicq) <= $maxlen ? $qqicq : '') : '';
|
|
}
|
|
|
|
function parsesite($site) {
|
|
if($site && strtolower($site) != 'http://') {
|
|
$user_site = trim(preg_match("/^https?:\/\/.+/i", $site) ? $site : ($site ? 'http://'.$site : ''));
|
|
return $user_site ? cutstr(htmlspecialchars($user_site), 75) : '';
|
|
}
|
|
return '';
|
|
}
|
|
|
|
function parsesign($sign) {
|
|
|
|
$searcharray = array(
|
|
'[/color]', '[/size]', '[/font]', '[/align]', '[b]', '[/b]',
|
|
'[i]', '[/i]', '[u]', '[/u]', '[list]', '[list=1]', '[list=a]',
|
|
'[list=A]', '[*]', '[/list]', '[indent]', '[/indent]'
|
|
);
|
|
|
|
$replacearray = array(
|
|
'</font>', '</font>', '</font>', '</p>', '<b>', '</b>', '<i>',
|
|
'</i>', '<u>', '</u>', '<ul>', '<ol type=1>', '<ol type=a>',
|
|
'<ol type=A>', '<li>', '</ul></ol>', '<blockquote>', '</blockquote>'
|
|
);
|
|
|
|
$pregfind = array(
|
|
"/\[url\]\s*(www.|https?:\/\/|ftp:\/\/|gopher:\/\/|news:\/\/|telnet:\/\/|rtsp:\/\/|mms:\/\/|callto:\/\/|ed2k:\/\/){1}([^\[\"']+?)\s*\[\/url\]/ie",
|
|
"/\[url=www.([^\[\"']+?)\](.+?)\[\/url\]/is",
|
|
"/\[url=(https?|ftp|gopher|news|telnet|rtsp|mms|callto|ed2k){1}:\/\/([^\[\"']+?)\](.+?)\[\/url\]/is",
|
|
"/\[email\]\s*([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+)\s*\[\/email\]/i",
|
|
"/\[email=([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+)\](.+?)\[\/email\]/is",
|
|
"/\[color=([^\[\<]+?)\]/i",
|
|
"/\[size=([^\[\<]+?)\]/i",
|
|
"/\[font=([^\[\<]+?)\]/i",
|
|
"/\[align=([^\[\<]+?)\]/i",
|
|
"/\s*\[quote\][\n\r]*(.+?)[\n\r]*\[\/quote\]\s*/is",
|
|
"/\s*\[code\](.+?)\[\/code\]\s*/is",
|
|
"/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/ies",
|
|
"/\[img=(\d{1,3})[x|\,](\d{1,3})\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/ies"
|
|
);
|
|
$pregreplace = array(
|
|
"cuturl('\\1\\2')",
|
|
"<a href=\"http://www.\\1\" target=\"_blank\">\\2</a>",
|
|
"<a href=\"\\1://\\2\" target=\"_blank\">\\3</a>",
|
|
"<a href=\"mailto:\\1@\\2\">\\1@\\2</a>",
|
|
"<a href=\"mailto:\\1@\\2\">\\3</a>",
|
|
"<font color=\"\\1\">",
|
|
"<font size=\"\\1\">",
|
|
"<font face=\"\\1\">",
|
|
"<p align=\"\\1\">",
|
|
"<div class=\"altbg2\" style=\"margin: 2em; margin-top: 3px; padding: 10px; border: 0px solid #86B9D6; word-break: break-all\">\\1</div>",
|
|
"<div class=\"altbg2\" style=\"margin: 2em; margin-top: 3px; clear: both; padding: 10px; padding-top: 5px; border: 0px solid #86B9D6; word-break: break-all\">\\1</div>",
|
|
"bbcodeurl('\\1', '<img src=\"%s\" border=\"0\" onload=\"if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt=\'Click here to open new window\\nCTRL+Mouse wheel to zoom in/out\';}\" onmouseover=\"if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor=\'hand\'; this.alt=\'Click here to open new window\\nCTRL+Mouse wheel to zoom in/out\';}\" onclick=\"if(!this.resized) {return true;} else {window.open(\'%s\');}\" onmousewheel=\"return imgzoom(this);\" alt=\"\" />')",
|
|
"bbcodeurl('\\3', '<img width=\"\\1\" height=\"\\2\" src=\"%s\" border=\"0\" alt=\"\" />')"
|
|
);
|
|
|
|
return daddslashes(str_replace($searcharray, $replacearray, preg_replace($pregfind, $pregreplace, $sign)));
|
|
}
|
|
|
|
function bbcodeurl($url, $tags) {//url 转换
|
|
if(!preg_match("/<.+?>/s", $url)) {
|
|
if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'ftp://', 'rtsp:/', 'mms://'))) {
|
|
$url = 'http://'.$url;
|
|
}
|
|
return str_replace(array('submit', 'logging.php'), array('', ''), sprintf($tags, $url, addslashes($url)));
|
|
} else {
|
|
return ' '.$url;
|
|
}
|
|
}
|
|
|
|
function cuturl($url) {
|
|
$length = 65;
|
|
$urllink = "<a href=\"".(substr(strtolower($url), 0, 4) == 'www.' ? "http://$url" : $url).'" target="_blank">';
|
|
if(strlen($url) > $length) {
|
|
$url = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3));
|
|
}
|
|
$urllink .= $url.'</a>';
|
|
return $urllink;
|
|
}
|
|
|
|
function timetounix($time) {
|
|
if($time > 100000000) {
|
|
return $time;
|
|
}
|
|
$time = str_replace(array(' 一月 ',' 二月 ',' 三月 ',' 四月 ',' 五月 ',' 六月 ',' 七月 ',' 八月 ',' 九月 ',' 十月 ',' 十一月 ',' 十二月 ', ' 上午 '), array('-1-','-2-','-3-','-4-','-5-','-6-','-7-','-8-','-9-','-10-','-11-','-12-', ' '), $time);
|
|
if(strrchr($time, '下午') !== false) {
|
|
return strtotime(str_replace(' 下午 ', ' ', $time)) + 43200;
|
|
} else {
|
|
return strtotime($time);
|
|
}
|
|
}
|
|
|
|
function convertcharset($msg) {
|
|
global $source_charset, $discuz_charset, $db, $language;
|
|
if($discuz_charset == $source_charset || ($db['source']->version() > 4.1 && $db['discuz']->version() > 4.1)){
|
|
return $msg;
|
|
} elseif (function_exists(iconv)) {
|
|
$source_charset = str_replace('utf8', 'utf-8', $source_charset);
|
|
$discuz_charset = str_replace('utf8', 'utf-8', $discuz_charset);
|
|
return iconv($source_charset, $discuz_charset, $msg);
|
|
} else {
|
|
showmessage($language['convert_noiconv']);
|
|
}
|
|
}
|
|
|
|
function xconvert_encrypt($txt, $key) {
|
|
srand((double)microtime() * 1000000);
|
|
$encrypt_key = md5(rand(0, 32000));
|
|
$ctr = 0;
|
|
$tmp = '';
|
|
for($i = 0;$i < strlen($txt); $i++) {
|
|
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
|
|
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
|
|
}
|
|
return base64_encode(xconvert_key($tmp, $key));
|
|
}
|
|
|
|
function xconvert_decrypt($txt, $key) {
|
|
$txt = xconvert_key(base64_decode($txt), $key);
|
|
$tmp = '';
|
|
for($i = 0;$i < strlen($txt); $i++) {
|
|
$md5 = $txt[$i];
|
|
$tmp .= $txt[++$i] ^ $md5;
|
|
}
|
|
return $tmp;
|
|
}
|
|
|
|
function xconvert_key($txt, $encrypt_key) {
|
|
$encrypt_key = md5($encrypt_key);
|
|
$ctr = 0;
|
|
$tmp = '';
|
|
for($i = 0; $i < strlen($txt); $i++) {
|
|
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
|
|
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
|
|
}
|
|
return $tmp;
|
|
}
|
|
|
|
|
|
function showmessage($message, $url_forward = '', $vars = array(), $timeout = 1) {
|
|
showheader();
|
|
$message = lang($message, $vars);
|
|
$messageadd = '';
|
|
$timeout = intval($timeout);
|
|
if($url_forward) {
|
|
$messageadd .= "<script>setTimeout(\"redirect('$url_forward');\", $timeout);</script>";
|
|
$messageadd .= ">><a href=\"index.php\"><strong>".lang('message_stop')."</strong></a>";
|
|
} elseif(strpos($message, lang('return'))) {
|
|
$messageadd .= "<a href=\"javascript:history.go(-1);\" class=\"mediumtxt\">".lang('message_return').'</a><br><br>';
|
|
}
|
|
|
|
echo <<<EOT
|
|
<table class="showtable">
|
|
<tbody><tr class="title"><td style="color: white">系统提示</td></tr>
|
|
<tr><td style="padding: 10px; background-color: #fefefe;font-size: 14px "><br>$message<br><br></td></tr>
|
|
<tr><td>$messageadd</td></tr>
|
|
</tbody>
|
|
</table>
|
|
EOT;
|
|
showfooter();
|
|
exit;
|
|
}
|
|
|
|
function showheader($action = '', $setting = array()) {
|
|
static $isshow;
|
|
if($isshow) {
|
|
return true;
|
|
}
|
|
$class[$action] = 'class="current"';
|
|
$titleadd = !empty($setting['program']['source']) ? " (<span style=\"color: #888888; padding: 4px\">{$setting['program']['source']} --> {$setting['program']['target']}</span>)" : '';
|
|
|
|
echo <<<EOT
|
|
<!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>
|
|
<title>Discuz! X 系列产品升级转换</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<style type="text/css">
|
|
body,td { font-family: Tahoma; font-size: 12px; line-height: 150%;}
|
|
form {margin: 0px; padding: 0px;}
|
|
a:link,a:visited,a:active { color: #333333; text-decoration: none;}
|
|
a:hover {color: #FF0000;text-decoration: underline;}
|
|
|
|
.header {background-color: #ffffff; font-weight: bold; text-align: center}
|
|
.input, textarea {font-family: Tahoma;font-size: 12px;color: #333333;background-color: #ffffff;border: 1px solid #666666;padding-left:2px;}
|
|
.top {background-color: #cccccc}
|
|
.bg1 {background-color: #f8f8ff}
|
|
.bg2 {background-color: #fefeff}
|
|
.menu {background-color: #f5f5f5;}
|
|
.tableborder{background-color: #e5e5ff}
|
|
|
|
.title {background: #5086A5; font-weight: bold;color: #FFFFFF;}
|
|
.title td {background: #5086A5; font-weight: bold;color: #FFFFFF;}
|
|
.title, .title a:link, .title a:visited, .title a:active{color: #FFFFFF; text-decoration: none; font-weight: blod;}
|
|
.title a:hover{color: #00FF00;text-decoration: underline;}
|
|
|
|
.redbg {background: #FF0000; font-weight: bold; color: #FFFFFF;}
|
|
.redbg td {background: #FF0000; font-weight: bold; color: #FFFFFF;}
|
|
|
|
* {font-size:12px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 1.5em; word-break: break-all; }
|
|
body { text-align:center; margin: 0; padding: 0; background: #F5FBFF; }
|
|
ul li { list-style: none; }
|
|
ul {margin: 0;}
|
|
.main{ margin: 40px auto 0; width:770px; text-align:left; border: solid #86B9D6; border-width: 5px 1px 1px; background: #FFF;}
|
|
.content{margin: 0pt auto; width: 95%; min-height: 500px}
|
|
|
|
#ulist li { float: left; margin-right: 5px; width: 30%; overflow: hidden; line-height: 2em; }
|
|
|
|
h1 { font-size: 18px; margin: 1px 0 0; line-height: 50px; height: 50px; 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; }
|
|
.showtable { width:100%; border: solid; border-color:#86B9D6 #B2C9D3 #B2C9D3; border-width: 1px; margin: 10px auto; background: #F5FCFF; }
|
|
.showtable td { padding: 3px; color: #808080 }
|
|
.showtable strong { color: #5086A5; }
|
|
.datatable { width: 100%; margin: 10px auto 25px; }
|
|
.datatable td { padding: 5px 0; border-bottom: 1px solid #EEE; }
|
|
input { border: 1px solid #B2C9D3; padding: 2px; background: #F5FCFF; }
|
|
.button { margin: 10px auto 20px; width: 100%; }
|
|
.button td { text-align: center; }
|
|
.button input, .button button { border: solid; border-color:#F90; border-width: 1px 1px 3px; padding: 5px 40px; color: #090; background: #FFFAF0; cursor: pointer; }
|
|
#footer { font-size: 10px; line-height: 40px; background: #E8F7FC; text-align: center; height: 38px; overflow: hidden; color: #5086A5; margin-top: 20px; }
|
|
|
|
textarea, input, select{ padding:2px; border:1px solid; border-color:#666 #ccc #ccc #666; background:#F9F9F9; color:#333; }
|
|
.checkbox { border:0; background:none; }
|
|
</style>
|
|
|
|
<script type="text/javascript">
|
|
function redirect(url) {
|
|
window.location.replace(url);
|
|
}
|
|
|
|
function checkAll(type, form, value, checkall, changestyle) {
|
|
var checkall = checkall ? checkall : 'chkall';
|
|
for(var i = 0; i < form.elements.length; i++) {
|
|
var e = form.elements[i];
|
|
if(type == 'option' && e.type == 'radio' && e.value == value && e.disabled != true) {
|
|
e.checked = true;
|
|
} else if(type == 'value' && e.type == 'checkbox' && e.getAttribute('chkvalue') == value) {
|
|
e.checked = form.elements[checkall].checked;
|
|
} else if(type == 'prefix' && e.name && e.name != checkall && (!value || (value && e.name.match(value)))) {
|
|
e.checked = form.elements[checkall].checked;
|
|
if(changestyle && e.parentNode && e.parentNode.tagName.toLowerCase() == 'li') {
|
|
e.parentNode.className = e.checked ? 'checked' : '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
</head>
|
|
<body style="table-layout:fixed; word-break:break-all; margin-top: 4px;">
|
|
<div class="main">
|
|
<h1>Discuz! X 系列产品升级/转换 向导 $titleadd</h1>
|
|
<div class="content">
|
|
<table id="menu">
|
|
<tr>
|
|
<td $class[source]>1.选择产品转换程序 </td>
|
|
<td $class[config]>2.设置服务器信息 </td>
|
|
<td $class[select]>3.配置转换过程 </td>
|
|
<td $class[convert]>4.执行数据转换 </td>
|
|
<td $class[finish]>5.转换完成 </td>
|
|
</tr>
|
|
</table>
|
|
|
|
EOT;
|
|
$isshow = true;
|
|
}
|
|
|
|
function getfiletype($filename = '') {
|
|
$extnum = strrpos($filename, '.') + 1;
|
|
$exts = strtolower(substr($filename, $extnum));
|
|
switch ($exts) {
|
|
case 'jpg':
|
|
return 'image/pjpeg';
|
|
break;
|
|
case 'jpe':
|
|
return 'image/pjpeg';
|
|
break;
|
|
case 'jpeg':
|
|
return 'image/pjpeg';
|
|
break;
|
|
case 'pdf':
|
|
return 'application/pdf';
|
|
break;
|
|
case 'gif':
|
|
return 'image/gif';
|
|
break;
|
|
case 'bmp':
|
|
return 'image/bmp';
|
|
break;
|
|
case 'png':
|
|
return 'image/png';
|
|
break;
|
|
case 'rar':
|
|
return 'x-rar-compressed';
|
|
break;
|
|
case 'txt':
|
|
return 'text/plain';
|
|
break;
|
|
case 'swf':
|
|
return 'application/x-shockwave-flash';
|
|
break;
|
|
case 'zip':
|
|
return 'application/zip';
|
|
break;
|
|
case 'doc':
|
|
return 'application/msword';
|
|
break;
|
|
default:
|
|
return 'application/octet-stream';
|
|
break;
|
|
}
|
|
}
|
|
|
|
function convertucpw($password) {
|
|
$salt = substr(uniqid(rand()), -6);
|
|
$pass = md5(strtolower($password).$salt);
|
|
return array('password'=>$pass, 'salt'=>$salt);
|
|
}
|
|
|
|
function getgpc($k, $type='GP') {
|
|
$type = strtoupper($type);
|
|
switch($type) {
|
|
case 'G': $var = &$_GET; break;
|
|
case 'P': $var = &$_POST; break;
|
|
case 'C': $var = &$_COOKIE; break;
|
|
default:
|
|
if(isset($_GET[$k])) {
|
|
$var = &$_GET;
|
|
} else {
|
|
$var = &$_POST;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return isset($var[$k]) ? $var[$k] : NULL;
|
|
|
|
}
|
|
|
|
function show_table_header($show = true) {
|
|
$s = <<<EOT
|
|
<div class="tableborder" style="margin: auto;">
|
|
<table width="100%" border="0" cellpadding="4" cellspacing="1" align="center">
|
|
EOT;
|
|
$s .= "\n";
|
|
return output($s, $show);
|
|
}
|
|
|
|
function show_table_footer($show = true) {
|
|
$s = ' </table></div>'."\n";
|
|
return output($s, $show);
|
|
}
|
|
|
|
function show_table_row($tds, $trclass = 'bg1', $show = true) {
|
|
$s = '<tr class="'.$trclass.'">';
|
|
foreach ($tds as $td) {
|
|
if(is_array($td)) {
|
|
$s .= '<td '.$td[0].'>'.$td[1].'</td>';
|
|
} else {
|
|
$s .= '<td>'.$td.'</td>';
|
|
}
|
|
$s .= "\n";
|
|
}
|
|
$s .= "</tr>\n";
|
|
return output($s, $show);
|
|
}
|
|
|
|
function output(&$s, $show) {
|
|
if($show) {
|
|
echo $s;
|
|
}
|
|
return $s;
|
|
}
|
|
|
|
function showfooter($halt = false) {
|
|
static $isshow;
|
|
if(!$isshow) {
|
|
echo <<<EOT
|
|
</div>
|
|
<div id="footer">© Comsenz Inc. 2001-2010 www.discuz.net</div>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
EOT;
|
|
}
|
|
$isshow = true;
|
|
}
|
|
|
|
function submitcheck($var = 'submit', $allowget = false) {
|
|
$check = getgpc($var);
|
|
$ret = false;
|
|
if(empty($check)) {
|
|
|
|
} elseif($allowget) {
|
|
$ret = true;
|
|
} elseif($_REQUEST['method'] == 'post') {
|
|
$ret = true;
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
function loadsetting($folder) {
|
|
$folder = trim($folder);
|
|
$ret = array();
|
|
if($folder != '' && !preg_match('/(\/)|(\.\.)|(\\\)/', $folder) && file_exists(DISCUZ_ROOT.'/source/'.$folder.'/setting.ini')) {
|
|
$ret = @parse_ini_file(DISCUZ_ROOT.'/source/'.$folder.'/setting.ini', true);
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
function loadconfig($file = 'config.inc.php') {
|
|
$_config = array();
|
|
@include DISCUZ_ROOT.'./data/'.$file;
|
|
return $_config;
|
|
}
|
|
|
|
function showtips($tip) {
|
|
$title = lang('tips');
|
|
$msg = lang($tip);
|
|
echo <<<EOT
|
|
<table class="showtable">
|
|
<tbody><tr><td class="bg1"><strong>$title</strong></td></tr>
|
|
<tr><td class="bg2"><ol>$msg</ol>
|
|
</td></tr>
|
|
</tbody>
|
|
</table>
|
|
EOT;
|
|
}
|
|
|
|
function lang($name, $vars = array()) {
|
|
static $language;
|
|
if($language === null) {
|
|
@include DISCUZ_ROOT.'./language/lang.php';
|
|
if(empty($language)) {
|
|
$language = array();
|
|
}
|
|
}
|
|
$ret = isset($language[$name]) ? $language[$name] : $name;
|
|
if(!empty($vars)) {
|
|
foreach ($vars as $key => $value) {
|
|
$ret = str_replace('{'.$key.'}', $value);
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
function show_hidden_field($name, $value) {
|
|
echo '<input type="hidden" name="'.$name.'" value="'.$value.'">'."\n";
|
|
}
|
|
|
|
function show_form_header($method = 'post') {
|
|
echo <<<EOT
|
|
<form method="$method" action="index.php">
|
|
<input type="hidden" name="a" value="$GLOBALS[action]">
|
|
<input type="hidden" name="source" value="$GLOBALS[source]">
|
|
<input type="hidden" name="submit" value="yes">
|
|
EOT;
|
|
}
|
|
|
|
function show_form_footer($submitname = '', $submitvalue = 'submit') {
|
|
if($submitname != '') {
|
|
$submitvalue = lang($submitvalue);
|
|
echo <<<EOT
|
|
<table class="button">
|
|
<tr><td><input type="submit" value="$submitvalue" name="$submitname"></td></tr>
|
|
</table>
|
|
EOT;
|
|
}
|
|
echo '</form>';
|
|
}
|
|
|
|
function show_config_input($type, $config, $error = array()) {
|
|
$title = lang('config_type_'.$type);
|
|
show_table_header();
|
|
show_table_row(array(array('colspan="3"', $title)), 'header title');
|
|
if($type == 'target') {
|
|
show_table_row(array(array('colspan="3"', '<font color="red">'.lang('config_type_target_comment').'</font>')), 'bg2');
|
|
}
|
|
foreach ($config as $key => $value) {
|
|
$addmsg = $error && $key == 'dbhost' ? lang($error) : '';
|
|
$tip = $key == 'pconnect' ? lang('tips_pconnect') : '';
|
|
show_table_row( array(
|
|
array('width="150"', lang('config_'.$key)),
|
|
array('class="bg2"', '<input type="text" size="40" name="newconfig['.$type.']['.$key.']" value="'.htmlspecialchars($value).'">'),
|
|
array('class="bg2"', '<font color="red">'.$tip.'</font><font color="red">'.$addmsg.'</font>')
|
|
), 'bg1'
|
|
);
|
|
}
|
|
|
|
show_table_footer();
|
|
echo '<br>';
|
|
}
|
|
|
|
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).' ', 50, '-', STR_PAD_BOTH);
|
|
$return .= "\r\n// $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_array($val) && (!preg_match("/^\-?[1-9]\d*$/", $val) || strlen($val) > 12) ? '\''.addcslashes($val, '\'\\').'\'' : $val;
|
|
$return .= $pre.$ks[$level - 1]."['$key']"." = $val;\r\n";
|
|
}
|
|
}
|
|
return $return;
|
|
}
|
|
|
|
function save_config_file($filename, $config, $default) {
|
|
$config = setdefault($config, $default);
|
|
$date = gmdate("Y-m-d H:i:s", time() + 3600 * 8);
|
|
$year = date('Y');
|
|
$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?>";
|
|
file_put_contents($filename, $content);
|
|
}
|
|
|
|
function setdefault($var, $default) {
|
|
foreach ($default as $k => $v) {
|
|
if(!isset($var[$k])) {
|
|
$var[$k] = $default[$k];
|
|
} elseif(is_array($v)) {
|
|
$var[$k] = setdefault($var[$k], $default[$k]);
|
|
}
|
|
}
|
|
return $var;
|
|
}
|
|
|
|
function mysql_connect_test($config, $type) {
|
|
global $setting;
|
|
static $error_code = array('connect_error' => -1, 'table_error' => -2);
|
|
static $db;
|
|
$ret = true;
|
|
if($db === null) {
|
|
require_once(DISCUZ_ROOT.'./include/db.class.php');
|
|
$db = new db_mysql();
|
|
}
|
|
$db->set_config($config);
|
|
$check = $db->connect(false);
|
|
if(!$check) {
|
|
$ret = $error_code['connect_error'];
|
|
} else {
|
|
if(isset($setting['tablecheck'][$type])) {
|
|
$find = $db->fetch_first("SHOW TABLES LIKE '{$config[tablepre]}{$setting['tablecheck'][$type]}'");
|
|
if(!$find) {
|
|
$ret = $error_code['table_error'];
|
|
}
|
|
}
|
|
}
|
|
$db->close();
|
|
return $ret;
|
|
}
|
|
|
|
function tablepre(&$db) {
|
|
$pre = $db->table_pre;
|
|
if(strexists($pre, '.')) {
|
|
$tablepre = substr($pre, strpos($pre, '.') + 1);
|
|
} else {
|
|
$tablepre = $pre;
|
|
}
|
|
return $tablepre;
|
|
}
|
|
|
|
function implode_field_value($array, $glue = ',', $fields = array()) {
|
|
$sql = $comma = '';
|
|
foreach ($array as $k => $v) {
|
|
if(empty($fields) || isset($fields[$k])) {
|
|
$sql .= $comma."`$k`='$v'";
|
|
$comma = $glue;
|
|
}
|
|
}
|
|
return $sql;
|
|
}
|
|
|
|
function load_process($key) {
|
|
global $db_target;
|
|
$table = $db_target->tablepre.CACHETABLE;
|
|
$data = $db_target->fetch_first("SELECT cachevalue FROM $table WHERE cachekey='$key'");
|
|
if($data) {
|
|
$data = unserialize($data['cachevalue']);
|
|
}
|
|
return !is_array($data) ? array() : $data;
|
|
}
|
|
|
|
function delete_process($key) {
|
|
global $db_target;
|
|
$table = $db_target->tablepre.CACHETABLE;
|
|
if(empty($key) || $key == 'all') {
|
|
$db_target->query("DELETE FROM $table");
|
|
} else {
|
|
$db_target->query("DELETE FROM $table WHERE cachekey='$key'");
|
|
}
|
|
}
|
|
|
|
function save_process($key, $data) {
|
|
global $db_target;
|
|
$table = $db_target->tablepre.CACHETABLE;
|
|
$data = serialize($data);
|
|
$db_target->query("REPLACE INTO $table SET cachekey='$key', cachevalue='$data'");
|
|
}
|
|
|
|
function dimplode($array) {
|
|
if(!empty($array)) {
|
|
return "'".implode("','", is_array($array) ? $array : array($array))."'";
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
|
|
function db_table_charset($dbobject, $tablename) {
|
|
$tablestruct = $dbobject->fetch_first("show create table {$dbobject->tablepre}$tablename");
|
|
preg_match("/CHARSET=(\w+)/", $tablestruct['Create Table'], $m);
|
|
return $m[1];
|
|
}
|
|
|
|
function db_table_fields($db, $table) {
|
|
static $tables = array();
|
|
$table = str_replace($db->tablepre, '', $table);
|
|
if(!isset($tables[$table])) {
|
|
$tables[$table] = array();
|
|
if($db->version() > '4.1') {
|
|
$query = $db->query("SHOW FULL COLUMNS FROM {$db->tablepre}$table", 'SILENT');
|
|
} else {
|
|
$query = $db->query("SHOW COLUMNS FROM {$db->tablepre}$table", 'SILENT');
|
|
}
|
|
while($field = @$db->fetch_array($query)) {
|
|
$tables[$table][$field['Field']] = $field;
|
|
}
|
|
}
|
|
return $tables[$table];
|
|
}
|
|
|
|
function dstripslashes($string) {
|
|
if(is_array($string)) {
|
|
foreach($string as $key => $val) {
|
|
$string[$key] = dstripslashes($val);
|
|
}
|
|
} else {
|
|
$string = stripslashes($string);
|
|
}
|
|
return $string;
|
|
}
|
|
|
|
function strexists($string, $find) {
|
|
return !(strpos($string, $find) === FALSE);
|
|
}
|
|
|
|
if(!function_exists('file_put_contents')) {
|
|
if(!defined('FILE_APPEND')) define('FILE_APPEND', 8);
|
|
function file_put_contents($filename, $data, $flag = 0) {
|
|
$return = false;
|
|
if($fp = @fopen($filename, $flag != FILE_APPEND ? 'w' : 'a')) {
|
|
if($flag == LOCK_EX) @flock($fp, LOCK_EX);
|
|
$return = fwrite($fp, is_array($data) ? implode('', $data) : $data);
|
|
fclose($fp);
|
|
}
|
|
return $return;
|
|
}
|
|
} |