Add CASCADINGSOURCES parser function

Add {{CASCADINGSOURCES}}, which gives a list of cascading-protected pages
that cause a given page to be protected. This is an expensive parser
function.

Change-Id: I0e9556d53d9a78bc02848c775cb667294726cea1
This commit is contained in:
Jackmcbarn 2014-01-02 13:27:29 -05:00
parent 2117c11cbc
commit 073c4bf16f
4 changed files with 34 additions and 1 deletions

View file

@ -149,6 +149,7 @@ class MagicWord {
'contentlanguage',
'numberofadmins',
'numberofviews',
'cascadingsources',
);
/* Array of caching hints for ParserCache */

View file

@ -54,7 +54,7 @@ class CoreParserFunctions {
'talkpagename', 'talkpagenamee', 'subjectpagename',
'subjectpagenamee', 'pageid', 'revisionid', 'revisionday',
'revisionday2', 'revisionmonth', 'revisionmonth1', 'revisionyear',
'revisiontimestamp', 'revisionuser',
'revisiontimestamp', 'revisionuser', 'cascadingsources',
);
foreach ( $noHashFunctions as $func ) {
$parser->setFunctionHook( $func, array( __CLASS__, $func ), SFH_NO_HASH );
@ -1118,4 +1118,32 @@ class CoreParserFunctions {
$rev = self::getCachedRevisionObject( $parser, $t );
return $rev ? $rev->getUserText() : '';
}
/**
* Returns the sources of any cascading protection acting on a specified page.
* Pages will not return their own title unless they transclude themselves.
* This is an expensive parser function and can't be called too many times per page.
*
* @param Parser $parser
* @param string $title
*
* @return string
* @since 1.23
*/
public static function cascadingsources( $parser, $title = '' ) {
$titleObject = Title::newFromText( $title );
if ( !( $titleObject instanceof Title ) ) {
$titleObject = $parser->mTitle;
}
$names = array();
if ( $parser->incrementExpensiveFunctionCount() ) {
$sources = $titleObject->getCascadeProtectionSources();
foreach ( $sources[0] as $sourceTitle ) {
$names[] = $sourceTitle->getText();
}
}
return implode( $names, '|' );
}
}

View file

@ -3031,6 +3031,9 @@ class Parser {
case 'contentlanguage':
global $wgLanguageCode;
return $wgLanguageCode;
case 'cascadingsources':
$value = CoreParserFunctions::cascadingsources( $this );
break;
default:
$ret = null;
wfRunHooks( 'ParserGetVariableValueSwitch', array( &$this, &$this->mVarCache, &$index, &$ret, &$frame ) );

View file

@ -363,6 +363,7 @@ $magicWords = array(
'numberingroup' => array( 1, 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( 1, '__STATICREDIRECT__' ),
'protectionlevel' => array( 1, 'PROTECTIONLEVEL' ),
'cascadingsources' => array( 1, 'CASCADINGSOURCES' ),
'formatdate' => array( 0, 'formatdate', 'dateformat' ),
'url_path' => array( 0, 'PATH' ),
'url_wiki' => array( 0, 'WIKI' ),