admincp_article.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: admincp_article.php 33047 2013-04-12 08:46:56Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. $operation = in_array($operation, array('trash', 'tag')) ? $operation : 'list';
  12. loadcache('portalcategory');
  13. $category = $_G['cache']['portalcategory'];
  14. cpheader();
  15. shownav('portal', 'article');
  16. $searchctrl = '';
  17. if($operation == 'list') {
  18. $searchctrl = '<span style="float: right; padding-right: 40px;">'
  19. .'<a href="javascript:;" onclick="$(\'tb_search\').style.display=\'\';$(\'a_search_show\').style.display=\'none\';$(\'a_search_hide\').style.display=\'\';" id="a_search_show" style="display:none">'.cplang('show_search').'</a>'
  20. .'<a href="javascript:;" onclick="$(\'tb_search\').style.display=\'none\';$(\'a_search_show\').style.display=\'\';$(\'a_search_hide\').style.display=\'none\';" id="a_search_hide">'.cplang('hide_search').'</a>'
  21. .'</span>';
  22. }
  23. $catid = $_GET['catid'] = intval($_GET['catid']);
  24. showsubmenu('article', array(
  25. array('list', 'article&catid='.$catid, $operation == 'list'),
  26. array('article_trash', 'article&operation=trash&catid='.$catid, $operation == 'trash'),
  27. array('article_tag', 'article&operation=tag', $operation == 'tag'),
  28. array('article_add', 'portal.php?mod=portalcp&ac=article', false, 1, 1)
  29. ), $searchctrl);
  30. if($operation == 'tag') {
  31. showtips('article_tag_tip');
  32. if(submitcheck('articletagsubmit')) {
  33. C::t('common_setting')->update('article_tags', $_POST['tag']);
  34. updatecache('setting');
  35. cpmsg('update_articletag_succeed', 'action=article&operation=tag', 'succeed');
  36. }
  37. require_once libfile('function/portalcp');
  38. $tag_names = article_tagnames();
  39. showformheader('article&operation=tag');
  40. showtableheader('article_tag_setting');
  41. for($i=1; $i<=8; $i++) {
  42. showtablerow('', array('width=80', ''),
  43. array(lang('portalcp', 'article_tag').$i, "<input type=\"text\" class=\"txt\" name=\"tag[$i]\" value=\"$tag_names[$i]\" />"));
  44. }
  45. showsubmit('articletagsubmit', 'submit');
  46. showtablefooter();
  47. showformfooter();
  48. } elseif($operation == 'trash') {
  49. if(submitcheck('batchsubmit', true)) {
  50. $_POST['optype'] = empty($_POST['optype']) ? $_GET['optype'] : $_POST['optype'];
  51. if(empty($_POST['ids']) && $_POST['optype'] != 'clear') {
  52. cpmsg('article_choose_at_least_one_article', 'action=article&operation=trash', 'error');
  53. }
  54. if($_POST['optype'] == 'recover') {
  55. $inserts = $ids = $catids = array();
  56. foreach(C::t('portal_article_trash')->fetch_all($_POST['ids']) as $value) {
  57. $ids[] = intval($value['aid']);
  58. $article = dunserialize($value['content']);
  59. $catids[] = intval($article['catid']);
  60. $inserts[] = array (
  61. 'aid' => $article['aid'],
  62. 'catid' => $article['catid'],
  63. 'uid' => $article['uid'],
  64. 'username' => $article['username'],
  65. 'title' => $article['title'],
  66. 'url' => $article['url'],
  67. 'summary' => $article['summary'],
  68. 'pic' => $article['pic'],
  69. 'id' => $article['id'],
  70. 'idtype' => $article['idtype'],
  71. 'contents' => $article['contents'],
  72. 'dateline' => $article['dateline'],
  73. 'thumb' => $article['thumb'],
  74. 'remote' => $article['remote'],
  75. 'click1' => $article['click1'],
  76. 'click2' => $article['click2'],
  77. 'click3' => $article['click3'],
  78. 'click4' => $article['click4'],
  79. 'click5' => $article['click5'],
  80. 'click6' => $article['click6'],
  81. 'click7' => $article['click7'],
  82. 'click8' => $article['click8'],
  83. 'author' => $article['author'],
  84. 'from' => $article['from'],
  85. 'fromurl' => $article['fromurl'],
  86. 'bid' => $article['bid'],
  87. 'allowcomment' => $article['allowcomment'],
  88. 'tag' => $article['tag'],
  89. 'owncomment' => $article['owncomment'],
  90. 'status' => $article['status'],
  91. 'highlight' => $article['highlight'],
  92. 'showinnernav' => $article['showinnernav'],
  93. 'preaid' => $article['preaid'],
  94. 'nextaid' => $article['nextaid'],
  95. 'htmlmade' => $article['htmlmade'],
  96. 'htmlname' => $article['htmlname'],
  97. 'htmldir' => $article['htmldir'],
  98. );
  99. }
  100. if($inserts) {
  101. foreach($inserts as $data) {
  102. C::t('portal_article_title')->insert($data, 0, 1);
  103. }
  104. C::t('portal_article_trash')->delete($ids);
  105. }
  106. $catids = array_unique($catids);
  107. if($catids) {
  108. foreach($catids as $catid) {
  109. $cnt = C::t('portal_article_title')->fetch_count_for_cat($catid);
  110. C::t('portal_category')->update($catid, array('articles'=>dintval($cnt)));
  111. }
  112. }
  113. cpmsg('article_trash_recover_succeed', 'action=article&operation=trash', 'succeed');
  114. } elseif($_POST['optype'] == 'delete') {
  115. require_once libfile('function/delete');
  116. deletetrasharticle($_POST['ids']);
  117. cpmsg('article_trash_delete_succeed', 'action=article&operation=trash', 'succeed');
  118. } elseif($_POST['optype'] == 'clear') {
  119. $aids = array();
  120. foreach(C::t('portal_article_trash')->range(50) as $value) {
  121. $aids[$value['aid']] = $value['aid'];
  122. }
  123. if(!empty($aids)) {
  124. require_once libfile('function/delete');
  125. deletetrasharticle($aids);
  126. cpmsg('article_trash_is_clearing', 'action=article&operation=trash&optype=clear&batchsubmit=yes&formhash='.FORMHASH);
  127. } else {
  128. cpmsg('article_trash_is_empty', 'action=article');
  129. }
  130. } else {
  131. cpmsg('article_choose_at_least_one_operation', 'action=article&operation=trash', 'error');
  132. }
  133. } else {
  134. $perpage = 50;
  135. $start = ($page-1)*$perpage;
  136. $mpurl .= '&perpage='.$perpage;
  137. $perpages = array($perpage => ' selected');
  138. $mpurl = ADMINSCRIPT.'?mod=portal&action=article&operation='.$operation;
  139. showformheader('article&operation=trash');
  140. showtableheader('article_trash_list');
  141. showsubtitle(array('', 'article_title', 'article_category', 'article_username', 'article_dateline'));
  142. $multipage = '';
  143. $count = C::t('portal_article_trash')->count();
  144. if($count) {
  145. foreach(C::t('portal_article_trash')->range($start, $perpage) as $value) {
  146. $value = dunserialize($value['content']);
  147. showtablerow('', array('class="td25"', 'class=""', 'class="td28"'), array(
  148. "<input type=\"checkbox\" class=\"checkbox\" name=\"ids[]\" value=\"$value[aid]\">",
  149. $value[title],
  150. $category[$value['catid']]['catname'],
  151. "<a href=\"home.php?mod=space&uid=$value[uid]&do=profile\" target=\"_blank\">$value[username]</a>",
  152. dgmdate($value[dateline])
  153. ));
  154. }
  155. $multipage = multi($count, $perpage, $page, $mpurl);
  156. }
  157. $batchradio = '<input type="radio" name="optype" value="recover" id="op_recover" class="radio" /><label for="op_recover">'.cplang('article_trash_recover').'</label>&nbsp;&nbsp;';
  158. $batchradio .= '<input type="radio" name="optype" value="delete" id="op_delete" class="radio" /><label for="op_delete">'.cplang('article_trash_delete').'</label>&nbsp;&nbsp;';
  159. $batchradio .= '<input type="radio" name="optype" value="clear" id="op_clear" class="radio" style="display:none;"/><input type="hidden" name="batchsubmit" value="yes" />';
  160. showsubmit('', '', '', '<input type="checkbox" name="chkall" id="chkall" class="checkbox" onclick="checkAll(\'prefix\', this.form, \'ids\')" /><label for="chkall">'.cplang('select_all').'</label>&nbsp;&nbsp;'
  161. .$batchradio.'<input type="submit" class="btn" name="batchbutton" value="'.cplang('submit').'" />
  162. <input type="button" class="btn" name="clearbutton" value="'.cplang('article_clear_trash').'" onclick="if(confirm(\''.cplang('article_clear_trash_confirm').'?\')){this.form.optype[2].checked=\'checked\';this.form.submit();}"/>', $multipage);
  163. showtablefooter();
  164. showformfooter();
  165. }
  166. } else {
  167. if(submitcheck('articlesubmit')) {
  168. $perpage = intval($_GET['hiddenperpage']);
  169. $page = intval($_GET['hiddenpage']);
  170. $catid = intval($_GET['hiddencatid']);
  171. $articles = $catids = array();
  172. $aids = !empty($_GET['ids']) && is_array($_GET['ids']) ? $_GET['ids'] : array();
  173. if($aids) {
  174. $query = C::t('portal_article_title')->fetch_all($aids);
  175. foreach($query as $value) {
  176. $articles[$value['aid']] = array('aid' => $value['aid'], 'catid' => $value['catid']);
  177. $catids[] = intval($value['catid']);
  178. }
  179. }
  180. if(empty($articles)) {
  181. cpmsg('article_choose_at_least_one_article', 'action=article&catid='.$catid.'&perpage='.$perpage.'&page='.$page, 'error');
  182. }
  183. $aids = array_keys($articles);
  184. if($_POST['optype'] == 'trash') {
  185. require_once libfile('function/delete');
  186. deletearticle($aids, true);
  187. cpmsg('article_trash_succeed', 'action=article&catid='.$catid.'&perpage='.$perpage.'&page='.$page, 'succeed');
  188. } elseif($_POST['optype'] == 'move') {
  189. $tocatid = intval($_POST['tocatid']);
  190. $catids[] = $tocatid;
  191. $catids = array_merge($catids);
  192. C::t('portal_article_title')->update($aids, array('catid'=>$tocatid));
  193. foreach($catids as $catid) {
  194. $catid = intval($catid);
  195. $cnt = C::t('portal_article_title')->fetch_count_for_cat($catid);
  196. C::t('portal_category')->update($catid, array('articles'=>dintval($cnt)));
  197. }
  198. cpmsg('article_move_succeed', 'action=article&catid='.$catid.'&perpage='.$perpage.'&page='.$page, 'succeed');
  199. } else {
  200. cpmsg('article_choose_at_least_one_operation', 'action=article&catid='.$catid.'&perpage='.$perpage.'&page='.$page, 'error');
  201. }
  202. } else {
  203. include_once libfile('function/portalcp');
  204. $mpurl = ADMINSCRIPT.'?action=article&operation='.$operation;
  205. $intkeys = array('aid', 'uid');
  206. $strkeys = array();
  207. $randkeys = array();
  208. $likekeys = array('title', 'username');
  209. $results = getwheres($intkeys, $strkeys, $randkeys, $likekeys);
  210. foreach($likekeys as $k) {
  211. $_GET[$k] = dhtmlspecialchars($_GET[$k]);
  212. }
  213. $wherearr = $results['wherearr'];
  214. $mpurl .= '&'.implode('&', $results['urls']);
  215. if(!empty($_GET['catid'])) {
  216. $catid = intval($_GET['catid']);
  217. $mpurl .= '&catid='.$catid;
  218. $catids = category_get_childids('portal', $_GET['catid']);
  219. $catids[] = $_GET['catid'];
  220. $wherearr[] = 'catid IN ('.dimplode($catids).')';
  221. }
  222. if(!empty($_GET['tag'])) {
  223. $tag = article_make_tag($_GET['tag']);
  224. $wherearr[] = "(tag & '$tag' = '$tag')";
  225. foreach($_GET['tag'] as $k=>$v) {
  226. $mpurl .= "&tag[$k]=$v";
  227. }
  228. }
  229. $wheresql = empty($wherearr)?'1':implode(' AND ', $wherearr);
  230. $orders = getorders(array('dateline'), 'aid');
  231. $ordersql = $orders['sql'];
  232. if($orders['urls']) $mpurl .= '&'.implode('&', $orders['urls']);
  233. $orderby = array($_GET['orderby']=>' selected');
  234. $ordersc = array($_GET['ordersc']=>' selected');
  235. $perpage = empty($_GET['perpage'])?0:intval($_GET['perpage']);
  236. if(!in_array($perpage, array(10,20,50,100))) $perpage = 10;
  237. $categoryselect = category_showselect('portal', 'catid', true, $_GET['catid']);
  238. $searchlang = array();
  239. $keys = array('search', 'likesupport', 'resultsort', 'defaultsort', 'orderdesc', 'orderasc', 'perpage_10', 'perpage_20', 'perpage_50', 'perpage_100',
  240. 'article_dateline', 'article_id', 'article_title', 'article_uid', 'article_username', 'article_category', 'article_tag');
  241. foreach ($keys as $key) {
  242. $searchlang[$key] = cplang($key);
  243. }
  244. $articletagcheckbox = '';
  245. $article_tags = article_tagnames();
  246. foreach($article_tags as $k=>$v) {
  247. $checked = !empty($_GET['tag']) && !empty($_GET['tag'][$k]) ? 'checked="checked"' : '';
  248. $articletagcheckbox .= "<input type=\"checkbox\" class=\"checkbox\" id=\"tag_$k\" name=\"tag[$k]\" value=\"1\"$checked />";
  249. $articletagcheckbox .= "<label for=\"tag_$k\">$v</label>";
  250. }
  251. $start = ($page-1)*$perpage;
  252. $mpurl .= '&perpage='.$perpage;
  253. $perpages = array($perpage => ' selected');
  254. $adminscript = ADMINSCRIPT;
  255. echo <<<SEARCH
  256. <form method="get" autocomplete="off" action="$adminscript" id="tb_search">
  257. <div style="margin-top:8px;">
  258. <table cellspacing="3" cellpadding="3">
  259. <tr>
  260. <th>$searchlang[article_id]</th><td><input type="text" class="txt" name="aid" value="$_GET[aid]"></td>
  261. <th>$searchlang[article_title]*</th><td><input type="text" class="txt" name="title" value="$_GET[title]">*$searchlang[likesupport]</td>
  262. </tr>
  263. <tr>
  264. <th>$searchlang[article_uid]</th><td><input type="text" class="txt" name="uid" value="$_GET[uid]"></td>
  265. <th>$searchlang[article_username]*</th><td><input type="text" class="txt" name="username" value="$_GET[username]"></td>
  266. </tr>
  267. <tr>
  268. <th>$searchlang[article_category]</th><td>$categoryselect</td>
  269. <th>&nbsp;</th><td>&nbsp;</td>
  270. </tr>
  271. <tr>
  272. <th>$searchlang[article_tag]</th><td colspan="3">$articletagcheckbox</td>
  273. </tr>
  274. <tr>
  275. <th>$searchlang[resultsort]</th>
  276. <td colspan="3">
  277. <select name="orderby">
  278. <option value="">$searchlang[defaultsort]</option>
  279. <option value="dateline"$orderby[dateline]>$searchlang[article_dateline]</option>
  280. </select>
  281. <select name="ordersc">
  282. <option value="desc"$ordersc[desc]>$searchlang[orderdesc]</option>
  283. <option value="asc"$ordersc[asc]>$searchlang[orderasc]</option>
  284. </select>
  285. <select name="perpage">
  286. <option value="10"$perpages[10]>$searchlang[perpage_10]</option>
  287. <option value="20"$perpages[20]>$searchlang[perpage_20]</option>
  288. <option value="50"$perpages[50]>$searchlang[perpage_50]</option>
  289. <option value="100"$perpages[100]>$searchlang[perpage_100]</option>
  290. </select>
  291. <input type="hidden" name="action" value="article">
  292. <input type="submit" name="searchsubmit" value="$searchlang[search]" class="btn">
  293. </td>
  294. </tr>
  295. </table>
  296. </div>
  297. </form>
  298. <script src="static/js/makehtml.js?1" type="text/javascript"></script>
  299. SEARCH;
  300. $makehtmlflag = !empty($_G['setting']['makehtml']['flag']);
  301. showformheader('article&operation=list');
  302. showtableheader('article_list');
  303. $subtitle = array('', 'article_title', 'article_category', 'article_username', 'article_dateline');
  304. if($makehtmlflag) {
  305. $subtitle[] = 'HTML';
  306. }
  307. $subtitle[] = 'operation';
  308. showsubtitle($subtitle);
  309. $multipage = '';
  310. $count = C::t('portal_article_title')->fetch_all_by_sql($wheresql, '', 0, 0, 1);
  311. if($count) {
  312. $repairs = array();
  313. $query = C::t('portal_article_title')->fetch_all_by_sql($wheresql, $ordersql, $start, $perpage);
  314. foreach($query as $value) {
  315. $htmlname = $value['htmldir'].$value['htmlname'].'.'.$_G['setting']['makehtml']['extendname'];
  316. if($makehtmlflag && $value['htmlmade'] && !file_exists(DISCUZ_ROOT.'./'.$htmlname)) {
  317. $value['htmlmade'] = 0;
  318. $repairs[$value['aid']] = $value['aid'];
  319. }
  320. $tags = article_parse_tags($value['tag']);
  321. $taghtml = '';
  322. foreach($tags as $k=>$v) {
  323. if($v) {
  324. $taghtml .= ' [<a href="'.ADMINSCRIPT.'?action=article&operation=list&tag['.$k.']=1" style="color: #666">'.$article_tags[$k].'</a>] ';
  325. }
  326. }
  327. $tablerow = array(
  328. "<input type=\"checkbox\" class=\"checkbox\" name=\"ids[]\" value=\"$value[aid]\">",
  329. "<a href=\"portal.php?mod=view&aid=$value[aid]\" target=\"_blank\">$value[title]</a>".($taghtml ? $taghtml : ''),
  330. '<a href="'.ADMINSCRIPT.'?action=article&operation=list&catid='.$value['catid'].'">'.$category[$value['catid']]['catname'].'</a>',
  331. "<a href=\"".ADMINSCRIPT."?action=article&uid=$value[uid]\">$value[username]</a>",
  332. dgmdate($value[dateline]),
  333. );
  334. if($makehtmlflag) {
  335. $tablerow[] = "<span id='mkhtml_$value[aid]' style='color:".($value['htmlmade'] ? "blue;'>".cplang('setting_functions_makehtml_made') : "red;'>".cplang('setting_functions_makehtml_dismake'))."</span>";
  336. }
  337. $tablerow[] = ($makehtmlflag ? ($category[$value['catid']]['fullfoldername'] ? "<a href='javascript:void(0);' onclick=\"make_html('portal.php?mod=view&aid=$value[aid]', $('mkhtml_$value[aid]'))\">".cplang('setting_functions_makehtml_make')."</a>" : cplang('setting_functions_makehtml_make_has_no_foldername')) : '')
  338. ." <a href=\"portal.php?mod=portalcp&ac=article&aid=$value[aid]\" target=\"_blank\">".cplang('edit')."</a>";
  339. showtablerow('', array('class="td25"', 'width="480"', 'class="td28"'), $tablerow);
  340. }
  341. $multipage = multi($count, $perpage, $page, $mpurl);
  342. if($repairs) {
  343. C::t('portal_article_title')->repair_htmlmade($repairs);
  344. }
  345. }
  346. $optypehtml = ''
  347. .'<input type="hidden" name="hiddenpage" id="hiddenpage" value="'.$page.'"/><input type="hidden" name="hiddencatid" id="hiddencatid" value="'.$catid.'"/><input type="hidden" name="hiddenperpage" id="hiddenperpage" value="'.$perpage.'"/><input type="radio" name="optype" id="optype_trash" value="trash" class="radio" /><label for="optype_trash">'.cplang('article_optrash').'</label>&nbsp;&nbsp;'
  348. .'<input type="radio" name="optype" id="optype_move" value="move" class="radio" /><label for="optype_move">'.cplang('article_opmove').'</label> '
  349. .category_showselect('portal', 'tocatid', false)
  350. .'&nbsp;&nbsp;';
  351. showsubmit('', '', '', '<input type="checkbox" name="chkall" id="chkall" class="checkbox" onclick="checkAll(\'prefix\', this.form, \'ids\')" /><label for="chkall">'.cplang('select_all').'</label>&nbsp;&nbsp;'.$optypehtml.'<input type="submit" class="btn" name="articlesubmit" value="'.cplang('submit').'" />', $multipage);
  352. showtablefooter();
  353. showformfooter();
  354. }
  355. }
  356. function showcategoryrow($key, $type = '', $last = '') {
  357. global $category, $lang;
  358. $forum = $forums[$key];
  359. $showedforums[] = $key;
  360. if($last == '') {
  361. $return = '<tr class="hover"><td class="td25"><input type="text" class="txt" name="order['.$forum['fid'].']" value="'.$forum['displayorder'].'" /></td><td>';
  362. if($type == 'group') {
  363. $return .= '<div class="parentboard">';
  364. } elseif($type == '') {
  365. $return .= '<div class="board">';
  366. } elseif($type == 'sub') {
  367. $return .= '<div id="cb_'.$forum['fid'].'" class="childboard">';
  368. }
  369. $boardattr = '';
  370. if(!$forum['status'] || $forum['password'] || $forum['redirect']) {
  371. $boardattr = '<div class="boardattr">';
  372. $boardattr .= $forum['status'] ? '' : $lang['forums_admin_hidden'];
  373. $boardattr .= !$forum['password'] ? '' : ' '.$lang['forums_admin_password'];
  374. $boardattr .= !$forum['redirect'] ? '' : ' '.$lang['forums_admin_url'];
  375. $boardattr .= '</div>';
  376. }
  377. $return .= '<input type="text" class="txt" name="name['.$forum['fid'].']" value="'.dhtmlspecialchars($forum['name']).'" class="txt" />'.
  378. ($type == '' ? '<a href="###" onclick="addrowdirect = 1;addrow(this, 2, '.$forum['fid'].')" class="addchildboard">'.$lang['forums_admin_add_sub'].'</a>' : '').
  379. '</div>'.$boardattr.
  380. '</td><td>'.showforum_moderators($forum).'</td>
  381. <td><a href="'.ADMINSCRIPT.'?action=forums&operation=edit&fid='.$forum['fid'].'" title="'.$lang['forums_edit_comment'].'" class="act">'.$lang['edit'].'</a>'.
  382. ($type != 'group' ? '<a href="'.ADMINSCRIPT.'?action=forums&operation=copy&source='.$forum['fid'].'" title="'.$lang['forums_copy_comment'].'" class="act">'.$lang['forums_copy'].'</a>' : '').
  383. '<a href="'.ADMINSCRIPT.'?action=forums&operation=delete&fid='.$forum['fid'].'" title="'.$lang['forums_delete_comment'].'" class="act">'.$lang['delete'].'</a></td></tr>';
  384. } else {
  385. if($last == 'lastboard') {
  386. $return = '<tr><td></td><td colspan="3"><div class="lastboard"><a href="###" onclick="addrow(this, 1, '.$forum['fid'].')" class="addtr">'.$lang['forums_admin_add_forum'].'</a></div></td></tr>';
  387. } elseif($last == 'lastchildboard' && $type) {
  388. $return = '<script type="text/JavaScript">$(\'cb_'.$type.'\').className = \'lastchildboard\';</script>';
  389. } elseif($last == 'last') {
  390. $return = '<tr><td></td><td colspan="3"><div><a href="###" onclick="addrow(this, 0)" class="addtr">'.$lang['forums_admin_add_category'].'</a></div></td></tr>';
  391. }
  392. }
  393. return $return;
  394. }
  395. ?>