OpenUrl($devURL);
$devContent = $dhd->GetHtml();
$devInfo = (array)json_decode($devContent);
if (($devInfo['auth_at'] + 60 * 60 * 24 * 365) < time()) {
ShowMsg("您的开发者账号已经过期,请登录www.dedebiz.com重新申请!", "-1");
exit();
}
$filelist = str_replace("\r", "\n", trim($filelist));
$filelist = trim(preg_replace("#[\n]{1,}#", "\n", $filelist));
if ($filelist == '') {
ShowMsg("对不起,您没有指定模块的文件列表,因此不能创建项目", "-1");
exit();
}
if (empty($dev_id)) {
ShowMsg("开发者ID不能为空", "-1");
exit();
}
if (empty($priv)) {
ShowMsg("请填写开发者私钥信息", "-1");
exit();
}
if (strlen($modulname) > 150) {
ShowMsg("模块名称过长", "-1");
exit();
}
//校验私钥合法性
$enstr = json_encode(array(
"module_name" => $modulname,
"dev_id" => $devInfo['dev_id'],
));
//私钥加密模块信息
openssl_private_encrypt($enstr, $encotent, $priv);
$moduleInfo = base64url_encode($encotent);
openssl_public_decrypt($encotent, $decontent, $devInfo['pub_key']);
$minfo = (array)json_decode($decontent);
if ($minfo['module_name'] != $modulname || $minfo['dev_id'] != $devInfo['dev_id']) {
ShowMsg("开发者私钥校验失败,请确保填写正确的开发者私钥", "-1");
exit();
}
//去除转义
foreach ($_POST as $k => $v) $$k = stripslashes($v);
if (!isset($autosetup)) $autosetup = 0;
if (!isset($autodel)) $autodel = 0;
$mdir = DEDEDATA.'/module';
$hashcode = md5($modulname.$devInfo['dev_id']);
$moduleFilename = $mdir.'/'.$hashcode.'.xml';
$menustring = base64_encode($menustring);
$indexurl = str_replace('=', '**', $indexurl);
$dm = new DedeModule($mdir);
if ($dm->HasModule($hashcode)) {
$dm->Clear();
ShowMsg("对不起,您指定同名模块已经存在,因此不能创建项目
如果您要更新这个模块,请先删除:module/{$hashcode}.xml", "-1");
exit();
}
$readmef = $setupf = $uninstallf = '';
if (empty($readmetxt)) {
move_uploaded_file($readme, $mdir."/{$hashcode}-r.html") or die("您没填写说明或上传说明文件");
$readmef = $dm->GetEncodeFile($mdir."/{$hashcode}-r.html", TRUE);
} else {
$readmetxt = "
".$readmetxt;
$readmetxt = preg_replace("#[\r\n]{1,}#", "
\r\n", $readmetxt);
$readmetxt .= "
";
$readmef = base64_encode(trim($readmetxt));
}
if ($autosetup == 0) {
move_uploaded_file($setup, $mdir."/{$hashcode}-s.php") or die("您没上传,或系统无法把setup文件移动到 module 目录");
$setupf = $dm->GetEncodeFile($mdir."/{$hashcode}-s.php", TRUE);
}
if ($autodel == 0) {
move_uploaded_file($uninstall, $mdir."/{$hashcode}-u.php") or die("您没上传,或系统无法把uninstall文件移动到 module 目录");
$uninstallf = $dm->GetEncodeFile($mdir."/{$hashcode}-u.php", TRUE);
}
if (trim($setupsql40) == '') $setupsql40 = '';
else $setupsql40 = base64_encode(trim($setupsql40));
//if(trim($setupsql41)=='') $setupsql41 = '';
//else $setupsql41 = base64_encode(trim($setupsql41));
if (trim($delsql) == '') $delsql = '';
else $delsql = base64_encode(trim($delsql));
$pub_key = base64url_encode($devInfo['pub_key']);
$modulinfo = "
name={$modulname}
dev_id={$devInfo['dev_id']}
pubkey={$pub_key}
info={$moduleInfo}
time={$mtime}
hash={$hashcode}
indexname={$indexname}
indexurl={$indexurl}
ismember={$ismember}
autosetup={$autosetup}
autodel={$autodel}
lang=utf-8
moduletype={$moduletype}
$menustring
{$readmef}
$setupsql40
$delsql
{$setupf}
{$uninstallf}
$filelist
";
$filelists = explode("\n", $filelist);
foreach ($filelists as $v) {
$v = trim($v);
if (!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__), $v);
}
//测试无误后编译安装包
$fp = fopen($moduleFilename, 'w');
fwrite($fp, $modulinfo);
fwrite($fp, "\r\n");
foreach ($filelists as $v) {
$v = trim($v);
if (!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__), $v, $fp);
}
fwrite($fp, "\r\n");
fwrite($fp, "\r\n");
fclose($fp);
ShowMsg("成功对一个新模块进行编译", "module_main.php");
exit();
}
/*-------------
//修改项目
function editModule()
--------------*/
else if ($action == 'edit') {
$filelist = str_replace("\r", "\n", trim($filelist));
$filelist = trim(preg_replace("#[\n]{1,}#", "\n", $filelist));
if ($filelist == "") {
ShowMsg("对不起,您没有指定模块的文件列表,因此不能创建项目", "-1");
exit();
}
if (empty($dev_id)) {
ShowMsg("开发者ID不能为空", "-1");
exit();
}
if (empty($priv)) {
ShowMsg("请填写开发者私钥信息", "-1");
exit();
}
//校验私钥,确定开发者身份
$devURL = DEDECDNURL."/developers/$dev_id.json";
$dhd = new DedeHttpDown();
$dhd->OpenUrl($devURL);
$devContent = $dhd->GetHtml();
$devInfo = (array)json_decode($devContent);
if (($devInfo['auth_at'] + 60 * 60 * 24 * 365) < time()) {
ShowMsg("您的开发者账号已经过期,请登录www.dedebiz.com重新申请!", "-1");
exit();
}
if (strlen($modulname) > 150) {
ShowMsg("模块名称过长", "-1");
exit();
}
//校验私钥合法性
$enstr = json_encode(array(
"module_name" => $modulname,
"dev_id" => $devInfo['dev_id'],
));
//私钥加密模块信息
openssl_private_encrypt($enstr, $encotent, $priv);
$moduleInfo = base64url_encode($encotent);
openssl_public_decrypt($encotent, $decontent, $devInfo['pub_key']);
$minfo = (array)json_decode($decontent);
if ($minfo['module_name'] != $modulname || $minfo['dev_id'] != $devInfo['dev_id']) {
ShowMsg("开发者私钥校验失败,请确保填写正确的开发者私钥", "-1");
exit();
}
//已经去除转义
foreach ($_POST as $k => $v) $$k = stripslashes($v);
if (!isset($autosetup)) $autosetup = 0;
if (!isset($autodel)) $autodel = 0;
$mdir = DEDEDATA.'/module';
$hashcode = $hash;
$moduleFilename = $mdir.'/'.$hashcode.'.xml';
$modulname = str_replace('=', '', $modulname);
$indexurl = str_replace('=', '**', $indexurl);
$menustring = base64_encode($menustring);
$dm = new DedeModule($mdir);
$readmef = base64_encode($readmetxt);
$setupf = $uninstallf = '';
//编译setup文件
if (is_uploaded_file($setup)) {
move_uploaded_file($setup, $mdir."/{$hashcode}-s.php") or die("您没上传,或系统无法把setup文件移动到 module 目录");
$setupf = $dm->GetEncodeFile($mdir."/{$hashcode}-s.php", TRUE);
} else {
if ($autosetup == 0) $setupf = base64_encode($dm->GetSystemFile($hashcode, 'setup'));
}
//编译uninstall文件
if (is_uploaded_file($uninstall)) {
move_uploaded_file($uninstall, $mdir."/{$hashcode}-u.php") or die("您没上传,或系统无法把uninstall文件移动到 module 目录");
$uninstallf = $dm->GetEncodeFile($mdir."/{$hashcode}-u.php", true);
} else {
if ($autodel == 0) $uninstallf = base64_encode($dm->GetSystemFile($hashcode, 'uninstall'));
}
if (trim($setupsql40) == '') $setupsql40 = '';
else $setupsql40 = base64_encode(htmlspecialchars_decode(trim($setupsql40)));
//if(trim($setupsql41)=='') $setupsql41 = '';
//else $setupsql41 = base64_encode(trim($setupsql41));
if (trim($delsql) == '') $delsql = '';
else $delsql = base64_encode(strip_tags(trim($delsql)));
$modulinfo = "
name={$modulname}
dev_id={$devInfo['dev_id']}
pubkey={$devInfo['pub_key']}
info={$moduleInfo}
time={$mtime}
hash={$hashcode}
indexname={$indexname}
indexurl={$indexurl}
ismember={$ismember}
autosetup={$autosetup}
autodel={$autodel}
lang=utf-8
moduletype={$moduletype}
$menustring
{$readmef}
$setupsql40
$delsql
{$setupf}
{$uninstallf}
$filelist
";
if ($rebuild == 'yes') {
$filelists = explode("\n", $filelist);
foreach ($filelists as $v) {
$v = trim($v);
if (!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__), $v);
}
//测试无误后编译安装包
$fp = fopen($moduleFilename, 'w');
fwrite($fp, $modulinfo."\r\n");
fwrite($fp, "\r\n");
foreach ($filelists as $v) {
$v = trim($v);
if (!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__), $v, $fp);
}
fwrite($fp, "\r\n");
fwrite($fp, "\r\n");
fclose($fp);
} else {
$fxml = $dm->GetFileXml($hashcode);
$fp = fopen($moduleFilename, 'w');
fwrite($fp, $modulinfo."\r\n");
fwrite($fp, $fxml);
fclose($fp);
}
ShowMsg("成功对模块重新编译", "module_main.php");
exit();
}
//ClearAllLink();