Exemple #1
0
 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;
}
Exemple #4
0
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;
}