Extension talk:Whos online

Latest comment: 15 years ago by Subfader in topic This is crap!

Blank Page edit

After installation, adding the <whosonline></whosonline> just results in a blank page for me (kills MediaWiki 1.11). Other extensions that I'm using: CategoryTree, LabeledSectionTransclusion, ParserFunctions, Treeview (version 3.6.2, 2007-09-02). SeanFromIT 19:48, 12 December 2007 (UTC)Reply

The following discussion has been transferred from Meta-Wiki.
Any user names refer to users of that site, who are not necessarily users of MediaWiki.org (even if they share the same username).

is there any way to show a list of users that are online?

Andy

03:59, 9 July 2006 (UTC) - Smcnaught - I am also available on irc.chekmate.org #MediaWiki:


It would be possible by modifying the following:

  $sql = "select * from $wgDBprefix"."online where userid != 0";
  $res = $dbr->query ( $sql ) ;
  $registered = $dbr->numRows($res) + 0;

  $output = "Guests: $guests Registered: $registered";

  return $output;

to:

  $sql = "select username from $wgDBprefix"."online where userid != 0";
  $res = $dbr->query ( $sql ) ;
  $registered = $dbr->numRows($res) + 0;
  while( $row = $dbr->fetchObject( $res ) ){
    $Userlist .= "[[User:".$row->username."|".$row->username."]] ";
  }
  $dbr->freeResult( $res );
  $output = "Guests: $guests Registered: $registered ($Userlist)";
  return $wgOut->parse($output);

Produces something like:

Guests: 1 Registered: 1 (Smcnaught)

'Refreshing' the WhosOnline results edit

The extension works fine but, it will not show the current status because the page that should show the status is cached. When I save that page again it is rerenderen and the correct status is shown. What I now did is set $wgEnableParserCache = false; in includes/DefaultSettings.php. surely there must be a less 'drastic' way to do this for only 1 page.

Vic

15:22, 26 July 2006 (UTC) - Smcnaught - I am also available on irc.chekmate.org #MediaWiki :


There is an easier way. This has been tested, I forgot to update the wiki pages. Add the following code to the renderWhosOnline function:

 function renderWhosOnline( $input ) {
   global $wgUser, $wgDBprefix, $wgOut;
   global $wgOutputEncoding;
  
   // ###### INVALIDATE CACHE ######
   global $wgTitle;
   $ts = mktime();
   $now = gmdate("YmdHis", $ts + 120);
   $ns = $wgTitle->getNamespace();
   $ti = wfStrencode($wgTitle->getDBkey());
   $version = preg_replace("/^([1-9]).([1-9]).*/", "\\1\\2", $wgVersion);
   if ($version>14) $sql = "UPDATE $wgDBprefix"."page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'";
   else             $sql = "UPDATE $wgDBprefix"."cur SET cur_touched='$now' WHERE cur_namespace=$ns AND cur_title='$ti'";
   wfQuery($sql, DB_WRITE, "");

Installation step 3 edit

Hello, I'm a bit of a n00b when it comes to these things. Installing an extension, OK, editing LocalSettings.php, fine, but editing the DB, eek! Is the PHP script as an alternative to the first part, or are they both necessary?

What exactly should I be looking for to edit the DB? In my web interface of my webhost it has links to 'restore', 'modify' and 'delete' the DB. It also has this advice: mysql -u username -ppassword -h hostname databasename for accessing a DB from the commandline. Is this what I should be doing? Any advice? :) cheers, pfctdayelise 11:32, 1 August 2006 (UTC)Reply


The part labelled as "You can use the following PHP script for installing" is another users suggestion on how to not worry about building the new table manually but to have MediaWiki do it for you. I have not reviewed or tested the code at this stage and it is an alternative. It will make the installation a lot easier for new users if MediaWiki does it for you, so I will be adding the code to the actual installation process. If you give me 24 hours or so, I should be able to update the documentation appropriately. -- (Smcnaught) 15:33, 1 August 2006 (UTC).Reply
OK that would be awesome. Thanks, I'll wait. :) --pfctdayelise 02:50, 2 August 2006 (UTC)Reply
I have updated the docs. I hope that it helps you. (Smcnaught) 02:36, 4 August 2006 (UTC)Reply

Maybe it would be a good idea to integrate the installation into function renderWhosOnline( $input ). If the first SQL-query (DELETE) fails, call an install function. Yet this would require the wiki user to have CREATE rights.

  $username = $wgUser->getName();
  $tblname = $wgDBprefix."online";

  $sql = "DELETE from $tblname WHERE username = '$username' OR timestamp < '$old' ";
  $db =& wfGetDB( DB_WRITE );
  if ( $db !== false ) {
    $ret = $db->query( $sql, '', true );
    }
  else {
    $ret = false;
    }
  if ( false === $ret ) {
    $sql =
      "CREATE TABLE $tblname (
      `userid` int(5) NOT NULL default '0',
      `username` varchar(255) NOT NULL default '',
      `timestamp` varchar(255) NOT NULL default ''
      ) TYPE=MyISAM ";
    $ret = wfQuery($sql, DB_WRITE, "");
    }

  $sql = "INSERT INTO $wgDBprefix"."online (userid,username,timestamp) VALUES ('$userid','$username','$now')";

-- Xypron 05:52, 4 August 2006 (UTC)Reply

Has this been tested in your environment Xypron? (Smcnaught) 16:48, 4 August 2006 (UTC)Reply

Allowing wikiuser to have CREATE access edit

Here is how you can configure your wikiuser to have CREATE access to your wikidb:

[user@server extensions]$ mysql -u root -p wikidb
Enter password:
mysql> REVOKE ALL PRIVILEGES ON * . * FROM 'wikiuser'@'localhost';
mysql> REVOKE GRANT OPTION ON * . * FROM 'wikiuser'@ 'localhost';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON * . * TO 'wikiuser'@ 'localhost';

-- (Smcnaught) 17:13, 4 August 2006 (UTC) - I am also available on irc.chekmate.org #MediaWikiReply

Testing... edit

Hmm. I put the script in my extensions folder and ran it (well, actually just put its address in my web browser. I think that's the same thing?). It told me this:

Warning: array_push() [function.array-push]: First argument should be an array in [...]/extensions/talkright.php on line 23
CREATE TABLE bb_online ( `userid` int(5) NOT NULL default '0', `username` varchar(255) NOT NULL default '', `timestamp` varchar(255) NOT NULL default '' ) TYPE=MyISAM
Notice: Table bb_online created. in [...]/extensions/build_whois.php on line 26

So I'm kinda confused. It gave me a warning about an unrelated extension. (Talkright_extension)

I put <whosonline> on a page in my wiki to see if it worked anyway. No dice. :) It said this:

A database query syntax error has occurred. This may indicate a bug in the software. The last attempted database query was:

    (SQL query hidden)

from within function "". MySQL returned error "1146: Table 'brunswickbug.bb_cur' doesn't exist ([...])". 

So, there you go, I guess it didn't create it, or something weird happened...

any ideas? pfctdayelise 13:00, 4 August 2006 (UTC)Reply

This was a command line script, not one to be executed by the browser.
[user@server extensions]$ php build_whois.php
If you execute this script from the command line it should work. I would attempt this first, but I am going to be adding Xypron's recommendation to place the table build within the actual script. (Smcnaught) 16:54, 4 August 2006 (UTC) - I am also available on irc.chekmate.org #MediaWikiReply

2 <whosonline> tags on 1 page gives error edit

Thanks for the nice extention.

I have a problem when putting 2 tags on one page like: <whosonline></whosonline> <whosonline></whosonline>

This will geve me the following result

�UNIQ5b2252c1f9be61f-whosonline-4754b5f228bd3c2200000001-QINU

Guests: 0 Registered: 1 (Slagter ) 

Any idea on what might cause this? 80.126.111.189 14:31, 10 August 2006 (UTC)Reply


Test this out and let me know. -- 16:55, 10 August 2006 (UTC) - Smcnaught :
First, I did not have this issue on my system. I believe the following should preserve the parser, which is where this issue is from. Since I can not reproduce the issue it is difficult for me to test this to ensure it is working properly.


Within the function renderWhosOnline, replace:

#  return $output;
return $wgOut->parse($output);

With:

 return $wgOut->parse($output,
                       $output,
                       $parser->mTitle,
                       $parser->mOptions,
                       false,
                       false
                       );


Thanks but this does not seem to solve the problem. What I did next was just to put only a return $wgOut->parse('TEST'); in the function renderWhosOnline() just after the line $timeperiod = 3600; # number of seconds. Still the strange output. I suspect the $wgOut->parse to be the problem.
I am using MediaWiki 1.7.1 and php5.1.2 on Ubuntu Linux.
Since I am not a programmer this is way to deep in MediaWiki source code. I think I just have to stick to only use only one <WhosOnline> element per page. 80.126.111.189 08:46, 15 August 2006 (UTC)Reply

Problem when using on same page as Calendar extension edit

�UNIQ86c6cec5b91c52b-calendar-25468dc92042a4c000000001-QINU


Same problem as above but it seems to happen on any page using multiple extensions.


I have the same problem with �UNIQ6ff3d09f1277620e-whosonline-00000005-QINU but I use one <WhosOnline></WhosOnline> only. Funny thing: I did my own extension <actualdate> for 1.7.x which worked fine till now. When I updated yesterday 1.8.3 to 1.10.1 both extensions worked fine, first(besides the php warnings, see last comment on this page). When I today restarted the server I suddenly recieve this UNIQ6ff3d09f1277620e-whosonline-00000005-QINU and UNIQ6ff3d09f1277620e-actualdate-00000007-QINU for the 2 extensions. Tried to remove one, but still have the problems with only one extension left on the page. Any ideas, please? Thanks a lot!

--PyroM 08:20, 6 September 2007 (UTC)Reply


table "wiki_online" not updating edit

I don't know if I just never noticed it or what, but I recently upgraded from the old version (the one that didn't show you who was online) of this extension to the new version. Now it seems to always just show me as logged on. I checked the SQL tables and found "wiki_online" and I was the only entry in there. I deleted it and had everyone log back on, the only entry that repopulated was my username. Does anyone know how this can be fixed or if this is normal? I think it has something to do with this extension. Thanks!

Update edit

Upon closer inspection, it seems as though if I log in with a different account on my PC it updates the table ok, but anyone else using a different PC it doesn't. I've even had them log out, clear cookies/cache, and log back in...still no updates to the table. Any ideas?

The timeperiod is presently set to 3600 seconds (1 hour), thus it will show how many unique users have accessed the site within the last hour. The script is not meant to be accurate to the minute as a user may be online and working on creating a page but not cause any updates to the site for a long period. It sounds like the issue you are experiencing is by design. :-) (Smcnaught 04:55, 13 October 2006 (UTC))Reply

Update for MediaWiki 1.9.0 edit

When using Whos Online extension, the page gives error. It seems that the line "$ti = wfStrencode($wgTitle->getDBkey());" is a problem. The function wfStrencode() is not defined as global function in MDW 1.9.0 (and 1.9.1). -- Paul.D


Yes, I can confirm - same qith wfQuery(). In support forums of MediaWiki I was informed that these methods are very obsolete and have been removed in 1.9.0. In 1.8.3 all was fine. I was suggested to use "methods on database objects" instead. Since I am not a MediaWiki programmer I don't know what that means. Can please anybody help? I do not update my wiki from 1.8.3 to 1.9.0 because of this highly needed extension. Thanks a lot -- 84.191.1.166 10:22, 21 January 2007 (UTC) PyroReply


mm.. to avoid such errors you may do the following... insert

require_once ("includes/DatabaseFunctions.php");
require_once ("extensions/WhosOnline.php");

instead of

require_once ("extensions/WhosOnline.php");

as described in 6.3 chapter of installation

DatabaseFunctions.php is not included by default and was written for back-compatibility

Update for MediaWiki 1.10? edit

Is it possible to get an update for version 1.10? Many thanks in advance. I really like this MediaWiki extension. /Minken

Ditto. Upgraded to 1.10 and this extension is not functional. --PurplePopple 03:41, 9 July 2007 (UTC)Reply

Undefined variable $Userlist edit

$Userlist is used without initialization. Fixed in article --212.64.224.249 17:52, 22 May 2007 (UTC)Reply

Upgrade for MediaWiki 1.10 edit

I (with the help of User:Nikerabbit) made the code work with MediaWiki 1.10 and 1.11 as well.

<?php 
# WhosOnline MediaWiki extension
#
# by Shannon McNaught 22.06.2006
# http://www.chekmate.org/wiki/index.php/Projects
 
# Installation:
#  * Add new table to your wikidb.
#  * put this file (WhosOnline.php) into the extension directory of your mediawiki installation
#  * add the following to the end of LocalSettings.php: include("extensions/WhosOnline.php");
#
# Example:
#    <whosonline></whosonline>
#
 
#install extension hook
$wgExtensionFunctions[] = "wfWhosOnlineExtension";
 
#extension hook callback function
function wfWhosOnlineExtension() {
  global $wgParser;
 
  #install parser hook for <whosonline> tags
  $wgParser->setHook( "whosonline", "renderWhosOnline" );
}
 
#parser hook callback function
function renderWhosOnline( $input, $values, &$parser ) {
  global $wgUser, $wgDBprefix, $wgVersion;
 
  // ###### INVALIDATE CACHE ######
  global $wgTitle;
  $Userlist = "";
  $ts = mktime();
  $now = gmdate("YmdHis", $ts + 120);
  $ns = $wgTitle->getNamespace();
  $ti = wfStrencode($wgTitle->getDBkey());
  $version = preg_replace("/^([1-9]).([1-9]).*/", "\\1\\2", $wgVersion);
#  if ($version>14) $sql = "UPDATE $wgDBprefix"."page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'";
#  else             $sql = "UPDATE $wgDBprefix"."cur SET cur_touched='$now' WHERE cur_namespace=$ns AND cur_title='$ti'";
 
 $sql = "UPDATE $wgDBprefix"."page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'";
  wfQuery($sql, DB_WRITE, "");
 
  $timeperiod = 3600; # number of seconds
 
  $DefaultEncoding = "ISO-8859-1";
  $DisableCache = true;
  $ts = mktime();
  $now = gmdate("YmdHis", $ts);
  $old = gmdate("YmdHis", $ts-$timeperiod);
  $userid = $wgUser->getID();
  $username = $wgUser->getName();
  $tblname = $wgDBprefix."online";
 
  $sql = "DELETE from $tblname WHERE username = '$username' OR timestamp < '$old' ";
  $db =& wfGetDB( DB_WRITE );
  if ( $db !== false ) {
    $ret = $db->query( $sql, '', true );
  }
  else {
    $ret = false;
  }
  if ( false === $ret ) {
    $sql =
      "CREATE TABLE $tblname (
      `userid` int(5) NOT NULL default '0',
      `username` varchar(255) NOT NULL default '',
      `timestamp` varchar(255) NOT NULL default ''
      ) TYPE=MyISAM ";
    $ret = wfQuery($sql, DB_WRITE, "");
  }
 
  $sql = "INSERT INTO $wgDBprefix"."online (userid,username,timestamp) VALUES ('$userid','$username','$now')";
  $output = $sql;
  wfQuery($sql, DB_WRITE, "");
  $sql = "select * from $wgDBprefix"."online where userid = 0";
  $dbr =& wfGetDB( DB_SLAVE );
 
 
  $res = $dbr->query ( $sql ) ;
  $guests = $dbr->numRows($res) + 0;
  $sql = "select username from $wgDBprefix"."online where userid != 0";
  $res = $dbr->query ( $sql ) ;
  $registered = $dbr->numRows($res) + 0;
  while( $row = $dbr->fetchObject( $res ) ){
    $Userlist .= " [[User:".$row->username."|".$row->username."]] ";
  }
 
  $dbr->freeResult( $res );
 
  $output = "Guests: $guests Registered: $registered ($Userlist)";
 
#  return $output;
$title = $parser->getTitle();
$options = $parser->getOptions();
$output = $parser->parse($output, &$title, $options, true, false);
return $output->getText();
}

I think it is time to update the code. However, I'm not sure what is the best optino to also keep the code for the previous version (and whether we should keep it at all)? Huji 18:26, 1 September 2007 (UTC)Reply

Some fixes - the extension is <whosonline> - not <rss>. Also removed the closing tag per rev:23531. --Sayuri 18:30, 1 September 2007 (UTC)Reply
The new and improved extension works great for me. Thanks a lot guys! 67.103.106.172 21:39, 1 September 2007 (UTC)Reply

Thanks a lot, but some php warnings edit

Thanks a lot, the last code and the including of the DatabaseFunctions made it run again on 1.10.1 But, I get some PHP warnings which is very annoying in the page header ;)

Is there a way to avoid this, please? Thanks a lot

--PyroM 08:20, 6 September 2007 (UTC)Reply
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in E:\WOS\www\wikiroot\extensions\WhosOnline.php on line 97


Here's an update that works for MediaWiki 1.11.0 edit

- Now the function works without adding <whosonline></whosonline>. It will simply show up at the bottom of pages.

Updated by Zedomax

WhosOnline Mediawiki extension version 2.0

Here's an update to the original WhosOnline MediaWiki extension.


Code:

<?php
# WhosOnline Mediawiki extension version 2.0
#
# originally by Shannon McNaught 22.06.2006
# updated for MediaWiki 1.11.0 by Max Lee 17.11.2007
#
#
#
# - version 2.0 updated by Max Lee
# - added wgHook to automatically add Who's Online at the bottom of pages.
# - version 2.0.1 updated by Chad MacDonald
# - added require_once ("includes/DatabaseFunctions.php");  to include legacy database functions

# updated version website: http://zedomax.com/wiki
# original website: http://www.chekmate.org/wiki/index.php/Projects

# Installation:
#  * Add the follwing table to your wiki database through myPhpAdmin
#         CREATE TABLE `online` (
#      `userid` int(5) NOT NULL default '0',
#      `username` varchar(255) NOT NULL default '',
#      `timestamp` varchar(255) NOT NULL default ''
#      ) TYPE=MyISAM;
#  * put this file (WhosOnline.php) into the extension directory of your mediawiki installation
#  * add the following to the end of LocalSettings.php: include("extensions/WhosOnline.php");
#  * add the following to the end of LocalSettings.php: require_once ("includes/DatabaseFunctions.php");
#
# Tested with MediaWiki 1.11.0



$wgHooks['BeforePageDisplay'][] = array("renderWhosOnline");



#parser hook callback function
function renderWhosOnline( &$out) {
  global $wgUser, $wgDBprefix,$wgVersion,$wgOut;
  global $wgOutputEncoding;

  // ###### INVALIDATE CACHE ######
  global $wgTitle;
  $ts = mktime();
  $now = gmdate("YmdHis", $ts + 120);
  $ns = $wgTitle->getNamespace();
  $ti = wfStrencode($wgTitle->getDBkey());
  $version = preg_replace("/^([1-9]).([1-9]).*/", "\\1\\2", $wgVersion);
  $sql = "UPDATE page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'";
  //yyif ($version>14) $sql = "UPDATE $wgDBprefix"."page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'";
  //else             $sql = "UPDATE $wgDBprefix"."cur SET cur_touched='$now' WHERE cur_namespace=$ns AND cur_title='$ti'";
  wfQuery($sql, DB_WRITE, "");

  $timeperiod = 3600; # number of seconds

  $DefaultEncoding = "ISO-8859-1";
  $DisableCache = true;
  $ts = mktime();
  $now = gmdate("YmdHis", $ts);
  $old = gmdate("YmdHis", $ts-$timeperiod);
  $userid = $wgUser->getID();
  $username = $wgUser->getName();
  $tblname = "online";

  $sql = "DELETE from online WHERE username = '$username' OR timestamp < '$old' ";
  $db =& wfGetDB( DB_WRITE );
  if ( $db !== false ) {
    $ret = $db->query( $sql, '', true );
  }
  else {
    $ret = false;
  }
  if ( false === $ret ) {
    $sql =
      "CREATE TABLE $tblname (
      `userid` int(5) NOT NULL default '0',
      `username` varchar(255) NOT NULL default '',
      `timestamp` varchar(255) NOT NULL default ''
      ) TYPE=MyISAM ";
    $ret = wfQuery($sql, DB_WRITE, "");
  }

  $sql = "INSERT INTO online (userid,username,timestamp) VALUES ('$userid','$username','$now')";
  $output = $sql;
  wfQuery($sql, DB_WRITE, "");
  $sql = "select * from online where userid = 0";
  $dbr =& wfGetDB( DB_SLAVE );


  $res = $dbr->query ( $sql ) ;
  $guests = $dbr->numRows($res) + 0;
  $sql = "select username from online where userid != 0";
  $res = $dbr->query ( $sql ) ;
  $registered = $dbr->numRows($res) + 0;
  while( $row = $dbr->fetchObject( $res ) ){
    $Userlist .= "[[User:".$row->username."|".$row->username."]] ";
  }

  $dbr->freeResult( $res );

  $output = "Guests: $guests Registered: $registered ($Userlist)";

  $output = $wgOut->parse($output);
  $out->mBodytext.=$output;
  return $out;
}

?>

MW 1.11, WhosOnline + Database Functions edit

... is not working. I'm receiving a error that, when using in conjunction with DatabaseFunctions, a certain table (wikidb.page) does not exist. I've googled it, but found nothing that's conclusive. And before I check the tracker, I wanted to know if anyone knows about this error. 66.168.102.87 06:38, 14 December 2007 (UTC)Reply

Actually, i have the same problem as well. As you mentioned, i also searched google for an answer to no avail. A solution would be nice, i loved this extention in my earlier version wiki. Would be nice to have it again. As an after thought, like the user above, mine looked for the same table but under a different name. The prefix was the name of the database, not the page table prefix. --87.245.39.229 12:52, 14 December 2007 (UTC)Reply

I have the same problem as both above. The database is looking for a table called xxx.page. Using version 1.12.0rc1

Use Extension:WhosOnline instead. --Sayuri 19:50, 30 March 2008 (UTC)Reply

Update for MediaWiki 1.12.0 edit

If you are receiving the Fatal error: Call to undefined function wfStrencode() error message then use the following replacement for WhosOnline.php.

Code:

<?php
# WhosOnline MediaWiki extension
#
# by Shannon McNaught 22.06.2006
# http://www.chekmate.org/wiki/index.php/Projects
 
# Installation:
#  * Add new table to your wikidb.
#  * put this file (WhosOnline.php) into the extension directory of your mediawiki installation
#  * add the following to the end of LocalSettings.php: include("extensions/WhosOnline.php");
#
# Example:
#    <whosonline></whosonline>
#
 
#install extension hook
$wgExtensionFunctions[] = "wfWhosOnlineExtension";
 
#extension hook callback function
function wfWhosOnlineExtension() {
  global $wgParser;
 
  #install parser hook for <whosonline> tags
  $wgParser->setHook( "whosonline", "renderWhosOnline" );
}
 
#parser hook callback function
function renderWhosOnline( $input ) {
  global $wgUser, $wgDBprefix,$wgVersion,$wgOut;
  global $wgOutputEncoding;
 
  // ###### INVALIDATE CACHE ######
  //global $wgTitle;
  //$Userlist = "";
  //$ts = mktime();
  //$now = gmdate("YmdHis", $ts + 120);
  //$ns = $wgTitle->getNamespace();
  //$ti = wfStrencode($wgTitle->getDBkey());
  //$version = preg_replace("/^([1-9]).([1-9]).*/", "\\1\\2", $wgVersion);
  //if ($version>14) $sql = "UPDATE $wgDBprefix"."page SET page_touched='$now' WHERE page_namespace=$ns AND page_title='$ti'";
  //else             $sql = "UPDATE $wgDBprefix"."cur SET cur_touched='$now' WHERE cur_namespace=$ns AND cur_title='$ti'";
  //wfQuery($sql, DB_WRITE, "");
 
 //### BUG FIX FOR Fatal error: Call to undefined function wfstrencode() ###
  global $wgTitle;
  $dbr =& wfGetDB( DB_SLAVE );
  $Userlist = "";
  $ts = mktime();
  $now = gmdate("YmdHis", $ts + 120);
  $ns = $wgTitle->getNamespace();
  $ti = $dbr->addQuotes($wgTitle->getDBkey());
  $version = preg_replace("/^([1-9]).([1-9]).*/", "\\1\\2", $wgVersion);
  $sql = "UPDATE $wgDBprefix" . "page SET page_touched='$now' WHERE page_namespace=$ns AND page_title=$ti";
  $dbr->query($sql, __METHOD__);
 
 
  $timeperiod = 3600; # number of seconds
 
  $DefaultEncoding = "ISO-8859-1";
  $DisableCache = true;
  $ts = mktime();
  $now = gmdate("YmdHis", $ts);
  $old = gmdate("YmdHis", $ts-$timeperiod);
  $userid = $wgUser->getID();
  $username = $wgUser->getName();
  $tblname = $wgDBprefix."online";
 
  $sql = "DELETE from $tblname WHERE username = '$username' OR timestamp < '$old' ";
  $db =& wfGetDB( DB_WRITE );
  if ( $db !== false ) {
    $ret = $db->query( $sql, '', true );
  }
  else {
    $ret = false;
  }
  if ( false === $ret ) {
    $sql =
      "CREATE TABLE $tblname (
      `userid` int(5) NOT NULL default '0',
      `username` varchar(255) NOT NULL default '',
      `timestamp` varchar(255) NOT NULL default ''
      ) TYPE=MyISAM ";
    //$ret = wfQuery($sql, DB_WRITE, "");
    $ret = $dbr->query($sql, __METHOD__);
  }
 
  $sql = "INSERT INTO $wgDBprefix"."online (userid,username,timestamp) VALUES ('$userid','$username','$now')";
  $output = $sql;
  //wfQuery($sql, DB_WRITE, "");
  $dbr->query($sql, __METHOD__);
  $sql = "select * from $wgDBprefix"."online where userid = 0";
  $dbr =& wfGetDB( DB_SLAVE );
 
 
  $res = $dbr->query ( $sql ) ;
  $guests = $dbr->numRows($res) + 0;
  $sql = "select username from $wgDBprefix"."online where userid != 0";
  $res = $dbr->query ( $sql ) ;
  $registered = $dbr->numRows($res) + 0;
  while( $row = $dbr->fetchObject( $res ) ){
    $Userlist .= "[[User:".$row->username."|".$row->username."]] ";
  }
 
  $dbr->freeResult( $res );
 
  $output = "Guests: $guests Registered: $registered ($Userlist)";
 
#  return $output;
return $wgOut->parse($output);
}

To create the database table it uses just run the following SQL (rather than GRANT CREATE):

CREATE TABLE `online` (
  `userid` int(5) NOT NULL default '0',
  `username` varchar(255) NOT NULL default '',
  `TIMESTAMP` varchar(14) NOT NULL default '',
  PRIMARY KEY  USING HASH (`userid`,`username`),
  KEY `TIMESTAMP` USING BTREE (`TIMESTAMP`)
) ENGINE=HEAP DEFAULT CHARSET=latin1;

Ensure you have the following in your LocalSettings.php a the bottom:

include("$IP/extensions/WhosOnline/WhosOnline.php");

Then create a new page called Whos's Online (or whatever you prefer) and insert the following Wikitext:

<b>Users Online</b>: <whosonline></whosonline>

Customise it from there. I get wierd strings in my Contents box and section titles e.g. UNIQ67834a0d3a2c9af6-h... if I use the above Wikitext on an existing page. I haven't yet figured out how to fix that.

Jamesm 23:26, 12 April 2008 (UTC)Reply

Or easier, just use Extension:WhosOnline. It adds a special page plus is i18n-able, unlike this. And Extension:WhosOnline was designed by professionals for MediaWiki 1.11+. --Sayuri 23:32, 12 April 2008 (UTC)Reply

This is crap! edit

As crap as the Extension:WhosOnline. Sorry for my tone but I wasted so much time on those, then I found Extension:CurrentUsers which worked straight away, although it has the same UNIQ... include problem as mentioned above. --Subfader 13:48, 10 May 2008 (UTC)Reply

Return to "Whos online" page.