grey_goose
07-13-2011, 10:00 PM
This is tested and working with Everywhere Sidebar 4 VB4 (https://vborg.vbsupport.ru/showthread.php?t=233871)
Step One: Create a Template
ACP > Style Manager > Add New Template
Title: block_online
<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
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_onlineu serbits')) ? 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.
Step One: Create a Template
ACP > Style Manager > Add New Template
Title: block_online
<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
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_onlineu serbits')) ? 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.