Extension:DynamicFunctions
This extension stores its source code on a wiki page. Please be aware that this code may be unreviewed or maliciously altered. They may contain security holes, outdated interfaces that are no longer compatible etc. Note: No localisation updates are provided for this extension by translatewiki.net . |
DynamicFunctions Release status: experimental |
|
---|---|
Implementation | Parser function |
Description | Defines an additional set of parser functions |
Author(s) | Ross McClure (Algorithm~mediawikiwikitalk) |
Latest version | 1.1 (2006-11-25) |
MediaWiki | 1.8+ |
Database changes | No |
License | No license specified |
Download | See the code section |
The DynamicFunctions extension defines an additional set of parser functions that provide dynamic functionality and cannot be cached.
Usage
This module defines four functions: arg, ip, rand, and skin. All of these functions operate in constant time.
#arg:
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 "¶meter 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:
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:
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:
The #skin function returns the name of the current skin. No arguments are required.
Installation
- Copy the code into a file and place the file(s) in a directory called
DynamicFunctions
in yourextensions/
folder. - Add the following code at the bottom of your LocalSettings.php file:
require_once "$IP/extensions/DynamicFunctions/DynamicFunctions.php";
- Done – Navigate to Special:Version on your wiki to verify that the extension is successfully installed.
Code
- DynamicFunctions.php
<?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' ), SFH_OBJECT_ARGS );
$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, $frame, $args ) {
$a = isset( $args[0] ) ? $frame->expand( $args[0] ) : 0;
$b = isset( $args[1] ) ? $frame->expand( $args[1] ) : 1;
$parser->disableCache();
if ( is_callable( array( $frame, 'setVolatile' ) ) ) {
$frame->setVolatile(); // see bug #58929
}
return mt_rand( intval($a), intval($b) );
}
function skin( &$parser ) {
global $wgUser, $wgRequest;
$parser->disableCache();
return $wgRequest->getVal('useskin', $wgUser->getOption('skin'));
}
}