vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 4.x Add-ons (https://vborg.vbsupport.ru/forumdisplay.php?f=245)
-   -   vBulletin Forum Sideblocks - Who's Online Sidebar Block (https://vborg.vbsupport.ru/showthread.php?t=266778)

grey_goose 07-13-2011 10:00 PM

Who's Online Sidebar Block
 
1 Attachment(s)
This is tested and working with Everywhere Sidebar 4 VB4

Step One: Create a Template
ACP > Style Manager > Add New Template
Title: block_online
Code:

<div class="blocksubhead">{vb:rawphrase x_members_and_y_guests, {vb:raw numberregistered}, {vb:raw numberguest}}</div>
<div class="blockrow">
  <vb:if condition="$activeusers">
    <vb:each from="activeusers" value="loggedin">
      <a class="username" href="{vb:link member, {vb:raw loggedin}}">{vb:raw loggedin.musername}</a>{vb:raw loggedin.invisiblemark}{vb:raw loggedin.buddymark},
    </vb:each>
  <vb:else />
    {vb:rawphrase no_x_online, {vb:rawphrase members}}
  </vb:if>
</div>
<div class="blockrow">{vb:rawphrase most_users_ever_online_was_x_y_at_z, {vb:raw recordusers}, {vb:raw recorddate}, {vb:raw recordtime}}</div>

Step Two: Create the Block
ACP > Forums & Moderators > Forum Blocks Manager > Add Block
Select Block Type: Custom HTML/PHP
Title: Online Users
Cache Time (in minutes): 5
Active: Yes
Content Type: PHP
Code:

global $vbulletin;
global $db;

// space separated list of group ids to filter out
$filter_groupids = "";

// members logged into forums
$loggedinusers = array();
$activeusers = array();
$invisiblecount = 0;

// Logged in user
if ($vbulletin->userinfo['userid'])
  {
    $loggedinusers[$vbulletin->userinfo['userid']] = array(
      'userid' => $vbulletin->userinfo['userid'],
      'username' => $vbulletin->userinfo['username'],
      'invisiblemark' => ($vbulletin->userinfo['invisible']) ? '*' : '',
      'displaygroupid' => $vbulletin->userinfo['displaygroupid'],
      'musername' => fetch_musername($vbulletin->userinfo)
    );
  }

$getonline = $db->query_read("
                        SELECT session.userid, username, usergroupid, (user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, membergroupids
                        FROM " . TABLE_PREFIX . "session AS session
                        LEFT JOIN " . TABLE_PREFIX . "user AS user USING (userid)
                        WHERE session.lastactivity > " . (TIMENOW - $vbulletin->options['cookietimeout']) . "
                        ORDER BY username ASC
                ");

$filter_groupids = explode(" ", $filter_groupids);
while ($onlineusers = $db->fetch_array($getonline))
  {
    if (!$onlineusers['userid'])
      {
        $numberguest++;
      }
    else
      {
        if ($onlineusers['invisible'])
          {
            if (($vbulletin->userinfo['permissions']['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canseehidden']) OR $onlineusers['userid'] == $vbulletin->userinfo['userid'])
              {
                $onlineusers['invisiblemark'] = '*';
              }
            else
              {
                $invisiblecount++;
                continue;
              }
          }

        $groupids = array();
        array_push($groupids, $onlineusers['usergroupid'], $onlineusers['displaygroupid']);
        $groupids = array_merge
          (
          $groupids,
          explode(" ", $onlineusers['membergroupids'])
          );
        foreach($groupids as $value)
          if(in_array($value, $filter_groupids))
            continue;
        $loggedinusers[$onlineusers['userid']] = $onlineusers;
      }
  }

$db->free_result($getonline);
unset($onlineusers);

// ##### Process Online Users Module
$numberregistered = sizeof($loggedinusers);
$show['comma_leader'] = false;
$show['divrow'] = false;

if (!empty($loggedinusers))
  {
    foreach ($loggedinusers AS $loggedinuserid => $loggedin)
      {
        $loggedin['musername'] = fetch_musername($loggedin);

        ($hook = vBulletinHook::fetch_hook('vba_cmps_module_onlineuserbits')) ? eval($hook) : false;

        $activeusers[$loggedinuserid] = $loggedin;
      }
  }

// Process the total first, before number_format is applied
$totalonline = $numberregistered + $numberguest + $invisiblecount;

if ($vbulletin->maxloggedin['maxonline'] <= $totalonline)
  {
    $vbulletin->maxloggedin['maxonline'] = $totalonline;
    $vbulletin->maxloggedin['maxonlinedate'] = TIMENOW;
    build_datastore('maxloggedin', serialize($vbulletin->maxloggedin), 1);
  }

$totalonline = vb_number_format($totalonline);
$numberregistered = vb_number_format($numberregistered + $invisiblecount);
$numberguest = vb_number_format($numberguest);

$recordusers = vb_number_format($vbulletin->maxloggedin['maxonline']);
$recorddate = vbdate($vbulletin->options['dateformat'], $vbulletin->maxloggedin['maxonlinedate'], 1);
$recordtime = vbdate($vbulletin->options['timeformat'], $vbulletin->maxloggedin['maxonlinedate']);

// print everything
$templater = vB_Template::create('block_online');
$templater->register('activeusers', $activeusers);
$templater->register('altbgclass', $altbgclass);
$templater->register('bgclass', $bgclass);
$templater->register('numberguest', $numberguest);
$templater->register('numberregistered', $numberregistered);
$templater->register('recorddate', $recorddate);
$templater->register('recordtime', $recordtime);
$templater->register('recordusers', $recordusers);
$content = $templater->render();
unset($loggedinusers, $activeusers);
return $content;

Line 5 of the block can be edited to exclude usergroups from displaying at:
$filter_groupids = "(insert numbers here)";

Enjoy.

CaneInsider 07-14-2011 01:02 AM

Installed. Anyway to turn off showing who is online? I have over 750 members logged in so it makes my sidebar go down a long way....

Khriz 07-14-2011 02:43 AM

<a href="https://vborg.vbsupport.ru/showthread.php?t=233965" target="_blank">https://vborg.vbsupport.ru/showthread.php?t=233965</a> ?

grey_goose 07-14-2011 10:47 AM

CI: Time permitting, I'll give it a go

Khriz: We never could get that to work with ESB, this one does *shrug*

Khriz 07-14-2011 02:03 PM

I will test it :)
I will try to block lateral statistics
I want to have a sidebar similar to xenforo ^ ^

grey_goose 07-14-2011 03:38 PM

Prove what? There's a screenshot and installs, it works.

Done trolling now ?

voglermc 07-14-2011 04:13 PM

A cms block would be cool too! Thanks and nominated/rated!

grey_goose 07-14-2011 08:29 PM

Thanks voglermc!

Unfortunately a cms block won't be forthcoming from me... we just have the forums (not the suite) and use mediawiki for our content management.

Macgiber 07-14-2011 08:40 PM

Installed

grey_goose 07-16-2011 02:56 PM

Quote:

Originally Posted by CaneInsider (Post 2220272)
Installed. Anyway to turn off showing who is online? I have over 750 members logged in so it makes my sidebar go down a long way....

Here you go.

Replace your block content entirely with this, then add your usergroup numbers to:

// space separated list of group ids to filter out
$filter_groupids = "";


Code:

global $vbulletin;
global $db;

// space separated list of group ids to filter out
$filter_groupids = "";

// members logged into forums
$loggedinusers = array();
$activeusers = array();
$invisiblecount = 0;

// Logged in user
if ($vbulletin->userinfo['userid'])
  {
    $loggedinusers[$vbulletin->userinfo['userid']] = array(
      'userid' => $vbulletin->userinfo['userid'],
      'username' => $vbulletin->userinfo['username'],
      'invisiblemark' => ($vbulletin->userinfo['invisible']) ? '*' : '',
      'displaygroupid' => $vbulletin->userinfo['displaygroupid'],
      'musername' => fetch_musername($vbulletin->userinfo)
    );
  }

$getonline = $db->query_read("
                        SELECT session.userid, username, usergroupid, (user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, membergroupids
                        FROM " . TABLE_PREFIX . "session AS session
                        LEFT JOIN " . TABLE_PREFIX . "user AS user USING (userid)
                        WHERE session.lastactivity > " . (TIMENOW - $vbulletin->options['cookietimeout']) . "
                        ORDER BY username ASC
                ");

$filter_groupids = explode(" ", $filter_groupids);
while ($onlineusers = $db->fetch_array($getonline))
  {
    if (!$onlineusers['userid'])
      {
        $numberguest++;
      }
    else
      {
        if ($onlineusers['invisible'])
          {
            if (($vbulletin->userinfo['permissions']['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canseehidden']) OR $onlineusers['userid'] == $vbulletin->userinfo['userid'])
              {
                $onlineusers['invisiblemark'] = '*';
              }
            else
              {
                $invisiblecount++;
                continue;
              }
          }

        $groupids = array();
        array_push($groupids, $onlineusers['usergroupid'], $onlineusers['displaygroupid']);
        $groupids = array_merge
          (
          $groupids,
          explode(" ", $onlineusers['membergroupids'])
          );
        foreach($groupids as $value)
          if(in_array($value, $filter_groupids))
            continue;
        $loggedinusers[$onlineusers['userid']] = $onlineusers;
      }
  }

$db->free_result($getonline);
unset($onlineusers);

// ##### Process Online Users Module
$numberregistered = sizeof($loggedinusers);
$show['comma_leader'] = false;
$show['divrow'] = false;

if (!empty($loggedinusers))
  {
    foreach ($loggedinusers AS $loggedinuserid => $loggedin)
      {
        $loggedin['musername'] = fetch_musername($loggedin);

        ($hook = vBulletinHook::fetch_hook('vba_cmps_module_onlineuserbits')) ? eval($hook) : false;

        $activeusers[$loggedinuserid] = $loggedin;
      }
  }

// Process the total first, before number_format is applied
$totalonline = $numberregistered + $numberguest + $invisiblecount;

if ($vbulletin->maxloggedin['maxonline'] <= $totalonline)
  {
    $vbulletin->maxloggedin['maxonline'] = $totalonline;
    $vbulletin->maxloggedin['maxonlinedate'] = TIMENOW;
    build_datastore('maxloggedin', serialize($vbulletin->maxloggedin), 1);
  }

$totalonline = vb_number_format($totalonline);
$numberregistered = vb_number_format($numberregistered + $invisiblecount);
$numberguest = vb_number_format($numberguest);

$recordusers = vb_number_format($vbulletin->maxloggedin['maxonline']);
$recorddate = vbdate($vbulletin->options['dateformat'], $vbulletin->maxloggedin['maxonlinedate'], 1);
$recordtime = vbdate($vbulletin->options['timeformat'], $vbulletin->maxloggedin['maxonlinedate']);

// print everything
$templater = vB_Template::create('block_online');
$templater->register('activeusers', $activeusers);
$templater->register('altbgclass', $altbgclass);
$templater->register('bgclass', $bgclass);
$templater->register('numberguest', $numberguest);
$templater->register('numberregistered', $numberregistered);
$templater->register('recorddate', $recorddate);
$templater->register('recordtime', $recordtime);
$templater->register('recordusers', $recordusers);
$content = $templater->render();
unset($loggedinusers, $activeusers);
return $content;



All times are GMT. The time now is 01:09 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01136 seconds
  • Memory Usage 1,799KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (3)bbcode_code_printable
  • (1)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete