国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

module_make.php 10KB

3 vuotta sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
1 vuosi sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
2 vuotta sitten
3 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. <?php
  2. /**
  3. * 模块生成
  4. *
  5. * @version $id:module_make.php 14:17 2010年7月20日 tianya $
  6. * @package DedeBIZ.Administrator
  7. * @copyright Copyright (c) 2022 DedeBIZ.COM
  8. * @license GNU GPL v2 (https://www.dedebiz.com/license)
  9. * @link https://www.dedebiz.com
  10. */
  11. @set_time_limit(0);
  12. require_once(dirname(__FILE__)."/config.php");
  13. require_once(DEDEINC."/dedemodule.class.php");
  14. if (DEDEBIZ_SAFE_MODE) {
  15. die(DedeAlert("系统已启用安全模式,无法使用当前功能",ALERT_DANGER));
  16. }
  17. CheckPurview('sys_module');
  18. if (empty($action)) $action = '';
  19. if ($action == '') {
  20. $modules = array();
  21. require_once(dirname(__FILE__)."/templets/module_make.htm");
  22. exit();
  23. }
  24. //生成项目
  25. else if ($action == 'make') {
  26. require_once(DEDEINC.'/libraries/dedehttpdown.class.php');
  27. //校验私钥,确定贡献者身份
  28. $devURL = DEDECDNURL."/developers/$dev_id.json";
  29. $dhd = new DedeHttpDown();
  30. $dhd->OpenUrl($devURL);
  31. $devContent = $dhd->GetHtml();
  32. $devInfo = (array)json_decode($devContent);
  33. if (($devInfo['auth_at'] + 60 * 60 * 24 * 365) < time()) {
  34. ShowMsg("操作失败,登录DedeBIZ官网查看献者账号是否过期", "-1");
  35. exit();
  36. }
  37. $filelist = str_replace("\r", "\n", trim($filelist));
  38. $filelist = trim(preg_replace("#[\n]{1,}#", "\n", $filelist));
  39. if ($filelist == '') {
  40. ShowMsg("您没有指定模块的文件列表,因此不能创建项目", "-1");
  41. exit();
  42. }
  43. if (empty($dev_id)) {
  44. ShowMsg("贡献者id不能为空", "-1");
  45. exit();
  46. }
  47. if (empty($priv)) {
  48. ShowMsg("请填写贡献者私钥信息", "-1");
  49. exit();
  50. }
  51. if (strlen($modulname) > 150) {
  52. ShowMsg("模块名称过长", "-1");
  53. exit();
  54. }
  55. //校验私钥合法性
  56. $enstr = json_encode(array(
  57. "module_name" => $modulname,
  58. "dev_id" => $devInfo['dev_id'],
  59. ));
  60. //私钥加密模块信息
  61. openssl_private_encrypt($enstr, $encotent, $priv);
  62. $moduleInfo = base64url_encode($encotent);
  63. openssl_public_decrypt($encotent, $decontent, $devInfo['pub_key']);
  64. $minfo = (array)json_decode($decontent);
  65. if ($minfo['module_name'] != $modulname || $minfo['dev_id'] != $devInfo['dev_id']) {
  66. ShowMsg("贡献者私钥校验失败,请确保填写正确的贡献者私钥", "-1");
  67. exit();
  68. }
  69. //去除转义
  70. foreach ($_POST as $k => $v) $$k = stripslashes($v);
  71. if (!isset($autosetup)) $autosetup = 0;
  72. if (!isset($autodel)) $autodel = 0;
  73. $mdir = DEDEDATA.'/module';
  74. $hashcode = md5($modulname.$devInfo['dev_id']);
  75. $moduleFilename = $mdir.'/'.$hashcode.'.xml';
  76. $menustring = base64_encode($menustring);
  77. $indexurl = str_replace('=', '**', $indexurl);
  78. $dm = new DedeModule($mdir);
  79. if ($dm->HasModule($hashcode)) {
  80. $dm->Clear();
  81. ShowMsg("您指定同名模块已经存在,您要更新这个模块先删除:module/{$hashcode}.xml", "-1");
  82. exit();
  83. }
  84. $readmef = $setupf = $uninstallf = '';
  85. if (empty($readmetxt)) {
  86. move_uploaded_file($readme, $mdir."/{$hashcode}-r.html") or die("您没填写说明或上传说明文件");
  87. $readmef = $dm->GetEncodeFile($mdir."/{$hashcode}-r.html", TRUE);
  88. } else {
  89. $readmetxt = preg_replace("#[\r\n]{1,}#", "<br>\r\n", $readmetxt);
  90. $readmef = base64_encode(trim($readmetxt));
  91. }
  92. if ($autosetup == 0) {
  93. move_uploaded_file($setup, $mdir."/{$hashcode}-s.php") or die("您没上传,或系统无法把setup文件移动到模块目录");
  94. $setupf = $dm->GetEncodeFile($mdir."/{$hashcode}-s.php", TRUE);
  95. }
  96. if ($autodel == 0) {
  97. move_uploaded_file($uninstall, $mdir."/{$hashcode}-u.php") or die("您没上传,或系统无法把uninstall文件移动到模块目录");
  98. $uninstallf = $dm->GetEncodeFile($mdir."/{$hashcode}-u.php", TRUE);
  99. }
  100. if (trim($setupsql40) == '') $setupsql40 = '';
  101. else $setupsql40 = base64_encode(trim($setupsql40));
  102. //if (trim($setupsql41)=='') $setupsql41 = '';
  103. //else $setupsql41 = base64_encode(trim($setupsql41));
  104. if (trim($delsql) == '') $delsql = '';
  105. else $delsql = base64_encode(trim($delsql));
  106. $pub_key = base64url_encode($devInfo['pub_key']);
  107. $modulinfo = "<module>
  108. <baseinfo>
  109. name={$modulname}
  110. dev_id={$devInfo['dev_id']}
  111. pubkey={$pub_key}
  112. info={$moduleInfo}
  113. time={$mtime}
  114. hash={$hashcode}
  115. indexname={$indexname}
  116. indexurl={$indexurl}
  117. ismember={$ismember}
  118. autosetup={$autosetup}
  119. autodel={$autodel}
  120. lang=utf-8
  121. moduletype={$moduletype}
  122. </baseinfo>
  123. <systemfile>
  124. <menustring>
  125. $menustring
  126. </menustring>
  127. <readme>
  128. {$readmef}
  129. </readme>
  130. <setupsql40>
  131. $setupsql40
  132. </setupsql40>
  133. <delsql>
  134. $delsql
  135. </delsql>
  136. <setup>
  137. {$setupf}
  138. </setup>
  139. <uninstall>
  140. {$uninstallf}
  141. </uninstall>
  142. <oldfilelist>
  143. $filelist
  144. </oldfilelist>
  145. </systemfile>
  146. ";
  147. $filelists = explode("\n", $filelist);
  148. foreach ($filelists as $v) {
  149. $v = trim($v);
  150. if (!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__), $v);
  151. }
  152. //测试无误后编译安装包
  153. $fp = fopen($moduleFilename, 'w');
  154. fwrite($fp, $modulinfo);
  155. fwrite($fp, "<modulefiles>\r\n");
  156. foreach ($filelists as $v) {
  157. $v = trim($v);
  158. if (!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__), $v, $fp);
  159. }
  160. fwrite($fp, "</modulefiles>\r\n");
  161. fwrite($fp, "</module>\r\n");
  162. fclose($fp);
  163. ShowMsg("成功更新一个模块插件", "module_main.php");
  164. exit();
  165. }
  166. //修改项目
  167. else if ($action == 'edit') {
  168. $filelist = str_replace("\r", "\n", trim($filelist));
  169. $filelist = trim(preg_replace("#[\n]{1,}#", "\n", $filelist));
  170. if ($filelist == "") {
  171. ShowMsg("您没有指定模块的文件列表,因此不能创建项目", "-1");
  172. exit();
  173. }
  174. if (empty($dev_id)) {
  175. ShowMsg("贡献者id不能为空", "-1");
  176. exit();
  177. }
  178. if (empty($priv)) {
  179. ShowMsg("请填写贡献者私钥信息", "-1");
  180. exit();
  181. }
  182. //校验私钥,确定贡献者身份
  183. $devURL = DEDECDNURL."/developers/$dev_id.json";
  184. $dhd = new DedeHttpDown();
  185. $dhd->OpenUrl($devURL);
  186. $devContent = $dhd->GetHtml();
  187. $devInfo = (array)json_decode($devContent);
  188. if (($devInfo['auth_at'] + 60 * 60 * 24 * 365) < time()) {
  189. ShowMsg("操作失败,登录DedeBIZ官网查看献者账号是否过期", "-1");
  190. exit();
  191. }
  192. if (strlen($modulname) > 150) {
  193. ShowMsg("模块名称过长", "-1");
  194. exit();
  195. }
  196. //校验私钥合法性
  197. $enstr = json_encode(array(
  198. "module_name" => $modulname,
  199. "dev_id" => $devInfo['dev_id'],
  200. ));
  201. //私钥加密模块信息
  202. openssl_private_encrypt($enstr, $encotent, $priv);
  203. $moduleInfo = base64url_encode($encotent);
  204. openssl_public_decrypt($encotent, $decontent, $devInfo['pub_key']);
  205. $minfo = (array)json_decode($decontent);
  206. if ($minfo['module_name'] != $modulname || $minfo['dev_id'] != $devInfo['dev_id']) {
  207. ShowMsg("贡献者私钥校验失败,请确保填写正确的贡献者私钥", "-1");
  208. exit();
  209. }
  210. //已经去除转义
  211. foreach ($_POST as $k => $v) $$k = stripslashes($v);
  212. if (!isset($autosetup)) $autosetup = 0;
  213. if (!isset($autodel)) $autodel = 0;
  214. $mdir = DEDEDATA.'/module';
  215. $hashcode = $hash;
  216. $moduleFilename = $mdir.'/'.$hashcode.'.xml';
  217. $modulname = str_replace('=', '', $modulname);
  218. $indexurl = str_replace('=', '**', $indexurl);
  219. $menustring = base64_encode($menustring);
  220. $dm = new DedeModule($mdir);
  221. $readmef = base64_encode($readmetxt);
  222. $setupf = $uninstallf = '';
  223. //编译setup文件
  224. if (is_uploaded_file($setup)) {
  225. move_uploaded_file($setup, $mdir."/{$hashcode}-s.php") or die("您没上传,或系统无法把setup文件移动到模块目录");
  226. $setupf = $dm->GetEncodeFile($mdir."/{$hashcode}-s.php", TRUE);
  227. } else {
  228. if ($autosetup == 0) $setupf = base64_encode($dm->GetSystemFile($hashcode, 'setup'));
  229. }
  230. //编译uninstall文件
  231. if (is_uploaded_file($uninstall)) {
  232. move_uploaded_file($uninstall, $mdir."/{$hashcode}-u.php") or die("您没上传,或系统无法把uninstall文件移动到模块目录");
  233. $uninstallf = $dm->GetEncodeFile($mdir."/{$hashcode}-u.php", true);
  234. } else {
  235. if ($autodel == 0) $uninstallf = base64_encode($dm->GetSystemFile($hashcode, 'uninstall'));
  236. }
  237. if (trim($setupsql40) == '') $setupsql40 = '';
  238. else $setupsql40 = base64_encode(htmlspecialchars_decode(trim($setupsql40)));
  239. //if (trim($setupsql41)=='') $setupsql41 = '';
  240. //else $setupsql41 = base64_encode(trim($setupsql41));
  241. if (trim($delsql) == '') $delsql = '';
  242. else $delsql = base64_encode(strip_tags(trim($delsql)));
  243. $pub_key = base64url_encode($devInfo['pub_key']);
  244. $modulinfo = "<module>
  245. <baseinfo>
  246. name={$modulname}
  247. dev_id={$devInfo['dev_id']}
  248. pubkey={$pub_key}
  249. info={$moduleInfo}
  250. time={$mtime}
  251. hash={$hashcode}
  252. indexname={$indexname}
  253. indexurl={$indexurl}
  254. ismember={$ismember}
  255. autosetup={$autosetup}
  256. autodel={$autodel}
  257. lang=utf-8
  258. moduletype={$moduletype}
  259. </baseinfo>
  260. <systemfile>
  261. <menustring>
  262. $menustring
  263. </menustring>
  264. <readme>
  265. {$readmef}
  266. </readme>
  267. <setupsql40>
  268. $setupsql40
  269. </setupsql40>
  270. <delsql>
  271. $delsql
  272. </delsql>
  273. <setup>
  274. {$setupf}
  275. </setup>
  276. <uninstall>
  277. {$uninstallf}
  278. </uninstall>
  279. <oldfilelist>
  280. $filelist
  281. </oldfilelist>
  282. </systemfile>
  283. ";
  284. if ($rebuild == 'yes') {
  285. $filelists = explode("\n", $filelist);
  286. foreach ($filelists as $v) {
  287. $v = trim($v);
  288. if (!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__), $v);
  289. }
  290. //测试无误后编译安装包
  291. $fp = fopen($moduleFilename, 'w');
  292. fwrite($fp, $modulinfo."\r\n");
  293. fwrite($fp, "<modulefiles>\r\n");
  294. foreach ($filelists as $v) {
  295. $v = trim($v);
  296. if (!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__), $v, $fp);
  297. }
  298. fwrite($fp, "</modulefiles>\r\n");
  299. fwrite($fp, "</module>\r\n");
  300. fclose($fp);
  301. } else {
  302. $fxml = $dm->GetFileXml($hashcode);
  303. $fp = fopen($moduleFilename, 'w');
  304. fwrite($fp, $modulinfo."\r\n");
  305. fwrite($fp, $fxml);
  306. fclose($fp);
  307. }
  308. ShowMsg("成功更新一个模块插件", "module_main.php");
  309. exit();
  310. }//ClearAllLink();
  311. ?>