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:
parent
2117c11cbc
commit
073c4bf16f
4 changed files with 34 additions and 1 deletions
|
|
@ -149,6 +149,7 @@ class MagicWord {
|
|||
'contentlanguage',
|
||||
'numberofadmins',
|
||||
'numberofviews',
|
||||
'cascadingsources',
|
||||
);
|
||||
|
||||
/* Array of caching hints for ParserCache */
|
||||
|
|
|
|||
|
|
@ -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, '|' );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 ) );
|
||||
|
|
|
|||
|
|
@ -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' ),
|
||||
|
|
|
|||
Loading…
Reference in a new issue