SetQuery("SELECT `varname`,`type`,`value`,`groupid` FROM `#@__sysconfig` ORDER BY aid ASC "); $dsql->Execute(); while ($row = $dsql->GetArray()) { if(empty($row['value']) && $row['type'] == 'number') $row['value'] = 0; if ($row['type'] == 'number') fwrite($fp, "\${$row['varname']} = ".$row['value'].";\r\n"); else fwrite($fp, "\${$row['varname']} = '".str_replace("'", '', $row['value'])."';\r\n"); } fwrite($fp, "?".">"); fclose($fp); } /*-------------- function ShowAll(); --------------*/ if ($action == '') { $types = array('soft' => '模块', 'templets' => '模板', 'plus' => '小插件', 'patch' => '补丁'); $dm = new DedeModule($mdir); if (empty($moduletype)) $moduletype = ''; $modules_remote = $dm->GetModuleUrlList($moduletype, $mdurl); $modules = array(); $modules = $dm->GetModuleList($moduletype); is_array($modules) || $modules = array(); if (is_array($modules_remote) && count($modules_remote) > 0) { $modules = array_merge($modules, $modules_remote); } require_once(dirname(__FILE__)."/templets/module_main.htm"); $dm->Clear(); exit(); } /*-------------- function ViewDevelopoer(); --------------*/ else if ($action == 'view_developoer') { //检验开发者信息 $dm = new DedeModule($mdir); $info = $dm->GetModuleInfo($hash); if ($info == null) { ShowMsg("获取模块信息错误,模块文件可能被篡改", -1); exit; } $dev_id = $info['dev_id']; $devURL = DEDECDNURL."/developers/$dev_id.json"; $dhd = new DedeHttpDown(); $dhd->OpenUrl($devURL); $devContent = $dhd->GetHtml(); $devInfo = (array)json_decode($devContent); $offUrl = ""; if ($devInfo['dev_type'] == 1) { $offUrl = "

官方网址:{$devInfo['offurl']}(复制在浏览器中打开)

"; } $authAt = date("Y-m-d", $devInfo['auth_at']); if (!isset($info['dev_id'])) { $devInfo['dev_name'] = $info['team']."未认证"; $authAt = "未知"; } ShowMsg("

开发者名称:{$devInfo['dev_name']}

开发者ID:{$devInfo['dev_id']}

认证于:{$authAt}", "-1"); exit; } /*-------------- function Setup(); --------------*/ else if ($action == 'setup') { $dm = new DedeModule($mdir); $infos = $dm->GetModuleInfo($hash); if ($infos == null) { ShowMsg("获取模块信息错误,模块文件可能被篡改", -1); exit; } $alertMsg = ($infos['lang'] == $cfg_soft_lang ? '' : '
(这个模块的语言编码与您系统的编码不一致,请向开发者确认它的兼容性)'); $filelists = (array)$dm->GetFileLists($hash); $filelist = ''; $prvdirs = array(); $incdir = array(); foreach ($filelists as $v) { if (empty($v['name'])) continue; if ($v['type'] == 'dir') { $v['type'] = '目录'; $incdir[] = $v['name']; } else { $v['type'] = '文件'; } $filelist .= "{$v['type']}|{$v['name']}\r\n"; } //检测需要的目录权限 foreach ($filelists as $v) { $prvdir = preg_replace("#\/([^\/]*)$#", '/', $v['name']); if (!preg_match("#^\.#", $prvdir)) $prvdir = './'; $n = TRUE; foreach ($incdir as $k => $v) { if (preg_match("#^".$v."#i", $prvdir)) { $n = FALSE; break; } } if (!isset($prvdirs[$prvdir]) && $n && is_dir($prvdir)) { $prvdirs[$prvdir][0] = 1; $prvdirs[$prvdir][1] = TestWriteAble($prvdir); } } $prvdir = "\r\n"; $prvdir .= "\r\n"; foreach ($prvdirs as $k => $v) { if ($v) $cw = '√'; else $cw = "×"; $prvdir .= ""; $prvdir .= "\r\n"; } $prvdir .= "
目录可写
$k$cw
"; $win = new OxWindow(); $win->Init("module_main.php", "js/blank.js", "post"); $wecome_info = "模块管理"; $devURL = DEDECDNURL."/developers/{$infos['dev_id']}.json"; $dhd = new DedeHttpDown(); $dhd->OpenUrl($devURL); $devContent = $dhd->GetHtml(); $devInfo = (array)json_decode($devContent); $s = "未认证"; if (($devInfo['dev_id'] == $infos['dev_id']) && !empty($devInfo['dev_id'])) { $s = "已认证"; } $win->AddTitle(" 模块管理 > 安装模块:{$infos['name']}"); $win->AddHidden("hash", $hash); $win->AddHidden("action", 'setupstart'); $msg = "
模块名称: {$infos['name']}
语言: {$infos['lang']} {$alertMsg}
文件大小: {$infos['filesize']}
开发者ID: {$infos['dev_id']} {$s}
发布时间: {$infos['time']}
使用协议: 浏览
注意事项:安装时请确保文件列表中涉及的目录前可写入权限,此外“后台管理目录”、“后台管理目录/templets”目录也必须暂时设置可写入权限
目录权限检测:
../ 为根目录
./ 表示当前目录
$prvdir
模块包含的所有文件列表:
对于已存在文件处理方法:
"; $win->AddMsgItem("
$msg
"); $winform = $win->GetWindow("ok", ""); $win->Display(); $dm->Clear(); exit(); } /*--------------- function SetupRun() --------------*/ else if ($action == 'setupstart') { if (!is_writeable($mdir)) { ShowMsg("目录 {$mdir} 不支持写入,这将导致程序安装没法正常创建", "-1"); exit(); } $dm = new DedeModule($mdir); $minfos = (array)$dm->GetModuleInfo($hash); extract($minfos, EXTR_SKIP); $menustring = addslashes($dm->GetSystemFile($hash, 'menustring')); $indexurl = str_replace('**', '=', $indexurl); $query = "INSERT INTO `#@__sys_module`(`hashcode` , `modname` , `indexname` , `indexurl` , `ismember` , `menustring` ) VALUES ('$hash' , '$name' , '$indexname' , '$indexurl' , '$ismember' , '$menustring' ) "; $rs = $dsql->ExecuteNoneQuery("DELETE FROM `#@__sys_module` WHERE hashcode LIKE '$hash' "); $rs = $dsql->ExecuteNoneQuery($query); if (!$rs) { ShowMsg('保存数据库信息失败,无法完成安装'.$dsql->GetError(), 'javascript:;'); exit(); } $dm->WriteFiles($hash, $isreplace); $filename = ''; if (!isset($autosetup) || $autosetup == 0) $filename = $dm->WriteSystemFile($hash, 'setup'); if (!isset($autodel) || $autodel == 0) $dm->WriteSystemFile($hash, 'uninstall'); $dm->WriteSystemFile($hash, 'readme'); $dm->Clear(); //用模块的程序安装安装 if (!isset($autosetup) || $autosetup == 0) { include(DEDEDATA.'/module/'.$filename); exit(); } //系统自动安装 else { $mysql_version = $dsql->GetVersion(TRUE); //默认使用MySQL 4.1 以下版本的SQL语句,对大于4.1版本采用替换处理 TYPE=MyISAM ==> ENGINE=MyISAM DEFAULT CHARSET=#~lang~# $setupsql = $dm->GetSystemFile($hash, 'setupsql40'); $setupsql = preg_replace("#ENGINE=MyISAM#i", 'TYPE=MyISAM', $setupsql); $sql41tmp = 'ENGINE=MyISAM DEFAULT CHARSET='.$cfg_db_language; if ($mysql_version >= 4.1) { $setupsql = preg_replace("#TYPE=MyISAM#i", $sql41tmp, $setupsql); } //_ROOTURL_ if ($cfg_cmspath == '/') $cfg_cmspath = ''; $rooturl = $cfg_basehost.$cfg_cmspath; $setupsql = preg_replace("#_ROOTURL_#i", $rooturl, $setupsql); $setupsql = preg_replace("#[\r\n]{1,}#", "\n", $setupsql); $sqls = @split(";[ \t]{0,}\n", $setupsql); foreach ($sqls as $sql) { if (trim($sql) != '') $dsql->ExecuteNoneQuery($sql); } ReWriteConfigAuto(); $rflwft = ""; echo $rflwft; UpDateCatCache(); ShowMsg('模块安装完成', 'module_main.php'); exit(); } } /*-------------- function DelModule(); --------------*/ else if ($action == 'del') { $dm = new DedeModule($mdir); $infos = $dm->GetModuleInfo($hash); $alertMsg = ($infos['lang'] == $cfg_soft_lang ? '' : '
(这个模块的语言编码与您系统的编码不一致,请向开发者确认它的兼容性)'); $dev_id = empty($infos['dev_id'])? "未认证" : "{$infos['dev_id']} 已认证"; $win = new OxWindow(); $win->Init("module_main.php", "js/blank.js", "post"); $wecome_info = "模块管理"; $win->AddTitle("模块管理 > 删除模块:{$infos['name']}"); $win->AddHidden('hash', $hash); $win->AddHidden('action', 'delok'); $msg = "
模块名称: {$infos['name']}
语言: {$infos['lang']} {$alertMsg}
文件大小: {$infos['filesize']}
开发者ID: {$dev_id}
发布时间: {$infos['time']}
使用协议: 浏览
删除模块仅删除这个模块的安装包文件,如果您已经安装,请执行卸载程序来删除
"; $win->AddMsgItem("
$msg
"); $winform = $win->GetWindow("ok", ""); $win->Display(); $dm->Clear(); exit(); } else if ($action == 'delok') { $dm = new DedeModule($mdir); $modfile = $mdir."/".$dm->GetHashFile($hash); unlink($modfile) or die("删除文件 {$modfile} 失败"); ShowMsg("成功删除一个模块文件", "module_main.php"); exit(); } /*-------------- function UnInstall(); --------------*/ else if ($action == 'uninstall') { $dm = new DedeModule($mdir); $infos = $dm->GetModuleInfo($hash); if ($infos['url'] == '') $infos['url'] = ' '; $alertMsg = ($infos['lang'] == $cfg_soft_lang ? '' : '
(这个模块的语言编码与您系统的编码不一致,请向开发者确认它的兼容性)'); $filelists = (array)$dm->GetFileLists($hash); $filelist = ''; foreach ($filelists as $v) { if (empty($v['name'])) continue; if ($v['type'] == 'dir') $v['type'] = '目录'; else $v['type'] = '文件'; $filelist .= "{$v['type']}|{$v['name']}\r\n"; } $dev_id = empty($infos['dev_id'])? "未认证" : "{$infos['dev_id']} 已认证"; $win = new OxWindow(); $win->Init("module_main.php", "js/blank.js", "post"); $wecome_info = "模块管理"; $win->AddTitle("模块管理 > 卸载模块:{$infos['name']}"); $win->AddHidden("hash", $hash); $win->AddHidden("action", 'uninstallok'); $msg = "
模块名称: {$infos['name']}
语言: {$infos['lang']} {$alertMsg}
文件大小: {$infos['filesize']}
开发者ID: {$dev_id}
发布时间: {$infos['time']}
使用协议: 浏览
模块包含的文件(文件路径相对于当前目录)
对于模块的文件处理方法:
"; $win->AddMsgItem("
$msg
"); $winform = $win->GetWindow("ok", ""); $win->Display(); $dm->Clear(); exit(); } /*-------------- function UnInstallRun(); --------------*/ else if ($action == 'uninstallok') { $dsql->ExecuteNoneQuery("DELETE FROM `#@__sys_module` WHERE hashcode LIKE '$hash' "); $dm = new DedeModule($mdir); $minfos = (array)$dm->GetModuleInfo($hash); extract($minfos, EXTR_SKIP); if (!isset($moduletype) || $moduletype != 'patch') { $dm->DeleteFiles($hash, $isreplace); } @$dm->DelSystemFile($hash, 'readme'); @$dm->DelSystemFile($hash, 'setup'); $dm->Clear(); if (!isset($autodel) || $autodel == 0) { include(DEDEDATA."/module/{$hash}-uninstall.php"); @unlink(DEDEDATA."/module/{$hash}-uninstall.php"); exit(); } else { @$dm->DelSystemFile($hash, 'uninstall'); $delsql = $dm->GetSystemFile($hash, 'delsql'); if (trim($delsql) != '') { $sqls = explode(';', $delsql); foreach ($sqls as $sql) { if (trim($sql) != '') $dsql->ExecuteNoneQuery($sql); } } ReWriteConfigAuto(); $rflwft = ""; echo $rflwft; ShowMsg('模块卸载完成', 'module_main.php'); exit(); } } /*-------------- function ShowReadme(); --------------*/ else if ($action == 'showreadme') { $dm = new DedeModule($mdir); $msg = $dm->GetSystemFile($hash, 'readme'); $msg = preg_replace("/(.*)(.*)/isU", "", $msg); $dm->Clear(); $win = new OxWindow(); $win->Init("module_main.php", "js/blank.js", "post"); $wecome_info = "模块管理"; $win->AddTitle("模块管理 > 使用说明:"); $win->AddMsgItem("
$msg
"); $winform = $win->GetWindow("hand"); $win->Display(); exit(); } /*-------------- function ViewOne(); --------------*/ else if ($action == 'view') { $dm = new DedeModule($mdir); $infos = $dm->GetModuleInfo($hash); if ($infos['url'] == '') $infos['url'] = ' '; $alertMsg = ($infos['lang'] == $cfg_soft_lang ? '' : '
(这个模块的语言编码与您系统的编码不一致,请向开发者确认它的兼容性)'); $filelists = (array)$dm->GetFileLists($hash); $filelist = ''; $setupinfo = ''; $devURL = DEDECDNURL."/developers/{$infos['dev_id']}.json"; $dhd = new DedeHttpDown(); $dhd->OpenUrl($devURL); $devContent = $dhd->GetHtml(); $devInfo = (array)json_decode($devContent); $s = "未认证"; if (($devInfo['dev_id'] == $infos['dev_id']) && !empty($devInfo['dev_id'])) { $s = "已认证"; } foreach ($filelists as $v) { if (empty($v['name'])) continue; if ($v['type'] == 'dir') $v['type'] = '目录'; else $v['type'] = '文件'; $filelist .= "{$v['type']}|{$v['name']}\r\n"; } if (file_exists(DEDEDATA."/module/{$hash}-readme.php")) { $setupinfo = "已安装 卸载"; } else { $setupinfo = "未安装 安装"; } $dev_id = empty($infos['dev_id'])? "安装{$s}" : "{$infos['dev_id']} 安装{$s}"; $win = new OxWindow(); $win->Init("", "js/blank.js", ""); $wecome_info = "模块管理"; $win->AddTitle("模块管理 > 模块详情:{$infos['name']}"); $msg = "
模块名称: {$infos['name']}
语言: {$infos['lang']} {$alertMsg}
文件大小: {$infos['filesize']}
开发者ID: {$dev_id}
发布时间: {$infos['time']}
使用协议: 浏览
模块包含的文件(文件路径相对于当前目录)
"; $win->AddMsgItem("
$msg
"); $winform = $win->GetWindow('hand', ''); $win->Display(); $dm->Clear(); exit(); } /*-------------- function Edit(); --------------*/ else if ($action == 'edit') { $dm = new DedeModule($mdir); $minfos = (array)$dm->GetModuleInfo($hash); extract($minfos, EXTR_SKIP); if (!isset($lang)) $lang = 'gb2312'; if (!isset($moduletype)) $moduletype = 'soft'; $menustring = $dm->GetSystemFile($hash, 'menustring'); $setupsql40 = dede_htmlspecialchars($dm->GetSystemFile($hash, 'setupsql40')); $readmetxt = $dm->GetSystemFile($hash, 'readme'); $delsql = $dm->GetSystemFile($hash, 'delsql'); $filelist = $dm->GetSystemFile($hash, 'oldfilelist', false); $indexurl = str_replace('**', '=', $indexurl); $dm->Clear(); require_once(dirname(__FILE__).'/templets/module_edit.htm'); exit(); } /*-------------- function Download(); --------------*/ else if ($action == 'download') { ShowMsg("暂不支持模块下载功能", "javascript:;"); }