Gemma |
03-29-2011 10:00 PM |
v3 Arcade Stats Widget or Forum Sideblock
1 Attachment(s)
What is it?
A widget for users of vB4 Suite (should work with any version of vB 4) and v3 Arcade 2.0.x who want to show some arcade data on their CMS. This is basically the same as the vBadvanced CMPS module KW802 made, all I've done is adapt it for the Suite.
The Widget shows:
Latest Scores, Latest Highscore, Newest X Games, Most Played Games, Most Popular X Games (Rated), Random Game, Top Champions
How To Install
1. Download the attached product file and install it, upload the images to images/arcade.
2. Create New Widget
ADMIN CP > vBulletin CMS > Widgets > Create New Widget
Widget Type: PHP Direct Execution
Title: Arcade Statistics
Description: Widget To Display Arcade Stats On CMS.
Configure The Widget
Paste the following code into the box
Code:
global $vbulletin, $bbcode, $parser, $path, $db;
$g_limit = 5;
$g_champs_limit = 5;
$g_news_limit = 5;
$g_scores_limit = 5;
function get_games ($as_handle, $as_title, $limit) {
global $vbulletin;
switch ($as_handle) {
case 'recent':
$orderby = "dateadded DESC";
break;
case 'played':
$orderby = "sessioncount DESC";
break;
case 'popular':
$orderby = "votepoints DESC";
break;
default:
$orderby = "gameid ASC";
break;
}
$getgames = $vbulletin->db->query("
SELECT games.* FROM " . TABLE_PREFIX . "v3arcade_games AS games
ORDER BY " . $orderby . "
LIMIT $limit
");
while ($game = $vbulletin->db->fetch_array($getgames))
{
$game['gamename'] = fetch_trimmed_title(stripslashes($game['title']),$maxtitlechars);
$game['gamedate'] = vbdate($vbulletin->options['dateformat'], $game['dateadded']);
$getbgrow = exec_switch_bg();
switch ($as_handle) {
case 'recent':
$as_game_data = $game['gamedate'];
break;
case 'played':
$as_game_data = "Played " . $game['sessioncount'] . " times";
break;
case 'popular':
$as_game_data = $game['votepoints'] . " votes";
break;
default:
$as_game_data = "";
break;
}
//eval('$as_gamebits .= "' . fetch_template('v3a_CMS_as_gamebits') . '";');
$templater = vB_Template::create('v3a_CMS_as_gamebits');
$templater->register('as_game_data',$as_game_data);
$templater->register('game',$game);
$as_gamebits .= $templater->render();
}
$vbulletin->db->free_result($getgames);
// eval('$gametable = "' . fetch_template("v3a_CMS_as_{$as_handle}_gametable") . '";');
$templater = vB_Template::create('v3a_CMS_as_' . $as_handle . '_gametable');
$templater->register('as_title',$as_title);
$templater->register('as_gamebits',$as_gamebits);
$gametable = $templater->render();
return $gametable;
}
function get_champs ($limit) {
global $vbulletin;
$champs = $vbulletin->db->query_read("
SELECT COUNT(games.highscorerid) AS count, user.username, user.userid
FROM " . TABLE_PREFIX . "v3arcade_games AS games
LEFT JOIN " . TABLE_PREFIX . "user AS user ON user.userid = games.highscorerid
WHERE user.userid IS NOT NULL
GROUP BY user.username, user.userid
ORDER BY count DESC, user.userid ASC
LIMIT " . $limit
);
$row = '0';
$awards = '0';
$leaders = '0';
while ($champ = $vbulletin->db->fetch_array($champs)) {
$leaders++;
if ($awards != $champ['count']) {
$row = $leaders;
}
$awards = $champ['count'];
$getbgrow = exec_switch_bg();
//eval('$as_champbits .= "' . fetch_template('v3a_CMS_as_champbits') . '";');
$templater = vB_Template::create('v3a_CMS_as_champbits');
$templater->register('getbrow',$getbrow);
$templater->register('champ',$champ);
$as_champbits .= $templater->render();
}
$vbulletin->db->free_result($champs);
//eval('$champstable = "' . fetch_template("v3a_CMS_as_champstable") . '";');
$templater = vB_Template::create('v3a_CMS_as_champstable');
$templater->register('as_champbits',$as_champbits);
$champstable = $templater->render();
return $champstable;
}
function get_random_game () {
global $vbulletin;
$random_game = $vbulletin->db->query_first("
SELECT gameid,title,description,stdimage,highscore,user.userid,user.username
FROM " . TABLE_PREFIX . "v3arcade_games AS games
LEFT JOIN " . TABLE_PREFIX . "user AS user ON user.userid = games.highscorerid
ORDER BY RAND()
LIMIT 1
");
$as_random_gameid = $random_game[gameid];
$as_random_gametitle = $random_game[title];
$as_random_stdimage = $random_game[stdimage];
$as_random_description = $random_game[description];
if($random_game[highscore] == 0)
{
$as_random_highscore = "No Score";
$as_random_highscorer = "";
$as_random_userid = "";
}
else
{
$as_random_highscore = intval($random_game[highscore]);
$as_random_highscorer = "(" . $random_game[username] . ")";
$as_random_userid = $random_game[userid];
}
$vbulletin->db->free_result($random_game);
//eval('$random_table = "' . fetch_template('v3a_CMS_as_random') . '";');
$templater = vB_Template::create('v3a_CMS_as_random');
$templater->register('as_random_gameid',$as_random_gameid);
$templater->register('as_random_gametitle',$as_random_gametitle);
$templater->register('as_random_highscore',$as_random_highscore);
$templater->register('as_random_userid',$as_random_userid);
$templater->register('as_random_highscorer',$as_random_highscorer);
$templater->register('as_random_stdimage',$as_random_stdimage);
$templater->register('as_random_description',$as_random_description);
$random_table = $templater->render();
return $random_table;
}
function get_latest_champs ($limit)
{
global $vbulletin, $bbcode_parser;
//var_dump($vbulletin);
//highlight_file('./modules/arcadestats.php');
//exit;
$news_items = $vbulletin->db->query_read("
SELECT *
FROM " . TABLE_PREFIX . "v3arcade_news
WHERE newstext LIKE '%is the new%'
ORDER BY datestamp DESC
LIMIT $limit
");
while ($news_item = $vbulletin->db->fetch_array($news_items)) {
//$as_news_text = $bbcode_parser->do_parse($news_item['newstext'], 1, 1, 1, 0);
$as_news_text = $news_item['newstext'];
$as_news_text = str_replace("arcade.php", $vbulletin->options['bburl'] . "/arcade.php", $as_news_text);
$as_news_date = vbdate($vbulletin->options['dateformat'],$news_item['datestamp']);
$as_news_time = vbdate($vbulletin->options['timeformat'],$news_item['datestamp']);
$getbgrow = exec_switch_bg();
//eval('$as_newsbits .= "' . fetch_template('v3a_CMS_as_newsbits') . '";');
$templater = vB_Template::create('v3a_CMS_as_newsbits');
$templater->register('getbrow',$getbrow);
$templater->register('as_news_text',$as_news_text);
$templater->register('as_news_date',$as_news_date);
$templater->register('as_news_time',$as_news_time);
$as_newsbits .= $templater->render();
}
$vbulletin->db->free_result($news_items);
//eval('$news_table = "' . fetch_template('v3a_CMS_as_newstable') . '";');
$templater = vB_Template::create('v3a_CMS_as_newstable');
$templater->register('as_newsbits',$as_newsbits);
$news_table = $templater->render();
return $news_table;
}
function get_latest_scores ($limit)
{
global $vbulletin;
$latest_scores = $vbulletin->db->query_read("
SELECT sessions.userid, sessions.gamename, sessions.gameid, sessions.score, sessions.start, sessions.finish,
user.username,
games.title
FROM " . TABLE_PREFIX . "v3arcade_sessions as sessions
LEFT JOIN " . TABLE_PREFIX . "user AS user
ON (sessions.userid = user.userid)
LEFT JOIN " . TABLE_PREFIX . "v3arcade_games as games
on (sessions.gameid = games.gameid)
WHERE valid = 1
AND tourid = 0
AND challengeid = 0
ORDER BY sessions.sessionid DESC
LIMIT $limit
");
while ($latest_score = $vbulletin->db->fetch_array($latest_scores)) {
$as_score_userid = $latest_score['userid'];
$as_score_gameid = $latest_score['gameid'];
$as_score_name = $latest_score['username'];
$as_score_score = floatval($latest_score['score']);
$as_score_gametitle = $latest_score['title'];
$as_score_date = vbdate($vbulletin->options['dateformat'],$latest_score['finish']);
$as_score_time = vbdate($vbulletin->options['timeformat'],$latest_score['finish']);
//echo "foo: $as_score_gametitle<br>\n";
$getbgrow = exec_switch_bg();
//eval('$as_scorebits .= "' . fetch_template('v3a_CMS_as_scorebits') . '";');
$templater = vB_Template::create('v3a_CMS_as_scorebits');
$templater->register('getbrow',$getbrow);
$templater->register('as_score_userid',$as_score_userid);
$templater->register('as_score_name',$as_score_name);
$templater->register('as_score_score',$as_score_score);
$templater->register('as_score_gameid',$as_score_gameid);
$templater->register('as_score_gametitle',$as_score_gametitle);
$templater->register('as_score_date',$as_score_date);
$templater->register('as_score_time',$as_score_time);
$as_scorebits .= $templater->render();
}
$vbulletin->db->free_result($latest_scores);
//eval('$score_table = "' . fetch_template('v3a_CMS_as_scoretable') . '";');
$templater = vB_Template::create('v3a_CMS_as_scoretable');
$templater->register('as_scorebits',$as_scorebits);
$score_table = $templater->render();
return $score_table;
}
$as_score_table = get_latest_scores($g_scores_limit);
$as_news_table = get_latest_champs($g_news_limit);
$as_random_table = get_random_game();
$as_champs_table = get_champs($g_champs_limit);
$as_recent_table = get_games("recent","Most Recent", $g_limit);
$as_played_table = get_games("played","Most Played", $g_limit);
$as_popular_table = get_games("popular","Most Popular", $g_limit);
$collapseobj_arcadestats = $vbcollapse['collapseobj_arcadestats'];
$collapseimg_arcadestats = $vbcollapse['collapseimg_arcadestats'];
//eval('$home[$mods[\'modid\']][\'content\'] .= "' . fetch_template('v3a_CMS_arcadestats') . '";');
$templater = vB_Template::create('v3a_CMS_arcadestats');
$templater->register('as_score_table',$as_score_table);
$templater->register('as_news_table',$as_news_table);
$templater->register('as_random_table',$as_random_table);
$templater->register('as_champs_table',$as_champs_table);
$templater->register('as_recent_table',$as_recent_table);
$templater->register('as_played_table',$as_played_table);
$templater->register('as_popular_table',$as_popular_table);
$output = $templater->render();
Add Widget to a Page
ADMIN CP > vBulletin CMS > Layout manager > Edit
Insert the Welcome widget and place it central
You can also change the amount of data display by adjust these values
Code:
$g_limit = 5;
$g_champs_limit = 5;
$g_news_limit = 5;
$g_scores_limit = 5;
And/or remove certain blocks from the stats by commenting out the relevent code from this section (see attached image for adjusted look)
Code:
$templater->register('as_score_table',$as_score_table);
$templater->register('as_news_table',$as_news_table);
$templater->register('as_random_table',$as_random_table);
$templater->register('as_champs_table',$as_champs_table);
$templater->register('as_recent_table',$as_recent_table);
$templater->register('as_played_table',$as_played_table);
$templater->register('as_popular_table',$as_popular_table);
History
4.0.8 - Initial release on vB.org
4.0.9 - Added images to the header titles
4.1 - Minor change to Champs block
4.1.1 - bug fix regarding tournament scores
4.1.2 - removed challenge scores from appearing in latest score block.
4.1.3 - Linked Latest Scores and Top Champs username to Member Profile Arcade Tab
How To Make Into A Forum Sideblock - https://vborg.vbsupport.ru/showpost....9&postcount=11
Finally, I'm blonde and never done anything like this before, so now you're warned......use at your own risk :eek:
For vBAdvanced Module - http://www.v3arcade.com/forums/showthread.php?t=3502
If anyone wants to further develop any of my addons, you are free to do so.
|