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

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