|
|
Line 1: |
Line 1: |
− | <?php
| + | {{svn|extensions|/ExtraMagic/ExtraMagic.php}} |
− | /**
| |
− | * ExtraMagic extension - Adds useful variables and parser functions
| |
− | * {{Category:Extensions|ExtraMagic}}{{php}}
| |
− | * See http://www.organicdesign.co.nz/Extension:ExtraMagic.php
| |
− | *
| |
− | * @package MediaWiki
| |
− | * @subpackage Extensions
| |
− | * @author [http://www.organicdesign.co.nz/User:Nad User:Nad]
| |
− | * @copyright © 2007 [http://www.organicdesign.co.nz/User:Nad User:Nad]
| |
− | * @licence GNU General Public Licence 2.0 or later
| |
− | */
| |
− | if (!defined('MEDIAWIKI')) die('Not an entry point.');
| |
− |
| |
− | define('EXTRAMAGIC_VERSION', '2.0.3, 2009-07-20');
| |
− |
| |
− | $wgExtensionCredits['parserhook'][] = array(
| |
− | 'name' => 'ExtraMagic',
| |
− | 'author' => '[http://www.organicdesign.co.nz/User:Nad User:Nad]',
| |
− | 'description' => 'Adds useful variables and parser functions',
| |
− | 'url' => 'http://www.organicdesign.co.nz/Extension:ExtraMagic.php',
| |
− | 'version' => EXTRAMAGIC_VERSION
| |
− | );
| |
− |
| |
− |
| |
− | $wgCustomVariables = array( 'CURRENTUSER', 'CURRENTUSERREALNAME', 'CURRENTLANG', 'CURRENTSKIN', 'IPADDRESS', 'DOMAIN', 'NUMBERINGOFF', 'GUID' );
| |
− |
| |
− | $wgExtensionFunctions[] = 'efSetupExtraMagic';
| |
− | $wgHooks['MagicWordMagicWords'][] = 'efAddCustomVariable';
| |
− | $wgHooks['MagicWordwgVariableIDs'][] = 'efAddCustomVariableID';
| |
− | $wgHooks['LanguageGetMagic'][] = 'efAddCustomVariableLang';
| |
− | $wgHooks['ParserGetVariableValueSwitch'][] = 'efGetCustomVariable';
| |
− |
| |
− | /**
| |
− | * Called from $wgExtensionFunctions array when initialising extensions
| |
− | */
| |
− | function efSetupExtraMagic() {
| |
− | global $wgParser;
| |
− | $wgParser->setFunctionHook( 'REQUEST', 'efExtraMagicExpandRequest', SFH_NO_HASH );
| |
− | }
| |
− |
| |
− | /**
| |
− | * Register magic words
| |
− | */
| |
− | function efAddCustomVariable( &$magicWords ) {
| |
− | global $wgCustomVariables;
| |
− | foreach( $wgCustomVariables as $var ) $magicWords[] = "MAG_$var";
| |
− | return true;
| |
− | }
| |
− |
| |
− | function efAddCustomVariableID( &$variables ) {
| |
− | global $wgCustomVariables;
| |
− | foreach( $wgCustomVariables as $var ) $variables[] = constant( "MAG_$var" );
| |
− | return true;
| |
− | }
| |
− |
| |
− | function efAddCustomVariableLang( &$langMagic, $langCode = 0 ) {
| |
− | global $wgCustomVariables;
| |
− |
| |
− | # Magic words
| |
− | foreach( $wgCustomVariables as $var ) {
| |
− | $magic = "MAG_$var";
| |
− | $langMagic[defined( $magic ) ? constant( $magic ) : $magic] = array( $langCode, $var );
| |
− | }
| |
− |
| |
− | # Parser functions
| |
− | $langMagic['REQUEST'] = array( $langCode, 'REQUEST' );
| |
− |
| |
− | return true;
| |
− | }
| |
− |
| |
− | /**
| |
− | * Expand parser functions
| |
− | */
| |
− | function efExtraMagicExpandRequest( &$parser, $param ) {
| |
− | global $wgRequest;
| |
− | $parser->disableCache();
| |
− | return $wgRequest->getText( $param );
| |
− | }
| |
− |
| |
− | /**
| |
− | * Process variable values
| |
− | */
| |
− | function efGetCustomVariable( &$parser, &$cache, &$index, &$ret ) {
| |
− | switch ( $index ) {
| |
− |
| |
− | case MAG_CURRENTUSER:
| |
− | global $wgUser;
| |
− | $parser->disableCache();
| |
− | $ret = $wgUser->mName;
| |
− | break;
| |
− |
| |
− | case MAG_CURRENTUSERREALNAME:
| |
− | global $wgUser;
| |
− | $parser->disableCache();
| |
− | $ret = $wgUser->getRealName();
| |
− | break;
| |
− | | |
− | case MAG_CURRENTLANG:
| |
− | global $wgUser;
| |
− | $parser->disableCache();
| |
− | $ret = $wgUser->getOption( 'language' );
| |
− | break;
| |
− |
| |
− | case MAG_CURRENTSKIN:
| |
− | global $wgUser;
| |
− | $parser->disableCache();
| |
− | $ret = $wgUser->getOption( 'skin' );
| |
− | break;
| |
− |
| |
− | case MAG_IPADDRESS:
| |
− | $parser->disableCache();
| |
− | $ret = $_SERVER['REMOTE_ADDR'];
| |
− | break;
| |
− |
| |
− | case MAG_DOMAIN:
| |
− | $parser->disableCache();
| |
− | $ret = $_SERVER['SERVER_NAME'];
| |
− | break;
| |
− |
| |
− | case MAG_NUMBERINGOFF:
| |
− | global $wgUser;
| |
− | $wgUser->setOption( 'numberheadings', false );
| |
− | $ret = '';
| |
− | break;
| |
− |
| |
− | case MAG_GUID:
| |
− | $parser->disableCache();
| |
− | $ret = strftime( '%Y%m%d', time() ) . '-' . substr( strtoupper( uniqid('', true) ), -5 );
| |
− | break;
| |
− |
| |
− | }
| |
− | return true;
| |
− | } | |