PageRenderTime 49ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/source/admincp/admincp_portalcategory.php

https://github.com/kuaileshike/upload
PHP | 1070 lines | 967 code | 97 blank | 6 comment | 270 complexity | 6cb6c7bdc070ef5b9c2223ea6e0517ee MD5 | raw file
  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_portalcategory.php 29386 2012-04-10 01:57:50Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. require_once libfile('function/portalcp');
  12. cpheader();
  13. $operation = in_array($operation, array('delete', 'move', 'perm', 'add', 'edit')) ? $operation : 'list';
  14. loadcache('portalcategory');
  15. $portalcategory = $_G['cache']['portalcategory'];
  16. if($operation == 'list') {
  17. if(empty($portalcategory) && C::t('portal_category')->count()) {
  18. updatecache('portalcategory');
  19. loadcache('portalcategory', true);
  20. $portalcategory = $_G['cache']['portalcategory'];
  21. }
  22. if(!submitcheck('editsubmit')) {
  23. shownav('portal', 'portalcategory');
  24. showsubmenu('portalcategory', array(
  25. array('list', 'portalcategory', 1)
  26. ));
  27. $tdstyle = array('width="25"', 'width="60"', '', 'width="45"', 'width="55"', 'width="30"', 'width="30"', 'width="30"', 'width="185"', 'width="100"');
  28. showformheader('portalcategory');
  29. echo '<div style="height:30px;line-height:30px;"><a href="javascript:;" onclick="show_all()">'.cplang('show_all').'</a> | <a href="javascript:;" onclick="hide_all()">'.cplang('hide_all').'</a> <input type="text" id="srchforumipt" class="txt" /> <input type="submit" class="btn" value="'.cplang('search').'" onclick="return srchforum()" /></div>';
  30. showtableheader('', '', 'id="portalcategory_header" style="min-width:900px;*width:900px;"');
  31. showsubtitle(array('', '', 'portalcategory_name', 'portalcategory_articles', 'portalcategory_allowpublish', 'portalcategory_allowcomment', 'portalcategory_is_closed', 'setindex', 'operation', 'portalcategory_article_op'), 'header tbm', $tdstyle);
  32. showtablefooter();
  33. echo '<script type="text/javascript">floatbottom(\'portalcategory_header\');</script>';
  34. showtableheader('', '', 'style="min-width:900px;*width:900px;"');
  35. showsubtitle(array('', '', 'portalcategory_name', 'portalcategory_articles', 'portalcategory_allowpublish', 'portalcategory_allowcomment', 'portalcategory_is_closed', 'setindex', 'operation', 'portalcategory_article_op'), 'header', $tdstyle);
  36. foreach ($portalcategory as $key=>$value) {
  37. if($value['level'] == 0) {
  38. echo showcategoryrow($key, 0, '');
  39. }
  40. }
  41. echo '<tbody><tr><td>&nbsp;</td><td colspan="6"><div><a class="addtr" href="'.ADMINSCRIPT.'?action=portalcategory&operation=add&upid=0">'.cplang('portalcategory_addcategory').'</a></div></td><td colspan="3">&nbsp;</td></tr></tbody>';
  42. showsubmit('editsubmit');
  43. showtablefooter();
  44. showformfooter();
  45. $langs = array();
  46. $keys = array('portalcategory_addcategory', 'portalcategory_addsubcategory', 'portalcategory_addthirdcategory');
  47. foreach ($keys as $key) {
  48. $langs[$key] = cplang($key);
  49. }
  50. echo <<<SCRIPT
  51. <script type="text/Javascript">
  52. var rowtypedata = [
  53. [[1,'', ''], [4, '<div class="parentboard"><input type="text" class="txt" value="$lang[portalcategory_addcategory]" name="newname[{1}][]"/></div>']],
  54. [[1,'<input type="text" class="txt" name="neworder[{1}][]" value="0" />', 'td25'], [4, '<div class="board"><input type="text" class="txt" value="$lang[portalcategory_addsubcategory]" name="newname[{1}][]"/> <input type="checkbox" name="newinheritance[{1}][]" value="1" checked>$lang[portalcategory_inheritance]</div>']],
  55. [[1,'<input type="text" class="txt" name="neworder[{1}][]" value="0" />', 'td25'], [4, '<div class="childboard"><input type="text" class="txt" value="$lang[portalcategory_addthirdcategory]" name="newname[{1}][]"/> <input type="checkbox" name="newinheritance[{1}][]" value="1" checked>$lang[portalcategory_inheritance]</div>']],
  56. ];
  57. </script>
  58. SCRIPT;
  59. } else {
  60. $cachearr = array('portalcategory');
  61. if($_POST['name']) {
  62. $openarr = $closearr = array();
  63. foreach($_POST['name'] as $key=>$value) {
  64. $sets = array();
  65. $value = trim($value);
  66. if($portalcategory[$key] && $portalcategory[$key]['catname'] != $value) {
  67. $sets['catname'] = $value;
  68. }
  69. if($portalcategory[$key] && $portalcategory[$key]['displayorder'] != $_POST['neworder'][$key]) {
  70. $sets['displayorder'] = $_POST['neworder'][$key];
  71. }
  72. if($sets) {
  73. C::t('portal_category')->update($key, $sets);
  74. C::t('common_diy_data')->update('portal/list_'.$key, getdiydirectory($portalcategory[$key]['primaltplname']), array('name'=>$value));
  75. C::t('common_diy_data')->update('portal/view_'.$key, getdiydirectory($portalcategory[$key]['articleprimaltplname']), array('name'=>$value));
  76. $cachearr[] = 'diytemplatename';
  77. }
  78. }
  79. }
  80. if($_GET['newsetindex']) {
  81. C::t('common_setting')->update('defaultindex', $portalcategory[$_GET['newsetindex']]['caturl']);
  82. $cachearr[] = 'setting';
  83. }
  84. include_once libfile('function/cache');
  85. updatecache($cachearr);
  86. cpmsg('portalcategory_update_succeed', 'action=portalcategory', 'succeed');
  87. }
  88. } elseif($operation == 'perm') {
  89. $catid = intval($_GET['catid']);
  90. if(!submitcheck('permsubmit')) {
  91. $category = C::t('portal_category')->fetch($catid);
  92. shownav('portal', 'portalcategory');
  93. $upcat = $category['upid'] ? ' - <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=perm&catid='.$category['upid'].'">'.$portalcategory[$category['upid']]['catname'].'</a> ' : '';
  94. showsubmenu('<a href="'.ADMINSCRIPT.'?action=portalcategory">'.cplang('portalcategory_perm_edit').'</a>'.$upcat.' - '.$category['catname']);
  95. showtips('portalcategory_article_perm_tips');
  96. showformheader("portalcategory&operation=perm&catid=$catid");
  97. showtableheader('', 'fixpadding');
  98. $inherited_checked = !$category['notinheritedarticle'] ? 'checked' : '';
  99. if($portalcategory[$catid]['level'])showsubtitle(array('','<input class="checkbox" type="checkbox" name="inherited" value="1" '.$inherited_checked.'/>'.cplang('portalcategory_inheritance'),'',''));
  100. showsubtitle(array('', 'username',
  101. '<input class="checkbox" type="checkbox" name="chkallpublish" onclick="checkAll(\'prefix\', this.form, \'publish\', \'chkallpublish\')" id="chkallpublish" /><label for="chkallpublish">'.cplang('portalcategory_perm_publish').'</label>',
  102. '<input class="checkbox" type="checkbox" name="chkallmanage" onclick="checkAll(\'prefix\', this.form, \'manage\', \'chkallmanage\')" id="chkallmanage" /><label for="chkallmanage">'.cplang('portalcategory_perm_manage').'</label>',
  103. 'block_perm_inherited'
  104. ));
  105. $line = '&minus;';
  106. $permissions = C::t('portal_category_permission')->fetch_all_by_catid($catid);
  107. $members = C::t('common_member')->fetch_all(array_keys($permissions));
  108. foreach($permissions as $uid => $value) {
  109. $value = array_merge($value, $members[$uid]);
  110. if(!empty($value['inheritedcatid'])) {
  111. showtablerow('', array('class="td25"'), array(
  112. "",
  113. "$value[username]",
  114. $value['allowpublish'] ? '&radic;' : $line,
  115. $value['allowmanage'] ? '&radic;' : $line,
  116. '<a href="'.ADMINSCRIPT.'?action=portalcategory&operation=perm&catid='.$value['inheritedcatid'].'">'.$portalcategory[$value['inheritedcatid']]['catname'].'</a>',
  117. ));
  118. } else {
  119. showtablerow('', array('class="td25"'), array(
  120. "<input type=\"checkbox\" class=\"checkbox\" name=\"delete[$value[uid]]\" value=\"$value[uid]\" /><input type=\"hidden\" name=\"perm[$value[uid]]\" value=\"$value[catid]\" />
  121. <input type=\"hidden\" name=\"perm[$value[uid]][allowpublish]\" value=\"$value[allowpublish]\" />
  122. <input type=\"hidden\" name=\"perm[$value[uid]][allowmanage]\" value=\"$value[allowmanage]\" />",
  123. "$value[username]",
  124. "<input type=\"checkbox\" class=\"checkbox\" name=\"allowpublish[$value[uid]]\" value=\"1\" ".($value['allowpublish'] ? 'checked' : '').' />',
  125. "<input type=\"checkbox\" class=\"checkbox\" name=\"allowmanage[$value[uid]]\" value=\"1\" ".($value['allowmanage'] ? 'checked' : '').' />',
  126. $line,
  127. ));
  128. }
  129. }
  130. showtablerow('', array('class="td25"'), array(
  131. cplang('add_new'),
  132. '<input type="text" class="txt" name="newuser" value="" size="20" />',
  133. '<input type="checkbox" class="checkbox" name="newpublish" value="1" />',
  134. '<input type="checkbox" class="checkbox" name="newmanage" value="1" />',
  135. '',
  136. ));
  137. showsubmit('permsubmit', 'submit', 'del');
  138. showtablefooter();
  139. showformfooter();
  140. } else {
  141. $users = array();
  142. if(is_array($_GET['perm'])) {
  143. foreach($_GET['perm'] as $uid => $value) {
  144. if(empty($_GET['delete']) || !in_array($uid, $_GET['delete'])) {
  145. $user = array();
  146. $user['allowpublish'] = $_GET['allowpublish'][$uid] ? 1 : 0;
  147. $user['allowmanage'] = $_GET['allowmanage'][$uid] ? 1 : 0;
  148. if($value['allowpublish'] != $user['allowpublish'] || $value['allowmanage'] != $user['allowmanage']) {
  149. $user['uid'] = intval($uid);
  150. $users[] = $user;
  151. }
  152. }
  153. }
  154. }
  155. if(!empty($_GET['newuser'])) {
  156. $newuid = C::t('common_member')->fetch_uid_by_username($_GET['newuser']);
  157. if($newuid) {
  158. $user['uid'] = $newuid;
  159. $user['allowpublish'] = $_GET['newpublish'] ? 1 : 0;
  160. $user['allowmanage'] = $_GET['newmanage'] ? 1 : 0;
  161. $users[$user['uid']] = $user;
  162. } else {
  163. cpmsg_error($_GET['newuser'].cplang('portalcategory_has_no_allowauthorizedarticle'));
  164. }
  165. }
  166. require_once libfile('class/portalcategory');
  167. $categorypermsission = & portal_category::instance();
  168. if(!empty($users)) {
  169. $categorypermsission->add_users_perm($catid, $users);
  170. }
  171. if(!empty($_GET['delete'])) {
  172. $categorypermsission->delete_users_perm($catid, $_GET['delete']);
  173. }
  174. $notinherited = !$_POST['inherited'] ? '1' : '0';
  175. if($notinherited != $portalcategory[$catid]['notinheritedarticle']) {
  176. if($notinherited) {
  177. $categorypermsission->delete_inherited_perm_by_catid($catid, $portalcategory[$catid]['upid']);
  178. } else {
  179. $categorypermsission->remake_inherited_perm($catid);
  180. }
  181. C::t('portal_category')->update($catid, array('notinheritedarticle'=>$notinherited));
  182. }
  183. include_once libfile('function/cache');
  184. updatecache('portalcategory');
  185. cpmsg('portalcategory_perm_update_succeed', "action=portalcategory&operation=perm&catid=$catid", 'succeed');
  186. }
  187. } elseif($operation == 'delete') {
  188. $_GET['catid'] = max(0, intval($_GET['catid']));
  189. if(!$_GET['catid'] || !$portalcategory[$_GET['catid']]) {
  190. cpmsg('portalcategory_catgory_not_found', '', 'error');
  191. }
  192. $catechildren = $portalcategory[$_GET['catid']]['children'];
  193. include_once libfile('function/cache');
  194. if(!submitcheck('deletesubmit')) {
  195. $article_count = C::t('portal_article_title')->fetch_count_for_cat($_GET['catid']);
  196. if(!$article_count && empty($catechildren)) {
  197. if($portalcategory[$_GET['catid']]['foldername']) delportalcategoryfolder($_GET['catid']);
  198. deleteportalcategory($_GET['catid']);
  199. updatecache(array('portalcategory','diytemplatename'));
  200. cpmsg('portalcategory_delete_succeed', 'action=portalcategory', 'succeed');
  201. }
  202. shownav('portal', 'portalcategory');
  203. showsubmenu('portalcategory', array(
  204. array('list', 'portalcategory', 0),
  205. array('delete', 'portalcategory&operation=delete&catid='.$_GET['catid'], 1)
  206. ));
  207. showformheader('portalcategory&operation=delete&catid='.$_GET['catid']);
  208. showtableheader();
  209. if($portalcategory[$_GET[catid]]['children']) {
  210. showsetting('portalcategory_subcategory_moveto', '', '',
  211. '<input type="radio" name="subcat_op" value="trash" id="subcat_op_trash" checked="checked" />'.
  212. '<label for="subcat_op_trash" />'.cplang('portalcategory_subcategory_moveto_trash').'</label>'.
  213. '<input type="radio" name="subcat_op" value="parent" id="subcat_op_parent" checked="checked" />'.
  214. '<label for="subcat_op_parent" />'.cplang('portalcategory_subcategory_moveto_parent').'</label>'
  215. );
  216. }
  217. include_once libfile('function/portalcp');
  218. echo "<tr><td colspan=\"2\" class=\"td27\">".cplang('portalcategory_article').":</td></tr>
  219. <tr class=\"noborder\">
  220. <td class=\"vtop rowform\">
  221. <ul class=\"nofloat\" onmouseover=\"altStyle(this);\">
  222. <li class=\"checked\"><input class=\"radio\" type=\"radio\" name=\"article_op\" value=\"move\" checked />&nbsp;".cplang('portalcategory_article_moveto')."&nbsp;&nbsp;&nbsp;".category_showselect('portal', 'tocatid', false, $portalcategory[$_GET['catid']]['upid'])."</li>
  223. <li><input class=\"radio\" type=\"radio\" name=\"article_op\" value=\"delete\" />&nbsp;".cplang('portalcategory_article_delete')."</li>
  224. </ul></td>
  225. <td class=\"vtop tips2\"></td>
  226. </tr>";
  227. showsubmit('deletesubmit', 'portalcategory_delete');
  228. showtablefooter();
  229. showformfooter();
  230. } else {
  231. if($_POST['article_op'] == 'delete') {
  232. if(!$_GET['confirmed']) {
  233. cpmsg('portal_delete_confirm', "action=portalcategory&operation=delete&catid=$_GET[catid]", 'form', array(),
  234. '<input type="hidden" class="btn" id="deletesubmit" name="deletesubmit" value="1" /><input type="hidden" class="btn" id="subcat_op" name="subcat_op" value="'.$_POST[subcat_op].'" />
  235. <input type="hidden" class="btn" id="article_op" name="article_op" value="delete" /><input type="hidden" class="btn" id="tocatid" name="tocatid" value="'.$_POST[tocatid].'" />');
  236. }
  237. }
  238. if($_POST['article_op'] == 'move') {
  239. if($_POST['tocatid'] == $_GET['catid'] || empty($portalcategory[$_POST['tocatid']])) {
  240. cpmsg('portalcategory_move_category_failed', 'action=portalcategory', 'error');
  241. }
  242. }
  243. $delids = array($_GET['catid']);
  244. $updatecategoryfile = array();
  245. if($catechildren) {
  246. if($_POST['subcat_op'] == 'parent') {
  247. $upid = intval($portalcategory[$_GET['catid']]['upid']);
  248. if(!empty($portalcategory[$upid]['foldername']) || ($portalcategory[$_GET['catid']]['level'] == '0' && $portalcategory[$_GET['catid']]['foldername'])) {
  249. $parentdir = DISCUZ_ROOT.'/'.getportalcategoryfulldir($upid);
  250. foreach($catechildren as $subcatid) {
  251. if($portalcategory[$subcatid]['foldername']) {
  252. $olddir = DISCUZ_ROOT.'/'.getportalcategoryfulldir($subcatid);
  253. rename($olddir, $parentdir.$portalcategory[$subcatid]['foldername']);
  254. $updatecategoryfile[] = $subcatid;
  255. }
  256. }
  257. }
  258. C::t('portal_category')->update($catechildren, array('upid' => $upid));
  259. require_once libfile('class/blockpermission');
  260. require_once libfile('class/portalcategory');
  261. $tplpermission = & template_permission::instance();
  262. $tplpermission->delete_perm_by_inheritedtpl('portal/list_'.$_GET['catid']);
  263. $categorypermission = & portal_category::instance();
  264. $categorypermission->delete_perm_by_inheritedcatid($_GET['catid']);
  265. } else {
  266. $delids = array_merge($delids, $catechildren);
  267. foreach ($catechildren as $id) {
  268. $value = $portalcategory[$id];
  269. if($value['children']) {
  270. $delids = array_merge($delids, $value['children']);
  271. }
  272. }
  273. if($_POST['article_op'] == 'move') {
  274. if(!$portalcategory[$_POST['tocatid']] || in_array($_POST['tocatid'], $delids)) {
  275. cpmsg('portalcategory_move_category_failed', 'action=portalcategory', 'error');
  276. }
  277. }
  278. }
  279. }
  280. if($delids) {
  281. deleteportalcategory($delids);
  282. if($_POST['article_op'] == 'delete') {
  283. require_once libfile('function/delete');
  284. $aidarr = array();
  285. $query = C::t('portal_article_title')->fetch_all_for_cat($delids);
  286. foreach($query as $value) {
  287. $aidarr[] = $value['aid'];
  288. }
  289. if($aidarr) {
  290. deletearticle($aidarr, '0');
  291. }
  292. } else {
  293. C::t('portal_article_title')->update($delids, array('catid'=>$_POST['tocatid']));
  294. $num = C::t('portal_article_title')->fetch_count_for_cat($_POST['tocatid']);
  295. C::t('portal_category')->update($_POST['tocatid'], array('articles'=>dintval($num)));
  296. }
  297. }
  298. if($portalcategory[$_GET['catid']]['foldername']) delportalcategoryfolder($_GET['catid']);
  299. updatecache(array('portalcategory','diytemplatename'));
  300. loadcache('portalcategory', true);
  301. remakecategoryfile($updatecategoryfile);
  302. cpmsg('portalcategory_delete_succeed', 'action=portalcategory', 'succeed');
  303. }
  304. } elseif($operation == 'move') {
  305. $_GET['catid'] = intval($_GET['catid']);
  306. if(!$_GET['catid'] || !$portalcategory[$_GET['catid']]) {
  307. cpmsg('portalcategory_catgory_not_found', '', 'error');
  308. }
  309. if(!submitcheck('movesubmit')) {
  310. $article_count = C::t('portal_article_title')->fetch_count_for_cat($_GET['catid']);
  311. if(!$article_count) {
  312. cpmsg('portalcategory_move_empty_error', 'action=portalcategory', 'succeed');
  313. }
  314. shownav('portal', 'portalcategory');
  315. showsubmenu('portalcategory', array(
  316. array('list', 'portalcategory', 0),
  317. array('portalcategory_move', 'portalcategory&operation=move&catid='.$_GET['catid'], 1)
  318. ));
  319. showformheader('portalcategory&operation=move&catid='.$_GET['catid']);
  320. showtableheader();
  321. include_once libfile('function/portalcp');
  322. showsetting('portalcategory_article_moveto', '', '', category_showselect('portal', 'tocatid', false, $portalcategory[$_GET['catid']]['upid']));
  323. showsubmit('movesubmit', 'portalcategory_move');
  324. showtablefooter();
  325. showformfooter();
  326. } else {
  327. if($_POST['tocatid'] == $_GET['catid'] || empty($portalcategory[$_POST['tocatid']])) {
  328. cpmsg('portalcategory_move_category_failed', 'action=portalcategory', 'error');
  329. }
  330. C::t('portal_article_title')->update_for_cat($_GET['catid'], array('catid' => $_POST['tocatid']));
  331. C::t('portal_category')->update($_GET['catid'], array('articles'=>0));
  332. $num = C::t('portal_article_title')->fetch_count_for_cat($_POST['tocatid']);
  333. C::t('portal_category')->update($_POST['tocatid'], array('articles'=>$num));
  334. updatecache('portalcategory');
  335. cpmsg('portalcategory_move_succeed', 'action=portalcategory', 'succeed');
  336. }
  337. } elseif($operation == 'edit' || $operation == 'add') {
  338. $_GET['catid'] = intval($_GET['catid']);
  339. if($_GET['catid'] && !$portalcategory[$_GET['catid']]) {
  340. cpmsg('portalcategory_catgory_not_found', '', 'error');
  341. }
  342. $cate = $_GET['catid'] ? $portalcategory[$_GET['catid']] : array();
  343. if($operation == 'add') {
  344. $_GET['upid'] = intval($_GET['upid']);
  345. if($_GET['upid']) {
  346. $cate['level'] = $portalcategory[$_GET['upid']] ? $portalcategory[$_GET['upid']]['level']+1 : 0;
  347. $cate['upid'] = intval($_GET['upid']);
  348. } else {
  349. $cate['level'] = 0;
  350. $cate['upid'] = 0;
  351. }
  352. $cate['displayorder'] = 0;
  353. $cate['closed'] = 1;
  354. }
  355. @include_once DISCUZ_ROOT.'./data/cache/cache_domain.php';
  356. $channeldomain = isset($rootdomain['channel']) && $rootdomain['channel'] ? $rootdomain['channel'] : array();
  357. if(!submitcheck('detailsubmit')) {
  358. shownav('portal', 'portalcategory');
  359. $url = 'portalcategory&operation='.$operation.($operation == 'add' ? '&upid='.$_GET['upid'] : '&catid='.$_GET['catid']);
  360. showsubmenu(cplang('portalcategory_detail').($cate['catname'] ? ' - '.$cate['catname'] : ''), array(
  361. array('list', 'portalcategory', 0),
  362. array('edit', $url, 1)
  363. ));
  364. showformheader($url);
  365. showtableheader();
  366. $catemsg = '';
  367. if($cate['username']) $catemsg .= $lang['portalcategory_username'].' '.$cate['username'];
  368. if($cate['dateline']) $catemsg .= ' '.$lang['portalcategory_dateline'].' '.dgmdate($cate['dateline'],'Y-m-d m:i:s');
  369. if($cate['upid']) $catemsg .= ' '.$lang['portalcategory_upname'].': <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=edit&catid='.$cate['upid'].'">'.$portalcategory[$cate['upid']]['catname'].'</a>';
  370. if($catemsg) showtitle($catemsg);
  371. showsetting('portalcategory_catname', 'catname', html_entity_decode($cate['catname']), 'text');
  372. showsetting('display_order', 'displayorder', $cate['displayorder'], 'text');
  373. showsetting('portalcategory_foldername', 'foldername', $cate['foldername'], 'text');
  374. showsetting('portalcategory_url', 'url', $cate['url'], 'text');
  375. showsetting('portalcategory_perpage', 'perpage', $cate['perpage'] ? $cate['perpage'] : 15, 'text');
  376. showsetting('portalcategory_maxpages', 'maxpages', $cate['maxpages'] ? $cate['maxpages'] : 1000, 'text');
  377. showportalprimaltemplate($cate['primaltplname'], 'list');
  378. showportalprimaltemplate($cate['articleprimaltplname'], 'view');
  379. showsetting('portalcategory_allowpublish', 'allowpublish', $cate['disallowpublish'] ? 0 : 1, 'radio');
  380. showsetting('portalcategory_notshowarticlesummay', 'notshowarticlesummay', $cate['notshowarticlesummay'] ? 0 : 1, 'radio');
  381. showsetting('portalcategory_allowcomment', 'allowcomment', $cate['allowcomment'], 'radio');
  382. if($cate['level']) {
  383. showsetting('portalcategory_inheritancearticle', 'inheritancearticle', !$cate['notinheritedarticle'] ? '1' : '0', 'radio');
  384. showsetting('portalcategory_inheritanceblock', 'inheritanceblock', !$cate['notinheritedblock'] ? '1' : '0', 'radio');
  385. }
  386. showsetting('portalcategory_is_closed', 'closed', $cate['closed'] ? 0 : 1, 'radio');
  387. if($cate['level'] != 2) showsetting('portalcategory_shownav', 'shownav', $cate['shownav'], 'radio');
  388. $setindex = !empty($_G['setting']['defaultindex']) && $_G['setting']['defaultindex'] == $cate['caturl'] ? 1 : 0;
  389. showsetting('setindex', 'setindex', $setindex, 'radio');
  390. if($cate['level'] == 0) {
  391. if(!empty($_G['setting']['domain']['root']['channel'])) {
  392. showsetting('forums_edit_extend_domain', '', '', 'http://<input type="text" class="txt" name="domain" class="txt" value="'.$cate['domain'].'" style="width:100px; margin-right:0px;" >.'.$_G['setting']['domain']['root']['channel']);
  393. } else {
  394. showsetting('forums_edit_extend_domain', 'domain', '', 'text', 'disabled');
  395. }
  396. }
  397. showtablefooter();
  398. showtips('setting_seo_portal_tips', 'tips', true, 'setseotips');
  399. showtableheader();
  400. showsetting('portalcategory_seotitle', 'seotitle', $cate['seotitle'], 'text');
  401. showsetting('portalcategory_keyword', 'keyword', $cate['keyword'], 'text');
  402. showsetting('portalcategory_summary', 'description', $cate['description'], 'textarea');
  403. showsubmit('detailsubmit');
  404. if($operation == 'add') showsetting('', '', '', '<input type="hidden" name="level" value="'.$cate['level'].'" />');
  405. showtablefooter();
  406. showformfooter();
  407. } else {
  408. require_once libfile('function/portalcp');
  409. $domain = $_GET['domain'] ? $_GET['domain'] : '';
  410. $_GET['closed'] = intval($_GET['closed']) ? 0 : 1;
  411. $_GET['catname'] = trim($_GET['catname']);
  412. $foldername = trim($_GET['foldername']);
  413. $oldsetindex = !empty($_G['setting']['defaultindex']) && $_G['setting']['defaultindex'] == $cate['caturl'] ? 1 : 0;
  414. $perpage = intval($_GET['perpage']);
  415. $maxpages = intval($_GET['maxpages']);
  416. $perpage = empty($perpage) ? 15 : $perpage;
  417. $maxpages = empty($maxpages) ? 1000 : $maxpages;
  418. if($_GET['catid'] && !empty($cate['domain'])) {
  419. require_once libfile('function/delete');
  420. deletedomain($_GET['catid'], 'channel');
  421. }
  422. if(!empty($domain)) {
  423. require_once libfile('function/domain');
  424. domaincheck($domain, $_G['setting']['domain']['root']['channel'], 1);
  425. }
  426. $updatecategoryfile = array();
  427. $editcat = array(
  428. 'catname' => $_GET['catname'],
  429. 'allowcomment'=>$_GET['allowcomment'],
  430. 'url' => $_GET['url'],
  431. 'closed' => $_GET['closed'],
  432. 'seotitle' => $_GET['seotitle'],
  433. 'keyword' => $_GET['keyword'],
  434. 'description' => $_GET['description'],
  435. 'displayorder' => intval($_GET['displayorder']),
  436. 'notinheritedarticle' => $_GET['inheritancearticle'] ? '0' : '1',
  437. 'notinheritedblock' => $_GET['inheritanceblock'] ? '0' : '1',
  438. 'disallowpublish' => $_GET['allowpublish'] ? '0' : '1',
  439. 'notshowarticlesummay' => $_GET['notshowarticlesummay'] ? '0' : '1',
  440. 'perpage' => $perpage,
  441. 'maxpages' => $maxpages,
  442. );
  443. $dir = '';
  444. if(!empty($foldername)) {
  445. $oldfoldername = empty($_GET['catid']) ? '' : $portalcategory[$_GET['catid']]['foldername'];
  446. preg_match_all('/[^\w\d\_]/',$foldername,$re);
  447. if(!empty($re[0])) {
  448. cpmsg(cplang('portalcategory_foldername_rename_error').','.cplang('return'), NULL, 'error');
  449. }
  450. $parentdir = getportalcategoryfulldir($cate['upid']);
  451. if($parentdir === false) cpmsg(cplang('portalcategory_parentfoldername_empty').','.cplang('return'), NULL, 'error');
  452. if($foldername == $oldfoldername) {
  453. $dir = $parentdir.$foldername;
  454. } elseif(is_dir(DISCUZ_ROOT.'./'.$parentdir.$foldername)) {
  455. cpmsg(cplang('portalcategory_foldername_duplicate').','.cplang('return'), NULL, 'error');
  456. } elseif ($portalcategory[$_GET['catid']]['foldername']) {
  457. $r = rename(DISCUZ_ROOT.'./'.$parentdir.$portalcategory[$_GET['catid']]['foldername'], DISCUZ_ROOT.'./'.$parentdir.$foldername);
  458. if($r) {
  459. $updatecategoryfile[] = $_GET['catid'];
  460. $editcat['foldername'] = $foldername;
  461. } else {
  462. cpmsg(cplang('portalcategory_foldername_rename_error').','.cplang('return'), NULL, 'error');
  463. }
  464. } elseif (empty($portalcategory[$_GET['catid']]['foldername'])) {
  465. $dir = $parentdir.$foldername;
  466. $editcat['foldername'] = $foldername;
  467. }
  468. } elseif(empty($foldername) && $portalcategory[$_GET['catid']]['foldername']) {
  469. delportalcategoryfolder($_GET['catid']);
  470. $editcat['foldername'] = '';
  471. }
  472. $primaltplname = $viewprimaltplname = '';
  473. if(!empty($_GET['listprimaltplname'])) {
  474. $primaltplname = $_GET['listprimaltplname'];
  475. if(!isset($_GET['signs']['list'][dsign($primaltplname)])) {
  476. cpmsg(cplang('diy_sign_invalid').','.cplang('return'), NULL, 'error');
  477. }
  478. $checktpl = checkprimaltpl($primaltplname);
  479. if($checktpl !== true) {
  480. cpmsg(cplang($checktpl).','.cplang('return'), NULL, 'error');
  481. }
  482. }
  483. if(empty($_GET['viewprimaltplname'])) {
  484. $_GET['viewprimaltplname'] = getparentviewprimaltplname($_GET['catid']);
  485. } else if(!isset($_GET['signs']['view'][dsign($_GET['viewprimaltplname'])])) {
  486. cpmsg(cplang('diy_sign_invalid').','.cplang('return'), NULL, 'error');
  487. }
  488. $viewprimaltplname = strpos($_GET['viewprimaltplname'], ':') === false ? $_G['cache']['style_default']['tpldir'].':portal/'.$_GET['viewprimaltplname'] : $_GET['viewprimaltplname'];
  489. $checktpl = checkprimaltpl($viewprimaltplname);
  490. if($checktpl !== true) {
  491. cpmsg(cplang($checktpl).','.cplang('return'), NULL, 'error');
  492. }
  493. $editcat['primaltplname'] = $primaltplname;
  494. $editcat['articleprimaltplname'] = $viewprimaltplname;
  495. if($_GET['catid']) {
  496. if($portalcategory[$_G['catid']]['level'] < 2) $editcat['shownav'] = intval($_GET['shownav']);
  497. if($domain && $portalcategory[$_G['catid']]['level'] == 0) {
  498. $editcat['domain'] = $domain;
  499. } else {
  500. $editcat['domain'] = '';
  501. }
  502. } else {
  503. if($portalcategory[$cate['upid']]) {
  504. if($portalcategory[$cate['upid']]['level'] == 0) $editcat['shownav'] = intval($_GET['shownav']);
  505. } else {
  506. $editcat['shownav'] = intval($_GET['shownav']);
  507. $editcat['domain'] = $domain;
  508. }
  509. }
  510. $cachearr = array('portalcategory');
  511. if($_GET['catid']) {
  512. C::t('portal_category')->update($cate['catid'], $editcat);
  513. if($cate['catname'] != $_GET['catname']) {
  514. C::t('common_diy_data')->update('portal/list_'.$cate['catid'], getdiydirectory($cate['primaltplname']), array('name'=>$_GET['catname']));
  515. C::t('common_diy_data')->update('portal/view_'.$cate['catid'], getdiydirectory($cate['articleprimaltplname']), array('name'=>$_GET['catname']));
  516. $cachearr[] = 'diytemplatename';
  517. }
  518. } else {
  519. $editcat['upid'] = $cate['upid'];
  520. $editcat['dateline'] = TIMESTAMP;
  521. $editcat['uid'] = $_G['uid'];
  522. $editcat['username'] = $_G['username'];
  523. $_GET['catid'] = C::t('portal_category')->insert($editcat, true);
  524. $cachearr[] = 'diytemplatename';
  525. }
  526. if(!empty($domain)) {
  527. C::t('common_domain')->insert(array('domain' => $domain, 'domainroot' => $_G['setting']['domain']['root']['channel'], 'id' => $_GET['catid'], 'idtype' => 'channel'));
  528. $cachearr[] = 'setting';
  529. }
  530. if($_GET['listprimaltplname'] && (empty($cate['primaltplname']) || $cate['primaltplname'] != $primaltplname)) {
  531. remakediytemplate($primaltplname, 'portal/list_'.$_GET['catid'], $_GET['catname'], getdiydirectory($cate['primaltplname']));
  532. }
  533. if($cate['articleprimaltplname'] != $viewprimaltplname) {
  534. remakediytemplate($viewprimaltplname, 'portal/view_'.$_GET['catid'], $_GET['catname'].'-'.cplang('portalcategory_viewpage'), getdiydirectory($cate['articleprimaltplname']));
  535. }
  536. include_once libfile('function/cache');
  537. updatecache('portalcategory');
  538. loadcache('portalcategory',true);
  539. $portalcategory = $_G['cache']['portalcategory'];
  540. require libfile('class/blockpermission');
  541. $tplpermsission = & template_permission::instance();
  542. $tplpre = 'portal/list_';
  543. require libfile('class/portalcategory');
  544. $categorypermsission = & portal_category::instance();
  545. if($operation == 'add') {
  546. if($cate['upid'] && $_GET['catid']) {
  547. if(!$editcat['notinheritedblock']) {
  548. $tplpermsission->remake_inherited_perm($tplpre.$_GET['catid'], $tplpre.$cate['upid']);
  549. }
  550. if(!$editcat['notinheritedarticle']) {
  551. $categorypermsission->remake_inherited_perm($_GET['catid']);
  552. }
  553. }
  554. } elseif($operation == 'edit') {
  555. if($editcat['notinheritedblock'] != $cate['notinheritedblock']) {
  556. $tplname = $tplpre.$cate['catid'];
  557. if($editcat['notinheritedblock']) {
  558. $tplpermsission->delete_inherited_perm_by_tplname($tplname, $tplpre.$cate['upid']);
  559. } else {
  560. if($portalcategory[$cate['catid']]['upid']) {
  561. $tplpermsission->remake_inherited_perm($tplname, $tplpre.$portalcategory[$cate['catid']]['upid']);
  562. }
  563. }
  564. }
  565. if($editcat['notinheritedarticle'] != $cate['notinheritedarticle']) {
  566. if($editcat['notinheritedarticle']) {
  567. $categorypermsission->delete_inherited_perm_by_catid($cate['catid'], $cate['upid']);
  568. } else {
  569. $categorypermsission->remake_inherited_perm($cate['catid']);
  570. }
  571. }
  572. }
  573. if(!empty($updatecategoryfile)) {
  574. remakecategoryfile($updatecategoryfile);
  575. }
  576. if($dir) {
  577. if(!makecategoryfile($dir, $_GET['catid'], $domain)) {
  578. cpmsg(cplang('portalcategory_filewrite_error').','.cplang('return'), NULL, 'error');
  579. }
  580. remakecategoryfile($portalcategory[$_GET['catid']]['children']);
  581. }
  582. if(($_GET['catid'] && $cate['level'] < 2) || empty($_GET['upid']) || ($_GET['upid'] && $portalcategory[$_GET['upid']]['level'] == 0)) {
  583. $nav = C::t('common_nav')->fetch_by_type_identifier(4, $_GET['catid']);
  584. if($editcat['shownav']) {
  585. if(empty($nav)) {
  586. $navparentid = 0;
  587. if($_GET['catid'] && $cate['level'] > 0 || !empty($_GET['upid'])) {
  588. $identifier = !empty($cate['upid']) ? $cate['upid'] : ($_GET['upid'] ? $_GET['upid'] : 0);
  589. $navparent = C::t('common_nav')->fetch_by_type_identifier(4, $identifier);
  590. $navparentid = $navparent['id'];
  591. if(empty($navparentid)) {
  592. cpmsg(cplang('portalcategory_parentcategory_no_shownav').','.cplang('return'), NULL, 'error');
  593. }
  594. }
  595. $setarr = array(
  596. 'parentid' => $navparentid,
  597. 'name' => $editcat['catname'],
  598. 'url' => $portalcategory[$_GET['catid']]['caturl'],
  599. 'type' => '4',
  600. 'available' => '1',
  601. 'identifier' => $_GET['catid'],
  602. );
  603. if($_GET['catid'] && $cate['level'] == 0 || empty($_GET['upid']) && empty($_GET['catid'])) {
  604. $setarr['subtype'] = '1';
  605. }
  606. $navid = C::t('common_nav')->insert($setarr, true);
  607. if($_GET['catid'] && $cate['level'] == 0) {
  608. if(!empty($cate['children'])) {
  609. foreach($cate['children'] as $subcatid) {
  610. if($portalcategory[$subcatid]['shownav']) {
  611. $setarr = array(
  612. 'parentid' => $navid,
  613. 'name' => $portalcategory[$subcatid]['catname'],
  614. 'url' => $portalcategory[$subcatid]['caturl'],
  615. 'type' => '4',
  616. 'available' => '1',
  617. 'identifier' => $subcatid,
  618. );
  619. C::t('common_nav')->insert($setarr);
  620. }
  621. }
  622. }
  623. }
  624. } else {
  625. $setarr = array('available'=>'1','url' => $portalcategory[$_GET['catid']]['caturl']);
  626. C::t('common_nav')->update_by_type_identifier(4, $_GET['catid'], $setarr);
  627. if($portalcategory[$_GET['catid']]['level'] == 0 && $portalcategory[$_GET['catid']]['children']) {
  628. foreach($portalcategory[$_GET['catid']]['children'] as $subcatid) {
  629. C::t('common_nav')->update_by_type_identifier(4, $subcatid, array('url' => $portalcategory[$subcatid]['caturl']));
  630. }
  631. }
  632. }
  633. $cachearr[] = 'setting';
  634. } else {
  635. if(!empty($nav)) {
  636. C::t('common_nav')->delete($nav['id']);
  637. if($portalcategory[$_GET['catid']]['level'] == 0 && !empty($portalcategory[$_GET['catid']]['children'])) {
  638. C::t('common_nav')->delete_by_parentid($nav['id']);
  639. C::t('portal_category')->update($portalcategory[$_GET['catid']]['children'], array('shownav'=>'0'));
  640. }
  641. $cachearr[] = 'setting';
  642. }
  643. }
  644. }
  645. if($_GET['setindex']) {
  646. C::t('common_setting')->update('defaultindex', $portalcategory[$_GET['catid']]['caturl']);
  647. $cachearr[] = 'setting';
  648. } elseif($oldsetindex) {
  649. C::t('common_setting')->update('defaultindex', '');
  650. $cachearr[] = 'setting';
  651. }
  652. updatecache(array_unique($cachearr));
  653. cpmsg('portalcategory_edit_succeed', 'action=portalcategory#cat'.$_GET['catid'], 'succeed');
  654. }
  655. }
  656. function showcategoryrow($key, $level = 0, $last = '') {
  657. global $_G;
  658. loadcache('portalcategory');
  659. $value = $_G['cache']['portalcategory'][$key];
  660. $return = '';
  661. include_once libfile('function/portalcp');
  662. $value['articles'] = category_get_num('portal', $key);
  663. $publish = '';
  664. if(empty($_G['cache']['portalcategory'][$key]['disallowpublish'])) {
  665. $publish = '&nbsp;<a href="portal.php?mod=portalcp&ac=article&catid='.$key.'" target="_blank">'.cplang('portalcategory_publish').'</a>';
  666. }
  667. if($level == 2) {
  668. $class = $last ? 'lastchildboard' : 'childboard';
  669. $return = '<tr class="hover" id="cat'.$value['catid'].'"><td>&nbsp;</td><td class="td25"><input type="text" class="txt" name="neworder['.$value['catid'].']" value="'.$value['displayorder'].'" /></td><td><div class="'.$class.'">'.
  670. '<input type="text" class="txt" name="name['.$value['catid'].']" value="'.$value['catname'].'" />'.
  671. '</div>'.
  672. '</td><td>'.$value['articles'].'</td>'.
  673. '<td>'.(empty($value['disallowpublish']) ? cplang('yes') : cplang('no')).'</td>'.
  674. '<td>'.(!empty($value['allowcomment']) ? cplang('yes') : cplang('no')).'</td>'.
  675. '<td>'.(empty($value['closed']) ? cplang('yes') : cplang('no')).'</td>'.
  676. '<td><input class="radio" type="radio" name="newsetindex" value="'.$value['catid'].'" '.($value['caturl'] == $_G['setting']['defaultindex'] ? 'checked="checked"':'').' /></td>'.
  677. '<td><a href="'.$value['caturl'].'" target="_blank">'.cplang('view').'</a>&nbsp;
  678. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=edit&catid='.$value['catid'].'">'.cplang('edit').'</a>&nbsp;
  679. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=move&catid='.$value['catid'].'">'.cplang('portalcategory_move').'</a>&nbsp;
  680. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=delete&catid='.$value['catid'].'">'.cplang('delete').'</a>&nbsp;
  681. <a href="'.ADMINSCRIPT.'?action=diytemplate&operation=perm&targettplname=portal/list_'.$value['catid'].'&tpldirectory='.getdiydirectory($value['primaltplname']).'">'.cplang('portalcategory_blockperm').'</a></td>
  682. <td><a href="'.ADMINSCRIPT.'?action=article&operation=list&&catid='.$value['catid'].'">'.cplang('portalcategory_articlemanagement').'</a>&nbsp;
  683. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=perm&catid='.$value['catid'].'">'.cplang('portalcategory_articleperm').'</a>'.$publish.'</td></tr>';
  684. } elseif($level == 1) {
  685. $return = '<tr class="hover" id="cat'.$value['catid'].'"><td>&nbsp;</td><td class="td25"><input type="text" class="txt" name="neworder['.$value['catid'].']" value="'.$value['displayorder'].'" /></td><td><div class="board">'.
  686. '<input type="text" class="txt" name="name['.$value['catid'].']" value="'.$value['catname'].'" />'.
  687. '<a class="addchildboard" href="'.ADMINSCRIPT.'?action=portalcategory&operation=add&upid='.$value['catid'].'">'.cplang('portalcategory_addthirdcategory').'</a></div>'.
  688. '</td><td>'.$value['articles'].'</td>'.
  689. '<td>'.(empty($value['disallowpublish']) ? cplang('yes') : cplang('no')).'</td>'.
  690. '<td>'.(!empty($value['allowcomment']) ? cplang('yes') : cplang('no')).'</td>'.
  691. '<td>'.(empty($value['closed']) ? cplang('yes') : cplang('no')).'</td>'.
  692. '<td><input class="radio" type="radio" name="newsetindex" value="'.$value['catid'].'" '.($value['caturl'] == $_G['setting']['defaultindex'] ? 'checked="checked"':'').' /></td>'.
  693. '<td><a href="'.$value['caturl'].'" target="_blank">'.cplang('view').'</a>&nbsp;
  694. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=edit&catid='.$value['catid'].'">'.cplang('edit').'</a>&nbsp;
  695. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=move&catid='.$value['catid'].'">'.cplang('portalcategory_move').'</a>&nbsp;
  696. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=delete&catid='.$value['catid'].'">'.cplang('delete').'</a>&nbsp;
  697. <a href="'.ADMINSCRIPT.'?action=diytemplate&operation=perm&targettplname=portal/list_'.$value['catid'].'&tpldirectory='.getdiydirectory($value['primaltplname']).'">'.cplang('portalcategory_blockperm').'</a></td>
  698. <td><a href="'.ADMINSCRIPT.'?action=article&operation=list&&catid='.$value['catid'].'">'.cplang('portalcategory_articlemanagement').'</a>&nbsp;
  699. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=perm&catid='.$value['catid'].'">'.cplang('portalcategory_articleperm').'</a>'.$publish.'</td></tr>';
  700. for($i=0,$L=count($value['children']); $i<$L; $i++) {
  701. $return .= showcategoryrow($value['children'][$i], 2, $i==$L-1);
  702. }
  703. } else {
  704. $childrennum = count($_G['cache']['portalcategory'][$key]['children']);
  705. $toggle = $childrennum > 25 ? ' style="display:none"' : '';
  706. $return = '<tbody><tr class="hover" id="cat'.$value['catid'].'"><td onclick="toggle_group(\'group_'.$value['catid'].'\')"><a id="a_group_'.$value['catid'].'" href="javascript:;">'.($toggle ? '[+]' : '[-]').'</a></td>'
  707. .'<td class="td25"><input type="text" class="txt" name="neworder['.$value['catid'].']" value="'.$value['displayorder'].'" /></td><td><div class="parentboard">'.
  708. '<input type="text" class="txt" name="name['.$value['catid'].']" value="'.$value['catname'].'" />'.
  709. '</div>'.
  710. '</td><td>'.$value['articles'].'</td>'.
  711. '<td>'.(empty($value['disallowpublish']) ? cplang('yes') : cplang('no')).'</td>'.
  712. '<td>'.(!empty($value['allowcomment']) ? cplang('yes') : cplang('no')).'</td>'.
  713. '<td>'.(empty($value['closed']) ? cplang('yes') : cplang('no')).'</td>'.
  714. '<td><input class="radio" type="radio" name="newsetindex" value="'.$value['catid'].'" '.($value['caturl'] == $_G['setting']['defaultindex'] ? 'checked="checked"':'').' /></td>'.
  715. '<td><a href="'.$value['caturl'].'" target="_blank">'.cplang('view').'</a>&nbsp;
  716. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=edit&catid='.$value['catid'].'">'.cplang('edit').'</a>&nbsp;
  717. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=move&catid='.$value['catid'].'">'.cplang('portalcategory_move').'</a>&nbsp;
  718. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=delete&catid='.$value['catid'].'">'.cplang('delete').'</a>&nbsp;
  719. <a href="'.ADMINSCRIPT.'?action=diytemplate&operation=perm&targettplname=portal/list_'.$value['catid'].'&tpldirectory='.getdiydirectory($value['primaltplname']).'">'.cplang('portalcategory_blockperm').'</a></td>
  720. <td><a href="'.ADMINSCRIPT.'?action=article&operation=list&&catid='.$value['catid'].'">'.cplang('portalcategory_articlemanagement').'</a>&nbsp;
  721. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=perm&catid='.$value['catid'].'">'.cplang('portalcategory_articleperm').'</a>'.$publish.'</td></tr></tbody>
  722. <tbody id="group_'.$value['catid'].'"'.$toggle.'>';
  723. for($i=0,$L=count($value['children']); $i<$L; $i++) {
  724. $return .= showcategoryrow($value['children'][$i], 1, '');
  725. }
  726. $return .= '</tdoby><tr><td>&nbsp;</td><td colspan="9"><div class="lastboard"><a class="addtr" href="'.ADMINSCRIPT.'?action=portalcategory&operation=add&upid='.$value['catid'].'">'.cplang('portalcategory_addsubcategory').'</a></td></div>';
  727. }
  728. return $return;
  729. }
  730. function deleteportalcategory($ids) {
  731. global $_G;
  732. if(empty($ids)) return false;
  733. if(!is_array($ids) && $_G['cache']['portalcategory'][$ids]['upid'] == 0) {
  734. @require_once libfile('function/delete');
  735. deletedomain(intval($ids), 'channel');
  736. }
  737. if(!is_array($ids)) $ids = array($ids);
  738. require_once libfile('class/blockpermission');
  739. require_once libfile('class/portalcategory');
  740. $tplpermission = & template_permission::instance();
  741. $templates = array();
  742. foreach($ids as $id) {
  743. $templates[] = 'portal/list_'.$id;
  744. $templates[] = 'portal/view_'.$id;
  745. }
  746. $tplpermission->delete_allperm_by_tplname($templates);
  747. $categorypermission = & portal_category::instance();
  748. $categorypermission->delete_allperm_by_catid($ids);
  749. C::t('portal_category')->delete($ids);
  750. C::t('common_nav')->delete_by_type_identifier(4, $ids);
  751. $tpls = $defaultindex = array();
  752. foreach($ids as $id) {
  753. $defaultindex[] = $_G['cache']['portalcategory'][$id]['caturl'];
  754. $tpls[] = 'portal/list_'.$id;
  755. $tpls[] = 'portal/view_'.$id;
  756. }
  757. if(in_array($_G['setting']['defaultindex'], $defaultindex)) {
  758. C::t('common_setting')->update('defaultindex', '');
  759. }
  760. C::t('common_diy_data')->delete($tpls, NULL);
  761. C::t('common_template_block')->delete_by_targettplname($tpls);
  762. }
  763. function makecategoryfile($dir, $catid, $domain) {
  764. dmkdir(DISCUZ_ROOT.'./'.$dir, 0777, FALSE);
  765. $portalcategory = getglobal('cache/portalcategory');
  766. $prepath = str_repeat('../', $portalcategory[$catid]['level']+1);
  767. if($portalcategory[$catid]['level']) {
  768. $upid = $portalcategory[$catid]['upid'];
  769. while($portalcategory[$upid]['upid']) {
  770. $upid = $portalcategory[$upid]['upid'];
  771. }
  772. $domain = $portalcategory[$upid]['domain'];
  773. }
  774. $sub_dir = $dir;
  775. if($sub_dir) {
  776. $sub_dir = substr($sub_dir, -1, 1) == '/' ? '/'.$sub_dir : '/'.$sub_dir.'/';
  777. }
  778. $code = "<?php
  779. chdir('$prepath');
  780. define('SUB_DIR', '$sub_dir');
  781. \$_GET['mod'] = 'list';
  782. \$_GET['catid'] = '$catid';
  783. require_once './portal.php';
  784. ?>";
  785. $r = file_put_contents($dir.'/index.php', $code);
  786. return $r;
  787. }
  788. function getportalcategoryfulldir($catid) {
  789. if(empty($catid)) return '';
  790. $portalcategory = getglobal('cache/portalcategory');
  791. $curdir = $portalcategory[$catid]['foldername'];
  792. $curdir = $curdir ? $curdir : '';
  793. if($catid && empty($curdir)) return FALSE;
  794. $upid = $portalcategory[$catid]['upid'];
  795. while($upid) {
  796. $updir = $portalcategory[$upid]['foldername'];
  797. if(!empty($updir)) {
  798. $curdir = $updir.'/'.$curdir;
  799. } else {
  800. return FALSE;
  801. }
  802. $upid = $portalcategory[$upid]['upid'];
  803. }
  804. return $curdir ? $curdir.'/' : '';
  805. }
  806. function delportalcategoryfolder($catid) {
  807. if(empty($catid)) return FALSE;
  808. $updatearr = array();
  809. $portalcategory = getglobal('cache/portalcategory');
  810. $children = $portalcategory[$catid]['children'];
  811. if($children) {
  812. foreach($children as $subcatid) {
  813. if($portalcategory[$subcatid]['foldername']) {
  814. $arr = delportalcategorysubfolder($subcatid);
  815. $updatearr = array_merge($updatearr, $arr);
  816. }
  817. }
  818. }
  819. $dir = getportalcategoryfulldir($catid);
  820. if(!empty($dir)) {
  821. unlink(DISCUZ_ROOT.$dir.'index.html');
  822. unlink(DISCUZ_ROOT.$dir.'index.php');
  823. rmdir(DISCUZ_ROOT.$dir);
  824. $updatearr[] = $catid;
  825. }
  826. if(dimplode($updatearr)) {
  827. C::t('portal_category')->update($updatearr, array('foldername'=>''));
  828. }
  829. }
  830. function delportalcategorysubfolder($catid) {
  831. if(empty($catid)) return FALSE;
  832. $updatearr = array();
  833. $portalcategory = getglobal('cache/portalcategory');
  834. $children = $portalcategory[$catid]['children'];
  835. if($children) {
  836. foreach($children as $subcatid) {
  837. if($portalcategory[$subcatid]['foldername']) {
  838. $arr = delportalcategorysubfolder($subcatid);
  839. $updatearr = array_merge($updatearr, $arr);
  840. }
  841. }
  842. }
  843. $dir = getportalcategoryfulldir($catid);
  844. if(!empty($dir)) {
  845. unlink(DISCUZ_ROOT.$dir.'index.html');
  846. unlink(DISCUZ_ROOT.$dir.'index.php');
  847. rmdir(DISCUZ_ROOT.$dir);
  848. $updatearr[] = $catid;
  849. }
  850. return $updatearr;
  851. }
  852. function remakecategoryfile($categorys) {
  853. if(is_array($categorys)) {
  854. $portalcategory = getglobal('cache/portalcategory');
  855. foreach($categorys as $subcatid) {
  856. $dir = getportalcategoryfulldir($subcatid);
  857. makecategoryfile($dir, $subcatid, $portalcategory[$subcatid]['domain']);
  858. if($portalcategory[$subcatid]['children']) {
  859. remakecategoryfile($portalcategory[$subcatid]['children']);
  860. }
  861. }
  862. }
  863. }
  864. function showportalprimaltemplate($pritplname, $type) {
  865. include_once libfile('function/portalcp');
  866. $tpls = array('./template/default:portal/'.$type=>getprimaltplname('portal/'.$type.'.htm'));
  867. foreach($alltemplate = C::t('common_template')->range() as $template) {
  868. if(($dir = dir(DISCUZ_ROOT.$template['directory'].'/portal/'))) {
  869. while(false !== ($file = $dir->read())) {
  870. $file = strtolower($file);
  871. if (fileext($file) == 'htm' && substr($file, 0, strlen($type)+1) == $type.'_') {
  872. $key = $template['directory'].':portal/'.str_replace('.htm','',$file);
  873. $tpls[$key] = getprimaltplname($template['directory'].':portal/'.$file);
  874. }
  875. }
  876. }
  877. }
  878. foreach($tpls as $key => $value) {
  879. echo "<input name=signs[$type][".dsign($key)."] value='1' type='hidden' />";
  880. }
  881. $pritplvalue = '';
  882. if(empty($pritplname)) {
  883. $pritplhide = '';
  884. $pritplvalue = ' style="display:none;"';
  885. } else {
  886. $pritplhide = ' style="display:none;"';
  887. }
  888. $catetplselect = '<span'.$pritplhide.'><select id="'.$type.'select" name="'.$type.'primaltplname">';
  889. $selectedvalue = '';
  890. if($type == 'view') {
  891. $catetplselect .= '<option value="">'.cplang('portalcategory_inheritupsetting').'</option>';
  892. }
  893. foreach($tpls as $k => $v){
  894. if($pritplname === $k) {
  895. $selectedvalue = $k;
  896. $selected = ' selected';
  897. } else {
  898. $selected = '';
  899. }
  900. $catetplselect .= '<option value="'.$k.'"'.$selected.'>'.$v.'</option>';
  901. }
  902. $pritplophide = !empty($pritplname) ? '' : ' style="display:none;"';
  903. $catetplselect .= '</select> <a href="javascript:;"'.$pritplophide.' onclick="$(\''.$type.'select\').value=\''.$selectedvalue.'\';$(\''.$type.'select\').parentNode.style.display=\'none\';$(\''.$type.'value\').style.display=\'\';">'.cplang('cancel').'</a></span>';
  904. if(empty($pritplname)) {
  905. showsetting('portalcategory_'.$type.'primaltplname', '', '', $catetplselect);
  906. } else {
  907. $tplname = getprimaltplname($pritplname.'.htm');
  908. $html = '<span id="'.$type.'value" '.$pritplvalue.'> '.$tplname.'<a href="javascript:;" onclick="$(\''.$type.'select\').parentNode.style.display=\'\';$(\''.$type.'value\').style.display=\'none\';"> '.cplang('modify').'</a></span>';
  909. showsetting('portalcategory_'.$type.'primaltplname', '', '', $catetplselect.$html);
  910. }
  911. }
  912. function remakediytemplate($primaltplname, $targettplname, $diytplname, $olddirectory){
  913. global $_G;
  914. if(empty($targettplname)) return false;
  915. $tpldirectory = '';
  916. if(strpos($primaltplname, ':') !== false) {
  917. list($tpldirectory, $primaltplname) = explode(':', $primaltplname);
  918. }
  919. $tpldirectory = ($tpldirectory ? $tpldirectory : $_G['cache']['style_default']['tpldir']);
  920. $diydata = C::t('common_diy_data')->fetch($targettplname, $olddirectory);
  921. $diycontent = empty($diydata['diycontent']) ? '' : $diydata['diycontent'];
  922. if($diydata) {
  923. C::t('common_diy_data')->update($targettplname, $olddirectory, array('primaltplname'=>$primaltplname, 'tpldirectory'=>$tpldirectory));
  924. } else {
  925. $diycontent = '';
  926. if(in_array($primaltplname, array('portal/list', 'portal/view'))) {
  927. $diydata = C::t('common_diy_data')->fetch($targettplname, $olddirectory);
  928. $diycontent = empty($diydata['diycontent']) ? '' : $diydata['diycontent'];
  929. }
  930. $diyarr = array(
  931. 'targettplname' => $targettplname,
  932. 'tpldirectory' => $tpldirectory,
  933. 'primaltplname' => $primaltplname,
  934. 'diycontent' => $diycontent,
  935. 'name' => $diytplname,
  936. 'uid' => $_G['uid'],
  937. 'username' => $_G['username'],
  938. 'dateline' => TIMESTAMP,
  939. );
  940. C::t('common_diy_data')->insert($diyarr);
  941. }
  942. if(empty($diycontent)) {
  943. $file = $tpldirectory.'/'.$primaltplname.'.htm';
  944. if (!file_exists($file)) {
  945. $file = './template/default/'.$primaltplname.'.htm';
  946. }
  947. $content = @file_get_contents(DISCUZ_ROOT.$file);
  948. if(!$content) $content = '';
  949. $content = preg_replace("/\<\!\-\-\[name\](.+?)\[\/name\]\-\-\>/i", '', $content);
  950. file_put_contents(DISCUZ_ROOT.'./data/diy/'.$tpldirectory.'/'.$targettplname.'.htm', $content);
  951. } else {
  952. updatediytemplate($targettplname, $tpldirectory);
  953. }
  954. return true;
  955. }
  956. function getparentviewprimaltplname($catid) {
  957. global $_G;
  958. $tpl = 'view';
  959. if(empty($catid)) {
  960. return $tpl;
  961. }
  962. $cat = $_G['cache']['portalcategroy'][$catid];
  963. if(!empty($cat['upid']['articleprimaltplname'])) {
  964. $tpl = $cat['upid']['articleprimaltplname'];
  965. } else {
  966. $cat = $_G['cache']['portalcategroy'][$cat['upid']];
  967. if($cat && $cat['articleprimaltplname']) {
  968. $tpl = $cat['articleprimaltplname'];
  969. }
  970. }
  971. return $tpl;
  972. }
  973. ?>