All pastes #619186 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-07-14 14:54 UTC
rendered paste body
<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBExternal v1.6 By Zero Tolerance [http://gzevolution.net]		||
|| # This file may not be redistributed, copied in whole or part	||
|| # without written permission.					||
|| # Copyright (C) 2005 Inferno Technologies.				||
|| #################################################################### ||
\*======================================================================*/

// ---------------------------------------------------
// Start Set PHP Environment
// ---------------------------------------------------

error_reporting(E_ALL & ~E_NOTICE);

// ---------------------------------------------------
// End Set PHP Environment
// ---------------------------------------------------

// ---------------------------------------------------
// Start Define Important Constants
// ---------------------------------------------------

define('NO_REGISTER_GLOBALS', 1);
define('THIS_SCRIPT', 'vBExternal');

// ---------------------------------------------------
// End Define Important Constants
// ---------------------------------------------------

// ---------------------------------------------------
// Start Cache Of Any Needed Templates/Phrase's
// ---------------------------------------------------

$phrasegroups = array();

$specialtemplates = array(
				'options',
);

$actiontemplates = array();

$globaltemplates = array();

// ---------------------------------------------------
// End Cache Of Any Needed Templates/Phrase's
// ---------------------------------------------------

// ---------------------------------------------------
// Start Call DB & Establish Connection
// ---------------------------------------------------

if( !file_exists('./includes/cgconfig.php'))
{
	echo "includes/config.php does not exist. Cannot continue.";
	exit;
}

require_once('./includes/class_core.php');
require('./includes/cgconfig.php');

DEFINE('DIR','.');
DEFINE('CGTABLE_PREFIX',$cgconfig['Database']['tableprefix']);

$vbulletin =& new vB_Registry(); // Fake an OOP Object

switch (strtolower($cgconfig['Database']['dbtype']))
{
	// load standard MySQL class
	case 'mysql':
	case '':
	{
		$mydb =& new vB_Database($vbulletin);
		break;
	}

	// load MySQLi class
	case 'mysqli':
	{
		$mydb =& new vB_Database_MySQLi($vbulletin);
		break;
	}

	// load extended, non MySQL class
	default:
	{
		die('Fatal error: Database class not found');
	}
}

require_once('./includes/functions.php');

// make database connection
$mydb->connect(
        $cgconfig['Database']['dbname'],
        $cgconfig['MasterServer']['servername'],
        $cgconfig['MasterServer']['port'],
        $cgconfig['MasterServer']['username'],
        $cgconfig['MasterServer']['password'],
        $cgconfig['MasterServer']['usepconnect'],
        $cgconfig['SlaveServer']['servername'],
        $cgconfig['SlaveServer']['port'],
        $cgconfig['SlaveServer']['username'],
        $cgconfig['SlaveServer']['password'],
        $cgconfig['SlaveServer']['usepconnect'],
        $cgconfig['Mysqli']['ini_file']
);  

$vbulletin->db =& $mydb;

echo 'Connected';
// ---------------------------------------------------
// End Call DB & Establish Connection
// ---------------------------------------------------

// ---------------------------------------------------
// Start Require Globalized Settings
// ---------------------------------------------------

class vBulletinHook { function fetch_hook() { return false; } }

define('TIMENOW', time());
require_once('./includes/class_bbcode.php');
$Data = "";       // Page Output Variable


$datastore_class = (!empty($cgconfig['Misc']['datastore'])) ? $cgconfig['Misc']['datastore'] : 'vB_Datastore';

if ($datastore_class != 'vB_Datastore')
{
      echo 'Including class_datastore';
	require_once('./includes/class_datastore.php');
      echo 'Included class_datastore';
}
$vbulletin->datastore =& new $datastore_class($vbulletin, $mydb);
$vbulletin->datastore->fetch($specialtemplates);


// ---------------------------------------------------
// End Require Globalized Settings
// ---------------------------------------------------

	// ---------------------------------------------------
	// Start Globalized Function - LoadTemplate
	// ---------------------------------------------------

	function LoadTemplate($template = ""){

	$template = "vBExternal/{$template}";

		if(!file_exists($template)){
		RunError("System was unable to find the template '{$template}'");
		}

		if(!$Handler = fopen($template,'r')){
		RunError("System was unable to open the template '{$template}'");
		}

	$template = fread($Handler,filesize($template));
	fclose($Handler);

	return $template;
	}

	// ---------------------------------------------------
	// End Globalized Function - LoadTemplate
	// ---------------------------------------------------

	// ---------------------------------------------------
	// Start Globalized Function - RunError
	// ---------------------------------------------------

	function RunError($message = ""){
	echo "<font size='1' face='verdana'>There was an error while processing vBExternal:<br />{$message}</font>";
	exit;
	}

	// ---------------------------------------------------
	// End Globalized Function - RunError
	// ---------------------------------------------------

	// ---------------------------------------------------
	// Start Globalized Function - ParseTemplate
	// ---------------------------------------------------

	function ParseTemplate($template, $parser = array(), $doGlobals = 0){
	global $vbulletin;

		if(is_array($parser)){
			foreach($parser as $find => $replace){
			$template = str_replace("{".$find."}", $replace, $template);
			}
		} else if($doGlobals){
		$RepGlobals = array(
					'url' => $vbulletin->options['bburl'],
				);

			foreach($RepGlobals as $find => $replace){
			$template = str_replace("{".$find."}", $replace, $template);
			}

		}

	return $template;
	}

	// ---------------------------------------------------
	// End Globalized Function - ParseTemplate
	// ---------------------------------------------------

	// ---------------------------------------------------
	// FUNCTION: output_NewestMembers
	// DETAIL:   Outputs newest X members in order of
        //           newest registered first. $a
	//           specifies amount to show (Default 5)
	// ---------------------------------------------------

	function output_NewestMembers($a = 5){
	global $mydb, $Data;

	// Define amount to show
	$Amount = ($a)? intval($a) : 5;

	// Load Template
	$Template = LoadTemplate("newest_members.html");

	// Collect Data
	$NewestMem = $mydb->query("select username,posts,userid from ".CGTABLE_PREFIX."user order by joindate desc limit 0,$Amount");

		while($Member = $mydb->fetch_array($NewestMem)){
		$Data .= ParseTemplate($Template,
							array(
								'username' => $Member['username'],
								'posts'    => vb_number_format($Member['posts']),
								'userid'   => $Member['userid'],
							)
			);
		}

	doOutput();
	}

	// ---------------------------------------------------
	// FUNCTION: output_TopPosters
	// DETAIL:   Outputs Top X posts in order of
        //           highest post count descending. $a
	//           specifies amount to show (Default 5)
	// ---------------------------------------------------

	function output_TopPosters($a = 5){
	global $mydb, $Data;

	// Define amount to show
	$Amount = ($a)? intval($a) : 5;

	// Load Template
	$Template = LoadTemplate("newest_members.html");

	// Collect Data
	$TopPosters = $mydb->query("select username,posts,userid from ".CGTABLE_PREFIX."user order by posts desc limit 0,$Amount");

		while($Member = $mydb->fetch_array($TopPosters)){
		$Data .= ParseTemplate($Template,
							array(
								'username' => $Member['username'],
								'posts'    => vb_number_format($Member['posts']),
								'userid'   => $Member['userid'],
							)
			);
		}

	doOutput();
	}

	// ---------------------------------------------------
	// FUNCTION: output_NewestThreads
	// DETAIL:   Outputs X newest threads ordered by
        //           start date descending. $a
	//           specifies amount to show (Default 5)
        //           and $f can specify certain forums
	//           to grab from (1,3,4), by default it pulls
        //           from all forums.
	// ---------------------------------------------------

	function output_NewestThreads($a = 5,$f = ""){
	global $mydb, $Data;

	// Define amount to show
	$Amount = ($a)? intval($a) : 5;

	// Define Forum(s) To Pull From
	$Forums = ($f)? $f: '';
	$SQL    = '';

		if($Forums){
		$SQL = " where forumid in({$Forums})";
		}

	// Load Template
	$Template = LoadTemplate("newest_threads.html");

	// Collect Data
	$NewestThreads = $mydb->query("select * from ".CGTABLE_PREFIX."thread{$SQL} order by dateline desc limit 0,$Amount");

		while($Thread = $mydb->fetch_array($NewestThreads)){
		$Data .= ParseTemplate($Template,
							array(
								'threadid'     => $Thread['threadid'],
								'threadname'   => $Thread['title'],
								'postuserid'   => $Thread['postuserid'],
								'postusername' => $Thread['postusername'],
								'replies'      => vb_number_format($Thread['replycount']),
								'views'        => vb_number_format($Thread['views']),
								'lastposter'   => $Thread['lastposter'],
							)
			);
		}

	doOutput();
	}

	// ---------------------------------------------------
	// FUNCTION: output_NewestReplies
	// DETAIL:   Outputs X newest threads ordered by
        //           last post descending. $a
	//           specifies amount to show (Default 5)
        //           and $f can specify certain forums
	//           to grab from (1,3,4), by default it pulls
        //           from all forums.
	// ---------------------------------------------------

	function output_NewestReplies($a = 5,$f = ""){
	global $mydb, $Data;

	// Define amount to show
	$Amount = ($a)? intval($a) : 5;

	// Define Forum(s) To Pull From
	$Forums = ($f)? $f: '';
	$SQL    = '';

		if($Forums){
		$SQL = " where forumid in({$Forums})";
		}

	// Load Template
	$Template = LoadTemplate("newest_threads.html");

	// Collect Data
	$NewestReplies = $mydb->query("select * from ".CGTABLE_PREFIX."thread{$SQL} order by lastpost desc limit 0,$Amount");

		while($Thread = $mydb->fetch_array($NewestReplies)){
		$Data .= ParseTemplate($Template,
							array(
								'threadid'     => $Thread['threadid'],
								'threadname'   => $Thread['title'],
								'postuserid'   => $Thread['postuserid'],
								'postusername' => $Thread['postusername'],
								'replies'      => vb_number_format($Thread['replycount']),
								'views'        => vb_number_format($Thread['views']),
								'lastposter'   => $Thread['lastposter'],
							)
			);
		}

	doOutput();
	}


	// ---------------------------------------------------
	// FUNCTION: output_News
	// DETAIL:   Outputs the first post from X threads
        //           from a specific forum (ordered by newest
        //           first)
	// ---------------------------------------------------

	function output_News($a = 5,$f = ""){
	global $mydb, $Data, $vbulletin;

	// Define amount to show
	$Amount = ($a)? intval($a) : 5;

	// Define Forum To Pull From
	$Forum = ($f)? intval($f): '';

		if(!$Forum){
		RunError("No specified forum to pull news from.");
		}

	// Load Template
	$Template = LoadTemplate("news.html");

	// Collect Data
	$NewestNews = $mydb->query("
			select t.*,p.pagetext
			from ".CGTABLE_PREFIX."thread t
			left join ".CGTABLE_PREFIX."post p on(p.postid=t.firstpostid)
			where t.forumid = $Forum
			order by dateline desc
			limit 0,$Amount");


	$bbcode_parser =& new vB_BbCodeParser($vbulletin, fetch_tag_list());

		while($News = $mydb->fetch_array($NewestNews)){
		$Data .= ParseTemplate($Template,
							array(
								'threadid'     => $News['threadid'],
								'threadname'   => $News['title'],
								'postuserid'   => $News['postuserid'],
								'postusername' => $News['postusername'],
								'post'         => $bbcode_parser->parse(unhtmlspecialchars($News['pagetext']), $f),
								'comments'     => vb_number_format($News['replycount']),
							)
			);
		}

	doOutput();
	}


	// ---------------------------------------------------
	// FUNCTION: output_UsersOnline
	// DETAIL:   Outputs All Users Online In The Forum
	// ---------------------------------------------------

	function output_UsersOnline(){
	global $mydb, $Data, $vbulletin;

	// Load Template
	$Template = LoadTemplate("users_online.html");

	$cache = array();

	// Collect Data
	$datecut      = TIMENOW - $vbulletin->options['cookietimeout'];
	$UsersOnline = $mydb->query("
		SELECT
			user.username, (user.options) AS invisible, user.usergroupid,
			session.userid,
			IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid
		FROM " . TABLE_PREFIX . "session AS session
		LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
		WHERE session.lastactivity > $datecut and user.userid > 0
		" . iif($vbulletin->options['displayloggedin'] == 1, "ORDER BY username ASC") . "
	");

		while($User = $mydb->fetch_array($UsersOnline)){
			if(!$cache[$User['userid']]){
			$cache[$User['userid']] = $User['userid'];

			$Data .= ParseTemplate($Template,
								array(
									'userid'     => $User['userid'],
									'username'   => $User['username'],
								)
				);
			}
		}

	unset($cache);
	doOutput();
	}

	function doOutput(){
	global $Data, $vbulletin;

	$Data = str_replace('images/',"{$vbulletin->options[bburl]}/images/",$Data);

	echo ParseTemplate($Data,"",1);
	$Data = "";
	}
?>