private function getforumlist($parentid) { global $vbulletin, $counters, $lastpostarray; if (empty($vbulletin->iforumcache["{$parentid}"]) or !is_array($vbulletin->iforumcache["{$parentid}"])) { return; } // call fetch_last_post_array() first to get last post info for forums if (!is_array($lastpostarray)) { fetch_last_post_array($parentid); } foreach ($vbulletin->iforumcache["{$parentid}"] as $forumid) { $forumperms = $vbulletin->userinfo['forumpermissions']["{$forumid}"]; if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) and ($vbulletin->forumcache["{$forumid}"]['showprivate'] == 1 or !$vbulletin->forumcache["{$forumid}"]['showprivate'] and !$vbulletin->options['showprivateforums']) or !$vbulletin->forumcache["{$forumid}"]['displayorder'] or !($vbulletin->forumcache["{$forumid}"]['options'] & $vbulletin->bf_misc_forumoptions['active'])) { continue; } else { $forum = $vbulletin->forumcache["{$forumid}"]; $is_category = !(bool) ($forum['options'] & $vbulletin->bf_misc_forumoptions['cancontainthreads']); $forum['threadcount'] = $counters["{$forum['forumid']}"]['threadcount']; $forum['replycount'] = $counters["{$forum['forumid']}"]['replycount']; $forum['statusicon'] = fetch_forum_lightbulb($forumid, $lastpostinfo, $forum); $forum2 = array('forumid' => $forum['forumid'], 'title' => $forum['title'], 'description' => $forum['description'], 'title_clean' => $forum['title_clean'], 'description_clean' => $forum['description_clean'], 'parentid' => $forum['parentid'], 'threadcount' => $forum['threadcount'], 'replycount' => $forum['replycount'], 'is_category' => $is_category, 'is_link' => !empty($forum['link']), 'depth' => $forum['depth']); $children = explode(',', trim($forum['childlist'])); if (sizeof($children) > 2) { if ($subforums = $this->getforumlist($forumid)) { $forum2['subforums'] = $subforums; } } $forums[] = $forum2; } // if can view } // end foreach ($vbulletin->iforumcache[$parentid] AS $forumid) return $forums; }
function construct_subforum_bit($parentid, $depth = 1, &$list = array()) { global $vbulletin, $vbphrase; global $lastpostinfo, $lastpostarray; if (!isset($vbulletin->iforumcache["{$parentid}"])) { return $output; } foreach ($vbulletin->iforumcache["{$parentid}"] as $forumid) { $forum = $vbulletin->forumcache["{$forumid}"]; $forumperms = $vbulletin->userinfo['forumpermissions']["{$forumid}"]; if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) and ($vbulletin->forumcache["{$forumid}"]['showprivate'] == 1 or !$vbulletin->forumcache["{$forumid}"]['showprivate'] and !$vbulletin->options['showprivateforums'])) { // no permission to view current forum continue; } if (!$forum['displayorder'] or !($forum['options'] & $vbulletin->bf_misc_forumoptions['active'])) { // forum not active continue; } else { // get on/off status $lastpostinfo = $vbulletin->forumcache["{$lastpostarray[$forumid]}"]; $forum['statusicon'] = fetch_forum_lightbulb($forumid, $lastpostinfo, $forum); $show['newposticon'] = $forum['statusicon'] ? true : false; ($hook = vBulletinHook::fetch_hook('forumbit_subforumbit')) ? eval($hook) : false; $forum['comma'] = $vbphrase['comma_space']; $cancontainthreads = $forum['options'] & $vbulletin->bf_misc_forumoptions['cancontainthreads']; $forum['canpost'] = $cancontainthreads ? true : false; $list[] = $forum; if ($depth < $vbulletin->options['subforumdepth']) { construct_subforum_bit($forumid, $depth + 1, $list); } ($hook = vBulletinHook::fetch_hook('forumbit_subforumbit2')) ? eval($hook) : false; } } return $list; }
function construct_subforum_bit($parentid, $cancontainthreads, $output = '', $depthmark = '--', $depth = 0) { global $vbulletin, $stylevar, $vbphrase; global $lastpostinfo, $lastpostarray; static $splitter; if ($cancontainthreads) { $canpost = 'post'; } else { $canpost = 'nopost'; } // get the splitter template if (!isset($splitter["{$canpost}"])) { eval('$splitter[$canpost] = "' . fetch_template("forumhome_subforumseparator_{$canpost}") . '";'); } if (!isset($vbulletin->iforumcache["{$parentid}"])) { return $output; } foreach ($vbulletin->iforumcache["{$parentid}"] as $forumid) { $forum = $vbulletin->forumcache["{$forumid}"]; $forumperms = $vbulletin->userinfo['forumpermissions']["{$forumid}"]; if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) and ($vbulletin->forumcache["{$forumid}"]['showprivate'] == 1 or !$vbulletin->forumcache["{$forumid}"]['showprivate'] and !$vbulletin->options['showprivateforums'])) { // no permission to view current forum continue; } if (!$forum['displayorder'] or !($forum['options'] & $vbulletin->bf_misc_forumoptions['active'])) { // forum not active continue; } else { // get on/off status $lastpostinfo = $vbulletin->forumcache["{$lastpostarray[$forumid]}"]; $forum['statusicon'] = fetch_forum_lightbulb($forumid, $lastpostinfo, $forum); $show['newposticon'] = $forum['statusicon'] ? true : false; ($hook = vBulletinHook::fetch_hook('forumbit_subforumbit')) ? eval($hook) : false; eval('$subforum = "' . fetch_template("forumhome_subforumbit_{$canpost}") . '";'); if (!empty($output)) { $subforum = $splitter["{$canpost}"] . $subforum; } if ($depth < $vbulletin->options['subforumdepth']) { $output .= construct_subforum_bit($forumid, $cancontainthreads, $subforum, $depthmark . '--', $depth + 1); } ($hook = vBulletinHook::fetch_hook('forumbit_subforumbit2')) ? eval($hook) : false; } } return $output; }
function fr_construct_forum_bit($parentid, $depth = 0, $subsonly = 0) { global $vbulletin, $vbphrase, $show; global $imodcache, $lastpostarray, $counters, $inforum; // Get exclude IDs $exclude_ids = @explode(',', $vbulletin->options['forumrunner_exclude']); if (in_array('-1', $exclude_ids)) { $exclude_ids = array(); } if (in_array($parentid, $exclude_ids)) { return; } // this function takes the constant MAXFORUMDEPTH as its guide for how // deep to recurse down forum lists. if MAXFORUMDEPTH is not defined, // it will assume a depth of 2. // call fetch_last_post_array() first to get last post info for forums if (!is_array($lastpostarray)) { fetch_last_post_array($parentid); } if (empty($vbulletin->iforumcache["{$parentid}"])) { return; } if (!defined('MAXFORUMDEPTH')) { define('MAXFORUMDEPTH', 2); } $forumbits = ''; $depth++; if ($parentid == -1) { $parent_is_category = false; } else { $parentforum = $vbulletin->forumcache[$parentid]; $parent_is_category = !(bool) ($parentforum['options'] & $vbulletin->bf_misc_forumoptions['cancontainthreads']); } foreach ($vbulletin->iforumcache["{$parentid}"] as $forumid) { if (in_array($forumid, $exclude_ids)) { continue; } // grab the appropriate forum from the $vbulletin->forumcache $forum = $vbulletin->forumcache["{$forumid}"]; //$lastpostforum = $vbulletin->forumcache["$lastpostarray[$forumid]"]; $lastpostforum = empty($lastpostarray[$forumid]) ? array() : $vbulletin->forumcache["{$lastpostarray[$forumid]}"]; if (!$forum['displayorder'] or !($forum['options'] & $vbulletin->bf_misc_forumoptions['active'])) { continue; } $forumperms = $vbulletin->userinfo['forumpermissions']["{$forumid}"]; $lastpostforumperms = empty($lastpostarray[$forumid]) ? 0 : $vbulletin->userinfo['forumpermissions']["{$lastpostarray[$forumid]}"]; if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) and ($vbulletin->forumcache["{$forumid}"]['showprivate'] == 1 or !$vbulletin->forumcache["{$forumid}"]['showprivate'] and !$vbulletin->options['showprivateforums'])) { // no permission to view current forum continue; } if ($subsonly) { $childforumbits = fr_construct_forum_bit($forum['forumid'], 1, $subsonly); } else { if ($depth < MAXFORUMDEPTH) { $childforumbits = fr_construct_forum_bit($forum['forumid'], $depth, $subsonly); } else { $childforumbits = ''; } } // do stuff if we are not doing subscriptions only, or if we ARE doing subscriptions, // and the forum has a subscribedforumid if (!$subsonly or $subsonly and !empty($forum['subscribeforumid'])) { $GLOBALS['forumshown'] = true; // say that we have shown at least one forum if ($forum['options'] & $vbulletin->bf_misc_forumoptions['cancontainthreads']) { // get appropriate suffix for template name $tempext = '_post'; } else { $tempext = '_nopost'; } if (!$vbulletin->options['showforumdescription']) { // blank forum description if set to not show $forum['description'] = ''; } // dates & thread title $lastpostinfo = empty($lastpostarray["{$forumid}"]) ? array() : $vbulletin->forumcache["{$lastpostarray[$forumid]}"]; // compare last post time for this forum with the last post time specified by // the $lastpostarray, and if it's less, use the last post info from the forum // specified by $lastpostarray if (!empty($lastpostinfo) and $vbulletin->forumcache["{$lastpostarray[$forumid]}"]['lastpost'] > 0) { if (!($lastpostforumperms & $vbulletin->bf_ugp_forumpermissions['canview']) or !($lastpostforumperms & $vbulletin->bf_ugp_forumpermissions['canviewothers']) and $lastpostinfo['lastposter'] != $vbulletin->userinfo['username']) { $forum['lastpostinfo'] = $vbphrase['private']; } else { $lastpostinfo['lastpostdate'] = vbdate($vbulletin->options['dateformat'], $lastpostinfo['lastpost'], 1); $lastpostinfo['lastposttime'] = vbdate($vbulletin->options['timeformat'], $lastpostinfo['lastpost']); $lastpostinfo['trimthread'] = fetch_trimmed_title(fetch_censored_text($lastpostinfo['lastthread'])); if ($lastpostinfo['lastprefixid'] and $vbulletin->options['showprefixlastpost']) { $lastpostinfo['prefix'] = $vbulletin->options['showprefixlastpost'] == 2 ? $vbphrase["prefix_{$lastpostinfo['lastprefixid']}_title_rich"] : htmlspecialchars_uni($vbphrase["prefix_{$lastpostinfo['lastprefixid']}_title_plain"]); } else { $lastpostinfo['prefix'] = ''; } if ($vbulletin->forumcache["{$lastpostforum['forumid']}"]['options'] & $vbulletin->bf_misc_forumoptions['allowicons'] and $icon = fetch_iconinfo($lastpostinfo['lasticonid'])) { $show['icon'] = true; } else { $show['icon'] = false; } $show['lastpostinfo'] = (!$lastpostforum['password'] or verify_forum_password($lastpostforum['forumid'], $lastpostforum['password'], false)); $pageinfo_lastpost = array('p' => $lastpostinfo['lastpostid']); $pageinfo_newpost = array('goto' => 'newpost'); $threadinfo = array('title' => $lastpostinfo['lastthread'], 'threadid' => $lastpostinfo['lastthreadid']); } } else { if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview'])) { $forum['lastpostinfo'] = $vbphrase['private']; } else { $forum['lastpostinfo'] = $vbphrase['never']; } } // do light bulb $forum['statusicon'] = fetch_forum_lightbulb($forumid, $lastpostinfo, $forum); // add lock to lightbulb if necessary // from 3.6.9 & 3.7.0 we now show locks only if a user can not post AT ALL // previously it was just if they could not create new threads if ($vbulletin->options['showlocks'] and !$forum['link'] and (!($forum['options'] & $vbulletin->bf_misc_forumoptions['allowposting']) or !($forumperms & $vbulletin->bf_ugp_forumpermissions['canpostnew']) and !($forumperms & $vbulletin->bf_ugp_forumpermissions['canreplyown']) and !($forumperms & $vbulletin->bf_ugp_forumpermissions['canreplyothers']))) { $forum['statusicon'] .= '_lock'; } // get counters from the counters cache ( prepared by fetch_last_post_array() ) $forum['threadcount'] = $counters["{$forum['forumid']}"]['threadcount']; $forum['replycount'] = $counters["{$forum['forumid']}"]['replycount']; // get moderators ( this is why we needed cache_moderators() ) if ($vbulletin->options['showmoderatorcolumn']) { $showmods = array(); $listexploded = explode(',', $forum['parentlist']); foreach ($listexploded as $parentforumid) { if (!isset($imodcache["{$parentforumid}"]) or $parentforumid == -1) { continue; } foreach ($imodcache["{$parentforumid}"] as $moderator) { if (isset($showmods["{$moderator['userid']}"])) { continue; } ($hook = vBulletinHook::fetch_hook('forumbit_moderator')) ? eval($hook) : false; $showmods["{$moderator['userid']}"] = true; if (!isset($forum['moderators'])) { $forum['moderators'] = ''; } } } if (!isset($forum['moderators'])) { $forum['moderators'] = ''; } } if ($forum['link']) { $forum['replycount'] = '-'; $forum['threadcount'] = '-'; $forum['lastpostinfo'] = '-'; } else { $forum['replycount'] = vb_number_format($forum['replycount']); $forum['threadcount'] = vb_number_format($forum['threadcount']); } if (($subsonly or $depth == MAXFORUMDEPTH) and $vbulletin->options['subforumdepth'] > 0) { //$forum['subforums'] = construct_subforum_bit($forumid, ($forum['options'] & $vbulletin->bf_misc_forumoptions['cancontainthreads'] ) ); $forum['subforums'] = ''; } else { $forum['subforums'] = ''; } $forum['browsers'] = 0; $children = explode(',', $forum['childlist']); foreach ($children as $childid) { $forum['browsers'] += isset($inforum["{$childid}"]) ? $inforum["{$childid}"] : 0; } if ($depth == 1 and $tempext == '_nopost') { global $vbcollapse; $collapseobj_forumid =& $vbcollapse["collapseobj_forumbit_{$forumid}"]; $collapseimg_forumid =& $vbcollapse["collapseimg_forumbit_{$forumid}"]; $show['collapsebutton'] = true; } else { $show['collapsebutton'] = false; } $show['forumsubscription'] = $subsonly ? true : false; $show['forumdescription'] = $forum['description'] != '' ? true : false; $show['subforums'] = $forum['subforums'] != '' ? true : false; $show['browsers'] = ($vbulletin->options['displayloggedin'] and !$forum['link'] and $forum['browsers'] ? true : false); // FRNR Start // If this forum has a password, check to see if we have // the proper cookie. If so, don't prompt for one $password = 0; if ($forum['password']) { $pw_ok = verify_forum_password($forum['forumid'], $forum['password'], false); if (!$pw_ok) { $password = 1; } } $new = array('id' => $forum['forumid'], 'new' => $forum['statusicon'] == 'new' ? true : false, 'name' => prepare_utf8_string(strip_tags($forum['title'])), 'password' => $password); $icon = fr_get_forum_icon($forum['forumid'], $forum['statusicon'] == 'new' ? true : false); if ($icon) { $new['icon'] = $icon; } if ($forum['link'] != '') { $link = fr_fix_url($forum['link']); if (is_int($link)) { $new['id'] = $link; } else { $new['link'] = $link; } $linkicon = fr_get_forum_icon($forum['forumid'], false, true); if ($linkicon) { $new['icon'] = $linkicon; } } if ($forum['description'] != '') { $desc = prepare_utf8_string(strip_tags($forum['description'])); if (strlen($desc) > 0) { $new['desc'] = $desc; } } $out[] = $new; // FRNR End } else { $forumbits .= $childforumbits; } } return $out; }
function construct_subforum_bit($parentid, $cancontainthreads, $output = '', $depthmark = '--', $depth = 0) { global $vbulletin, $vbphrase; global $lastpostinfo, $lastpostarray; static $splitter; if ($cancontainthreads) { $canpost = 'post'; } else { $canpost = 'nopost'; } // get the splitter template if (!isset($splitter["$canpost"])) { $splitter["$canpost"] = vB_Template::create("forumhome_subforumseparator_$canpost")->render(); } if (!isset($vbulletin->iforumcache["$parentid"])) { return $output; } foreach($vbulletin->iforumcache["$parentid"] AS $forumid) { $forum = $vbulletin->forumcache["$forumid"]; $forumperms = $vbulletin->userinfo['forumpermissions']["$forumid"]; if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) AND ($vbulletin->forumcache["$forumid"]['showprivate'] == 1 OR (!$vbulletin->forumcache["$forumid"]['showprivate'] AND !$vbulletin->options['showprivateforums']))) { // no permission to view current forum continue; } if (!$forum['displayorder'] OR !($forum['options'] & $vbulletin->bf_misc_forumoptions['active'])) { // forum not active continue; } else { // get on/off status $lastpostinfo = $vbulletin->forumcache["$lastpostarray[$forumid]"]; $forum['statusicon'] = fetch_forum_lightbulb($forumid, $lastpostinfo, $forum); $show['newposticon'] = ($forum['statusicon'] ? true : false); ($hook = vBulletinHook::fetch_hook('forumbit_subforumbit')) ? eval($hook) : false; $templater = vB_Template::create("forumhome_subforumbit_$canpost"); $templater->register('forum', $forum); //make the first child from the one we are displaying + 1 $templater->register('depth', $depth+1); $subforum = $templater->render(); if (!empty($output)) { $subforum = $splitter["$canpost"] . $subforum; } if ($depth < $vbulletin->options['subforumdepth']) { $output .= construct_subforum_bit($forumid, $cancontainthreads, $subforum, $depthmark . '--', $depth + 1); } ($hook = vBulletinHook::fetch_hook('forumbit_subforumbit2')) ? eval($hook) : false; } } return $output; }
function ListForums($who, $forumid) { global $db, $vbulletin, $server, $structtypes, $lastpostarray; $result = RegisterService($who); if ($result['Code'] != 0) { $retval['Result'] = $result; return $retval; } $userid = $vbulletin->userinfo['userid']; //$xml = new XMLexporter($vbulletin); // ### GET FORUMS & MODERATOR iCACHES ######################## cache_ordered_forums(1, 1); if (empty($vbulletin->iforumcache)) { $forums = $vbulletin->db->query_read_slave("\r\n SELECT forumid, title, link, parentid, displayorder, title_clean, description, description_clean,\r\n (options & " . $vbulletin->bf_misc_forumoptions['cancontainthreads'] . ") AS cancontainthreads\r\n FROM " . TABLE_PREFIX . "forum AS forum\r\n WHERE displayorder <> 0 AND\r\n password = '' AND\r\n (options & " . $vbulletin->bf_misc_forumoptions['active'] . ")\r\n ORDER BY displayorder\r\n "); $vbulletin->iforumcache = array(); while ($forum = $vbulletin->db->fetch_array($forums)) { $vbulletin->iforumcache["{$forum['parentid']}"]["{$forum['displayorder']}"]["{$forum['forumid']}"] = $forum; } unset($forum); $vbulletin->db->free_result($forums); } // define max depth for forums display based on $vbulletin->options[forumhomedepth] define('MAXFORUMDEPTH', 1); if (is_array($vbulletin->iforumcache["{$forumid}"])) { $childarray = $vbulletin->iforumcache["{$forumid}"]; } else { $childarray = array($vbulletin->iforumcache["{$forumid}"]); } if (!is_array($lastpostarray)) { fetch_last_post_array(); } // add the current forum info // get the current location title $current = $db->query_first("SELECT title FROM " . TABLE_PREFIX . "forum AS forum WHERE (forumid = {$forumid})"); if (strlen($current['title']) == 0) { $current['title'] = 'INDEX'; } $forum = fetch_foruminfo($forumid); $lastpostinfo = $vbulletin->forumcache["{$lastpostarray[$forumid]}"]; $isnew = fetch_forum_lightbulb($forumid, $lastpostinfo, $forum); $curforum['ForumID'] = $forumid; $curforum['Title'] = $current['title']; $curforum['IsNew'] = $isnew == "new"; $curforum['IsCurrent'] = true; $forumlist = array(); foreach ($childarray as $subforumid) { // hack out the forum id $forum = fetch_foruminfo($subforumid); if (!$forum['displayorder'] or !($forum['options'] & $vbulletin->bf_misc_forumoptions['active'])) { continue; } $forumperms = $vbulletin->userinfo['forumpermissions']["{$subforumid}"]; if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) and ($vbulletin->forumcache["{$subforumid}"]['showprivate'] == 1 or !$vbulletin->forumcache["{$subforumid}"]['showprivate'] and !$vbulletin->options['showprivateforums'])) { // no permission to view current forum continue; } $lastpostinfo = $vbulletin->forumcache["{$lastpostarray[$subforumid]}"]; $isnew = fetch_forum_lightbulb($forumid, $lastpostinfo, $forum); $tempforum['ForumID'] = $forum['forumid']; $tempforum['Title'] = $forum['title']; $tempforum['IsNew'] = $isnew == "new"; $tempforum['IsCurrent'] = false; array_push($forumlist, $tempforum); unset($tempforum); } $result['RemoteUser'] = ConsumeArray($vbulletin->userinfo, $structtypes['RemoteUser']); $retval['Result'] = $result; $retval['CurrentForum'] = $curforum; $retval['ForumList'] = $forumlist; return $retval; }