国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

mychannel_edit.php 30KB

2年前
2年前
1年前
1年前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
10ヶ月前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
10ヶ月前
2年前
2年前
2年前
2年前
2年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584
  1. <?php
  2. /**
  3. * 修改文档模型
  4. *
  5. * @version $id:mychannel_edit.php 14:49 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('c_Edit');
  16. require_once(DEDEINC."/dedetag.class.php");
  17. require_once(DEDEINC."/libraries/oxwindow.class.php");
  18. if (empty($dopost)) $dopost = '';
  19. $id = isset($id) && is_numeric($id) ? $id : 0;
  20. if ($dopost == "show") {
  21. $dsql->ExecuteNoneQuery("UPDATE `#@__channeltype` SET isshow=1 WHERE id='$id' ");
  22. ShowMsg("启用一个文档模型", "mychannel_main.php");
  23. exit();
  24. } else if ($dopost == "hide") {
  25. $dsql->ExecuteNoneQuery("UPDATE `#@__channeltype` SET isshow=0 WHERE id='$id' ");
  26. ShowMsg("隐藏一个文档模型", "mychannel_main.php");
  27. exit();
  28. } else if ($dopost == "copystart") {
  29. if ($id == -1) {
  30. ShowMsg("专题文档模型不支持复制", "-1");
  31. exit();
  32. }
  33. $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$id'");
  34. if ($row['id'] > -1) {
  35. $nrow = $dsql->GetOne("SELECT MAX(id) AS id FROM `#@__channeltype` LIMIT 0,1 ");
  36. $newid = $nrow['id'] + 1;
  37. if ($newid < 10) {
  38. $newid = $newid + 10;
  39. }
  40. $idname = $newid;
  41. } else {
  42. $nrow = $dsql->GetOne("SELECT MIN(id) AS id FROM `#@__channeltype` LIMIT 0,1 ");
  43. $newid = $nrow['id'] - 1;
  44. if ($newid < -10) {
  45. $newid = $newid - 10;
  46. }
  47. $idname = 'w'.($newid * -1);
  48. }
  49. $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$id'");
  50. $wintitle = "复制文档模型";
  51. $win = new OxWindow();
  52. $win->Init("mychannel_edit.php", "/static/web/js/admin.blank.js", "post");
  53. $win->AddTitle("复制文档模型:".$row['typename']."");
  54. $win->AddHidden("cid", $id);
  55. $win->AddHidden("id", $id);
  56. $win->AddHidden("dopost", 'copysave');
  57. $msg = "<tr>
  58. <td width='260'>新模型id</td>
  59. <td><input name='newid' type='text' id='newid' value='{$newid}' class='admin-input-sm'></td>
  60. </tr>
  61. <tr>
  62. <td>新模型名称</td>
  63. <td><input name='newtypename' type='text' id='newtypename' value='{$row['typename']}{$idname}' class='admin-input-lg'></td>
  64. </tr>
  65. <tr>
  66. <td>新模型标识</td>
  67. <td><input name='newnid' type='text' id='newnid' value='{$row['nid']}{$idname}' class='admin-input-lg'></td>
  68. </tr>
  69. <tr>
  70. <td>新附加表</td>
  71. <td><input name='newaddtable' type='text' id='newaddtable' value='{$row['addtable']}{$idname}' class='admin-input-lg'></td>
  72. </tr>
  73. <tr>
  74. <td>复制模板</td>
  75. <td>
  76. <label><input type='radio' name='copytemplet' id='copytemplet' value='1' checked> 复制</label>
  77. <label><input type='radio' name='copytemplet' id='copytemplet' value='0'> 不复制</label>
  78. </td>
  79. </tr>";
  80. $win->AddMsgItem($msg);
  81. $winform = $win->GetWindow("ok", "");
  82. $win->Display();
  83. exit();
  84. } else if ($dopost == "export") {
  85. if ($id == -1) {
  86. ShowMsg("专题模型不支持导出", "-1");
  87. exit();
  88. }
  89. $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$id' ");
  90. $channelconfig = '';
  91. $row['maintable'] = preg_replace('#biz_#', '#@__', $row['maintable']);
  92. $row['addtable'] = preg_replace('#biz_#', '#@__', $row['addtable']);
  93. foreach ($row as $k => $v) {
  94. if ($k == 'fieldset') $v = "\r\n$v\r\n";
  95. $channelconfig .= "<channel:{$k}>$v</channel:{$k}>\r\n";
  96. }
  97. $wintitle = "导出指定文档模型规则";
  98. $win = new OxWindow();
  99. $win->Init();
  100. $win->AddTitle("导出{$row['typename']}文档模型规则");
  101. $winform = $win->GetWindow("hand", "<link rel='stylesheet' href='/static/web/css/codemirror.css'><script src='/static/web/js/codemirror.js'></script><script src='/static/web/js/mode/xml/xml.js'></script><script src='/static/web/js/mode/javascript/javascript.js'></script><script src='/static/web/js/mode/css/css.js'></script><script src='/static/web/js/mode/htmlmixed/htmlmixed.js'></script><textarea name='config' id='content' class='form-control'>$channelconfig</textarea><script>var editor = CodeMirror.fromTextArea(document.getElementById('content'), {lineNumbers: true,lineWrapping: true,mode: 'text/html'});</script>");
  102. $win->Display();
  103. exit();
  104. } else if ($dopost == "exportin") {
  105. $wintitle = "导入指定文档模型规则";
  106. $win = new OxWindow();
  107. $win->Init("mychannel_edit.php", "/static/web/js/admin.blank.js", "post");
  108. $win->AddHidden("dopost", "exportinok");
  109. $win->AddMsgItem("<tr><td><textarea name='exconfig' class='admin-textarea-xl'></textarea></td></tr>");
  110. $winform = $win->GetWindow("ok");
  111. $win->Display();
  112. exit();
  113. } else if ($dopost == "exportinok") {
  114. require_once(DEDEADMIN."/inc/inc_admin_channel.php");
  115. function GotoStaMsg($msg)
  116. {
  117. global $wintitle, $winform;
  118. $wintitle = "导入指定文档模型规则";
  119. $win = new OxWindow();
  120. $win->Init();
  121. $win->AddMsgItem($msg);
  122. $winform = $win->GetWindow("hand");
  123. $win->Display();
  124. exit();
  125. }
  126. $msg = "操作失败";
  127. $exconfig = stripslashes($exconfig);
  128. $dtp = new DedeTagParse();
  129. $dtp->SetNameSpace('channel', '<', '>');
  130. $dtp->LoadSource($exconfig);
  131. if (!is_array($dtp->CTags)) GotoStaMsg("<tr>
  132. <td>文档模型规则出错</td>
  133. </tr>
  134. <tr>
  135. <td align='center'><button type='button' class='btn btn-success btn-sm' onclick=\"location='mychannel_main.php';\">文档模型管理</button></td>
  136. </tr>");
  137. $fields = array();
  138. foreach ($dtp->CTags as $ctag) {
  139. $fname = $ctag->GetName('name');
  140. $fields[$fname] = trim($ctag->GetInnerText());
  141. }
  142. if (!isset($fields['nid']) || !isset($fields['fieldset'])) {
  143. GotoStaMsg("<tr>
  144. <td>文档模型规则出错</td>
  145. </tr>
  146. <tr>
  147. <td align='center'><button type='button' class='btn btn-success btn-sm' onclick=\"location='mychannel_main.php';\">文档模型管理</button></td>
  148. </tr>");
  149. }
  150. //正常的导入过程
  151. $mysql_version = $dsql->GetVersion(true);
  152. $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE nid='{$fields['nid']}' ");
  153. if (is_array($row)) {
  154. GotoStaMsg("<tr>
  155. <td>已经存在相同的{$fields['nid']}模型</td>
  156. </tr>
  157. <tr>
  158. <td align='center'><button type='button' class='btn btn-success btn-sm' onclick=\"location='mychannel_main.php';\">文档模型管理</button></td>
  159. </tr>");
  160. }
  161. //创建表
  162. if ($fields['issystem'] != -1) {
  163. $tabsql = "CREATE TABLE IF NOT EXISTS `{$fields['addtable']}` (`aid` int(11) NOT NULL DEFAULT '0',`typeid` int(11) NOT NULL DEFAULT '0',`redirecturl` varchar(255) NOT NULL DEFAULT '',`templet` varchar(30) NOT NULL DEFAULT '',`userip` char(46) NOT NULL DEFAULT '',";
  164. } else {
  165. $tabsql = "CREATE TABLE IF NOT EXISTS `{$fields['addtable']}` (`aid` int(11) NOT NULL DEFAULT '0',`typeid` int(11) NOT NULL DEFAULT '0',`channel` SMALLINT NOT NULL DEFAULT '0',`arcrank` SMALLINT NOT NULL DEFAULT '0',`mid` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',`click` INT(10) UNSIGNED NOT NULL DEFAULT '0',`title` varchar(255) NOT NULL DEFAULT '',`senddate` int(11) NOT NULL DEFAULT '0',`flag` set('c','h','p','f','s','j','a','b') DEFAULT NULL,";
  166. }
  167. if ($mysql_version < 4.1) {
  168. $tabsql .= " PRIMARY KEY (`aid`), KEY `typeid` (`typeid`)\r\n) TYPE=MyISAM; ";
  169. } else {
  170. $tabsql .= " PRIMARY KEY (`aid`), KEY `typeid` (`typeid`)\r\n) ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language."; ";
  171. }
  172. $rs = $dsql->ExecuteNoneQuery($tabsql);
  173. if (!$rs) {
  174. GotoStaMsg("<tr>
  175. <td>创建数据表失败:{$dsql->GetError()}</td>
  176. </tr>
  177. <tr>
  178. <td align='center'><button type='button' class='btn btn-success btn-sm' onclick=\"location='mychannel_main.php';\">文档模型管理</button></td>
  179. </tr>");
  180. exit();
  181. }
  182. if ($fields['issystem'] == 1) $fields['issystem'] = 0;
  183. if ($fields['issystem'] == 0) {
  184. $row = $dsql->GetOne("SELECT id FROM `#@__channeltype` ORDER BY id DESC ");
  185. $fields['newid'] = $row['id'] + 1;
  186. } else {
  187. $row = $dsql->GetOne("SELECT id FROM `#@__channeltype` ORDER BY id ASC ");
  188. $fields['newid'] = $row['id'] - 1;
  189. }
  190. $fieldset = $fields['fieldset'];
  191. $fields['fieldset'] = addslashes($fields['fieldset']);
  192. $inquery = "INSERT INTO `#@__channeltype` (`id`,`nid`,`typename`,`addtable`,`addcon`,`mancon`,`editcon`,`useraddcon`,`usermancon`,`usereditcon`,`fieldset`,`listfields`,`issystem`,`isshow`,`issend`,`arcsta`,`usertype`,`sendrank`) VALUES ('{$fields['newid']}','{$fields['nid']}','{$fields['typename']}','{$fields['addtable']}','{$fields['addcon']}','{$fields['mancon']}','{$fields['editcon']}','{$fields['useraddcon']}','{$fields['usermancon']}','{$fields['usereditcon']}','{$fields['fieldset']}','{$fields['listfields']}','{$fields['issystem']}','{$fields['isshow']}','{$fields['issend']}','{$fields['arcsta']}','{$fields['usertype']}','{$fields['sendrank']}'); ";
  193. $rs = $dsql->ExecuteNoneQuery($inquery);
  194. if (!$rs) GotoStaMsg("<tr>
  195. <td>导入文档模型时发生错误:{$dsql->GetError()}</td>
  196. </tr>
  197. <tr>
  198. <td align='center'><button type='button' class='btn btn-success btn-sm' onclick=\"location='mychannel_main.php';\">文档模型管理</button></td>
  199. </tr>");
  200. $dtp = new DedeTagParse();
  201. $dtp->SetNameSpace("field", "<", ">");
  202. $dtp->LoadSource($fieldset);
  203. $allfields = '';
  204. if (is_array($dtp->CTags)) {
  205. foreach ($dtp->CTags as $ctag) {
  206. //检测被修改的字段类型
  207. $dtype = $ctag->GetAtt('type');
  208. $fieldname = $ctag->GetName();
  209. $dfvalue = $ctag->GetAtt('default');
  210. $islist = $ctag->GetAtt('islist');
  211. $mxlen = $ctag->GetAtt('maxlength');
  212. $fieldinfos = GetFieldMake($dtype, $fieldname, $dfvalue, $mxlen);
  213. $ntabsql = $fieldinfos[0];
  214. $buideType = $fieldinfos[1];
  215. if ($islist != '') {
  216. $allfields .= ($allfields == '' ? $fieldname : ','.$fieldname);
  217. }
  218. $dsql->ExecuteNoneQuery(" ALTER TABLE `{$fields['addtable']}` ADD $ntabsql ");
  219. }
  220. }
  221. if ($allfields != '') {
  222. $dsql->ExecuteNoneQuery("UPDATE `#@__channeltype` SET listfields='$allfields' WHERE id='{$fields['newid']}' ");
  223. }
  224. GotoStaMsg("<tr>
  225. <td>成功导入一个文档模型</td>
  226. </tr>
  227. <tr>
  228. <td align='center'><button type='button' class='btn btn-success btn-sm' onclick=\"location='mychannel_main.php';\">文档模型管理</button></td>
  229. </tr>");
  230. } else if ($dopost == "copysave") {
  231. $cid = intval($cid);
  232. $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$cid' ", MYSQL_ASSOC);
  233. foreach ($row as $k => $v) {
  234. ${strtolower($k)} = addslashes($v);
  235. }
  236. $inquery = " INSERT INTO `#@__channeltype` (`id`,`nid`,`typename`,`addtable`,`addcon`,`mancon`,`editcon`,`useraddcon`,`usermancon`,`usereditcon`,`fieldset`,`listfields`,`issystem`,`isshow`,`issend`,`arcsta`,`usertype`,`sendrank` ) VALUES ('$newid','$newnid','$newtypename','$newaddtable','$addcon','$mancon','$editcon','$useraddcon','$usermancon','$usereditcon','$fieldset','$listfields','$issystem','$isshow','$issend','$arcsta','$usertype','$sendrank'); ";
  237. $mysql_version = $dsql->GetVersion(TRUE);
  238. if (!$dsql->IsTable($newaddtable)) {
  239. $dsql->Execute('me', "SHOW CREATE TABLE {$dsql->dbName}.{$addtable}");
  240. $row = $dsql->GetArray('me', MYSQL_BOTH);
  241. $tableStruct = $row[1];
  242. $tb = str_replace('#@__', $cfg_dbprefix, $addtable);
  243. $tableStruct = preg_replace("/CREATE TABLE `$addtable` /iU", "CREATE TABLE `$newaddtable`", $tableStruct);
  244. $dsql->ExecuteNoneQuery($tableStruct);
  245. }
  246. if ($copytemplet == 1) {
  247. $tmpletdir = $cfg_basedir.$cfg_templets_dir.'/'.$cfg_df_style;
  248. copy("{$tmpletdir}/article_{$nid}.htm", "{$tmpletdir}/article_{$newnid}.htm");
  249. copy("{$tmpletdir}/list_{$nid}.htm", "{$tmpletdir}/list_{$newnid}.htm");
  250. copy("{$tmpletdir}/index_{$nid}.htm", "{$tmpletdir}/index_{$newnid}.htm");
  251. }
  252. $rs = $dsql->ExecuteNoneQuery($inquery);
  253. if ($rs) {
  254. ShowMsg("成功复制文档模型,正在前往模型管理", "mychannel_edit.php?id={$newid}&dopost=edit");
  255. exit();
  256. } else {
  257. $errv = $dsql->GetError();
  258. ShowMsg("复制文档模型失败,错误提示:$errv", "javascript:;");
  259. exit();
  260. }
  261. } else if ($dopost == "save") {
  262. $fieldset = preg_replace("#[\r\n]{1,}#", "\r\n", $fieldset);
  263. $usertype = empty($usertype) ? '' : $usertype;
  264. $query = "UPDATE `#@__channeltype` SET typename='$typename',addtable='$addtable',addcon='$addcon',mancon='$mancon',editcon='$editcon',useraddcon='$useraddcon',usermancon='$usermancon',usereditcon='$usereditcon',fieldset='$fieldset',listfields='$listfields',issend='$issend',arcsta='$arcsta',usertype='$usertype',sendrank='$sendrank',needdes='$needdes',needpic='$needpic',titlename='$titlename',onlyone='$onlyone',dfcid='$dfcid' WHERE id='$id' ";
  265. if (trim($fieldset) != '') {
  266. $dtp = new DedeTagParse();
  267. $dtp->SetNameSpace("field", "<", ">");
  268. $dtp->LoadSource(stripslashes($fieldset));
  269. if (!is_array($dtp->CTags)) {
  270. ShowMsg("文本配置参数无效,无法进行解析", "-1");
  271. exit();
  272. }
  273. }
  274. $trueTable = str_replace("#@__", $cfg_dbprefix, $addtable);
  275. if (!$dsql->IsTable($trueTable)) {
  276. ShowMsg("系统找不到您所指定的".$trueTable."表", "-1");
  277. exit();
  278. }
  279. $dsql->ExecuteNoneQuery($query);
  280. ShowMsg("成功修改一个文档模型", "mychannel_main.php");
  281. exit();
  282. } else if ($dopost == "gettemplets") {
  283. require_once(DEDEINC."/libraries/oxwindow.class.php");
  284. $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$id'");
  285. $wintitle = "查看模型应用模板";
  286. $win = new OxWindow();
  287. $win->Init("", "/static/web/js/admin.blank.js", "");
  288. $win->AddTitle("栏目".$row['typename']."默认模板文件说明");
  289. $defaulttemplate = $cfg_templets_dir.'/'.$cfg_df_style;
  290. $msg = "<tr>
  291. <td>
  292. <span>文档模板:{$defaulttemplate}/article_{$row['nid']}.htm</span>
  293. <a href='tpl.php?acdir={$cfg_df_style}&action=edit&filename=article_{$row['nid']}.htm' class='btn btn-success btn-sm'>修改</a>
  294. </td>
  295. </tr>
  296. <tr>
  297. <td>
  298. <span>列表模板:{$defaulttemplate}/list_{$row['nid']}.htm</span>
  299. <a href='tpl.php?acdir={$cfg_df_style}&action=edit&filename=list_{$row['nid']}.htm' class='btn btn-success btn-sm'>修改</a>
  300. </td>
  301. </tr>
  302. <tr>
  303. <td>
  304. <span>封面栏目模板:{$defaulttemplate}/index_{$row['nid']}.htm</span>
  305. <a href='tpl.php?acdir={$cfg_df_style}&action=edit&filename=index_{$row['nid']}.htm' class='btn btn-success btn-sm'>修改</a>
  306. </td>
  307. </tr>";
  308. $win->AddMsgItem($msg);
  309. $winform = $win->GetWindow("hand", "");
  310. $win->Display();
  311. exit();
  312. } else if ($dopost == "delete") {
  313. CheckPurview('c_Del');
  314. $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$id'");
  315. if ($row['issystem'] == 1) {
  316. ShowMsg("系统文档模型不允许删除", "mychannel_main.php");
  317. exit();
  318. }
  319. if (empty($job)) $job = '';
  320. //确认提示
  321. if ($job == "") {
  322. require_once(DEDEINC."/libraries/oxwindow.class.php");
  323. $wintitle = "删除指定文档模型";
  324. $win = new OxWindow();
  325. $win->Init("mychannel_edit.php", "/static/web/js/admin.blank.js", "POST");
  326. $win->AddHidden("job", "yes");
  327. $win->AddHidden("dopost", $dopost);
  328. $win->AddHidden("id", $id);
  329. $win->AddTitle("您确定要删除".$row['typename']."模型吗");
  330. $winform = $win->GetWindow("ok");
  331. $win->Display();
  332. exit();
  333. } else if ($job == "yes") {
  334. require_once(DEDEINC."/typelink/typeunit.class.admin.php");
  335. $myrow = $dsql->GetOne("SELECT addtable FROM `#@__channeltype` WHERE id='$id'", MYSQL_ASSOC);
  336. if (!is_array($myrow)) {
  337. ShowMsg('您所指定的栏目信息不存在', '-1');
  338. exit();
  339. }
  340. //检查栏目的表是否独占数据表
  341. $addtable = str_replace($cfg_dbprefix, '', str_replace('#@__', $cfg_dbprefix, $myrow['addtable']));
  342. $row = $dsql->GetOne("SELECT COUNT(id) AS dd FROM `#@__channeltype` WHERE addtable like '{$cfg_dbprefix}{$addtable}' OR addtable LIKE CONCAT('#','@','__','$addtable') ;");
  343. $isExclusive2 = ($row['dd'] > 1 ? 0 : 1);
  344. //获取与栏目关连的所有栏目id
  345. $tids = '';
  346. $dsql->Execute('qm', "SELECT id FROM `#@__arctype` WHERE channeltype='$id'");
  347. while ($row = $dsql->GetArray('qm')) {
  348. $tids .= ($tids == '' ? $row['id'] : ','.$row['id']);
  349. }
  350. //删除相关信息
  351. if ($tids != '') {
  352. $dsql->ExecuteNoneQuery("DELETE FROM `#@__arctiny` WHERE typeid IN($tids);");
  353. $dsql->ExecuteNoneQuery("DELETE FROM `{$myrow['maintable']}` WHERE typeid IN($tids);");
  354. $dsql->ExecuteNoneQuery("DELETE FROM `#@__spec` WHERE typeid IN ($tids);");
  355. $dsql->ExecuteNoneQuery("DELETE FROM `#@__feedback` WHERE typeid IN ($tids);");
  356. $dsql->ExecuteNoneQuery("DELETE FROM `#@__arctype` WHERE id IN ($tids);");
  357. }
  358. //删除附加表或附加表内的信息
  359. if ($isExclusive2 == 1) {
  360. $dsql->ExecuteNoneQuery("DROP TABLE IF EXISTS `{$cfg_dbprefix}{$addtable}`;");
  361. } else {
  362. if ($tids != '' && $myrow['addtable'] != '') {
  363. $dsql->ExecuteNoneQuery("DELETE FROM `{$myrow['addtable']}` WHERE typeid IN ($tids);");
  364. }
  365. }
  366. //删除栏目配置信息
  367. $dsql->ExecuteNoneQuery("DELETE FROM `#@__channeltype` WHERE id='$id' ");
  368. //更新栏目缓存
  369. UpDateCatCache($dsql);
  370. ShowMsg("成功删除一个文档模型", "mychannel_main.php");
  371. exit();
  372. }
  373. } else if ($dopost == 'modifysearch') {
  374. if (!isset($step)) $step = 0;
  375. if (empty($step)) {
  376. $step = 1;
  377. $mid = intval($mid);
  378. $query = "SELECT mainfields, addonfields, template FROM `#@__advancedsearch` WHERE mid='$mid'";
  379. $searchinfo = $dsql->GetOne($query);
  380. if (!is_array($searchinfo)) {
  381. $searchinfo = array();
  382. $searchinfo['mainfields'] = $searchinfo['addonfields'] = $searchinfo['template'] = '';
  383. }
  384. $searchinfo['mainfields'] = explode(',', $searchinfo['mainfields']);
  385. $searchinfo['addonfields'] = explode(',', $searchinfo['addonfields']);
  386. $addonfieldsarr = array();
  387. foreach ($searchinfo['addonfields'] as $k) {
  388. $karr = explode(':', $k);
  389. $addonfieldsarr[] = $karr[0];
  390. }
  391. $template = $searchinfo['template'] == '' ? 'advancedsearch.htm' : $searchinfo['template'];
  392. $c1 = in_array('iscommend', $searchinfo['mainfields']) ? 'checked' : '';
  393. $c2 = in_array('typeid', $searchinfo['mainfields']) ? 'checked' : '';
  394. $c3 = in_array('writer', $searchinfo['mainfields']) ? 'checked' : '';
  395. $c4 = in_array('source', $searchinfo['mainfields']) ? 'checked' : '';
  396. $c5 = in_array('senddate', $searchinfo['mainfields']) ? 'checked' : '';
  397. $mainfields = '<label><input type="checkbox" name="mainfields[]" '.$c1.' value="iscommend"> 是否推荐</label> ';
  398. $mainfields .= '<label><input type="checkbox" name="mainfields[]" '.$c2.' value="typeid"> 栏目</label> ';
  399. $mainfields .= '<label><input type="checkbox" name="mainfields[]" '.$c3.' value="writer"> 作者</label> ';
  400. $mainfields .= '<label><input type="checkbox" name="mainfields[]" '.$c4.' value="source"> 来源</label> ';
  401. $mainfields .= '<label><input type="checkbox" name="mainfields[]" '.$c5.' value="senddate"> 发布时间</label> ';
  402. $query = "SELECT * FROM `#@__channeltype` WHERE id='$mid'";
  403. $channel = $dsql->GetOne($query);
  404. $searchtype = array('int', 'datetime', 'float', 'textdata', 'textchar', 'text', 'htmltext', 'multitext', 'select', 'radio', 'checkbox');
  405. $addonfields = '';
  406. $dtp = new DedeTagParse();
  407. $dtp->SetNameSpace("field", "<", ">");
  408. $dtp->LoadSource($channel['fieldset']);
  409. if ($channel['issystem'] < 0) {
  410. $checked = in_array('typeid', $addonfieldsarr) ? 'checked' : '';
  411. $addonfields .= '<label><input type="checkbox" name="addonfields[]" '.$checked.' value="typeid"> 栏目</label> ';
  412. $checked = in_array('senddate', $addonfieldsarr) ? 'checked' : '';
  413. $addonfields .= '<label><input type="checkbox" name="addonfields[]" '.$checked.' value="senddate"> 发布时间</label> ';
  414. }
  415. if (is_array($dtp->CTags) && !empty($dtp->CTags)) {
  416. foreach ($dtp->CTags as $ctag) {
  417. $datatype = $ctag->GetAtt('type');
  418. $value = $ctag->GetName();
  419. if ($channel['issystem'] < 0) {
  420. $_oo = array('channel', 'arcrank', 'title', 'senddate', 'mid', 'click', 'flag', 'litpic', 'userip', 'lastpost', 'scores', 'goodpost', 'badpost', 'endtime');
  421. if (in_array($value, $_oo)) continue;
  422. }
  423. $label = $ctag->GetAtt('itemname');
  424. if (in_array($datatype, $searchtype)) {
  425. $checked = in_array($value, $addonfieldsarr) ? 'checked' : '';
  426. $addonfields .= "<label><input type='checkbox' name='addonfields[]' value='$value' $checked> $label</label> ";
  427. }
  428. }
  429. }
  430. require_once(dirname(__FILE__)."/templets/mychannel_modifysearch.htm");
  431. } else if ($step == 1) {
  432. $query = "SELECT * FROM `#@__channeltype` WHERE id='$mid'";
  433. $channel = $dsql->GetOne($query);
  434. if (empty($addonfields)) {
  435. $addonfields = '';
  436. }
  437. $template = trim($template);
  438. $forms = "<form action=\"$cfg_cmspath/apps/advancedsearch.php\" method=\"post\">";
  439. $forms .= "<input type=\"hidden\" name=\"mid\" value=\"$mid\">";
  440. $forms .= "<input type=\"hidden\" name=\"dopost\" value=\"search\">";
  441. $forms .= "<label>关键词:<input type=\"text\" name=\"q\"></label><br>";
  442. $mainstring = '';
  443. if (!empty($mainfields) && is_array($mainfields)) {
  444. $mainstring = implode(',', $mainfields);
  445. foreach ($mainfields as $mainfield) {
  446. if ($mainfield == 'typeid') {
  447. require_once(DEDEINC."/typelink/typelink.class.php");
  448. $tl = new TypeLink(0);
  449. $typeOptions = $tl->GetOptionArray(0, 0, $mid);
  450. $forms .= "<select name=\"typeid\">\r\n";
  451. $forms .= "<option value=\"0\" selected>不限栏目</option>\r\n";
  452. $forms .= $typeOptions;
  453. $forms .= "</select><br>";
  454. $forms .= "<label><input type=\"checkbox\" name=\"includesons\" value=\"1\"> 包含子栏目</label><br>";
  455. } else if ($mainfield == 'iscommend') {
  456. $forms .= "<label><input type=\"checkbox\" name=\"iscommend\" value=\"1\"> 推荐</label><br>";
  457. } else if ($mainfield == 'writer') {
  458. $forms .= "<label>作者:<input type=\"text\" name=\"writer\" value=\"\"></label><br>";
  459. } else if ($mainfield == 'source') {
  460. $forms .= "<label>来源:<input type=\"text\" name=\"source\" value=\"\"></label><br>";
  461. } else if ($mainfield == 'senddate') {
  462. $forms .= "<label>开始时间:<input type=\"text\" name=\"startdate\" value=\"\"></label><br>";
  463. $forms .= "<label>结束时间:<input type=\"text\" name=\"enddate\" value=\"\"></label><br>";
  464. }
  465. }
  466. }
  467. $addonstring = '';
  468. $intarr = array('int', 'float');
  469. $textarr = array('textdata', 'textchar', 'text', 'htmltext', 'multitext');
  470. if ($channel['issystem'] < 0) {
  471. foreach ((array)$addonfields as $addonfield) {
  472. if ($addonfield == 'typeid') {
  473. require_once(DEDEINC."/typelink/typelink.class.php");
  474. $tl = new TypeLink(0);
  475. $typeOptions = $tl->GetOptionArray(0, 0, $mid);
  476. $forms .= "<select name=\"typeid\">\r\n";
  477. $forms .= "<option value=\"0\" selected>不限栏目</option>\r\n";
  478. $forms .= $typeOptions;
  479. $forms .= "</select><br>";
  480. $forms .= "<label><input type=\"checkbox\" name=\"includesons\" value=\"1\"> 包含子栏目</label><br>";
  481. $addonstring .= 'typeid:int,';
  482. } elseif ($addonfield == 'senddate') {
  483. $forms .= "<label>开始时间:<input type=\"text\" name=\"startdate\" value=\"\"></label><br>";
  484. $forms .= "<label>结束时间:<input type=\"text\" name=\"enddate\" value=\"\"></label><br>";
  485. $addonstring .= 'senddate:datetime,';
  486. }
  487. }
  488. }
  489. if (is_array($addonfields) && !empty($addonfields)) {
  490. $query = "SELECT * FROM `#@__channeltype` WHERE id='$mid'";
  491. $channel = $dsql->GetOne($query);
  492. $dtp = new DedeTagParse();
  493. $dtp->SetNameSpace("field", "<", ">");
  494. $dtp->LoadSource($channel['fieldset']);
  495. $fieldarr = $itemarr = $typearr = array();
  496. foreach ($dtp->CTags as $ctag) {
  497. foreach ($addonfields as $addonfield) {
  498. if ($ctag->GetName() == $addonfield) {
  499. if ($addonfield == 'typeid' || $addonfield == 'senddate') continue;
  500. $fieldarr[] = $addonfield;
  501. $itemarr[] = $ctag->GetAtt('itemname');
  502. $typearr[] = $ctag->GetAtt('type');
  503. $valuearr[] = $ctag->GetAtt('default');
  504. }
  505. }
  506. }
  507. foreach ($fieldarr as $k => $field) {
  508. $itemname = $itemarr[$k];
  509. $name = $field;
  510. $type = $typearr[$k];
  511. $tmp = $name.':'.$type;
  512. if (in_array($type, $intarr)) {
  513. $forms .= "$itemname:<input type=\"text\" name=\"start".$name."\" value=\"\"> 到 <input type=\"text\" name=\"end".$name."\" value=\"\"><br>";
  514. } else if (in_array($type, $textarr)) {
  515. $forms .= "$itemname:<input type=\"text\" name=\"$name\" value=\"\"><br>";
  516. } else if ($type == 'select') {
  517. $values = explode(',', $valuearr[$k]);
  518. if (is_array($values) && !empty($values)) {
  519. $forms .= "$itemname:<select name=\"$name\"><option value=\"\">不限</option>";
  520. foreach ($values as $value) {
  521. $forms .= "<option value=\"$value\">$value</option>";
  522. }
  523. $forms .= "</select><br>";
  524. }
  525. } else if ($type == 'radio') {
  526. $values = explode(',', $valuearr[$k]);
  527. if (is_array($values) && !empty($values)) {
  528. $forms .= "$itemname:<label><input type=\"radio\" name=\"".$name."\" value=\"\" checked> 不限</label><br>";
  529. foreach ($values as $value) {
  530. $forms .= "<label><input type=\"radio\" name=\"".$name."\" value=\"$value\"> $value</label>";
  531. }
  532. }
  533. } else if ($type == 'checkbox') {
  534. $values = explode(',', $valuearr[$k]);
  535. if (is_array($values) && !empty($values)) {
  536. $forms .= "$itemname:";
  537. foreach ($values as $value) {
  538. $forms .= "<label><input type=\"checkbox\" name=\"".$name."[]\" value=\"$value\"> $value</label><br>";
  539. }
  540. }
  541. } elseif ($type == 'datetime') {
  542. $forms .= "<label>开始时间:<input type=\"text\" name=\"startdate\" value=\"\"></label><br>";
  543. $forms .= "<label>结束时间:<input type=\"text\" name=\"enddate\" value=\"\"></label><br>";
  544. } else {
  545. $tmp = '';
  546. }
  547. $addonstring .= $tmp.',';
  548. }
  549. }
  550. $forms .= "<input type=\"submit\" name=\"submit\" value=\"开始搜索\" class=\"btn btn-success btn-sm\"></form>";
  551. $formssql = addslashes($forms);
  552. $query = "REPLACE INTO `#@__advancedsearch` (mid, maintable, mainfields, addontable, addonfields, forms, template) VALUES ('$mid','$maintable','$mainstring','$addontable','$addonstring','$formssql', '$template')";
  553. $dsql->ExecuteNoneQuery($query);
  554. $formshtml = dede_htmlspecialchars($forms);
  555. echo '<link rel="stylesheet" href="/static/web/css/bootstrap.min.css">
  556. <link rel="stylesheet" href="/static/web/css/admin.css">
  557. <link rel="stylesheet" href="/static/web/css/codemirror.css">
  558. <script src="/static/web/js/codemirror.js"></script>
  559. <script src="/static/web/js/mode/xml/xml.js"></script>
  560. <script src="/static/web/js/mode/javascript/javascript.js"></script>
  561. <script src="/static/web/js/mode/css/css.js"></script>
  562. <script src="/static/web/js/mode/htmlmixed/htmlmixed.js"></script>';
  563. echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$cfg_soft_lang\">";
  564. echo "<p>下面生成的网页表单,根据自己需求修改样式后粘贴到对应的模板中</p><textarea id='content' class='form-control'>$forms</textarea>";
  565. echo "<hr>";
  566. echo "<script>var editor = CodeMirror.fromTextArea(document.getElementById('content'), {
  567. lineNumbers: true,
  568. lineWrapping: true,
  569. mode: 'text/html',
  570. });</script>";
  571. echo $forms;
  572. }
  573. exit;
  574. }
  575. //删除自定义搜索
  576. else if ($dopost == 'del') {
  577. $mid = intval($mid);
  578. $dsql->ExecuteNoneQuery("DELETE FROM `#@__advancedsearch` WHERE mid = '$mid';");
  579. ShowMsg("成功删除一个自定义搜索", "mychannel_main.php");
  580. exit();
  581. }
  582. $row = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$id' ");
  583. require_once(DEDEADMIN."/templets/mychannel_edit.htm");
  584. ?>