*
* @todo FIXME: Another class handles sending the whole page to the client.
*
- * Some comments comes from a pairing session between Zak Greant and Ashar Voultoiz
+ * Some comments comes from a pairing session between Zak Greant and Antoine Musso
* in November 2010.
*
* @todo document
// @todo FIXME: Next variables probably comes from the resource loader
var $mModules = array(), $mModuleScripts = array(), $mModuleStyles = array(), $mModuleMessages = array();
var $mResourceLoader;
+ var $mJsConfigVars = array();
/** @todo FIXME: Is this still used ?*/
var $mInlineMsg = array();
// Parser related.
var $mContainsOldMagic = 0, $mContainsNewMagic = 0;
- /// lazy initialised, use parserOptions()
+ /**
+ * lazy initialised, use parserOptions()
+ * @var ParserOptions
+ */
protected $mParserOptions = null;
/**
* Instead a new RequestContext should be created and it will implicitly create
* a OutputPage tied to that context.
*/
- function __construct( RequestContext $context = null ) {
+ function __construct( IContextSource $context = null ) {
if ( $context === null ) {
# Extensions should use `new RequestContext` instead of `new OutputPage` now.
wfDeprecated( __METHOD__ );
* @param $name string
*/
public function setHTMLTitle( $name ) {
- $this->mHTMLtitle = $name;
+ if ( $name instanceof Message ) {
+ $this->mHTMLtitle = $name->setContext( $this->getContext() )->text();
+ } else {
+ $this->mHTMLtitle = $name;
+ }
}
/**
* This function automatically sets \<title\> to the same content as \<h1\> but with all tags removed.
* Bad tags that were escaped in \<h1\> will still be escaped in \<title\>, and good tags like \<i\> will be dropped entirely.
*
- * @param $name string
+ * @param $name string|Message
*/
public function setPageTitle( $name ) {
+ if ( $name instanceof Message ) {
+ $name = $name->setContext( $this->getContext() )->text();
+ }
+
# change "<script>foo&bar</script>" to "<script>foo&bar</script>"
# but leave "<i>foobar</i>" alone
$nameWithTags = Sanitizer::normalizeCharReferences( Sanitizer::removeHTMLtags( $name ) );
$this->mPagetitle = $nameWithTags;
# change "<i>foo&bar</i>" to "foo&bar"
- $this->setHTMLTitle( wfMsg( 'pagetitle', Sanitizer::stripAllTags( $nameWithTags ) ) );
+ $this->setHTMLTitle( $this->msg( 'pagetitle', Sanitizer::stripAllTags( $nameWithTags ) ) );
}
/**
$this->mBodytext .= $text;
}
+ /**
+ * Shortcut for adding an Html::element via addHTML.
+ *
+ * @since 1.19
+ *
+ * @param $element string
+ * @param $attribs array
+ * @param $contents string
+ */
+ public function addElement( $element, $attribs = array(), $contents = '' ) {
+ $this->addHTML( Html::element( $element, $attribs, $contents ) );
+ }
+
/**
* Clear the body HTML
*/
*/
public function parserOptions( $options = null ) {
if ( !$this->mParserOptions ) {
- $this->mParserOptions = new ParserOptions;
+ $this->mParserOptions = ParserOptions::newFromContext( $this->getContext() );
$this->mParserOptions->setEditSection( false );
}
return wfSetVar( $this->mParserOptions, $options );
* @return Array (dbKey => array('time' => MW timestamp or null, 'sha1' => sha1 or ''))
* @since 1.18
*/
- public function getImageTimeKeys() {
+ public function getFileSearchOptions() {
return $this->mImageTimeKeys;
}
}
/**
- * Add wikitext with a custom Title object and
+ * Add wikitext with a custom Title object and tidy enabled.
*
* @param $text String: wikitext
* @param $title Title object
}
}
// File versioning...
- foreach ( (array)$parserOutput->getImageTimeKeys() as $dbk => $data ) {
+ foreach ( (array)$parserOutput->getFileSearchOptions() as $dbk => $data ) {
$this->mImageTimeKeys[$dbk] = $data;
}
$this->mVaryHeader[$header] = $option;
}
}
- $this->mVaryHeader[$header] = array_unique( $this->mVaryHeader[$header] );
+ $this->mVaryHeader[$header] = array_unique( (array)$this->mVaryHeader[$header] );
}
/**
* /w/index.php?title=Main_page&variant=zh-cn should never be served.
*/
function addAcceptLanguage() {
- global $wgContLang;
- if( !$this->getRequest()->getCheck( 'variant' ) && $wgContLang->hasVariants() ) {
- $variants = $wgContLang->getVariants();
+ $lang = $this->getTitle()->getPageLanguage();
+ if( !$this->getRequest()->getCheck( 'variant' ) && $lang->hasVariants() ) {
+ $variants = $lang->getVariants();
$aloption = array();
foreach ( $variants as $variant ) {
- if( $variant === $wgContLang->getCode() ) {
+ if( $variant === $lang->getCode() ) {
continue;
} else {
$aloption[] = 'string-contains=' . $variant;
} elseif ( $this->mPreventClickjacking && $wgEditPageFrameOptions ) {
return $wgEditPageFrameOptions;
}
+ return false;
}
/**
* the object, let's actually output it:
*/
public function output() {
- global $wgLanguageCode, $wgDebugRedirects, $wgMimeType;
+ global $wgLanguageCode, $wgDebugRedirects, $wgMimeType, $wgVaryOnXFP;
if( $this->mDoNothing ) {
return;
}
$this->mLastModified = wfTimestamp( TS_RFC2822 );
}
+ if ( $wgVaryOnXFP ) {
+ $this->addVaryHeader( 'X-Forwarded-Proto' );
+ }
$this->sendCacheControl();
$response->header( "Content-Type: text/html; charset=utf-8" );
throw new UserBlockedError( $this->getUser()->mBlock );
}
+ /**
+ * Prepare this object to display an error page; disable caching and
+ * indexing, clear the current text and redirect, set the page's title
+ * and optionally an custom HTML title (content of the <title> tag).
+ *
+ * @param $pageTitle String|Message will be passed directly to setPageTitle()
+ * @param $htmlTitle String|Message will be passed directly to setHTMLTitle();
+ * optional, if not passed the <title> attribute will be
+ * based on $pageTitle
+ */
+ public function prepareErrorPage( $pageTitle, $htmlTitle = false ) {
+ if ( $this->getTitle() ) {
+ $this->mDebugtext .= 'Original title: ' . $this->getTitle()->getPrefixedText() . "\n";
+ }
+
+ $this->setPageTitle( $pageTitle );
+ if ( $htmlTitle !== false ) {
+ $this->setHTMLTitle( $htmlTitle );
+ }
+ $this->setRobotPolicy( 'noindex,nofollow' );
+ $this->setArticleRelated( false );
+ $this->enableClientCache( false );
+ $this->mRedirect = '';
+ $this->clearHTML();
+ }
+
/**
* Output a standard error page
*
* @param $params Array: message parameters; ignored if $msg is a Message object
*/
public function showErrorPage( $title, $msg, $params = array() ) {
- if ( $this->getTitle() ) {
- $this->mDebugtext .= 'Original title: ' . $this->getTitle()->getPrefixedText() . "\n";
- }
- $this->setPageTitle( wfMsg( $title ) );
- $this->setHTMLTitle( wfMsg( 'errorpagetitle' ) );
- $this->setRobotPolicy( 'noindex,nofollow' );
- $this->setArticleRelated( false );
- $this->enableClientCache( false );
- $this->mRedirect = '';
- $this->mBodytext = '';
+ $this->prepareErrorPage( $this->msg( $title ), $this->msg( 'errorpagetitle' ) );
if ( $msg instanceof Message ){
$this->addHTML( $msg->parse() );
* @param $action String: action that was denied or null if unknown
*/
public function showPermissionsErrorPage( $errors, $action = null ) {
- $this->mDebugtext .= 'Original title: ' .
- $this->getTitle()->getPrefixedText() . "\n";
- $this->setPageTitle( wfMsg( 'permissionserrors' ) );
- $this->setHTMLTitle( wfMsg( 'permissionserrors' ) );
- $this->setRobotPolicy( 'noindex,nofollow' );
- $this->setArticleRelated( false );
- $this->enableClientCache( false );
- $this->mRedirect = '';
- $this->mBodytext = '';
- $this->addWikiText( $this->formatPermissionsErrorMessage( $errors, $action ) );
+ global $wgGroupPermissions;
+
+ // For some action (read, edit, create and upload), display a "login to do this action"
+ // error if all of the following conditions are met:
+ // 1. the user is not logged in
+ // 2. the only error is insufficient permissions (i.e. no block or something else)
+ // 3. the error can be avoided simply by logging in
+ if ( in_array( $action, array( 'read', 'edit', 'createpage', 'createtalk', 'upload' ) )
+ && $this->getUser()->isAnon() && count( $errors ) == 1 && isset( $errors[0][0] )
+ && ( $errors[0][0] == 'badaccess-groups' || $errors[0][0] == 'badaccess-group0' )
+ && ( ( isset( $wgGroupPermissions['user'][$action] ) && $wgGroupPermissions['user'][$action] )
+ || ( isset( $wgGroupPermissions['autoconfirmed'][$action] ) && $wgGroupPermissions['autoconfirmed'][$action] ) )
+ ) {
+ $displayReturnto = null;
+ $returnto = $this->getTitle();
+ if ( $action == 'edit' ) {
+ $msg = 'whitelistedittext';
+ $displayReturnto = $returnto;
+ } elseif ( $action == 'createpage' || $action == 'createtalk' ) {
+ $msg = 'nocreatetext';
+ } elseif ( $action == 'upload' ) {
+ $msg = 'uploadnologintext';
+ } else { # Read
+ $msg = 'loginreqpagetext';
+ $displayReturnto = Title::newMainPage();
+ }
+
+ $query = array();
+ if ( $returnto ) {
+ $query['returnto'] = $returnto->getPrefixedText();
+ $request = $this->getRequest();
+ if ( !$request->wasPosted() ) {
+ $returntoquery = $request->getValues();
+ unset( $returntoquery['title'] );
+ unset( $returntoquery['returnto'] );
+ unset( $returntoquery['returntoquery'] );
+ $query['returntoquery'] = wfArrayToCGI( $returntoquery );
+ }
+ }
+ $loginLink = Linker::linkKnown(
+ SpecialPage::getTitleFor( 'Userlogin' ),
+ $this->msg( 'loginreqlink' )->escaped(),
+ array(),
+ $query
+ );
+
+ $this->prepareErrorPage( $this->msg( 'loginreqtitle' ) );
+ $this->addHTML( $this->msg( $msg )->rawParams( $loginLink )->parse() );
+
+ # Don't return to a page the user can't read otherwise
+ # we'll end up in a pointless loop
+ if ( $displayReturnto && $displayReturnto->userCanRead() ) {
+ $this->returnToMain( null, $displayReturnto );
+ }
+ } else {
+ $this->prepareErrorPage( $this->msg( 'permissionserrors' ) );
+ $this->addWikiText( $this->formatPermissionsErrorMessage( $errors, $action ) );
+ }
}
/**
* @param $version Mixed: the version of MediaWiki needed to use the page
*/
public function versionRequired( $version ) {
- $this->setPageTitle( wfMsg( 'versionrequired', $version ) );
- $this->setHTMLTitle( wfMsg( 'versionrequired', $version ) );
- $this->setRobotPolicy( 'noindex,nofollow' );
- $this->setArticleRelated( false );
- $this->mBodytext = '';
+ $this->prepareErrorPage( $this->msg( 'versionrequired', $version ) );
$this->addWikiMsg( 'versionrequiredtext', $version );
$this->returnToMain();
/**
* Produce the stock "please login to use the wiki" page
+ *
+ * @deprecated in 1.19; throw the exception directly
*/
public function loginToUse() {
- if( $this->getUser()->isLoggedIn() ) {
- throw new PermissionsError( 'read' );
- }
-
- $this->setPageTitle( wfMsg( 'loginreqtitle' ) );
- $this->setHtmlTitle( wfMsg( 'errorpagetitle' ) );
- $this->setRobotPolicy( 'noindex,nofollow' );
- $this->setArticleRelated( false );
-
- $loginTitle = SpecialPage::getTitleFor( 'Userlogin' );
- $loginLink = Linker::linkKnown(
- $loginTitle,
- wfMsgHtml( 'loginreqlink' ),
- array(),
- array( 'returnto' => $this->getTitle()->getPrefixedText() )
- );
- $this->addHTML( wfMessage( 'loginreqpagetext' )->rawParams( $loginLink )->parse() .
- "\n<!--" . $this->getTitle()->getPrefixedUrl() . '-->' );
-
- # Don't return to the main page if the user can't read it
- # otherwise we'll end up in a pointless loop
- $mainPage = Title::newMainPage();
- if( $mainPage->userCanRead() ) {
- $this->returnToMain( null, $mainPage );
- }
+ throw new PermissionsError( 'read' );
}
/**
*/
public function formatPermissionsErrorMessage( $errors, $action = null ) {
if ( $action == null ) {
- $text = wfMsgNoTrans( 'permissionserrorstext', count( $errors ) ) . "\n\n";
+ $text = $this->msg( 'permissionserrorstext', count( $errors ) )->plain() . "\n\n";
} else {
- $action_desc = wfMsgNoTrans( "action-$action" );
- $text = wfMsgNoTrans(
+ $action_desc = $this->msg( "action-$action" )->plain();
+ $text = $this->msg(
'permissionserrorstext-withaction',
count( $errors ),
$action_desc
- ) . "\n\n";
+ )->plain() . "\n\n";
}
if ( count( $errors ) > 1 ) {
foreach( $errors as $error ) {
$text .= '<li>';
- $text .= call_user_func_array( 'wfMsgNoTrans', $error );
+ $text .= call_user_func_array( array( $this, 'msg' ), $error )->plain();
$text .= "</li>\n";
}
$text .= '</ul>';
} else {
$text .= "<div class=\"permissions-errors\">\n" .
- call_user_func_array( 'wfMsgNoTrans', reset( $errors ) ) .
+ call_user_func_array( array( $this, 'msg' ), reset( $errors ) )->plain() .
"\n</div>";
}
* @param $action String: action that was denied or null if unknown
*/
public function readOnlyPage( $source = null, $protected = false, $reasons = array(), $action = null ) {
- global $wgEnableInterwikiTranscluding, $wgEnableInterwikiTemplatesTracking;
-
$this->setRobotPolicy( 'noindex,nofollow' );
$this->setArticleRelated( false );
if ( !empty( $reasons ) ) {
// Permissions error
if( $source ) {
- $this->setPageTitle( wfMsg( 'viewsource' ) );
+ $this->setPageTitle( $this->msg( 'viewsource' ) );
$this->setSubtitle(
- wfMsg( 'viewsourcefor', Linker::linkKnown( $this->getTitle() ) )
+ $this->msg( 'viewsourcefor', Linker::linkKnown( $this->getTitle() ) )->text()
);
} else {
- $this->setPageTitle( wfMsg( 'badaccess' ) );
+ $this->setPageTitle( $this->msg( 'badaccess' ) );
}
$this->addWikiText( $this->formatPermissionsErrorMessage( $reasons, $action ) );
} else {
$templates
</div>
" );
- if ( $wgEnableInterwikiTranscluding && $wgEnableInterwikiTemplatesTracking ) {
- $distantTemplates = Linker::formatDistantTemplates( $article->getUsedDistantTemplates() );
- $this->addHTML( "<div class='distantTemplatesUsed'>
-$distantTemplates
-</div>
-" );
- }
}
# If the title doesn't exist, it's fairly pointless to print a return
? 'lag-warn-normal'
: 'lag-warn-high';
$wrap = Html::rawElement( 'div', array( 'class' => "mw-{$message}" ), "\n$1\n" );
- $this->wrapWikiMsg( "$wrap\n", array( $message, $this->getContext()->getLang()->formatNum( $lag ) ) );
+ $this->wrapWikiMsg( "$wrap\n", array( $message, $this->getLang()->formatNum( $lag ) ) );
}
}
public function showFatalError( $message ) {
- $this->setPageTitle( wfMsg( 'internalerror' ) );
- $this->setRobotPolicy( 'noindex,nofollow' );
- $this->setArticleRelated( false );
- $this->enableClientCache( false );
- $this->mRedirect = '';
- $this->mBodytext = $message;
+ $this->prepareErrorPage( $this->msg( 'internalerror' ) );
+
+ $this->addHTML( $message );
}
public function showUnexpectedValueError( $name, $val ) {
- $this->showFatalError( wfMsg( 'unexpected', $name, $val ) );
+ $this->showFatalError( $this->msg( 'unexpected', $name, $val )->text() );
}
public function showFileCopyError( $old, $new ) {
- $this->showFatalError( wfMsg( 'filecopyerror', $old, $new ) );
+ $this->showFatalError( $this->msg( 'filecopyerror', $old, $new )->text() );
}
public function showFileRenameError( $old, $new ) {
- $this->showFatalError( wfMsg( 'filerenameerror', $old, $new ) );
+ $this->showFatalError( $this->msg( 'filerenameerror', $old, $new )->text() );
}
public function showFileDeleteError( $name ) {
- $this->showFatalError( wfMsg( 'filedeleteerror', $name ) );
+ $this->showFatalError( $this->msg( 'filedeleteerror', $name )->text() );
}
public function showFileNotFoundError( $name ) {
- $this->showFatalError( wfMsg( 'filenotfound', $name ) );
+ $this->showFatalError( $this->msg( 'filenotfound', $name )->text() );
}
/**
*/
public function addReturnTo( $title, $query = array(), $text = null ) {
$this->addLink( array( 'rel' => 'next', 'href' => $title->getFullURL() ) );
- $link = wfMsgHtml(
- 'returnto',
- Linker::link( $title, $text, array(), $query )
- );
+ $link = $this->msg( 'returnto' )->rawParams(
+ Linker::link( $title, $text, array(), $query ) )->escaped();
$this->addHTML( "<p id=\"mw-returnto\">{$link}</p>\n" );
}
$ret = Html::htmlHeader( array( 'lang' => $this->getLang()->getCode(), 'dir' => $userdir, 'class' => 'client-nojs' ) );
if ( $this->getHTMLTitle() == '' ) {
- $this->setHTMLTitle( wfMsg( 'pagetitle', $this->getPageTitle() ) );
+ $this->setHTMLTitle( $this->msg( 'pagetitle', $this->getPageTitle() ) );
}
$openHead = Html::openElement( 'head' );
# Classes for LTR/RTL directionality support
$bodyAttrs['class'] = "mediawiki $userdir sitedir-$sitedir";
- if ( $this->getContext()->getLang()->capitalizeAllNouns() ) {
+ if ( $this->getLang()->capitalizeAllNouns() ) {
# A <body> class is probably not the best way to do this . . .
$bodyAttrs['class'] .= ' capitalize-all-nouns';
}
* @return string html <script> and <style> tags
*/
protected function makeResourceLoaderLink( $modules, $only, $useESI = false, array $extraQuery = array() ) {
- global $wgLoadScript, $wgResourceLoaderUseESI,
- $wgResourceLoaderInlinePrivateModules;
+ global $wgResourceLoaderUseESI, $wgResourceLoaderInlinePrivateModules;
if ( !count( $modules ) ) {
return '';
// correct timestamp and emptiness data
$query = ResourceLoader::makeLoaderQuery(
array(), // modules; not determined yet
- $this->getContext()->getLang()->getCode(),
+ $this->getLang()->getCode(),
$this->getSkin()->getSkinName(),
$user,
null, // version; not determined yet
// Add a version parameter so cache will break when things change
$version = wfTimestamp( TS_ISO_8601_BASIC, $timestamp );
}
-
+
$url = ResourceLoader::makeLoaderURL(
array_keys( $modules ),
- $this->getContext()->getLang()->getCode(),
+ $this->getLang()->getCode(),
$this->getSkin()->getSkinName(),
$user,
$version,
}
/**
- * Get an array containing global JS variables
+ * Add one or more variables to be set in mw.config in JavaScript.
*
- * Do not add things here which can be evaluated in
- * ResourceLoaderStartupScript - in other words, without state.
- * You will only be adding bloat to the page and causing page caches to
+ * @param $key {String|Array} Key or array of key/value pars.
+ * @param $value {Mixed} Value of the configuration variable.
+ */
+ public function addJsConfigVars( $keys, $value ) {
+ if ( is_array( $keys ) ) {
+ foreach ( $keys as $key => $value ) {
+ $this->mJsConfigVars[$key] = $value;
+ }
+ return;
+ }
+
+ $this->mJsConfigVars[$keys] = $value;
+ }
+
+
+ /**
+ * Get an array containing the variables to be set in mw.config in JavaScript.
+ *
+ * Do not add things here which can be evaluated in ResourceLoaderStartupScript
+ * - in other words, page-independent/site-wide variables (without state).
+ * You will only be adding bloat to the html page and causing page caches to
* have to be purged on configuration changes.
*/
protected function getJSVars() {
- global $wgUseAjax, $wgEnableMWSuggest, $wgContLang;
+ global $wgUseAjax, $wgEnableMWSuggest;
$title = $this->getTitle();
$ns = $title->getNamespace();
'wgCategories' => $this->getCategories(),
'wgBreakFrames' => $this->getFrameOptions() == 'DENY',
);
- if ( $wgContLang->hasVariants() ) {
- $vars['wgUserVariant'] = $wgContLang->getPreferredVariant();
- }
+ $lang = $this->getTitle()->getPageLanguage();
+ if ( $lang->hasVariants() ) {
+ $vars['wgUserVariant'] = $lang->getPreferredVariant();
+ }
foreach ( $title->getRestrictionTypes() as $type ) {
$vars['wgRestriction' . ucfirst( $type )] = $title->getRestrictions( $type );
}
$vars['wgIsMainPage'] = true;
}
- // Allow extensions to add their custom variables to the global JS variables
- wfRunHooks( 'MakeGlobalVariablesScript', array( &$vars, &$this ) );
+ // Allow extensions to add their custom variables to the mw.config map.
+ // Use the 'ResourceLoaderGetConfigVars' hook if the variable is not
+ // page-dependant but site-wide (without state).
+ // Alternatively, you may want to use OutputPage->addJsConfigVars() instead.
+ wfRunHooks( 'MakeGlobalVariablesScript', array( &$vars, $this ) );
- return $vars;
+ // Merge in variables from addJsConfigVars last
+ return array_merge( $vars, $this->mJsConfigVars );
}
/**
global $wgUniversalEditButton, $wgFavicon, $wgAppleTouchIcon, $wgEnableAPI,
$wgSitename, $wgVersion, $wgHtml5, $wgMimeType,
$wgFeed, $wgOverrideSiteFeed, $wgAdvertisedFeedTypes,
- $wgDisableLangConversion, $wgCanonicalLanguageLinks, $wgContLang,
+ $wgDisableLangConversion, $wgCanonicalLanguageLinks,
$wgRightsPage, $wgRightsUrl;
$tags = array();
if ( $this->isArticleRelated() && $this->getTitle() && $this->getTitle()->quickUserCan( 'edit' )
&& ( $this->getTitle()->exists() || $this->getTitle()->quickUserCan( 'create' ) ) ) {
// Original UniversalEditButton
- $msg = wfMsg( 'edit' );
+ $msg = $this->msg( 'edit' )->text();
$tags[] = Html::element( 'link', array(
'rel' => 'alternate',
'type' => 'application/x-wiki',
'rel' => 'search',
'type' => 'application/opensearchdescription+xml',
'href' => wfScript( 'opensearch_desc' ),
- 'title' => wfMsgForContent( 'opensearch-desc' ),
+ 'title' => $this->msg( 'opensearch-desc' )->inContentLanguage()->text(),
) );
if ( $wgEnableAPI ) {
) );
}
+ $lang = $this->getTitle()->getPageLanguage();
+
# Language variants
if ( !$wgDisableLangConversion && $wgCanonicalLanguageLinks
- && $wgContLang->hasVariants() ) {
+ && $lang->hasVariants() ) {
- $urlvar = $wgContLang->getURLVariant();
+ $urlvar = $lang->getURLVariant();
if ( !$urlvar ) {
- $variants = $wgContLang->getVariants();
+ $variants = $lang->getVariants();
foreach ( $variants as $_v ) {
$tags[] = Html::element( 'link', array(
'rel' => 'alternate',
$format,
$link,
# Used messages: 'page-rss-feed' and 'page-atom-feed' (for an easier grep)
- wfMsg( "page-{$format}-feed", $this->getTitle()->getPrefixedText() )
+ $this->msg( "page-{$format}-feed", $this->getTitle()->getPrefixedText() )->text()
);
}
$tags[] = $this->feedLink(
$type,
$feedUrl,
- wfMsg( "site-{$type}-feed", $wgSitename )
+ $this->msg( "site-{$type}-feed", $wgSitename )->text()
);
}
} elseif ( $this->getTitle()->getPrefixedText() != $rctitle->getPrefixedText() ) {
$tags[] = $this->feedLink(
$format,
$rctitle->getLocalURL( "feed={$format}" ),
- wfMsg( "site-{$format}-feed", $wgSitename ) # For grep: 'site-rss-feed', 'site-atom-feed'.
+ $this->msg( "site-{$format}-feed", $wgSitename )->text() # For grep: 'site-rss-feed', 'site-atom-feed'.
);
}
}
* Like addWikiMsg() except the parameters are taken as an array
* instead of a variable argument list.
*
- * $options is passed through to wfMsgExt(), see that function for details.
- *
* @param $name string
* @param $args array
- * @param $options array
*/
- public function addWikiMsgArray( $name, $args, $options = array() ) {
- $options[] = 'parse';
- $text = wfMsgExt( $name, $options, $args );
- $this->addHTML( $text );
+ public function addWikiMsgArray( $name, $args ) {
+ $this->addWikiText( $this->msg( $name, $args )->plain() );
}
/**