Back to vBulletin 4.x Add-ons

Who's Online Sidebar Block
Mod Version: 1.00, by grey_goose

vB Version: 4.1.4 Rating: (4 votes - 5.00 average) Installs: 35
Released: 14 Jul 2011 Last Update: Never Downloads: 0
Not Supported Template Edits Translations  

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.

Download

No files for download.

Screenshots

Click image for larger version
Name:	OnlineUserBlock.png
Views:	1397
Size:	31.7 KB
ID:	131010  


vblts.ru supports vBulletin®, 2022-2024