国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

module_main.php 19KB

2 年前
2 年前
1年前
1年前
1年前
1年前
1年前
1年前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
1年前
10 个月前
1年前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
1年前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
1年前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. <?php
  2. /**
  3. * 模块管理
  4. *
  5. * @version $id:module_main.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. require_once(dirname(__FILE__)."/config.php");
  12. if (DEDEBIZ_SAFE_MODE) {
  13. die(DedeAlert("系统已启用安全模式,无法使用当前功能",ALERT_DANGER));
  14. }
  15. CheckPurview('sys_module');
  16. require_once(DEDEINC."/dedemodule.class.php");
  17. require_once(DEDEINC."/libraries/oxwindow.class.php");
  18. if (empty($action)) $action = '';
  19. $mdir = DEDEDATA.'/module';
  20. $mdurl = '';
  21. function TestWriteAble($d)
  22. {
  23. $tfile = '_dedet.txt';
  24. $d = preg_replace("#\/$#", '', $d);
  25. $fp = @fopen($d.'/'.$tfile, 'w');
  26. if (!$fp) return FALSE;
  27. else {
  28. fclose($fp);
  29. $rs = @unlink($d.'/'.$tfile);
  30. if ($rs) return TRUE;
  31. else return FALSE;
  32. }
  33. }
  34. function ReWriteConfigAuto()
  35. {
  36. global $dsql;
  37. $configfile = DEDEDATA.'/config.cache.inc.php';
  38. if (!is_writeable($configfile)) {
  39. echo "配置文件{$configfile}不支持写入,无法修改系统配置参数";
  40. exit();
  41. }
  42. $fp = fopen($configfile, 'w');
  43. flock($fp, 3);
  44. fwrite($fp, "<"."?php\r\n");
  45. $dsql->SetQuery("SELECT `varname`,`type`,`value`,`groupid` FROM `#@__sysconfig` ORDER BY aid ASC ");
  46. $dsql->Execute();
  47. while ($row = $dsql->GetArray()) {
  48. if (empty($row['value']) && $row['type'] == 'number') $row['value'] = 0;
  49. if ($row['type'] == 'number') fwrite($fp, "\${$row['varname']} = ".$row['value'].";\r\n");
  50. else fwrite($fp, "\${$row['varname']} = '".str_replace("'", '', $row['value'])."';\r\n");
  51. }
  52. fwrite($fp, "?".">");
  53. fclose($fp);
  54. }
  55. if ($action == '') {
  56. $types = array('soft' => '模块', 'templets' => '模板', 'plus' => '小插件', 'patch' => '补丁');
  57. $dm = new DedeModule($mdir);
  58. if (empty($moduletype)) $moduletype = '';
  59. $modules_remote = $dm->GetModuleUrlList($moduletype, $mdurl);
  60. $modules = array();
  61. $modules = $dm->GetModuleList($moduletype);
  62. is_array($modules) || $modules = array();
  63. if (is_array($modules_remote) && count($modules_remote) > 0) {
  64. $modules = array_merge($modules, $modules_remote);
  65. }
  66. require_once(dirname(__FILE__)."/templets/module_main.htm");
  67. $dm->Clear();
  68. exit();
  69. } else if ($action == 'view_developoer') {
  70. //检验贡献者信息
  71. $dm = new DedeModule($mdir);
  72. $info = $dm->GetModuleInfo($hash);
  73. if ($info == null) {
  74. ShowMsg("获取模块信息错误,模块文件错误", -1);
  75. exit;
  76. }
  77. $dev_id = $info['dev_id'];
  78. $devURL = DEDECDNURL."/developers/$dev_id.json";
  79. $dhd = new DedeHttpDown();
  80. $dhd->OpenUrl($devURL);
  81. $devContent = $dhd->GetHtml();
  82. $devInfo = (array)json_decode($devContent);
  83. $offUrl = '';
  84. if ($devInfo['dev_type'] == 1) {
  85. $offUrl = "官方网址:<code>{$devInfo['offurl']}</code><br>";
  86. }
  87. $authAt = date("Y-m-d", $devInfo['auth_at']);
  88. if (!isset($info['dev_id'])) {
  89. $devInfo['dev_name'] = $info['team']."<span class='btn btn-warning btn-sm'>未认证</span>";
  90. $authAt = "<span class='btn btn-warning btn-sm'>未知</span>";
  91. }
  92. ShowMsg("贡献者名称:{$devInfo['dev_name']}<br>贡献者id:{$devInfo['dev_id']}<br>认证于:{$authAt}", "-1");
  93. exit;
  94. } else if ($action == 'setup') {
  95. $dm = new DedeModule($mdir);
  96. $infos = $dm->GetModuleInfo($hash);
  97. if ($infos == null) {
  98. ShowMsg("获取模块信息错误,模块文件错误", -1);
  99. exit;
  100. }
  101. $alertMsg = ($infos['lang'] == $cfg_soft_lang ? '' : '<br>该模块的语言编码与您系统的编码不一致,请向贡献者确认它的兼容性');
  102. $filelists = (array)$dm->GetFileLists($hash);
  103. $filelist = '';
  104. $prvdirs = array();
  105. $incdir = array();
  106. foreach ($filelists as $v) {
  107. if (empty($v['name'])) continue;
  108. if ($v['type'] == 'dir') {
  109. $v['type'] = '目录';
  110. $incdir[] = $v['name'];
  111. } else {
  112. $v['type'] = '文件';
  113. }
  114. $filelist .= "{$v['type']}|{$v['name']}\r\n";
  115. }
  116. //检测需要的目录权限
  117. foreach ($filelists as $v) {
  118. $prvdir = preg_replace("#\/([^\/]*)$#", '/', $v['name']);
  119. if (!preg_match("#^\.#", $prvdir)) $prvdir = './';
  120. $n = TRUE;
  121. foreach ($incdir as $k => $v) {
  122. if (preg_match("#^".$v."#i", $prvdir)) {
  123. $n = FALSE;
  124. break;
  125. }
  126. }
  127. if (!isset($prvdirs[$prvdir]) && $n && is_dir($prvdir)) {
  128. $prvdirs[$prvdir][0] = 1;
  129. $prvdirs[$prvdir][1] = TestWriteAble($prvdir);
  130. }
  131. }
  132. $prvdir = "<table>\r\n";
  133. $prvdir .= "<tr><td width='260'>目录</td><td align='center'>可写</td></tr>\r\n";
  134. foreach ($prvdirs as $k => $v) {
  135. if ($v) $cw = "<span class='text-success'><i class='fa fa-check'></i></span>";
  136. else $cw = "<span class='text-danger'><i class='fa fa-times'></i></span>";
  137. $prvdir .= "<tr><td>$k</td><td align='center'>$cw</td></tr>";
  138. }
  139. $prvdir .= "</table>";
  140. $win = new OxWindow();
  141. $win->Init("module_main.php", "/static/web/js/admin.blank.js", "post");
  142. $wintitle = "安装{$infos['name']}";
  143. $devURL = DEDECDNURL."/developers/{$infos['dev_id']}.json";
  144. $dhd = new DedeHttpDown();
  145. $dhd->OpenUrl($devURL);
  146. $devContent = $dhd->GetHtml();
  147. $devInfo = (array)json_decode($devContent);
  148. $s = "未认证";
  149. if (($devInfo['dev_id'] == $infos['dev_id']) && !empty($devInfo['dev_id'])) {
  150. $s = "已认证";
  151. }
  152. $win->AddHidden("hash", $hash);
  153. $win->AddHidden("action", 'setupstart');
  154. $msg = "<tr>
  155. </tr>
  156. <tr>
  157. <td width='260'>模块名称</td>
  158. <td>{$infos['name']}</td>
  159. </tr>
  160. <tr>
  161. <td>语言</td>
  162. <td>{$infos['lang']} {$alertMsg}</td>
  163. </tr>
  164. <tr>
  165. <td>文件大小</td>
  166. <td>{$infos['filesize']}</td>
  167. </tr>
  168. <tr>
  169. <td>贡献者id</td>
  170. <td>{$infos['dev_id']} <a href='{$cfg_biz_dedebizUrl}/developer?dev_id={$infos['dev_id']}' target='_blank' class='btn btn-success btn-sm'>{$s}</a></td>
  171. </tr>
  172. <tr>
  173. <td>发布时间</td>
  174. <td>{$infos['time']}</td>
  175. </tr>
  176. <tr>
  177. <td>使用协议</td>
  178. <td><a href='module_main.php?action=showreadme&hash={$hash}' target='_blank' class='btn btn-success btn-sm'>浏览</a></td>
  179. </tr>
  180. <tr>
  181. <td>目录权限说明<br>/为根目录<br>./表示当前目录</td>
  182. <td>$prvdir</td>
  183. </tr>
  184. <tr>
  185. <td>模块包含的所有文件列表</td>
  186. <td><textarea name='filelists' id='filelists' class='admin-textarea-xl'>{$filelist}</textarea></td>
  187. </tr>
  188. <tr>
  189. <td>对于已存在文件处理方法</td>
  190. <td>
  191. <label><input type='radio' name='isreplace' value='1' checked> 覆盖</label>
  192. <label><input type='radio' name='isreplace' value='3'> 覆盖,保留副本</label>
  193. <label><input type='radio' name='isreplace' value='0'> 保留旧文件</label>
  194. </td>
  195. </tr>";
  196. $win->AddMsgItem($msg);
  197. $winform = $win->GetWindow("ok", "");
  198. $win->Display();
  199. $dm->Clear();
  200. exit();
  201. } else if ($action == 'setupstart') {
  202. if (!is_writeable($mdir)) {
  203. ShowMsg("目录{$mdir}不支持写入,这导致程序安装没法正常创建", "-1");
  204. exit();
  205. }
  206. $dm = new DedeModule($mdir);
  207. $minfos = (array)$dm->GetModuleInfo($hash);
  208. extract($minfos, EXTR_SKIP);
  209. $menustring = addslashes($dm->GetSystemFile($hash, 'menustring'));
  210. $indexurl = str_replace('**', '=', $indexurl);
  211. $query = "INSERT INTO `#@__sys_module` (`hashcode`,`modname`,`indexname`,`indexurl`,`ismember`,`menustring` ) VALUES ('$hash','$name','$indexname','$indexurl','$ismember','$menustring' ) ";
  212. $rs = $dsql->ExecuteNoneQuery("DELETE FROM `#@__sys_module` WHERE hashcode LIKE '$hash' ");
  213. $rs = $dsql->ExecuteNoneQuery($query);
  214. if (!$rs) {
  215. ShowMsg('保存数据库信息失败,无法完成安装'.$dsql->GetError(), 'javascript:;');
  216. exit();
  217. }
  218. $dm->WriteFiles($hash, $isreplace);
  219. $filename = '';
  220. if (!isset($autosetup) || $autosetup == 0) $filename = $dm->WriteSystemFile($hash, 'setup');
  221. if (!isset($autodel) || $autodel == 0) $dm->WriteSystemFile($hash, 'uninstall');
  222. $dm->WriteSystemFile($hash, 'readme');
  223. $dm->Clear();
  224. //用模块的程序安装
  225. if (!isset($autosetup) || $autosetup == 0) {
  226. include(DEDEDATA.'/module/'.$filename);
  227. exit();
  228. }
  229. //系统自动安装
  230. else {
  231. $mysql_version = $dsql->GetVersion(TRUE);
  232. //默认使用MySQL 4.1 以下版本的SQL语句,对大于4.1版本采用替换处理 TYPE=MyISAM ==> ENGINE=MyISAM DEFAULT CHARSET=#~lang~#
  233. $setupsql = $dm->GetSystemFile($hash, 'setupsql40');
  234. $setupsql = preg_replace("#ENGINE=MyISAM#i", 'TYPE=MyISAM', $setupsql);
  235. $sql41tmp = 'ENGINE=MyISAM DEFAULT CHARSET='.$cfg_db_language;
  236. if ($mysql_version >= 4.1) {
  237. $setupsql = preg_replace("#TYPE=MyISAM#i", $sql41tmp, $setupsql);
  238. }
  239. //_ROOTURL_
  240. if ($cfg_cmspath == '/') $cfg_cmspath = '';
  241. $rooturl = $cfg_basehost.$cfg_cmspath;
  242. $setupsql = preg_replace("#_ROOTURL_#i", $rooturl, $setupsql);
  243. $setupsql = preg_replace("#[\r\n]{1,}#", "\n", $setupsql);
  244. $sqls = preg_split('/;[ \t]{0,}\n/', $setupsql);
  245. foreach ($sqls as $sql) {
  246. if (trim($sql) != '') $dsql->ExecuteNoneQuery($sql);
  247. }
  248. ReWriteConfigAuto();
  249. $rflwft = "<script>\r\n";
  250. $rflwft .= "if (window.navigator.userAgent.indexOf('MSIE')>=1) top.document.frames.menu.location = 'index_menu.php';\r\n";
  251. $rflwft .= "else top.document.getElementsByName('menu').src = 'index_menu.php';\r\n";
  252. $rflwft .= "</script>";
  253. echo $rflwft;
  254. UpDateCatCache();
  255. ShowMsg('模块安装完成', 'module_main.php');
  256. exit();
  257. }
  258. } else if ($action == 'del') {
  259. $dm = new DedeModule($mdir);
  260. $infos = $dm->GetModuleInfo($hash);
  261. $alertMsg = ($infos['lang'] == $cfg_soft_lang ? '' : '<br>该模块的语言编码与您系统的编码不一致,请向贡献者确认它的兼容性');
  262. $dev_id = empty($infos['dev_id'])? "<a href='{$cfg_biz_dedebizUrl}/developer' target='_blank' class='btn btn-warning btn-sm'>未认证</a>" : "{$infos['dev_id']} <a href='{$cfg_biz_dedebizUrl}/developer?dev_id={$infos['dev_id']}' target='_blank' class='btn btn-success btn-sm'>已认证</a>";
  263. $win = new OxWindow();
  264. $win->Init("module_main.php", "/static/web/js/admin.blank.js", "post");
  265. $wintitle = "删除{$infos['name']}";
  266. $win->AddHidden("hash", $hash);
  267. $win->AddHidden("action", "delok");
  268. $msg = "<tr>
  269. <td colspan='2'>
  270. <div class='alert alert-warning'>删除模块仅删除模块安装后文件,用<a href='module_main.php?hash={$hash}&action=uninstall'>卸载程序</a>来删除</div>
  271. </td>
  272. </tr>
  273. <tr>
  274. <td width='260'>模块名称</td>
  275. <td>{$infos['name']}</td>
  276. </tr>
  277. <tr>
  278. <td>语言</td>
  279. <td>{$infos['lang']} {$alertMsg}</td>
  280. </tr>
  281. <tr>
  282. <td>文件大小</td>
  283. <td>{$infos['filesize']}</td>
  284. </tr>
  285. <tr>
  286. <td>贡献者id</td>
  287. <td>{$dev_id}</td>
  288. </tr>
  289. <tr>
  290. <td>发布时间</td>
  291. <td>{$infos['time']}</td>
  292. </tr>
  293. <tr>
  294. <td>使用协议</td>
  295. <td><a href='module_main.php?action=showreadme&hash={$hash}' target='_blank' class='btn btn-success btn-sm'>浏览</a></td>
  296. </tr>";
  297. $win->AddMsgItem($msg);
  298. $winform = $win->GetWindow("ok", "");
  299. $win->Display();
  300. $dm->Clear();
  301. exit();
  302. } else if ($action == 'delok') {
  303. $dm = new DedeModule($mdir);
  304. $modfile = $mdir."/".$dm->GetHashFile($hash);
  305. unlink($modfile) or die("删除文件{$modfile}失败");
  306. ShowMsg("成功删除一个模块文件", "module_main.php");
  307. exit();
  308. } else if ($action == 'uninstall') {
  309. $dm = new DedeModule($mdir);
  310. $infos = $dm->GetModuleInfo($hash);
  311. if ($infos['url'] == '') $infos['url'] = ' ';
  312. $alertMsg = ($infos['lang'] == $cfg_soft_lang ? '' : '<br>该模块的语言编码与您系统的编码不一致,请向贡献者确认它的兼容性');
  313. $filelists = (array)$dm->GetFileLists($hash);
  314. $filelist = '';
  315. foreach ($filelists as $v) {
  316. if (empty($v['name'])) continue;
  317. if ($v['type'] == 'dir') $v['type'] = '目录';
  318. else $v['type'] = '文件';
  319. $filelist .= "{$v['type']}|{$v['name']}\r\n";
  320. }
  321. $dev_id = empty($infos['dev_id'])? "<a href='{$cfg_biz_dedebizUrl}/developer' target='_blank' class='btn btn-warning btn-sm'>未认证</a>" : "{$infos['dev_id']} <a href='{$cfg_biz_dedebizUrl}/developer?dev_id={$infos['dev_id']}' target='_blank' class='btn btn-success btn-sm'>已认证</a>";
  322. $win = new OxWindow();
  323. $win->Init("module_main.php", "/static/web/js/admin.blank.js", "post");
  324. $wintitle = "卸载{$infos['name']}";
  325. $win->AddHidden("hash", $hash);
  326. $win->AddHidden("action", 'uninstallok');
  327. $msg = "<tr>
  328. <td width='260'>模块名称</td>
  329. <td>{$infos['name']}</td>
  330. </tr>
  331. <tr>
  332. <td>语言</td>
  333. <td>{$infos['lang']} {$alertMsg}</td>
  334. </tr>
  335. <tr>
  336. <td>文件大小</td>
  337. <td>{$infos['filesize']}</td>
  338. </tr>
  339. <tr>
  340. <td>贡献者id</td>
  341. <td>{$dev_id}</td>
  342. </tr>
  343. <tr>
  344. <td>发布时间</td>
  345. <td>{$infos['time']}</td>
  346. </tr>
  347. <tr>
  348. <td>使用协议</td>
  349. <td><a href='module_main.php?action=showreadme&hash={$hash}' target='_blank' class='btn btn-success btn-sm'>浏览</a></td>
  350. </tr>
  351. <tr>
  352. <td>模块文件</td>
  353. <td><textarea name='filelists' id='filelists' class='admin-textarea-xl'>{$filelist}</textarea></td>
  354. </tr>
  355. <tr>
  356. <td>对于模块的文件处理方法</td>
  357. <td>
  358. <label><input type='radio' name='isreplace' value='0' checked> 手工删除文件,仅运行卸载程序</label>
  359. <label><input type='radio' name='isreplace' value='2'> 删除模块的所有文件</label>
  360. </td>
  361. </tr>";
  362. $win->AddMsgItem($msg);
  363. $winform = $win->GetWindow("ok", "");
  364. $win->Display();
  365. $dm->Clear();
  366. exit();
  367. } else if ($action == 'uninstallok') {
  368. $dsql->ExecuteNoneQuery("DELETE FROM `#@__sys_module` WHERE hashcode LIKE '$hash' ");
  369. $dm = new DedeModule($mdir);
  370. $minfos = (array)$dm->GetModuleInfo($hash);
  371. extract($minfos, EXTR_SKIP);
  372. if (!isset($moduletype) || $moduletype != 'patch') {
  373. $dm->DeleteFiles($hash, $isreplace);
  374. }
  375. @$dm->DelSystemFile($hash, 'readme');
  376. @$dm->DelSystemFile($hash, 'setup');
  377. $dm->Clear();
  378. if (!isset($autodel) || $autodel == 0) {
  379. include(DEDEDATA."/module/{$hash}-uninstall.php");
  380. @unlink(DEDEDATA."/module/{$hash}-uninstall.php");
  381. exit();
  382. } else {
  383. @$dm->DelSystemFile($hash, 'uninstall');
  384. $delsql = $dm->GetSystemFile($hash, 'delsql');
  385. if (trim($delsql) != '') {
  386. $sqls = explode(';', $delsql);
  387. foreach ($sqls as $sql) {
  388. if (trim($sql) != '') $dsql->ExecuteNoneQuery($sql);
  389. }
  390. }
  391. ReWriteConfigAuto();
  392. $rflwft = "<script>\r\n";
  393. $rflwft .= "if (window.navigator.userAgent.indexOf('MSIE')>=1) top.document.frames.menu.location = 'index_menu.php';\r\n";
  394. $rflwft .= "else top.document.getElementsByName('menu').src = 'index_menu.php';\r\n";
  395. $rflwft .= "</script>";
  396. echo $rflwft;
  397. ShowMsg('模块卸载完成', 'module_main.php');
  398. exit();
  399. }
  400. } else if ($action == 'showreadme') {
  401. $dm = new DedeModule($mdir);
  402. $msg = $dm->GetSystemFile($hash, 'readme');
  403. $msg = preg_replace("/(.*)<body/isU", "", $msg);
  404. $msg = preg_replace("/<\/body>(.*)/isU", "", $msg);
  405. $dm->Clear();
  406. $win = new OxWindow();
  407. $win->Init("module_main.php", "/static/web/js/admin.blank.js", "post");
  408. $wintitle = "使用说明";
  409. $win->AddMsgItem("<tr><td>$msg</td></tr>");
  410. $winform = $win->GetWindow("hand");
  411. $win->Display();
  412. exit();
  413. } else if ($action == 'view') {
  414. $dm = new DedeModule($mdir);
  415. $infos = $dm->GetModuleInfo($hash);
  416. if ($infos['url'] == '') $infos['url'] = ' ';
  417. $alertMsg = ($infos['lang'] == $cfg_soft_lang ? '' : '<br>该模块的语言编码与您系统的编码不一致,请向贡献者确认它的兼容性');
  418. $filelists = (array)$dm->GetFileLists($hash);
  419. $filelist = '';
  420. $setupinfo = '';
  421. $devURL = DEDECDNURL."/developers/{$infos['dev_id']}.json";
  422. $dhd = new DedeHttpDown();
  423. $dhd->OpenUrl($devURL);
  424. $devContent = $dhd->GetHtml();
  425. $devInfo = (array)json_decode($devContent);
  426. $s = "未认证";
  427. if (($devInfo['dev_id'] == $infos['dev_id']) && !empty($devInfo['dev_id'])) {
  428. $s = "已认证";
  429. }
  430. foreach ($filelists as $v) {
  431. if (empty($v['name'])) continue;
  432. if ($v['type'] == 'dir') $v['type'] = '目录';
  433. else $v['type'] = '文件';
  434. $filelist .= "{$v['type']}|{$v['name']}\r\n";
  435. }
  436. if (file_exists(DEDEDATA."/module/{$hash}-readme.php")) {
  437. $setupinfo = "已安装 <a href='module_main.php?action=uninstall&hash={$hash}'>卸载</a>";
  438. } else {
  439. $setupinfo = "未安装 <a href='module_main.php?action=setup&hash={$hash}'>安装</a>";
  440. }
  441. $dev_id = empty($infos['dev_id'])? "<a href='module_main.php?action=setup&hash={$hash}' class='btn btn-outline-success btn-sm'>安装</a><a href='{$cfg_biz_dedebizUrl}/developer' target='_blank' class='btn btn-success btn-sm'>{$s}</a>" : "{$infos['dev_id']} <a href='module_main.php?action=setup&hash={$hash}' class='btn btn-outline-success btn-sm'>安装</a><a href='{$cfg_biz_dedebizUrl}/developer?dev_id={$infos['dev_id']}' target='_blank' class='btn btn-success btn-sm'>{$s}</a>";
  442. $win = new OxWindow();
  443. $win->Init("", "/static/web/js/admin.blank.js", "");
  444. $wintitle = "{$infos['name']}";
  445. $msg = "<tr>
  446. <td width='260'>模块名称</td>
  447. <td>{$infos['name']}</td>
  448. </tr>
  449. <tr>
  450. <td>语言</td>
  451. <td>{$infos['lang']} {$alertMsg}</td>
  452. </tr>
  453. <tr>
  454. <td>文件大小</td>
  455. <td>{$infos['filesize']}</td>
  456. </tr>
  457. <tr>
  458. <td>贡献者id</td>
  459. <td>{$dev_id}</td>
  460. </tr>
  461. <tr>
  462. <td>发布时间</td>
  463. <td>{$infos['time']}</td>
  464. </tr>
  465. <tr>
  466. <td>使用协议</td>
  467. <td><a href='module_main.php?action=showreadme&hash={$hash}' target='_blank' class='btn btn-success btn-sm'>浏览</a></td>
  468. </tr>
  469. <tr>
  470. <td colspan='2'><textarea name='filelists' id='filelists' class='admin-textarea-xl'>{$filelist}</textarea></td>
  471. </tr>";
  472. $win->AddMsgItem($msg);
  473. $winform = $win->GetWindow("hand", false);
  474. $win->Display();
  475. $dm->Clear();
  476. exit();
  477. } else if ($action == 'edit') {
  478. $dm = new DedeModule($mdir);
  479. $minfos = (array)$dm->GetModuleInfo($hash);
  480. extract($minfos, EXTR_SKIP);
  481. if (!isset($lang)) $lang = 'gb2312';
  482. if (!isset($moduletype)) $moduletype = 'soft';
  483. $menustring = $dm->GetSystemFile($hash, 'menustring');
  484. $setupsql40 = dede_htmlspecialchars($dm->GetSystemFile($hash, 'setupsql40'));
  485. $readmetxt = $dm->GetSystemFile($hash, 'readme');
  486. $delsql = $dm->GetSystemFile($hash, 'delsql');
  487. $filelist = $dm->GetSystemFile($hash, 'oldfilelist', false);
  488. $indexurl = str_replace('**', '=', $indexurl);
  489. $dm->Clear();
  490. require_once(dirname(__FILE__).'/templets/module_edit.htm');
  491. exit();
  492. } else if ($action == 'download') {
  493. ShowMsg("不支持模块下载功能", "javascript:;");
  494. }
  495. ?>