diff --git a/root/portal/block/whois_online.php b/root/portal/block/whois_online.php
index ae39f3d7..ce226ebe 100644
--- a/root/portal/block/whois_online.php
+++ b/root/portal/block/whois_online.php
@@ -26,11 +26,27 @@ if (!defined('IN_PORTAL'))
//
// Grab group details for legend display
-$sql = 'SELECT group_id, group_name, group_colour, group_type
- FROM ' . GROUPS_TABLE . '
- WHERE group_legend = 1
- AND group_type <> ' . GROUP_HIDDEN . '
- ORDER BY group_name ASC';
+if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
+{
+ $sql = 'SELECT group_id, group_name, group_colour, group_type
+ FROM ' . GROUPS_TABLE . '
+ WHERE group_legend = 1
+ ORDER BY group_name ASC';
+}
+else
+{
+ $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
+ FROM ' . GROUPS_TABLE . ' g
+ LEFT JOIN ' . USER_GROUP_TABLE . ' ug
+ ON (
+ g.group_id = ug.group_id
+ AND ug.user_id = ' . $user->data['user_id'] . '
+ AND ug.user_pending = 0
+ )
+ WHERE g.group_legend = 1
+ AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ')
+ ORDER BY g.group_name ASC';
+}
$result = $db->sql_query($sql);
$legend = '';
@@ -40,11 +56,11 @@ while ($row = $db->sql_fetchrow($result))
if ($row['group_name'] == 'BOTS')
{
- $legend .= (($legend) ? ', ' : '') . '' . $user->lang['G_BOTS'] . '';
+ $legend .= (($legend != '') ? ', ' : '') . '' . $user->lang['G_BOTS'] . '';
}
else
{
- $legend .= (($legend) ? ', ' : '') . '' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '';
+ $legend .= (($legend != '') ? ', ' : '') . '' . (($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']) . '';
}
}
$db->sql_freeresult($result);
@@ -60,193 +76,17 @@ $l_online_users = $online_userlist = $l_online_record = '';
if ($config['load_online'] && $config['load_online_time'] && $display_online_list)
{
- $userlist_ary = $userlist_visible = array();
- $logged_visible_online = $logged_hidden_online = $guests_online = $prev_user_id = 0;
- $prev_session_ip = $reading_sql = '';
-
- if (!empty($_REQUEST['f']))
- {
- $f = request_var('f', 0);
-
- // Do not change this (it is defined as _f_={forum_id}x within session.php)
- $reading_sql = " AND s.session_page LIKE '%\_f\_={$f}x%'";
-
- // Specify escape character for MSSQL
- if ($db->sql_layer == 'mssql' || $db->sql_layer == 'mssql_odbc')
- {
- $reading_sql .= " ESCAPE '\\'";
- }
- }
-
- // Get number of online guests
- if (!$config['load_online_guests'])
- {
- if ($db->sql_layer === 'sqlite')
- {
- $sql = 'SELECT COUNT(session_ip) as num_guests
- FROM (
- SELECT DISTINCT s.session_ip
- FROM ' . SESSIONS_TABLE . ' s
- WHERE s.session_user_id = ' . ANONYMOUS . '
- AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
- $reading_sql .
- ')';
- }
- else
- {
- $sql = 'SELECT COUNT(DISTINCT s.session_ip) as num_guests
- FROM ' . SESSIONS_TABLE . ' s
- WHERE s.session_user_id = ' . ANONYMOUS . '
- AND s.session_time >= ' . (time() - ($config['load_online_time'] * 60)) .
- $reading_sql;
- }
- $result = $db->sql_query($sql);
- $guests_online = (int) $db->sql_fetchfield('num_guests');
- $db->sql_freeresult($result);
- }
-
- $sql = 'SELECT u.username, u.user_id, u.user_type, u.user_allow_viewonline, u.user_colour, s.session_ip, s.session_viewonline
- FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . ' s
- WHERE s.session_time >= ' . (time() - (intval($config['load_online_time']) * 60)) .
- $reading_sql .
- ((!$config['load_online_guests']) ? ' AND s.session_user_id <> ' . ANONYMOUS : '') . '
- AND u.user_id = s.session_user_id
- ORDER BY u.username ASC, s.session_ip ASC';
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- // User is logged in and therefore not a guest
- if ($row['user_id'] != ANONYMOUS)
- {
- // Skip multiple sessions for one user
- if ($row['user_id'] != $prev_user_id)
- {
- if ($row['user_colour'])
- {
- $user_colour = ' style="color:#' . $row['user_colour'] . '"';
- $row['username'] = '' . $row['username'] . '';
- }
- else
- {
- $user_colour = '';
- }
-
- if ($row['user_allow_viewonline'] && $row['session_viewonline'])
- {
- $user_online_link = $row['username'];
- $logged_visible_online++;
- }
- else
- {
- $user_online_link = '' . $row['username'] . '';
- $logged_hidden_online++;
- }
-
- if (($row['user_allow_viewonline'] && $row['session_viewonline']) || $auth->acl_get('u_viewonline'))
- {
- if ($row['user_type'] <> USER_IGNORE)
- {
- $user_online_link = '' . $user_online_link . '';
- }
- else
- {
- $user_online_link = ($user_colour) ? '' . $user_online_link . '' : $user_online_link;
- }
-
- $online_userlist .= ($online_userlist) ? ', ' . $user_online_link : $user_online_link;
- }
- }
-
- $prev_user_id = $row['user_id'];
- }
- else
- {
- // Skip multiple sessions for one user
- if ($row['session_ip'] != $prev_session_ip)
- {
- $guests_online++;
- }
- }
-
- $prev_session_ip = $row['session_ip'];
- }
- $db->sql_freeresult($result);
-
- if (!$online_userlist)
- {
- $online_userlist = $user->lang['NO_ONLINE_USERS'];
- }
-
- if (empty($_REQUEST['f']))
- {
- $online_userlist = $user->lang['REGISTERED_USERS'] . ' ' . $online_userlist;
- }
- else
- {
- $l_online = ($guests_online == 1) ? $user->lang['BROWSING_FORUM_GUEST'] : $user->lang['BROWSING_FORUM_GUESTS'];
- $online_userlist = sprintf($l_online, $online_userlist, $guests_online);
- }
-
- $total_online_users = $logged_visible_online + $logged_hidden_online + $guests_online;
-
- if ($total_online_users > $config['record_online_users'])
- {
- set_config('record_online_users', $total_online_users, true);
- set_config('record_online_date', time(), true);
- }
-
- // Build online listing
- $vars_online = array(
- 'ONLINE' => array('total_online_users', 'l_t_user_s'),
- 'REG' => array('logged_visible_online', 'l_r_user_s'),
- 'HIDDEN' => array('logged_hidden_online', 'l_h_user_s'),
- 'GUEST' => array('guests_online', 'l_g_user_s')
- );
-
- foreach ($vars_online as $l_prefix => $var_ary)
- {
- switch (${$var_ary[0]})
- {
- case 0:
- ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_ZERO_TOTAL'];
- break;
-
- case 1:
- ${$var_ary[1]} = $user->lang[$l_prefix . '_USER_TOTAL'];
- break;
-
- default:
- ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_TOTAL'];
- break;
- }
- }
- unset($vars_online);
-
- $l_online_users = sprintf($l_t_user_s, $total_online_users);
- $l_online_users .= sprintf($l_r_user_s, $logged_visible_online);
- $l_online_users .= sprintf($l_h_user_s, $logged_hidden_online);
- $l_online_users .= sprintf($l_g_user_s, $guests_online);
-
- $l_online_record = sprintf($user->lang['RECORD_ONLINE_USERS'], $config['record_online_users'], $user->format_date($config['record_online_date']));
-
- $l_online_time = ($config['load_online_time'] == 1) ? 'VIEW_ONLINE_TIME' : 'VIEW_ONLINE_TIMES';
- $l_online_time = sprintf($user->lang[$l_online_time], $config['load_online_time']);
+ $portal_whois_show = true;
}
else
{
- $l_online_time = '';
+ $portal_whois_show = false;
}
// Assign specific vars
$template->assign_vars(array(
- 'S_DISPLAY_ONLINE_PORTAL_LIST' => true,
- 'TOTAL_ONLINE_USERS' => $total_online_users,
- 'VISIBLE_ONLINE' => $logged_visible_online,
- 'HIDDEN_ONLINE' => $logged_hidden_online,
- 'GUEST_ONLINE' => $guests_online,
- 'RECORD_USERS' => $l_online_record,
- 'LEGEND'=> $legend,
+ 'S_DISPLAY_ONLINE_PORTAL_LIST' => $portal_whois_show,
+ 'LEGEND' => $legend,
));
?>
\ No newline at end of file