Extension:DynamicFunctions

From MediaWiki.org
Jump to: navigation, search
MediaWiki extensions manual
Crystal Clear action run.png
DynamicFunctions

Release status: experimental

Implementation Parser function
Description This extension defines an additional set of parser functions.
Author(s) Ross McClure (Algorithmtalk)
Latest version 1.1 (2006-11-25)
MediaWiki 1.8+
Database changes No
License No license specified
Download see below
Hooks used
LanguageGetMagic

Translate the DynamicFunctions extension if it is available at translatewiki.net

Check usage and version matrix; code metrics

The DynamicFunctions extension defines an additional set of parser functions that provide dynamic functionality and cannot be cached.

Install[edit | edit source]

require_once("$IP/extensions/DynamicFunctions/DynamicFunctions.php");

Usage[edit | edit source]

This module defines four functions: arg, ip, rand, and skin. All of these functions operate in constant time.

#arg:[edit | edit source]

The #arg function returns the value of the given URL argument. The syntax is:

{{#arg:parameter name|default}}.

The default parameter is optional; if defined, it is returned when the argument does not exist.

Thus, instead of including a page for given parameter values, this allows linking to a page for given parameter values. Syntax for linking: external link style with zero or more times "&parameter name=parameter value" added to the URL. The link can be to the same page with different parameter values, or to a different page. In the former case the new values can depend on the old ones.

#ip:[edit | edit source]

The #ip function returns the IP address of the current user. No arguments are required. This should correspond to the IP in the last line of Special:Version.

#rand:[edit | edit source]

The #rand function returns a random integer value. The syntax is:

{{#rand:a|b}}

#rand returns a value between a and b, inclusive. If b is omitted, #rand returns a value between 1 and a (hence, {{#rand:6}} emulates a dice roll).

The function is PHP function mt-rand.

#skin:[edit | edit source]

The #skin function returns the name of the current skin. No arguments are required.

Code[edit | edit source]

<?php
/*
 
 Defines a subset of parser functions that must clear the cache to be useful.
 
 {{#arg:name}} Returns the value of the given URL argument.  Can also be called
               with a default value, which is returned if the given argument is
               undefined or blank: {{#arg:name|default}}
 
 {{#ip:}}      Returns the current user IP.
 
 {{#rand:a|b}} Returns a random value between a and b, inclusive.  Can
               also be called with a single value; {{#rand:6}} returns a
               random value between 1 and 6 (equivalent to a dice roll).
 
 {{#skin:}}    Returns the name of the current skin.
 
 Author: Algorithm [http://meta.wikimedia.org/wiki/User:Algorithm]
 Version 1.1 (11/25/06)
 
*/
 
# Not a valid entry point, skip unless MEDIAWIKI is defined
if ( !defined( 'MEDIAWIKI' ) ) {
   die( 'This file is a MediaWiki extension, it is not a valid entry point' );
}
 
$wgExtensionFunctions[] = 'wfDynamicFunctions';
$wgExtensionCredits['parserhook'][] = array(
	'name' => 'DynamicFunctions',
	'version' => '1.1',
	'url' => 'https://www.mediawiki.org/wiki/Extension:DynamicFunctions',
	'author' => 'Ross McClure',   
	'description' => 'Defines an additional set of parser functions.'
);
 
$wgHooks['LanguageGetMagic'][] = 'wfDynamicFunctionsLanguageGetMagic';
 
function wfDynamicFunctions() {
	global $wgParser, $wgExtDynamicFunctions;
 
	$wgExtDynamicFunctions = new ExtDynamicFunctions();
 
	$wgParser->setFunctionHook( 'arg', array( &$wgExtDynamicFunctions, 'arg' ) );
	$wgParser->setFunctionHook( 'ip', array( &$wgExtDynamicFunctions, 'ip' ) );
	$wgParser->setFunctionHook( 'rand', array( &$wgExtDynamicFunctions, 'rand' ) );
	$wgParser->setFunctionHook( 'skin', array( &$wgExtDynamicFunctions, 'skin' ) );
}
 
function wfDynamicFunctionsLanguageGetMagic( &$magicWords, $langCode ) {
	switch ( $langCode ) {
	default:
		$magicWords['arg']    = array( 0, 'arg' );
		$magicWords['ip']     = array( 0, 'ip' );
		$magicWords['rand']   = array( 0, 'rand' );
		$magicWords['skin']   = array( 0, 'skin' );
	}
	return true;
}
 
class ExtDynamicFunctions {
 
	function arg( &$parser, $name = '', $default = '' ) {
		global $wgRequest;
		$parser->disableCache();
		return $wgRequest->getVal($name, $default);
	}
 
	function ip( &$parser ) {
		$parser->disableCache();
		return wfGetIP();
	}
 
	function rand( &$parser, $a = 0, $b = 1 ) {
		$parser->disableCache();
		return mt_rand( intval($a), intval($b) );
	}
 
	function skin( &$parser ) {
		global $wgUser, $wgRequest;
		$parser->disableCache();
		return $wgRequest->getVal('useskin', $wgUser->getOption('skin'));
	}
}

See also[edit | edit source]