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

662 lines
31KB

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