PageRenderTime 66ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 1ms

/source/admincp/admincp_portalcategory.php

https://github.com/jinbo51/DiscuzX
PHP | 1081 lines | 976 code | 99 blank | 6 comment | 274 complexity | 9c570684d27cf9b22cb073fdc6ab3358 MD5 | raw file
Possible License(s): BSD-3-Clause
  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 32945 2013-03-26 05:01:12Z 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_for_cat($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. $anchor = in_array($_GET['anchor'], array('basic', 'html')) ? $_GET['anchor'] : 'basic';
  340. if($_GET['catid'] && !$portalcategory[$_GET['catid']]) {
  341. cpmsg('portalcategory_catgory_not_found', '', 'error');
  342. }
  343. $cate = $_GET['catid'] ? $portalcategory[$_GET['catid']] : array();
  344. if($operation == 'add') {
  345. $_GET['upid'] = intval($_GET['upid']);
  346. if($_GET['upid']) {
  347. $cate['level'] = $portalcategory[$_GET['upid']] ? $portalcategory[$_GET['upid']]['level']+1 : 0;
  348. $cate['upid'] = intval($_GET['upid']);
  349. } else {
  350. $cate['level'] = 0;
  351. $cate['upid'] = 0;
  352. }
  353. $cate['displayorder'] = 0;
  354. $cate['closed'] = 1;
  355. }
  356. @include_once DISCUZ_ROOT.'./data/cache/cache_domain.php';
  357. $channeldomain = isset($rootdomain['channel']) && $rootdomain['channel'] ? $rootdomain['channel'] : array();
  358. if(!submitcheck('detailsubmit')) {
  359. shownav('portal', 'portalcategory');
  360. $url = 'portalcategory&operation='.$operation.($operation == 'add' ? '&upid='.$_GET['upid'] : '&catid='.$_GET['catid']);
  361. showsubmenuanchors(cplang('portalcategory_detail').($cate['catname'] ? ' - '.$cate['catname'] : ''), array(
  362. array('edit', 'basic', $anchor == 'basic'),
  363. ));
  364. showtagheader('div', 'basic', $anchor == 'basic');
  365. showformheader($url);
  366. showtableheader();
  367. $catemsg = '';
  368. if($cate['username']) $catemsg .= $lang['portalcategory_username'].' '.$cate['username'];
  369. if($cate['dateline']) $catemsg .= ' '.$lang['portalcategory_dateline'].' '.dgmdate($cate['dateline'],'Y-m-d m:i:s');
  370. if($cate['upid']) $catemsg .= ' '.$lang['portalcategory_upname'].': <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=edit&catid='.$cate['upid'].'">'.$portalcategory[$cate['upid']]['catname'].'</a>';
  371. if($catemsg) showtitle($catemsg);
  372. showsetting('portalcategory_catname', 'catname', html_entity_decode($cate['catname']), 'text');
  373. showsetting('display_order', 'displayorder', $cate['displayorder'], 'text');
  374. showsetting('portalcategory_foldername', 'foldername', $cate['foldername'], 'text');
  375. showsetting('portalcategory_url', 'url', $cate['url'], 'text');
  376. showsetting('portalcategory_perpage', 'perpage', $cate['perpage'] ? $cate['perpage'] : 15, 'text');
  377. showsetting('portalcategory_maxpages', 'maxpages', $cate['maxpages'] ? $cate['maxpages'] : 1000, 'text');
  378. showportalprimaltemplate($cate['primaltplname'], 'list');
  379. showportalprimaltemplate($cate['articleprimaltplname'], 'view');
  380. showsetting('portalcategory_allowpublish', 'allowpublish', $cate['disallowpublish'] ? 0 : 1, 'radio');
  381. showsetting('portalcategory_notshowarticlesummay', 'notshowarticlesummay', $cate['notshowarticlesummay'] ? 0 : 1, 'radio');
  382. showsetting('portalcategory_allowcomment', 'allowcomment', $cate['allowcomment'], 'radio');
  383. if($cate['level']) {
  384. showsetting('portalcategory_inheritancearticle', 'inheritancearticle', !$cate['notinheritedarticle'] ? '1' : '0', 'radio');
  385. showsetting('portalcategory_inheritanceblock', 'inheritanceblock', !$cate['notinheritedblock'] ? '1' : '0', 'radio');
  386. }
  387. showsetting('portalcategory_is_closed', 'closed', $cate['closed'] ? 0 : 1, 'radio');
  388. if($cate['level'] != 2) showsetting('portalcategory_shownav', 'shownav', $cate['shownav'], 'radio');
  389. $setindex = !empty($_G['setting']['defaultindex']) && $_G['setting']['defaultindex'] == $cate['caturl'] ? 1 : 0;
  390. showsetting('setindex', 'setindex', $setindex, 'radio');
  391. if($cate['level'] == 0) {
  392. if(!empty($_G['setting']['domain']['root']['channel'])) {
  393. 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']);
  394. } else {
  395. showsetting('forums_edit_extend_domain', 'domain', '', 'text', 'disabled');
  396. }
  397. }
  398. showsetting('portalcategory_noantitheft', 'noantitheft', $cate['noantitheft'], 'radio');
  399. showtablefooter();
  400. showtips('setting_seo_portal_tips', 'tips', true, 'setseotips');
  401. showtableheader();
  402. showsetting('portalcategory_seotitle', 'seotitle', $cate['seotitle'], 'text');
  403. showsetting('portalcategory_keyword', 'keyword', $cate['keyword'], 'text');
  404. showsetting('portalcategory_summary', 'description', $cate['description'], 'textarea');
  405. showtablefooter();
  406. showsubmit('detailsubmit');
  407. if($operation == 'add') showsetting('', '', '', '<input type="hidden" name="level" value="'.$cate['level'].'" />');
  408. showtablefooter();
  409. showformfooter();
  410. } else {
  411. require_once libfile('function/portalcp');
  412. $domain = $_GET['domain'] ? $_GET['domain'] : '';
  413. $_GET['closed'] = intval($_GET['closed']) ? 0 : 1;
  414. $_GET['catname'] = trim($_GET['catname']);
  415. $foldername = trim($_GET['foldername']);
  416. $oldsetindex = !empty($_G['setting']['defaultindex']) && $_G['setting']['defaultindex'] == $cate['caturl'] ? 1 : 0;
  417. $perpage = intval($_GET['perpage']);
  418. $maxpages = intval($_GET['maxpages']);
  419. $perpage = empty($perpage) ? 15 : $perpage;
  420. $maxpages = empty($maxpages) ? 1000 : $maxpages;
  421. if($_GET['catid'] && !empty($cate['domain'])) {
  422. require_once libfile('function/delete');
  423. deletedomain($_GET['catid'], 'channel');
  424. }
  425. if(!empty($domain)) {
  426. require_once libfile('function/domain');
  427. domaincheck($domain, $_G['setting']['domain']['root']['channel'], 1);
  428. }
  429. $updatecategoryfile = array();
  430. $editcat = array(
  431. 'catname' => $_GET['catname'],
  432. 'allowcomment'=>$_GET['allowcomment'],
  433. 'url' => $_GET['url'],
  434. 'closed' => $_GET['closed'],
  435. 'seotitle' => $_GET['seotitle'],
  436. 'keyword' => $_GET['keyword'],
  437. 'description' => $_GET['description'],
  438. 'displayorder' => intval($_GET['displayorder']),
  439. 'notinheritedarticle' => $_GET['inheritancearticle'] ? '0' : '1',
  440. 'notinheritedblock' => $_GET['inheritanceblock'] ? '0' : '1',
  441. 'disallowpublish' => $_GET['allowpublish'] ? '0' : '1',
  442. 'notshowarticlesummay' => $_GET['notshowarticlesummay'] ? '0' : '1',
  443. 'perpage' => $perpage,
  444. 'maxpages' => $maxpages,
  445. 'noantitheft' => intval($_GET['noantitheft']),
  446. );
  447. $dir = '';
  448. if(!empty($foldername)) {
  449. $oldfoldername = empty($_GET['catid']) ? '' : $portalcategory[$_GET['catid']]['foldername'];
  450. preg_match_all('/[^\w\d\_]/',$foldername,$re);
  451. if(!empty($re[0])) {
  452. cpmsg(cplang('portalcategory_foldername_rename_error').','.cplang('return'), NULL, 'error');
  453. }
  454. $parentdir = getportalcategoryfulldir($cate['upid']);
  455. if($parentdir === false) cpmsg(cplang('portalcategory_parentfoldername_empty').','.cplang('return'), NULL, 'error');
  456. if($foldername == $oldfoldername) {
  457. $dir = $parentdir.$foldername;
  458. } elseif(is_dir(DISCUZ_ROOT.'./'.$parentdir.$foldername)) {
  459. cpmsg(cplang('portalcategory_foldername_duplicate').','.cplang('return'), NULL, 'error');
  460. } elseif ($portalcategory[$_GET['catid']]['foldername']) {
  461. $r = rename(DISCUZ_ROOT.'./'.$parentdir.$portalcategory[$_GET['catid']]['foldername'], DISCUZ_ROOT.'./'.$parentdir.$foldername);
  462. if($r) {
  463. $updatecategoryfile[] = $_GET['catid'];
  464. $editcat['foldername'] = $foldername;
  465. } else {
  466. cpmsg(cplang('portalcategory_foldername_rename_error').','.cplang('return'), NULL, 'error');
  467. }
  468. } elseif (empty($portalcategory[$_GET['catid']]['foldername'])) {
  469. $dir = $parentdir.$foldername;
  470. $editcat['foldername'] = $foldername;
  471. }
  472. } elseif(empty($foldername) && $portalcategory[$_GET['catid']]['foldername']) {
  473. delportalcategoryfolder($_GET['catid']);
  474. $editcat['foldername'] = '';
  475. }
  476. $primaltplname = $viewprimaltplname = '';
  477. if(!empty($_GET['listprimaltplname'])) {
  478. $primaltplname = $_GET['listprimaltplname'];
  479. if(!isset($_GET['signs']['list'][dsign($primaltplname)])) {
  480. cpmsg(cplang('diy_sign_invalid').','.cplang('return'), NULL, 'error');
  481. }
  482. $checktpl = checkprimaltpl($primaltplname);
  483. if($checktpl !== true) {
  484. cpmsg(cplang($checktpl).','.cplang('return'), NULL, 'error');
  485. }
  486. }
  487. if(empty($_GET['viewprimaltplname'])) {
  488. $_GET['viewprimaltplname'] = getparentviewprimaltplname($_GET['catid']);
  489. } else if(!isset($_GET['signs']['view'][dsign($_GET['viewprimaltplname'])])) {
  490. cpmsg(cplang('diy_sign_invalid').','.cplang('return'), NULL, 'error');
  491. }
  492. $viewprimaltplname = strpos($_GET['viewprimaltplname'], ':') === false ? $_G['cache']['style_default']['tpldir'].':portal/'.$_GET['viewprimaltplname'] : $_GET['viewprimaltplname'];
  493. $checktpl = checkprimaltpl($viewprimaltplname);
  494. if($checktpl !== true) {
  495. cpmsg(cplang($checktpl).','.cplang('return'), NULL, 'error');
  496. }
  497. $editcat['primaltplname'] = $primaltplname;
  498. $editcat['articleprimaltplname'] = $viewprimaltplname;
  499. if($_GET['catid']) {
  500. if($portalcategory[$_G['catid']]['level'] < 2) $editcat['shownav'] = intval($_GET['shownav']);
  501. if($domain && $portalcategory[$_G['catid']]['level'] == 0) {
  502. $editcat['domain'] = $domain;
  503. } else {
  504. $editcat['domain'] = '';
  505. }
  506. } else {
  507. if($portalcategory[$cate['upid']]) {
  508. if($portalcategory[$cate['upid']]['level'] == 0) $editcat['shownav'] = intval($_GET['shownav']);
  509. } else {
  510. $editcat['shownav'] = intval($_GET['shownav']);
  511. $editcat['domain'] = $domain;
  512. }
  513. }
  514. $cachearr = array('portalcategory');
  515. if($_GET['catid']) {
  516. C::t('portal_category')->update($cate['catid'], $editcat);
  517. if($cate['catname'] != $_GET['catname']) {
  518. C::t('common_diy_data')->update('portal/list_'.$cate['catid'], getdiydirectory($cate['primaltplname']), array('name'=>$_GET['catname']));
  519. C::t('common_diy_data')->update('portal/view_'.$cate['catid'], getdiydirectory($cate['articleprimaltplname']), array('name'=>$_GET['catname']));
  520. $cachearr[] = 'diytemplatename';
  521. }
  522. } else {
  523. $editcat['upid'] = $cate['upid'];
  524. $editcat['dateline'] = TIMESTAMP;
  525. $editcat['uid'] = $_G['uid'];
  526. $editcat['username'] = $_G['username'];
  527. $_GET['catid'] = C::t('portal_category')->insert($editcat, true);
  528. $cachearr[] = 'diytemplatename';
  529. }
  530. if(!empty($domain)) {
  531. C::t('common_domain')->insert(array('domain' => $domain, 'domainroot' => $_G['setting']['domain']['root']['channel'], 'id' => $_GET['catid'], 'idtype' => 'channel'));
  532. $cachearr[] = 'setting';
  533. }
  534. if($_GET['listprimaltplname'] && (empty($cate['primaltplname']) || $cate['primaltplname'] != $primaltplname)) {
  535. remakediytemplate($primaltplname, 'portal/list_'.$_GET['catid'], $_GET['catname'], getdiydirectory($cate['primaltplname']));
  536. }
  537. if($cate['articleprimaltplname'] != $viewprimaltplname) {
  538. remakediytemplate($viewprimaltplname, 'portal/view_'.$_GET['catid'], $_GET['catname'].'-'.cplang('portalcategory_viewpage'), getdiydirectory($cate['articleprimaltplname']));
  539. }
  540. include_once libfile('function/cache');
  541. updatecache('portalcategory');
  542. loadcache('portalcategory',true);
  543. $portalcategory = $_G['cache']['portalcategory'];
  544. require libfile('class/blockpermission');
  545. $tplpermsission = & template_permission::instance();
  546. $tplpre = 'portal/list_';
  547. require libfile('class/portalcategory');
  548. $categorypermsission = & portal_category::instance();
  549. if($operation == 'add') {
  550. if($cate['upid'] && $_GET['catid']) {
  551. if(!$editcat['notinheritedblock']) {
  552. $tplpermsission->remake_inherited_perm($tplpre.$_GET['catid'], $tplpre.$cate['upid']);
  553. }
  554. if(!$editcat['notinheritedarticle']) {
  555. $categorypermsission->remake_inherited_perm($_GET['catid']);
  556. }
  557. }
  558. } elseif($operation == 'edit') {
  559. if($editcat['notinheritedblock'] != $cate['notinheritedblock']) {
  560. $tplname = $tplpre.$cate['catid'];
  561. if($editcat['notinheritedblock']) {
  562. $tplpermsission->delete_inherited_perm_by_tplname($tplname, $tplpre.$cate['upid']);
  563. } else {
  564. if($portalcategory[$cate['catid']]['upid']) {
  565. $tplpermsission->remake_inherited_perm($tplname, $tplpre.$portalcategory[$cate['catid']]['upid']);
  566. }
  567. }
  568. }
  569. if($editcat['notinheritedarticle'] != $cate['notinheritedarticle']) {
  570. if($editcat['notinheritedarticle']) {
  571. $categorypermsission->delete_inherited_perm_by_catid($cate['catid'], $cate['upid']);
  572. } else {
  573. $categorypermsission->remake_inherited_perm($cate['catid']);
  574. }
  575. }
  576. }
  577. if(!empty($updatecategoryfile)) {
  578. remakecategoryfile($updatecategoryfile);
  579. }
  580. if($dir) {
  581. if(!makecategoryfile($dir, $_GET['catid'], $domain)) {
  582. cpmsg(cplang('portalcategory_filewrite_error').','.cplang('return'), NULL, 'error');
  583. }
  584. remakecategoryfile($portalcategory[$_GET['catid']]['children']);
  585. }
  586. if(($_GET['catid'] && $cate['level'] < 2) || empty($_GET['upid']) || ($_GET['upid'] && $portalcategory[$_GET['upid']]['level'] == 0)) {
  587. $nav = C::t('common_nav')->fetch_by_type_identifier(4, $_GET['catid']);
  588. if($editcat['shownav']) {
  589. if(empty($nav)) {
  590. $navparentid = 0;
  591. if($_GET['catid'] && $cate['level'] > 0 || !empty($_GET['upid'])) {
  592. $identifier = !empty($cate['upid']) ? $cate['upid'] : ($_GET['upid'] ? $_GET['upid'] : 0);
  593. $navparent = C::t('common_nav')->fetch_by_type_identifier(4, $identifier);
  594. $navparentid = $navparent['id'];
  595. if(empty($navparentid)) {
  596. cpmsg(cplang('portalcategory_parentcategory_no_shownav').','.cplang('return'), NULL, 'error');
  597. }
  598. }
  599. $setarr = array(
  600. 'parentid' => $navparentid,
  601. 'name' => $editcat['catname'],
  602. 'url' => $portalcategory[$_GET['catid']]['caturl'],
  603. 'type' => '4',
  604. 'available' => '1',
  605. 'identifier' => $_GET['catid'],
  606. );
  607. if($_GET['catid'] && $cate['level'] == 0 || empty($_GET['upid']) && empty($_GET['catid'])) {
  608. $setarr['subtype'] = '1';
  609. }
  610. $navid = C::t('common_nav')->insert($setarr, true);
  611. if($_GET['catid'] && $cate['level'] == 0) {
  612. if(!empty($cate['children'])) {
  613. foreach($cate['children'] as $subcatid) {
  614. if($portalcategory[$subcatid]['shownav']) {
  615. $setarr = array(
  616. 'parentid' => $navid,
  617. 'name' => $portalcategory[$subcatid]['catname'],
  618. 'url' => $portalcategory[$subcatid]['caturl'],
  619. 'type' => '4',
  620. 'available' => '1',
  621. 'identifier' => $subcatid,
  622. );
  623. C::t('common_nav')->insert($setarr);
  624. }
  625. }
  626. }
  627. }
  628. } else {
  629. $setarr = array('available'=>'1','url' => $portalcategory[$_GET['catid']]['caturl']);
  630. C::t('common_nav')->update_by_type_identifier(4, $_GET['catid'], $setarr);
  631. if($portalcategory[$_GET['catid']]['level'] == 0 && $portalcategory[$_GET['catid']]['children']) {
  632. foreach($portalcategory[$_GET['catid']]['children'] as $subcatid) {
  633. C::t('common_nav')->update_by_type_identifier(4, $subcatid, array('url' => $portalcategory[$subcatid]['caturl']));
  634. }
  635. }
  636. }
  637. $cachearr[] = 'setting';
  638. } else {
  639. if(!empty($nav)) {
  640. C::t('common_nav')->delete($nav['id']);
  641. if($portalcategory[$_GET['catid']]['level'] == 0 && !empty($portalcategory[$_GET['catid']]['children'])) {
  642. C::t('common_nav')->delete_by_parentid($nav['id']);
  643. C::t('portal_category')->update($portalcategory[$_GET['catid']]['children'], array('shownav'=>'0'));
  644. }
  645. $cachearr[] = 'setting';
  646. }
  647. }
  648. }
  649. if($_GET['setindex']) {
  650. C::t('common_setting')->update('defaultindex', $portalcategory[$_GET['catid']]['caturl']);
  651. $cachearr[] = 'setting';
  652. } elseif($oldsetindex) {
  653. C::t('common_setting')->update('defaultindex', '');
  654. $cachearr[] = 'setting';
  655. }
  656. updatecache(array_unique($cachearr));
  657. $url = $operation == 'add' ? 'action=portalcategory#cat'.$_GET['catid'] : 'action=portalcategory&operation=edit&catid='.$_GET['catid'];
  658. cpmsg('portalcategory_edit_succeed', $url, 'succeed');
  659. }
  660. }
  661. function showcategoryrow($key, $level = 0, $last = '') {
  662. global $_G;
  663. loadcache('portalcategory');
  664. $value = $_G['cache']['portalcategory'][$key];
  665. $return = '';
  666. include_once libfile('function/portalcp');
  667. $value['articles'] = category_get_num('portal', $key);
  668. $publish = '';
  669. if(empty($_G['cache']['portalcategory'][$key]['disallowpublish'])) {
  670. $publish = '&nbsp;<a href="portal.php?mod=portalcp&ac=article&catid='.$key.'" target="_blank">'.cplang('portalcategory_publish').'</a>';
  671. }
  672. if($level == 2) {
  673. $class = $last ? 'lastchildboard' : 'childboard';
  674. $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.'">'.
  675. '<input type="text" class="txt" name="name['.$value['catid'].']" value="'.$value['catname'].'" />'.
  676. '</div>'.
  677. '</td><td>'.$value['articles'].'</td>'.
  678. '<td>'.(empty($value['disallowpublish']) ? cplang('yes') : cplang('no')).'</td>'.
  679. '<td>'.(!empty($value['allowcomment']) ? cplang('yes') : cplang('no')).'</td>'.
  680. '<td>'.(empty($value['closed']) ? cplang('yes') : cplang('no')).'</td>'.
  681. '<td><input class="radio" type="radio" name="newsetindex" value="'.$value['catid'].'" '.($value['caturl'] == $_G['setting']['defaultindex'] ? 'checked="checked"':'').' /></td>'.
  682. '<td><a href="'.$value['caturl'].'" target="_blank">'.cplang('view').'</a>&nbsp;
  683. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=edit&catid='.$value['catid'].'">'.cplang('edit').'</a>&nbsp;
  684. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=move&catid='.$value['catid'].'">'.cplang('portalcategory_move').'</a>&nbsp;
  685. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=delete&catid='.$value['catid'].'">'.cplang('delete').'</a>&nbsp;
  686. <a href="'.ADMINSCRIPT.'?action=diytemplate&operation=perm&targettplname=portal/list_'.$value['catid'].'&tpldirectory='.getdiydirectory($value['primaltplname']).'">'.cplang('portalcategory_blockperm').'</a></td>
  687. <td><a href="'.ADMINSCRIPT.'?action=article&operation=list&&catid='.$value['catid'].'">'.cplang('portalcategory_articlemanagement').'</a>&nbsp;
  688. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=perm&catid='.$value['catid'].'">'.cplang('portalcategory_articleperm').'</a>'.$publish.'</td></tr>';
  689. } elseif($level == 1) {
  690. $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">'.
  691. '<input type="text" class="txt" name="name['.$value['catid'].']" value="'.$value['catname'].'" />'.
  692. '<a class="addchildboard" href="'.ADMINSCRIPT.'?action=portalcategory&operation=add&upid='.$value['catid'].'">'.cplang('portalcategory_addthirdcategory').'</a></div>'.
  693. '</td><td>'.$value['articles'].'</td>'.
  694. '<td>'.(empty($value['disallowpublish']) ? cplang('yes') : cplang('no')).'</td>'.
  695. '<td>'.(!empty($value['allowcomment']) ? cplang('yes') : cplang('no')).'</td>'.
  696. '<td>'.(empty($value['closed']) ? cplang('yes') : cplang('no')).'</td>'.
  697. '<td><input class="radio" type="radio" name="newsetindex" value="'.$value['catid'].'" '.($value['caturl'] == $_G['setting']['defaultindex'] ? 'checked="checked"':'').' /></td>'.
  698. '<td><a href="'.$value['caturl'].'" target="_blank">'.cplang('view').'</a>&nbsp;
  699. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=edit&catid='.$value['catid'].'">'.cplang('edit').'</a>&nbsp;
  700. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=move&catid='.$value['catid'].'">'.cplang('portalcategory_move').'</a>&nbsp;
  701. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=delete&catid='.$value['catid'].'">'.cplang('delete').'</a>&nbsp;
  702. <a href="'.ADMINSCRIPT.'?action=diytemplate&operation=perm&targettplname=portal/list_'.$value['catid'].'&tpldirectory='.getdiydirectory($value['primaltplname']).'">'.cplang('portalcategory_blockperm').'</a></td>
  703. <td><a href="'.ADMINSCRIPT.'?action=article&operation=list&&catid='.$value['catid'].'">'.cplang('portalcategory_articlemanagement').'</a>&nbsp;
  704. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=perm&catid='.$value['catid'].'">'.cplang('portalcategory_articleperm').'</a>'.$publish.'</td></tr>';
  705. for($i=0,$L=count($value['children']); $i<$L; $i++) {
  706. $return .= showcategoryrow($value['children'][$i], 2, $i==$L-1);
  707. }
  708. } else {
  709. $childrennum = count($_G['cache']['portalcategory'][$key]['children']);
  710. $toggle = $childrennum > 25 ? ' style="display:none"' : '';
  711. $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>'
  712. .'<td class="td25"><input type="text" class="txt" name="neworder['.$value['catid'].']" value="'.$value['displayorder'].'" /></td><td><div class="parentboard">'.
  713. '<input type="text" class="txt" name="name['.$value['catid'].']" value="'.$value['catname'].'" />'.
  714. '</div>'.
  715. '</td><td>'.$value['articles'].'</td>'.
  716. '<td>'.(empty($value['disallowpublish']) ? cplang('yes') : cplang('no')).'</td>'.
  717. '<td>'.(!empty($value['allowcomment']) ? cplang('yes') : cplang('no')).'</td>'.
  718. '<td>'.(empty($value['closed']) ? cplang('yes') : cplang('no')).'</td>'.
  719. '<td><input class="radio" type="radio" name="newsetindex" value="'.$value['catid'].'" '.($value['caturl'] == $_G['setting']['defaultindex'] ? 'checked="checked"':'').' /></td>'.
  720. '<td><a href="'.$value['caturl'].'" target="_blank">'.cplang('view').'</a>&nbsp;
  721. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=edit&catid='.$value['catid'].'">'.cplang('edit').'</a>&nbsp;
  722. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=move&catid='.$value['catid'].'">'.cplang('portalcategory_move').'</a>&nbsp;
  723. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=delete&catid='.$value['catid'].'">'.cplang('delete').'</a>&nbsp;
  724. <a href="'.ADMINSCRIPT.'?action=diytemplate&operation=perm&targettplname=portal/list_'.$value['catid'].'&tpldirectory='.getdiydirectory($value['primaltplname']).'">'.cplang('portalcategory_blockperm').'</a></td>
  725. <td><a href="'.ADMINSCRIPT.'?action=article&operation=list&&catid='.$value['catid'].'">'.cplang('portalcategory_articlemanagement').'</a>&nbsp;
  726. <a href="'.ADMINSCRIPT.'?action=portalcategory&operation=perm&catid='.$value['catid'].'">'.cplang('portalcategory_articleperm').'</a>'.$publish.'</td></tr></tbody>
  727. <tbody id="group_'.$value['catid'].'"'.$toggle.'>';
  728. for($i=0,$L=count($value['children']); $i<$L; $i++) {
  729. $return .= showcategoryrow($value['children'][$i], 1, '');
  730. }
  731. $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>';
  732. }
  733. return $return;
  734. }
  735. function deleteportalcategory($ids) {
  736. global $_G;
  737. if(empty($ids)) return false;
  738. if(!is_array($ids) && $_G['cache']['portalcategory'][$ids]['upid'] == 0) {
  739. @require_once libfile('function/delete');
  740. deletedomain(intval($ids), 'channel');
  741. }
  742. if(!is_array($ids)) $ids = array($ids);
  743. require_once libfile('class/blockpermission');
  744. require_once libfile('class/portalcategory');
  745. $tplpermission = & template_permission::instance();
  746. $templates = array();
  747. foreach($ids as $id) {
  748. $templates[] = 'portal/list_'.$id;
  749. $templates[] = 'portal/view_'.$id;
  750. }
  751. $tplpermission->delete_allperm_by_tplname($templates);
  752. $categorypermission = & portal_category::instance();
  753. $categorypermission->delete_allperm_by_catid($ids);
  754. C::t('portal_category')->delete($ids);
  755. C::t('common_nav')->delete_by_type_identifier(4, $ids);
  756. $tpls = $defaultindex = array();
  757. foreach($ids as $id) {
  758. $defaultindex[] = $_G['cache']['portalcategory'][$id]['caturl'];
  759. $tpls[] = 'portal/list_'.$id;
  760. $tpls[] = 'portal/view_'.$id;
  761. }
  762. if(in_array($_G['setting']['defaultindex'], $defaultindex)) {
  763. C::t('common_setting')->update('defaultindex', '');
  764. }
  765. C::t('common_diy_data')->delete($tpls, NULL);
  766. C::t('common_template_block')->delete_by_targettplname($tpls);
  767. }
  768. function makecategoryfile($dir, $catid, $domain) {
  769. dmkdir(DISCUZ_ROOT.'./'.$dir, 0777, FALSE);
  770. $portalcategory = getglobal('cache/portalcategory');
  771. $prepath = str_repeat('../', $portalcategory[$catid]['level']+1);
  772. if($portalcategory[$catid]['level']) {
  773. $upid = $portalcategory[$catid]['upid'];
  774. while($portalcategory[$upid]['upid']) {
  775. $upid = $portalcategory[$upid]['upid'];
  776. }
  777. $domain = $portalcategory[$upid]['domain'];
  778. }
  779. $sub_dir = $dir;
  780. if($sub_dir) {
  781. $sub_dir = substr($sub_dir, -1, 1) == '/' ? '/'.$sub_dir : '/'.$sub_dir.'/';
  782. }
  783. $code = "<?php
  784. chdir('$prepath');
  785. define('SUB_DIR', '$sub_dir');
  786. \$_GET['mod'] = 'list';
  787. \$_GET['catid'] = '$catid';
  788. require_once './portal.php';
  789. ?>";
  790. $r = file_put_contents($dir.'/index.php', $code);
  791. return $r;
  792. }
  793. function getportalcategoryfulldir($catid) {
  794. if(empty($catid)) return '';
  795. $portalcategory = getglobal('cache/portalcategory');
  796. $curdir = $portalcategory[$catid]['foldername'];
  797. $curdir = $curdir ? $curdir : '';
  798. if($catid && empty($curdir)) return FALSE;
  799. $upid = $portalcategory[$catid]['upid'];
  800. while($upid) {
  801. $updir = $portalcategory[$upid]['foldername'];
  802. if(!empty($updir)) {
  803. $curdir = $updir.'/'.$curdir;
  804. } else {
  805. return FALSE;
  806. }
  807. $upid = $portalcategory[$upid]['upid'];
  808. }
  809. return $curdir ? $curdir.'/' : '';
  810. }
  811. function delportalcategoryfolder($catid) {
  812. if(empty($catid)) return FALSE;
  813. $updatearr = array();
  814. $portalcategory = getglobal('cache/portalcategory');
  815. $children = $portalcategory[$catid]['children'];
  816. if($children) {
  817. foreach($children as $subcatid) {
  818. if($portalcategory[$subcatid]['foldername']) {
  819. $arr = delportalcategorysubfolder($subcatid);
  820. $updatearr = array_merge($updatearr, $arr);
  821. }
  822. }
  823. }
  824. $dir = getportalcategoryfulldir($catid);
  825. if(!empty($dir)) {
  826. unlink(DISCUZ_ROOT.$dir.'index.html');
  827. unlink(DISCUZ_ROOT.$dir.'index.php');
  828. rmdir(DISCUZ_ROOT.$dir);
  829. $updatearr[] = $catid;
  830. }
  831. if(dimplode($updatearr)) {
  832. C::t('portal_category')->update($updatearr, array('foldername'=>''));
  833. }
  834. }
  835. function delportalcategorysubfolder($catid) {
  836. if(empty($catid)) return FALSE;
  837. $updatearr = array();
  838. $portalcategory = getglobal('cache/portalcategory');
  839. $children = $portalcategory[$catid]['children'];
  840. if($children) {
  841. foreach($children as $subcatid) {
  842. if($portalcategory[$subcatid]['foldername']) {
  843. $arr = delportalcategorysubfolder($subcatid);
  844. $updatearr = array_merge($updatearr, $arr);
  845. }
  846. }
  847. }
  848. $dir = getportalcategoryfulldir($catid);
  849. if(!empty($dir)) {
  850. unlink(DISCUZ_ROOT.$dir.'index.html');
  851. unlink(DISCUZ_ROOT.$dir.'index.php');
  852. rmdir(DISCUZ_ROOT.$dir);
  853. $updatearr[] = $catid;
  854. }
  855. return $updatearr;
  856. }
  857. function remakecategoryfile($categorys) {
  858. if(is_array($categorys)) {
  859. $portalcategory = getglobal('cache/portalcategory');
  860. foreach($categorys as $subcatid) {
  861. $dir = getportalcategoryfulldir($subcatid);
  862. makecategoryfile($dir, $subcatid, $portalcategory[$subcatid]['domain']);
  863. if($portalcategory[$subcatid]['children']) {
  864. remakecategoryfile($portalcategory[$subcatid]['children']);
  865. }
  866. }
  867. }
  868. }
  869. function showportalprimaltemplate($pritplname, $type) {
  870. include_once libfile('function/portalcp');
  871. $tpls = array('./template/default:portal/'.$type=>getprimaltplname('portal/'.$type.'.htm'));
  872. foreach($alltemplate = C::t('common_template')->range() as $template) {
  873. if(($dir = dir(DISCUZ_ROOT.$template['directory'].'/portal/'))) {
  874. while(false !== ($file = $dir->read())) {
  875. $file = strtolower($file);
  876. if (fileext($file) == 'htm' && substr($file, 0, strlen($type)+1) == $type.'_') {
  877. $key = $template['directory'].':portal/'.str_replace('.htm','',$file);
  878. $tpls[$key] = getprimaltplname($template['directory'].':portal/'.$file);
  879. }
  880. }
  881. }
  882. }
  883. foreach($tpls as $key => $value) {
  884. echo "<input name=signs[$type][".dsign($key)."] value='1' type='hidden' />";
  885. }
  886. $pritplvalue = '';
  887. if(empty($pritplname)) {
  888. $pritplhide = '';
  889. $pritplvalue = ' style="display:none;"';
  890. } else {
  891. $pritplhide = ' style="display:none;"';
  892. }
  893. $catetplselect = '<span'.$pritplhide.'><select id="'.$type.'select" name="'.$type.'primaltplname">';
  894. $selectedvalue = '';
  895. if($type == 'view') {
  896. $catetplselect .= '<option value="">'.cplang('portalcategory_inheritupsetting').'</option>';
  897. }
  898. foreach($tpls as $k => $v){
  899. if($pritplname === $k) {
  900. $selectedvalue = $k;
  901. $selected = ' selected';
  902. } else {
  903. $selected = '';
  904. }
  905. $catetplselect .= '<option value="'.$k.'"'.$selected.'>'.$v.'</option>';
  906. }
  907. $pritplophide = !empty($pritplname) ? '' : ' style="display:none;"';
  908. $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>';
  909. if(empty($pritplname)) {
  910. showsetting('portalcategory_'.$type.'primaltplname', '', '', $catetplselect);
  911. } else {
  912. $tplname = getprimaltplname($pritplname.'.htm');
  913. $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>';
  914. showsetting('portalcategory_'.$type.'primaltplname', '', '', $catetplselect.$html);
  915. }
  916. }
  917. function remakediytemplate($primaltplname, $targettplname, $diytplname, $olddirectory){
  918. global $_G;
  919. if(empty($targettplname)) return false;
  920. $tpldirectory = '';
  921. if(strpos($primaltplname, ':') !== false) {
  922. list($tpldirectory, $primaltplname) = explode(':', $primaltplname);
  923. }
  924. $tpldirectory = ($tpldirectory ? $tpldirectory : $_G['cache']['style_default']['tpldir']);
  925. $newdiydata = C::t('common_diy_data')->fetch($targettplname, $tpldirectory);
  926. if($newdiydata) {
  927. return false;
  928. }
  929. $diydata = C::t('common_diy_data')->fetch($targettplname, $olddirectory);
  930. $diycontent = empty($diydata['diycontent']) ? '' : $diydata['diycontent'];
  931. if($diydata) {
  932. C::t('common_diy_data')->update($targettplname, $olddirectory, array('primaltplname'=>$primaltplname, 'tpldirectory'=>$tpldirectory));
  933. } else {
  934. $diycontent = '';
  935. if(in_array($primaltplname, array('portal/list', 'portal/view'))) {
  936. $diydata = C::t('common_diy_data')->fetch($targettplname, $olddirectory);
  937. $diycontent = empty($diydata['diycontent']) ? '' : $diydata['diycontent'];
  938. }
  939. $diyarr = array(
  940. 'targettplname' => $targettplname,
  941. 'tpldirectory' => $tpldirectory,
  942. 'primaltplname' => $primaltplname,
  943. 'diycontent' => $diycontent,
  944. 'name' => $diytplname,
  945. 'uid' => $_G['uid'],
  946. 'username' => $_G['username'],
  947. 'dateline' => TIMESTAMP,
  948. );
  949. C::t('common_diy_data')->insert($diyarr);
  950. }
  951. if(empty($diycontent)) {
  952. $file = $tpldirectory.'/'.$primaltplname.'.htm';
  953. if (!file_exists($file)) {
  954. $file = './template/default/'.$primaltplname.'.htm';
  955. }
  956. $content = @file_get_contents(DISCUZ_ROOT.$file);
  957. if(!$content) $content = '';
  958. $content = preg_replace("/\<\!\-\-\[name\](.+?)\[\/name\]\-\-\>/i", '', $content);
  959. file_put_contents(DISCUZ_ROOT.'./data/diy/'.$tpldirectory.'/'.$targettplname.'.htm', $content);
  960. } else {
  961. updatediytemplate($targettplname, $tpldirectory);
  962. }
  963. return true;
  964. }
  965. function getparentviewprimaltplname($catid) {
  966. global $_G;
  967. $tpl = 'view';
  968. if(empty($catid)) {
  969. return $tpl;
  970. }
  971. $cat = $_G['cache']['portalcategroy'][$catid];
  972. if(!empty($cat['upid']['articleprimaltplname'])) {
  973. $tpl = $cat['upid']['articleprimaltplname'];
  974. } else {
  975. $cat = $_G['cache']['portalcategroy'][$cat['upid']];
  976. if($cat && $cat['articleprimaltplname']) {
  977. $tpl = $cat['articleprimaltplname'];
  978. }
  979. }
  980. return $tpl;
  981. }
  982. ?>