Extension:PathFunctions

This extension enables a reimplementation of builtin functions like PAGENAME, but with the possibillity to define the base path.

Example
gives Foo

Configuration
If setting the variable $wgPathFunctionsUseNoPrefixHash to true, then the functions are without the preceeding hash symbol, and more like the built in variables. That is for example.

Installation
Copy the following to extensions/PathFunctions/PathFunctions.php and extensions/PathFunctions/PathFunctions.i18n.php and enable it in LocalSettings.php: require_once( "$IP/extensions/PathFunctions/PathFunctions.php" );

<?php

if ( !defined( 'MEDIAWIKI' ) ) { die( 'This file is a MediaWiki extension, it is not a valid entry point' ); }

/** * A reimplementation of the builtin variables PAGENAME etc. with the ability to specify what page to evaluate on. * If set $wgPathFunctionsUseNoPrefixHash to true, then the functions are without the preceeding hash symbol, and more like the built in variables. * * @package MediaWiki * @subpackage Extensions * * @link http://www.mediawiki.org/wiki/Extension:PathFunctions Documentation * * @author Carl Fürstenberg (AzaToth)  * @copyright Copyright © 2006 Carl Fürstenberg * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */

require_once('PathFunctions.i18n.php');

$wgExtensionFunctions[] = 'wfSetupPathFunctions'; $wgExtensionCredits['parserhook'][] = array( 	'version' => '0.99.0',	'description' => 'A reimplementation of the builtin variables PAGENAME etc. with the ability to specify what page to evaluate on.',	'name' => 'PathFunctions', 	'url' => 'http://www.mediawiki.org/wiki/Extension:PathFunctions',	'author' => 'Carl Fürstenberg (AzaToth)' );

$wgHooks['LanguageGetMagic'][]      = 'wfPathFunctionsLanguageGetMagic';

class ExtPathFunctions {

public function pagename( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getText; }

public function pagenamee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getPartialUrl; }

public function fullpagename( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getPrefixedText; }

public function fullpagenamee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getPrefixedURL; }

public function subpagename( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getSubpageText; }

public function subpagenamee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getSubpageUrlForm; }

public function basepagename( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getBaseText; }

public function basepagenamee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getBaseText; }

public function talkpagename( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; if( !$title->canTalk ) { return wfMsg( 'pathfunc_no_talk', $title->getNsText ); } else { return $title->getTalkPage->getPrefixedText; }	}

public function talkpagenamee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; if( !$title->canTalk ) { return wfMsg( 'pathfunc_no_talk', $title->getNsText ); } else { return $title->getTalkPage->getPrefixedUrl; }	}

public function subjectpagename( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getSubjectPage->getPrefixedText; }

public function subjectpagenamee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return $title->getSubjectPage->getPrefixedUrl; }

public function namespace( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return strtr( $title->getNsText, '_' , ' ' ); }

public function namespacee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return wfUrlencode( $title->getNsText ); }

public function talkspace( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; if( !$title->canTalk ) { return wfMsg( 'pathfunc_no_talk', $title->getNsText ); } else { return strtr( $title->getTalkNsText, '_' , ' ' ); }	}

public function talkspacee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; if( !$title->canTalk ) { return wfMsg( 'pathfunc_no_talk', $title->getNsText ); } else { return wfUrlencode( $title->getTalkNsText ); }	}

public function subjectspace( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return strtr( $title->getSubjectNsText, '_' , ' ' ); }

public function subjectspacee( &$parser, $path = false ) { $path = trim($path); $title = $path ? Title::newFromText( $path ) : $parser->mTitle; return wfUrlencode( $title->getSubjectNsText ); } }

function wfSetupPathFunctions { global $wgParser, $wgExtPathFunctions, $wgMessageCache, $wgPathFunctionsMessages, $wgPathFunctionsUseNoPrefixHash; $wgExtPathFunctions = new ExtPathFunctions; $flags = $wgPathFunctionsUseNoPrefixHash ? SFH_NO_HASH : 0;

$wgParser->setFunctionHook( 'pagename'		, array( &$wgExtPathFunctions, 'pagename' )			, $flags ); $wgParser->setFunctionHook( 'pagenamee'		, array( &$wgExtPathFunctions, 'pagenamee' )		, $flags ); $wgParser->setFunctionHook( 'fullpagename'	, array( &$wgExtPathFunctions, 'fullpagename' )		, $flags ); $wgParser->setFunctionHook( 'fullpagenamee'	, array( &$wgExtPathFunctions, 'fullpagenamee' )	, $flags ); $wgParser->setFunctionHook( 'subpagename'	, array( &$wgExtPathFunctions, 'subpagename' )		, $flags ); $wgParser->setFunctionHook( 'subpagenamee'	, array( &$wgExtPathFunctions, 'subpagenamee' )		, $flags ); $wgParser->setFunctionHook( 'basepagename'	, array( &$wgExtPathFunctions, 'basepagename' )		, $flags ); $wgParser->setFunctionHook( 'basepagenamee'	, array( &$wgExtPathFunctions, 'basepagenamee' )	, $flags ); $wgParser->setFunctionHook( 'talkpagename'	, array( &$wgExtPathFunctions, 'talkpagename' )		, $flags ); $wgParser->setFunctionHook( 'talkpagenamee'	, array( &$wgExtPathFunctions, 'talkpagenamee' )	, $flags ); $wgParser->setFunctionHook( 'subjectpagename', array( &$wgExtPathFunctions, 'subjectpagename' )	, $flags ); $wgParser->setFunctionHook( 'subjectpagenamee', array( &$wgExtPathFunctions, 'subjectpagenamee' )	, $flags ); $wgParser->setFunctionHook( 'namespace'		, array( &$wgExtPathFunctions, 'namespace' )		, $flags ); $wgParser->setFunctionHook( 'namespacee'	, array( &$wgExtPathFunctions, 'namespacee' )		, $flags ); $wgParser->setFunctionHook( 'talkspace'		, array( &$wgExtPathFunctions, 'talkspace' )		, $flags ); $wgParser->setFunctionHook( 'talkspacee'	, array( &$wgExtPathFunctions, 'talkspacee' )		, $flags ); $wgParser->setFunctionHook( 'subjectspace'	, array( &$wgExtPathFunctions, 'subjectspace' )		, $flags ); $wgParser->setFunctionHook( 'subjectspacee'	, array( &$wgExtPathFunctions, 'subjectspacee' )	, $flags );

foreach( $wgPathFunctionsMessages as $key => $value ) { $wgMessageCache->addMessages( $value, $key ); } }

function wfPathFunctionsLanguageGetMagic( &$magicWords, $langCode ) { global $wgPathFunctionsMagic; if( !in_array( $langCode, $wgPathFunctionsMagic ) ) { $langCode = 'en'; }

$magicWords = array_merge( $magicWords, $wgPathFunctionsMagic[$langCode] ); return true; } ?>

 "No talk pages in namespace $1", );

$wgPathFunctionsMagic['en'] = array(	'pagename' => array( 0, 'pagename' ),	'pagenamee' => array( 0, 'pagenamee' ),	'fullpagename' => array( 0, 'fullpagename' ),	'fullpagenamee' => array( 0, 'fullpagenamee' ),	'subpagename' => array( 0, 'subpagename' ),	'subpagenamee' => array( 0, 'subpagenamee' ),	'basepagename' => array( 0, 'basepagename' ),	'basepagenamee' => array( 0, 'basepagenamee' ),	'talkpagename' => array( 0, 'talkpagename' ),	'talkpagenamee' => array( 0, 'talkpagenamee' ),	'subjectpagename' => array( 0, 'subjectpagename' ),	'subjectpagenamee' => array( 0, 'subjectpagenamee' ),	'namespace' => array( 0, 'namespace' ),	'namespacee' => array( 0, 'namespacee' ),	'talkspace' => array( 0, 'talkspace' ),	'talkspacee' => array( 0, 'talkspacee' ),	'subjectspace' => array( 0, 'subjectspace' ),	'subjectspacee' => array( 0, 'subjectspacee' ), ); ?>