Thread: Add-On Releases - v3 Arcade Stats Widget or Forum Sideblock
View Single Post
  #11  
Old 09-14-2011, 08:29 PM
Gemma's Avatar
Gemma Gemma is offline
 
Join Date: Apr 2004
Location: Scotland
Posts: 1,229
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I've also been able to use almost all the same templates and php code to make a forum sideblock.

1. Install the product as normal.

2. Create a new template called v3a_CMS_arcadestats1 and add the following code
Code:
<div>
<table align="left" width="100%">
  <tr><td>{vb:raw as_score_table}</td></tr>
  <tr><td>{vb:raw as_news_table}</td></tr>
  <tr><td>{vb:raw as_random_table}</td></tr>
  <tr><td>{vb:raw as_champs_table}</td></tr>
  <tr><td>{vb:raw as_recent_table}</td></tr>
  <tr><td>{vb:raw as_played_table}</td></tr>
  <tr><td>{vb:raw as_popular_table}</td></tr>
</table>
</div>
3. Go to AdminCP > Forums & Moderators > Forum Block Manager > Add Block
Title - Arcade Stats (or whatever)
Content Type - PHP
Content -
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_arcadestats1') . '";');
$templater = vB_Template::create('v3a_CMS_arcadestats1');
$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();
As with the CMS block you can comment parts out if you don't want them to display, for example if you only want the latest scores and latest champions you would comment the rest of the blocks out like so
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);
Attached Images
File Type: jpg sidebar.jpg (30.2 KB, 0 views)
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04856 seconds
  • Memory Usage 1,842KB
  • Queries Executed 12 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (3)bbcode_code
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_attachment
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_attachment
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete