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

598 lines
30KB

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