MyBB Community Forums

Full Version: Code Modification Request: Remove Specific Users from Who's Online List
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I'd like to prevent certain members from showing up on the who's online list. I think I need to edit online.php at the line that says:

WHERE s.time>'$timesearch' 

What code would I add to that to stop specific uids from being on the list?

As an aside: I also have the "who has been online today" plugin and would like to do the same with it. I'm not certain which part of the onlinetoday.php plugin would need to be modified to achieve that. Any help would be appreciated!
Simply setting ghost / invisible mode for those users is not an option?

For a hardcoded list of UIDs you're looking for something along the lines of "WHERE ([...]) AND uid NOT IN (1,2,3)". [...] being the original conditions already in the WHERE. If just uid doesn't work it may have to be s.uid or u.uid or whatever the table that has the uid field is referred to in the particular query.
No, invisible mode won't achieve what I'm hoping to do.

Thanks for the suggestions. After some trial and error, this worked:

AND s.uid NOT IN (uid here)

It hid the specified users from /online.php (the page you get when you click "complete list" beside the text that says "who's online"). I made the same modification to index.php to hide the specified users from the who's online list on the main page.

Thank you for your help! Smile

I don't suppose anyone would know which line I need to modify in onlinetoday.php?

<?php
/**
 *	Copyright © 2006-2008 CraKteR, crakter [at] gmail [dot] com
 *
 *	This program is free software: you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation, either version 3 of the License, or
 *	(at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 *	@version $Id: onlinetoday.php 29 2008-08-14 19:00:36Z CraKteR $
 *	@copyright $LastChangedDate: 2008-08-14 21:00:36 +0200 (to, 14 aug 2008) $
 *	@author CraKteR <[email protected]>
 */

if(!defined("IN_MYBB"))
{
    die("This file cannot be accessed directly.");
}

$plugins->add_hook('index_start', 'add_onlinetoday', 1000000);

function onlinetoday_info()
{
	return array(
		"name"			=>	"Show the users that has been online today",
		"description"	=>	"Shows the users that has been online within 24 hours.",
		"website"		=>	"",
		"author"		=>	"CraKteR",
		"authorsite"	=>	"mailto:[email protected]",
		"version"		=>	"2.0",
		"guid"			=>	"c2f1dd8db9b4f3898cb58f5ed02f9b53",
		"compatibility" =>	"16*",
	);
}

function onlinetoday_activate()
{
	global $db;
	$template = array(
		"tid"		=> NULL,
		"title"		=> "online_today_index",
		"template"	=> "<tr>
	<td class=\"tcat\"><strong>{\$lang->whos_online_today}</strong> [<a href=\"online.php?action=today\">{\$lang->complete_list}</a>]</td>
</tr>
<tr>
	<td class=\"trow1\"><span class=\"smalltext\">{\$lang->online_note_today}<br />{\$onlinemembers}</span></td>
</tr>",
		"sid"		=> "-1"
	);
	$db->insert_query("templates", $template);

	require MYBB_ROOT."/inc/adminfunctions_templates.php";
	find_replace_templatesets('index_boardstats', '#{\$whosonline}#', "{\$whosonline}\n{\$online_today}");
}

function onlinetoday_deactivate()
{
	global $db;
	$db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='online_today_index'");

	require MYBB_ROOT."/inc/adminfunctions_templates.php";

	find_replace_templatesets('index_boardstats', '#(\n?){\$online_today}#', '', 0);
}

function add_onlinetoday()
{
	global $db, $mybb, $templates, $online_today, $lang, $theme;
	$online_today = '';

	if($mybb->settings['showwol'] != 0 && $mybb->usergroup['canviewonline'] != 0)
	{
		$lang->load("onlinetoday");
		$lang->load("index");
		$timesearch = time() - 24*60*60;
		$queries = array();
		$queries[] = $db->simple_select(
			"users u LEFT JOIN ".TABLE_PREFIX."sessions s ON (u.uid=s.uid)", 
			"s.sid, s.ip, s.time, s.location, u.uid, u.username, u.invisible, u.usergroup, u.displaygroup",
			"u.lastactive > $timesearch ORDER BY u.username ASC, s.time DESC"
		);
		$queries[] = $db->simple_select(
			"sessions s LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid)",
			"s.sid, s.ip, s.uid, s.time, s.location, u.username, u.invisible, u.usergroup, u.displaygroup",
			"s.time>'$timesearch' ORDER BY u.username ASC, s.time DESC"
		);
		$comma = $onlinemembers = '';
		$membercount = $guestcount = $anoncount = 0;
		$doneusers = $ips = array();
		foreach($queries as $query)
		{
			while($user = $db->fetch_array($query))
			{
				if(isset($user['sid']))
				{
					$botkey = strtolower(str_replace("bot=", '', $user['sid']));
				}

				if($user['uid'] > 0)
				{
					if($doneusers[$user['uid']] < $user['time'] || !$doneusers[$user['uid']])
					{
						if($user['invisible'] == 1)
						{
							++$anoncount;
						}
						++$membercount;
						if($user['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $user['uid'] == $mybb->user['uid'])
						{
							$invisiblemark = ($user['invisible'] == 1) ? "*" : "";
							$user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']);
							$user['profilelink'] = build_profile_link($user['username'], $user['uid']);
							eval("\$onlinemembers .= \"".$templates->get("index_whosonline_memberbit", 1, 0)."\";");
							$comma = ", ";
						}

						if(isset($user['time']))
						{
							$doneusers[$user['uid']] = $user['time'];
						}
						else
						{
							$doneusers[$user['uid']] = $user['lastactive'];
						}
					}
				}
				else if(strstr($user['sid'], "bot=") !== false && $session->bots[$botkey] && !in_array($user['ip'], $ips))
				{
					$onlinemembers .= $comma.format_name($session->bots[$botkey], $session->botgroup);
					$comma = ", ";
					++$botcount;
				}
				else
				{
					++$guestcount;
					$guests[] = $user['ip'];
				}
			}
		}

		$onlinecount = $membercount + $guestcount;
		$onlinebit = ($onlinecount != 1) ? $lang->online_online_plural : $lang->online_online_singular;
		$memberbit = ($membercount != 1) ? $lang->online_member_plural : $lang->online_member_singular;
		$anonbit = ($anoncount != 1) ? $lang->online_anon_plural : $lang->online_anon_singular;
		$guestbit = ($guestcount != 1) ? $lang->online_guest_plural : $lang->online_guest_singular;
		$lang->online_note_today = $lang->sprintf($lang->online_note_today, my_number_format($onlinecount), $onlinebit, 24, my_number_format($membercount), $memberbit, my_number_format($anoncount), $anonbit, my_number_format($guestcount), $guestbit);
		eval("\$online_today = \"".$templates->get("online_today_index")."\";");
	}
}
?>
That file has exactly the same queries you already modified (search for $timesearch) so it should work the same way. Although I don't quite understand how that's different from invisible mode.
$timesearch appears a few times but I don't see that exact string. Every time I try to insert the code it results in an error.
after u.lastactive > $timesearch and s.time>'$timesearch' (that's the WHERE in $db->simple_query()). Before the ORDER BY which technically isn't supposed to be there, but may work anyway...
It sort of worked. The specified users also still show up when you click "complete list" on online today.