国内流行的内容管理系统(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.

291 lines
8.1KB

  1. <?php
  2. /**
  3. * 生成模块
  4. *
  5. * @version $Id: module_make.php 1 14:17 2010年7月20日Z tianya $
  6. * @package DedeCMS.Administrator
  7. * @copyright Copyright (c) 2020, DedeBIZ.COM
  8. * @license https://www.dedebiz.com/license/v6
  9. * @link https://www.dedebiz.com
  10. */
  11. @set_time_limit(0);
  12. require_once(dirname(__FILE__)."/config.php");
  13. require_once(dirname(__FILE__)."/../include/dedemodule.class.php");
  14. CheckPurview('sys_module');
  15. if(empty($action)) $action = '';
  16. if($action=='')
  17. {
  18. $modules = array();
  19. require_once(dirname(__FILE__)."/templets/module_make.htm");
  20. exit();
  21. }
  22. /*---------
  23. //获得Hash码
  24. function GetHash()
  25. ----------*/
  26. else if($action=='gethash')
  27. {
  28. echo md5($modulname.$email);
  29. exit();
  30. }
  31. /*-------------
  32. //生成项目
  33. function Makemodule()
  34. --------------*/
  35. else if($action=='make')
  36. {
  37. $filelist = str_replace("\r", "\n", trim($filelist));
  38. $filelist = trim(preg_replace("#[\n]{1,}#", "\n", $filelist));
  39. if($filelist=='')
  40. {
  41. ShowMsg("对不起,你没有指定模块的文件列表,因此不能创建项目!","-1");
  42. exit();
  43. }
  44. //去除转义
  45. foreach($_POST as $k=>$v) $$k = stripslashes($v);
  46. if(!isset($autosetup)) $autosetup = 0;
  47. if(!isset($autodel)) $autodel = 0;
  48. $mdir = DEDEDATA.'/module';
  49. $hashcode = md5($modulname.$email);
  50. $moduleFilename = $mdir.'/'.$hashcode.'.xml';
  51. $menustring = base64_encode($menustring);
  52. $indexurl = str_replace('=', '**', $indexurl);
  53. $dm = new DedeModule($mdir);
  54. if($dm->HasModule($hashcode))
  55. {
  56. $dm->Clear();
  57. ShowMsg("对不起,你指定同名模块已经存在,因此不能创建项目!<br>如果你要更新这个模块,请先删除:module/{$hashcode}.xml","-1");
  58. exit();
  59. }
  60. $readmef = $setupf = $uninstallf = '';
  61. if(empty($readmetxt))
  62. {
  63. move_uploaded_file($readme, $mdir."/{$hashcode}-r.html") or die("你没填写说明或上传说明文件!");
  64. $readmef = $dm->GetEncodeFile($mdir."/{$hashcode}-r.html", TRUE);
  65. }
  66. else
  67. {
  68. $readmetxt = "<p style='line-height:150%'>".$readmetxt;
  69. $readmetxt = preg_replace("#[\r\n]{1,}#", "<br />\r\n", $readmetxt);
  70. $readmetxt .= "</p>";
  71. $readmef = base64_encode(trim($readmetxt));
  72. }
  73. if($autosetup==0)
  74. {
  75. move_uploaded_file($setup,$mdir."/{$hashcode}-s.php") or die("你没上传,或系统无法把setup文件移动到 module 目录!");
  76. $setupf = $dm->GetEncodeFile($mdir."/{$hashcode}-s.php",TRUE);
  77. }
  78. if($autodel==0)
  79. {
  80. move_uploaded_file($uninstall, $mdir."/{$hashcode}-u.php") or die("你没上传,或系统无法把uninstall文件移动到 module 目录!");
  81. $uninstallf = $dm->GetEncodeFile($mdir."/{$hashcode}-u.php", TRUE);
  82. }
  83. if(trim($setupsql40)=='') $setupsql40 = '';
  84. else $setupsql40 = base64_encode(trim($setupsql40));
  85. //if(trim($setupsql41)=='') $setupsql41 = '';
  86. //else $setupsql41 = base64_encode(trim($setupsql41));
  87. if(trim($delsql)=='') $delsql = '';
  88. else $delsql = base64_encode(trim($delsql));
  89. $modulinfo = "<module>
  90. <baseinfo>
  91. name={$modulname}
  92. team={$team}
  93. time={$mtime}
  94. email={$email}
  95. url={$url}
  96. hash={$hashcode}
  97. indexname={$indexname}
  98. indexurl={$indexurl}
  99. ismember={$ismember}
  100. autosetup={$autosetup}
  101. autodel={$autodel}
  102. lang={$lang}
  103. moduletype={$moduletype}
  104. </baseinfo>
  105. <systemfile>
  106. <menustring>
  107. $menustring
  108. </menustring>
  109. <readme>
  110. {$readmef}
  111. </readme>
  112. <setupsql40>
  113. $setupsql40
  114. </setupsql40>
  115. <delsql>
  116. $delsql
  117. </delsql>
  118. <setup>
  119. {$setupf}
  120. </setup>
  121. <uninstall>
  122. {$uninstallf}
  123. </uninstall>
  124. <oldfilelist>
  125. $filelist
  126. </oldfilelist>
  127. </systemfile>
  128. ";
  129. $filelists = explode("\n", $filelist);
  130. foreach($filelists as $v)
  131. {
  132. $v = trim($v);
  133. if(!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__), $v);
  134. }
  135. //测试无误后编译安装包
  136. $fp = fopen($moduleFilename, 'w');
  137. fwrite($fp, $modulinfo);
  138. fwrite($fp, "<modulefiles>\r\n");
  139. foreach($filelists as $v)
  140. {
  141. $v = trim($v);
  142. if(!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__), $v, $fp);
  143. }
  144. fwrite($fp, "</modulefiles>\r\n");
  145. fwrite($fp, "</module>\r\n");
  146. fclose($fp);
  147. ShowMsg("成功对一个新模块进行编译!", "module_main.php");
  148. exit();
  149. }
  150. /*-------------
  151. //修改项目
  152. function editModule()
  153. --------------*/
  154. else if($action=='edit')
  155. {
  156. $filelist = str_replace("\r", "\n", trim($filelist));
  157. $filelist = trim(preg_replace("#[\n]{1,}#", "\n", $filelist));
  158. if($filelist=="")
  159. {
  160. ShowMsg("对不起,你没有指定模块的文件列表,因此不能创建项目!","-1");
  161. exit();
  162. }
  163. //已经去除转义
  164. foreach($_POST as $k=>$v) $$k = stripslashes($v);
  165. if(!isset($autosetup)) $autosetup = 0;
  166. if(!isset($autodel)) $autodel = 0;
  167. $mdir = DEDEDATA.'/module';
  168. $hashcode = $hash;
  169. $moduleFilename = $mdir.'/'.$hashcode.'.xml';
  170. $modulname = str_replace('=', '', $modulname);
  171. $email = str_replace('=', '', $email);
  172. $team = str_replace('=', '', $team);
  173. $indexurl = str_replace('=', '**', $indexurl);
  174. $menustring = base64_encode($menustring);
  175. $dm = new DedeModule($mdir);
  176. $readmef = base64_encode($readmetxt);
  177. $setupf = $uninstallf = '';
  178. //编译setup文件
  179. if(is_uploaded_file($setup))
  180. {
  181. move_uploaded_file($setup, $mdir."/{$hashcode}-s.php") or die("你没上传,或系统无法把setup文件移动到 module 目录!");
  182. $setupf = $dm->GetEncodeFile($mdir."/{$hashcode}-s.php", TRUE);
  183. } else {
  184. if($autosetup==0) $setupf = base64_encode($dm->GetSystemFile($hashcode, 'setup'));
  185. }
  186. //编译uninstall文件
  187. if(is_uploaded_file($uninstall))
  188. {
  189. move_uploaded_file($uninstall,$mdir."/{$hashcode}-u.php") or die("你没上传,或系统无法把uninstall文件移动到 module 目录!");
  190. $uninstallf = $dm->GetEncodeFile($mdir."/{$hashcode}-u.php",true);
  191. } else {
  192. if($autodel==0) $uninstallf = base64_encode($dm->GetSystemFile($hashcode,'uninstall'));
  193. }
  194. if(trim($setupsql40)=='') $setupsql40 = '';
  195. else $setupsql40 = base64_encode(htmlspecialchars_decode(trim($setupsql40)));
  196. //if(trim($setupsql41)=='') $setupsql41 = '';
  197. //else $setupsql41 = base64_encode(trim($setupsql41));
  198. if(trim($delsql)=='') $delsql = '';
  199. else $delsql = base64_encode(strip_tags(trim($delsql)));
  200. $modulinfo = "<module>
  201. <baseinfo>
  202. name={$modulname}
  203. team={$team}
  204. time={$mtime}
  205. email={$email}
  206. url={$url}
  207. hash={$hashcode}
  208. indexname={$indexname}
  209. indexurl={$indexurl}
  210. ismember={$ismember}
  211. autosetup={$autosetup}
  212. autodel={$autodel}
  213. lang={$lang}
  214. moduletype={$moduletype}
  215. </baseinfo>
  216. <systemfile>
  217. <menustring>
  218. $menustring
  219. </menustring>
  220. <readme>
  221. {$readmef}
  222. </readme>
  223. <setupsql40>
  224. $setupsql40
  225. </setupsql40>
  226. <delsql>
  227. $delsql
  228. </delsql>
  229. <setup>
  230. {$setupf}
  231. </setup>
  232. <uninstall>
  233. {$uninstallf}
  234. </uninstall>
  235. <oldfilelist>
  236. $filelist
  237. </oldfilelist>
  238. </systemfile>
  239. ";
  240. if($rebuild=='yes')
  241. {
  242. $filelists = explode("\n", $filelist);
  243. foreach($filelists as $v)
  244. {
  245. $v = trim($v);
  246. if(!empty($v)) $dm->MakeEncodeFileTest(dirname(__FILE__),$v);
  247. }
  248. //测试无误后编译安装包
  249. $fp = fopen($moduleFilename, 'w');
  250. fwrite($fp, $modulinfo."\r\n");
  251. fwrite($fp, "<modulefiles>\r\n");
  252. foreach($filelists as $v)
  253. {
  254. $v = trim($v);
  255. if(!empty($v)) $dm->MakeEncodeFile(dirname(__FILE__),$v,$fp);
  256. }
  257. fwrite($fp,"</modulefiles>\r\n");
  258. fwrite($fp,"</module>\r\n");
  259. fclose($fp);
  260. } else {
  261. $fxml = $dm->GetFileXml($hashcode);
  262. $fp = fopen($moduleFilename, 'w');
  263. fwrite($fp, $modulinfo."\r\n");
  264. fwrite($fp, $fxml);
  265. fclose($fp);
  266. }
  267. ShowMsg("成功对模块重新编译!", "module_main.php");
  268. exit();
  269. }
  270. //ClearAllLink();