cache_forums.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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: cache_forums.php 31989 2012-10-30 05:31:52Z liulanbo $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. function build_cache_forums() {
  12. $data = array();
  13. $forums = C::t('forum_forum')->fetch_all_forum();
  14. $pluginvalue = $forumlist = array();
  15. $pluginvalue = pluginsettingvalue('forums');
  16. $forumnoperms = array();
  17. foreach($forums as $val) {
  18. $forum = array('fid' => $val['fid'], 'type' => $val['type'], 'name' => $val['name'], 'fup' => $val['fup'], 'simple' => $val['simple'], 'status' => $val['status'], 'allowpostspecial' => $val['allowpostspecial'], 'viewperm' => $val['viewperm'], 'formulaperm' => $val['formulaperm'], 'havepassword' => $val['password'], 'postperm' => $val['postperm'], 'replyperm' => $val['replyperm'], 'getattachperm' => $val['getattachperm'], 'postattachperm' => $val['postattachperm'], 'extra' => $val['extra'], 'commentitem' => $val['commentitem'], 'uid' => $val['uid'], 'archive' => $val['archive'], 'domain' => $val['domain']);
  19. $forum['orderby'] = bindec((($forum['simple'] & 128) ? 1 : 0).(($forum['simple'] & 64) ? 1 : 0));
  20. $forum['ascdesc'] = ($forum['simple'] & 32) ? 'ASC' : 'DESC';
  21. $forum['extra'] = unserialize($forum['extra']);
  22. if(!is_array($forum['extra'])) {
  23. $forum['extra'] = array();
  24. }
  25. if(!isset($forumlist[$forum['fid']])) {
  26. if($forum['uid']) {
  27. $forum['users'] = "\t$forum[uid]\t";
  28. }
  29. unset($forum['uid']);
  30. if($forum['fup']) {
  31. $forumlist[$forum['fup']]['count']++;
  32. }
  33. $forumlist[$forum['fid']] = $forum;
  34. } elseif($forum['uid']) {
  35. if(!$forumlist[$forum['fid']]['users']) {
  36. $forumlist[$forum['fid']]['users'] = "\t";
  37. }
  38. $forumlist[$forum['fid']]['users'] .= "$forum[uid]\t";
  39. }
  40. }
  41. $data = array();
  42. if(!empty($forumlist)) {
  43. foreach($forumlist as $fid1 => $forum1) {
  44. if(($forum1['type'] == 'group' && $forum1['count'])) {
  45. $data[$fid1] = formatforumdata($forum1, $pluginvalue);
  46. unset($data[$fid1]['users'], $data[$fid1]['allowpostspecial'], $data[$fid1]['commentitem']);
  47. foreach($forumlist as $fid2 => $forum2) {
  48. if($forum2['fup'] == $fid1 && $forum2['type'] == 'forum') {
  49. $data[$fid2] = formatforumdata($forum2, $pluginvalue);
  50. foreach($forumlist as $fid3 => $forum3) {
  51. if($forum3['fup'] == $fid2 && $forum3['type'] == 'sub') {
  52. $data[$fid3] = formatforumdata($forum3, $pluginvalue);
  53. }
  54. }
  55. }
  56. }
  57. }
  58. }
  59. }
  60. savecache('forums', $data);
  61. }
  62. function formatforumdata($forum, &$pluginvalue) {
  63. static $keys = array('fid', 'type', 'name', 'fup', 'viewperm', 'postperm', 'orderby', 'ascdesc', 'users', 'status',
  64. 'extra', 'plugin', 'allowpostspecial', 'commentitem', 'archive', 'domain', 'havepassword');
  65. static $orders = array('lastpost', 'dateline', 'replies', 'views');
  66. $data = array();
  67. foreach ($keys as $key) {
  68. switch ($key) {
  69. case 'orderby': $data[$key] = $orders[$forum['orderby']]; break;
  70. case 'plugin': $data[$key] = $pluginvalue[$forum['fid']]; break;
  71. case 'havepassword': $data[$key] = $forum[$key] ? 1 : 0; break;
  72. case 'allowpostspecial': $data[$key] = sprintf('%06b', $forum['allowpostspecial']); break;
  73. default: $data[$key] = $forum[$key];
  74. }
  75. }
  76. return $data;
  77. }
  78. ?>