Extension:PathFunctions

From MediaWiki.org

Jump to: navigation, search
Crystal Clear app error.png

This extension is obsolete!
It has been replaced by core functionality in the MediaWiki software (which was added in version 1.15).

           

Manual on MediaWiki Extensions
List of MediaWiki Extensions
Crystal Clear action run.png
PathFunctions

Release status: beta

Implementation  Parser function
Description A reimplementation of the builtin variables PAGENAME etc. with the ability to specify what page to evaluate on.
Author(s)  Carl Fürstenberg
Last Version  0.99.0 (2007-01-04)
MediaWiki  1.7+
License No license specified
Download N/A

check usage (experimental)

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

Contents

[edit] Example

{{ #PAGENAME: Help:Foo }} gives Foo

[edit] 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 {{ PAGENAME: Help:Foo }}.

[edit] Installation

Add this line to LocalSettings.php:

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

And copy the following to extensions/PathFunctions/PathFunctions.php and extensions/PathFunctions/PathFunctions.i18n.php:

[edit] 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) <azatoth@gmail.com>
 * @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;
}
?>


[edit] PathFunctions.i18n.php

<?php
 
if ( !defined( 'MEDIAWIKI' ) ) {
	die( 'This file is a MediaWiki extension, it is not a valid entry point' );
}
 
$wgPathFunctionsMessages = array();
$wgPathFunctionsMagic = array();
 
$wgPathFunctionsMessages['en'] = array(
	'pathfunc_no_talk' => "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' ),
);
?>

[edit] See also