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

759 lines
33KB

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