Extension:PathFunctions

From MediaWiki.org

Jump to: navigation, search
Manual on MediaWiki Extensions
List of MediaWiki Extensions
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
Version 0.99.0 (2007-01-04)
MediaWiki 1.7+
Download N/A
Added rights GPL 2.0

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

Personal tools