EOT;
}
function lang($lang_key, $force = true) {
return isset($GLOBALS['lang'][$lang_key]) ? $GLOBALS['lang'][$lang_key] : ($force ? $lang_key : '');
}
function check_adminuser($username, $password, $email) {
include ROOT_PATH.CONFIG_UC;
include ROOT_PATH.'./uc_client/client.php';
$error = '';
$ucresult = uc_user_login($username, $password);
list($tmp['uid'], $tmp['username'], $tmp['password'], $tmp['email']) = uc_addslashes($ucresult);
$ucresult = $tmp;
if($ucresult['uid'] <= 0) {
$uid = uc_user_register($username, $password, $email);
if($uid == -1 || $uid == -2) {
$error = 'admin_username_invalid';
} elseif($uid == -4 || $uid == -5 || $uid == -6) {
$error = 'admin_email_invalid';
} elseif($uid == -3) {
$error = 'admin_exist_password_error';
}
} else {
$uid = $ucresult['uid'];
$email = $ucresult['email'];
$password = $ucresult['password'];
}
if(!$error && $uid > 0) {
$password = md5($password);
uc_user_addprotected($username, '');
} else {
$uid = 0;
$error = empty($error) ? 'error_unknow_type' : $error;
}
return array('uid' => $uid, 'username' => $username, 'password' => $password, 'email' => $email, 'error' => $error);
}
function save_uc_config($config, $file) {
list($appauthkey, $appid, $ucdbhost, $ucdbname, $ucdbuser, $ucdbpw, $ucdbcharset, $uctablepre, $uccharset, $ucapi, $ucip, $dzucstl) = $config;
mysqli_report(MYSQLI_REPORT_OFF);
$link = new mysqli($ucdbhost, $ucdbuser, $ucdbpw, $ucdbname);
$uc_connnect = $link ? 'mysql' : '';
$date = gmdate("Y-m-d H:i:s", time() + 3600 * 8);
$year = date('Y');
$config = <<
EOT;
if(file_put_contents($file, $config) !== false) {
return true;
}
return false;
}
function _generate_key($length = 32) {
$random = secrandom($length);
$info = md5($_SERVER['SERVER_SOFTWARE'].$_SERVER['SERVER_NAME'].(isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : '').(isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : '').$_SERVER['HTTP_USER_AGENT'].time());
$return = '';
for($i=0; $i<$length; $i++) {
$return .= $random[$i].$info[$i];
}
return $return;
}
function uc_write_config($config, $file, $password) {
list($appauthkey, $appid, $ucdbhost, $ucdbname, $ucdbuser, $ucdbpw, $ucdbcharset, $uctablepre, $uccharset, $ucapi, $ucip, $dzucstl) = $config;
$ucauthkey = _generate_key();
$ucsiteid = _generate_key();
$ucmykey = _generate_key();
$salt = '';
$pw = password_hash($password, PASSWORD_BCRYPT);
$config = " 'HTTP_X_FORWARDED_FOR')));\r\n";
file_put_contents($file, $config);
}
function install_uc_server() {
global $db, $dbhost, $dbuser, $dbpw, $dbname, $tablepre, $username, $password, $email, $dzucstl, $myisam2innodb;
$ucsql = file_get_contents(ROOT_PATH.'./uc_server/install/uc.sql');
$uctablepre = $tablepre.'ucenter_';
$ucsql = str_replace(' uc_', ' '.$uctablepre, $ucsql);
if ($ucsql) {
if($myisam2innodb) {
$ucsql = str_replace('ENGINE=InnoDB', 'ENGINE=MyISAM', $ucsql);
}
if (!runucquery($ucsql, $uctablepre)) {
exit();
}
}
$appauthkey = _generate_key();
$ucdbhost = $dbhost;
$ucdbname = $dbname;
$ucdbuser = $dbuser;
$ucdbpw = $dbpw;
$ucdbcharset = DBCHARSET;
$uccharset = CHARSET;
$pathinfo = pathinfo($_SERVER['PHP_SELF']);
$pathinfo['dirname'] = substr($pathinfo['dirname'], 0, -8);
$isHTTPS = is_https();
$appurl = 'http'.($isHTTPS ? 's' : '').'://'. $_SERVER['HTTP_HOST'].$pathinfo['dirname'];
$ucapi = $appurl.'/uc_server';
$ucip = '';
$db->query("INSERT INTO {$uctablepre}applications SET name='Discuz! Board', url='$appurl', ip='$ucip', authkey='$appauthkey', synlogin='1', charset='$uccharset', dbcharset='$ucdbcharset', type='DISCUZX', recvnote='1', tagtemplates=''");
$appid = $db->insert_id();
$db->query("ALTER TABLE {$uctablepre}notelist ADD COLUMN app$appid tinyint NOT NULL");
$config = array($appauthkey,$appid,$ucdbhost,$ucdbname,$ucdbuser,$ucdbpw,$ucdbcharset,$uctablepre,$uccharset,$ucapi,$ucip,$dzucstl);
save_uc_config($config, ROOT_PATH.'./config/config_ucenter.php');
$salt = '';
$passwordhash = password_hash($password, PASSWORD_BCRYPT);
$db->query("INSERT INTO {$uctablepre}members SET username='$username', password='$passwordhash', email='$email', regip='hidden', regdate='".time()."', salt='$salt'");
$uid = $db->insert_id();
$db->query("INSERT INTO {$uctablepre}memberfields SET uid='$uid'");
$db->query("INSERT INTO {$uctablepre}admins SET
uid='$uid',
username='$username',
allowadminsetting='1',
allowadminapp='1',
allowadminuser='1',
allowadminbadword='1',
allowadmincredits='1',
allowadmintag='1',
allowadminpm='1',
allowadmindomain='1',
allowadmindb='1',
allowadminnote='1',
allowadmincache='1',
allowadminlog='1'");
uc_write_config($config, ROOT_PATH.'./uc_server/data/config.inc.php', $password);
@unlink(ROOT_PATH.'./uc_server/install/index.php');
@unlink(ROOT_PATH.'./uc_server/data/cache/settings.php');
@touch(ROOT_PATH.'./uc_server/data/upgrade.lock');
@touch(ROOT_PATH.'./uc_server/data/install.lock');
dir_clear(ROOT_PATH.'./uc_server/data/cache');
dir_clear(ROOT_PATH.'./uc_server/data/view');
}
function install_data($username, $uid) {
global $_G, $db, $tablepre;
showjsmessage(lang('install_data')." ... " . "\n");
$_G = array('db'=>$db,'tablepre'=>$tablepre, 'uid'=>$uid, 'username'=>$username);
$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']);
}
showjsmessage(lang('install_data').lang('succeed') . "\n");
}
function install_testdata($username, $uid) {
global $_G, $db, $tablepre;
showjsmessage(lang('install_test_data')." : \n");
$sqlfile = ROOT_PATH.'./install/data/common_district_{#id}.sql';
for($i = 1; $i < 4; $i++) {
$sqlfileid = str_replace('{#id}', $i, $sqlfile);
if(file_exists($sqlfileid)) {
$sql = file_get_contents($sqlfileid);
$sql = str_replace("\r\n", "\n", $sql);
runquery($sql);
}
}
}
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;
$return = '';
if($level == 0) {
$ks = array();
}
foreach ($array as $key => $val) {
if(!preg_match("/^[a-zA-Z0-9_\x7f-\xff]+$/", $key)) {
continue;
}
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] = $level ? $ks[$level - 1] : '';
if(is_int($key)) {
$ks[$level] .= '['.$key.']';
} else {
$ks[$level] .= "['$key']";
}
if(is_array($val)) {
$return .= buildarray($val, $level + 1, $pre);
} else {
$val = is_string($val) || strlen($val) > 12 || ($val !== 0 && !preg_match("/^\-?[1-9]\d*$/", $val)) ? '\''.addcslashes($val, '\'\\').'\'' : $val;
$return .= $pre.$ks[$level]." = $val;\r\n";
}
}
return $return;
}
function save_diy_data($primaltplname, $targettplname, $data, $database = false) {
global $_G;
if (empty($data) || !is_array($data)) return false;
$_G['curtplbid'] = array();
$_G['curtplframe'] = array();
$tpldirectory = './template/default';
$file = '.'.$tpldirectory.'/'.$primaltplname.'.htm';
$content = file_get_contents(realpath($file));
foreach ($data['layoutdata'] as $key => $value) {
$html = '';
$html .= '';
$html .= getframehtml($value);
$html .= '
';
$content = preg_replace("/(\<\!\-\-\[diy\=$key\]\-\-\>).+?(\<\!\-\-\[\/diy\]\-\-\>)/is", "\\1".$html."\\2", $content);
}
$content = preg_replace("/(\