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

587 lines
31KB

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