Personal tools


Extension:CurrentUsers.php

From OrganicDesign

Jump to: navigation, search
<?php
# Extension:CurrentUsers
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
# - Author: [http://www.organicdesign.co.nz/nad User:Nad]
# - Started: 2007-07-25
 
if (!defined('MEDIAWIKI')) die('Not an entry point.');
 
define('CURRENTUSERS_VERSION','1.0.3, 2008-03-27');
 
$egCurrentUsersMagic           = 'currentusers';
$egCurrentUsersTemplate        = 'CurrentUsers';
$egCurrentUsersTimeout         = 60;
 
$wgExtensionFunctions[]        = 'efSetupCurrentUsers';
$wgHooks['LanguageGetMagic'][] = 'efCurrentUsersLanguageGetMagic';
 
$wgExtensionCredits['parserhook'][] = array(
	'name'        => 'CurrentUsers',
	'author'      => '[http://www.organicdesign.co.nz/nad User:Nad]',
	'description' => 'An example extension made with [http://www.organicdesign.co.nz/Template:Extension Template:Extension]',
	'url'         => 'http://www.mediawiki.org/wiki/Extension:CurrentUsers',
	'version'     => CURRENTUSERS_VERSION
	);
 
# Called from $wgExtensionFunctions array when initialising extensions
function efSetupCurrentUsers() {
	global $wgUser,$wgParser,$egCurrentUsers,$egCurrentUsersTimeout,$egCurrentUsersMagic;
	$wgParser->setFunctionHook($egCurrentUsersMagic,'efCurrentUsersMagic');
	if (strtolower($_REQUEST['title']) == 'robots.txt') $bot = 'bot';
	else $bot = '';
	$file = dirname(__FILE__).'/CurrentUsers.txt';
	$data = file($file);
	$h = strftime('%H');
	$m = strftime('%M');
	$now = $h*60+$m;
	$user = $wgUser->getUserPage()->getText();
	$egCurrentUsers = array("$h:$m:$user");
        $bot = '';
	foreach ($data as $item) {
		list($h,$m,$u,$b) = split(':',trim($item));
		$age = $now-$h*60-$m;
		if ($age < 0) $age += 1440;
		if ($u == $user && $b == 'bot') $bot = $b;
		if ($u != '' && $u != $user && $age < $egCurrentUsersTimeout) $egCurrentUsers[] = "$h:$m:$u:$b";
		}
	$egCurrentUsers[0] .= ":$bot";
	file_put_contents($file,join("\n",$egCurrentUsers));
	}
 
# Needed in MediaWiki >1.8.0 for magic word hooks to work properly
function efCurrentUsersLanguageGetMagic(&$magicWords,$langCode = 0) {
	global $egCurrentUsersMagic;
	$magicWords[$egCurrentUsersMagic] = array(0,$egCurrentUsersMagic);
	return true;
	}
 
function efCurrentUsersMagic(&$parser) {
	global $egCurrentUsers,$egCurrentUsersTemplate, $wgTitle;
	$parser->disableCache();
	$users = '';
	$guests = 0;
	$bots = 0;
	foreach ($egCurrentUsers as $item) {
		list($h,$m,$u,$b) = split(':',$item);
		if (User::isIP($u)) $b ? $bots++ : $guests++;
		else $users .= "{"."{"."$egCurrentUsersTemplate|$h:$m|$u|}"."}\n";
		}
	if ($guests) $users .= "{"."{"."$egCurrentUsersTemplate|Guests||$guests}"."}\n";
	if ($bots)   $users .= "{"."{"."$egCurrentUsersTemplate|Robots||$bots}"."}\n";
	$users =  $parser->preprocess($users,$wgTitle,$parser->mOptions);
        return array(
			$users,
			'found'   => true,
			'nowiki'  => false,
			'noparse' => false,
			'noargs'  => false,
			'isHTML'  => false
			);
	}