X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FOutputPage.php;h=70a8c53d229ff7b795afe7e30d978fb19f2ac1c5;hb=e0e8f92227f6a62a836d167378116680ac6ae9d1;hp=6ea70b96b452a38e7469372ba458e1608344aa13;hpb=59953d58097084cee2a9f09ab4aaea5d5a9a9dfd;p=lhc%2Fweb%2Fwiklou.git
diff --git a/includes/OutputPage.php b/includes/OutputPage.php
index 6ea70b96b4..70a8c53d22 100644
--- a/includes/OutputPage.php
+++ b/includes/OutputPage.php
@@ -13,7 +13,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
*
* @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
@@ -67,7 +67,7 @@ class OutputPage extends ContextSource {
* Contains the page subtitle. Special pages usually have some links here.
* Don't confuse with site subtitle added by skins.
*/
- var $mSubtitle = '';
+ private $mSubtitle = array();
var $mRedirect = '';
var $mStatusCode;
@@ -152,7 +152,10 @@ class OutputPage extends ContextSource {
// Parser related.
var $mContainsOldMagic = 0, $mContainsNewMagic = 0;
- /// lazy initialised, use parserOptions()
+ /**
+ * lazy initialised, use parserOptions()
+ * @var ParserOptions
+ */
protected $mParserOptions = null;
/**
@@ -194,6 +197,7 @@ class OutputPage extends ContextSource {
/// should be private. To include the variable {{REVISIONID}}
var $mRevisionId = null;
+ private $mRevisionTimestamp = null;
var $mFileVersion = null;
@@ -219,6 +223,14 @@ class OutputPage extends ContextSource {
'Cookie' => null
);
+ /**
+ * If the current page was reached through a redirect, $mRedirectedFrom contains the Title
+ * of the redirect.
+ *
+ * @var Title
+ */
+ private $mRedirectedFrom = null;
+
/**
* Constructor for OutputPage. This should not be called directly.
* Instead a new RequestContext should be created and it will implicitly create
@@ -757,7 +769,11 @@ class OutputPage extends ContextSource {
* @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;
+ }
}
/**
@@ -769,22 +785,35 @@ class OutputPage extends ContextSource {
return $this->mHTMLtitle;
}
+ /**
+ * Set $mRedirectedFrom, the Title of the page which redirected us to the current page.
+ *
+ * param @t Title
+ */
+ public function setRedirectedFrom( $t ) {
+ $this->mRedirectedFrom = $t;
+ }
+
/**
* "Page title" means the contents of \
. It is stored as a valid HTML fragment.
* This function allows good tags like \ in the \ tag, but not bad tags like \" to "<script>foo&bar</script>"
# but leave "foobar" alone
$nameWithTags = Sanitizer::normalizeCharReferences( Sanitizer::removeHTMLtags( $name ) );
$this->mPagetitle = $nameWithTags;
# change "foo&bar" to "foo&bar"
- $this->setHTMLTitle( wfMsg( 'pagetitle', Sanitizer::stripAllTags( $nameWithTags ) ) );
+ $this->setHTMLTitle( $this->msg( 'pagetitle' )->rawParams( Sanitizer::stripAllTags( $nameWithTags ) ) );
}
/**
@@ -809,19 +838,54 @@ class OutputPage extends ContextSource {
/**
* Replace the subtile with $str
*
- * @param $str String: new value of the subtitle
+ * @param $str String|Message: new value of the subtitle
*/
public function setSubtitle( $str ) {
- $this->mSubtitle = /*$this->parse(*/ $str /*)*/; // @bug 2514
+ $this->clearSubtitle();
+ $this->addSubtitle( $str );
}
/**
* Add $str to the subtitle
*
- * @param $str String to add to the subtitle
+ * @deprecated in 1.19; use addSubtitle() instead
+ * @param $str String|Message to add to the subtitle
*/
public function appendSubtitle( $str ) {
- $this->mSubtitle .= /*$this->parse(*/ $str /*)*/; // @bug 2514
+ $this->addSubtitle( $str );
+ }
+
+ /**
+ * Add $str to the subtitle
+ *
+ * @param $str String|Message to add to the subtitle
+ */
+ public function addSubtitle( $str ) {
+ if ( $str instanceof Message ) {
+ $this->mSubtitle[] = $str->setContext( $this->getContext() )->parse();
+ } else {
+ $this->mSubtitle[] = $str;
+ }
+ }
+
+ /**
+ * Add a subtitle containing a backlink to a page
+ *
+ * @param $title Title to link to
+ */
+ public function addBacklinkSubtitle( Title $title ) {
+ $query = array();
+ if ( $title->isRedirect() ) {
+ $query['redirect'] = 'no';
+ }
+ $this->addSubtitle( $this->msg( 'backlinksubtitle' )->rawParams( Linker::link( $title, null, array(), $query ) ) );
+ }
+
+ /**
+ * Clear the subtitles
+ */
+ public function clearSubtitle() {
+ $this->mSubtitle = array();
}
/**
@@ -830,7 +894,7 @@ class OutputPage extends ContextSource {
* @return String
*/
public function getSubtitle() {
- return $this->mSubtitle;
+ return implode( "
\n\t\t\t\t", $this->mSubtitle );
}
/**
@@ -1144,9 +1208,11 @@ class OutputPage extends ContextSource {
* Return whether user JavaScript is allowed for this page
* @deprecated since 1.18 Load modules with ResourceLoader, and origin and
* trustworthiness is identified and enforced automagically.
+ * Will be removed in 1.20.
* @return Boolean
*/
public function isUserJsAllowed() {
+ wfDeprecated( __METHOD__, '1.18' );
return $this->getAllowedModules( ResourceLoaderModule::TYPE_SCRIPTS ) >= ResourceLoaderModule::ORIGIN_USER_INDIVIDUAL;
}
@@ -1202,6 +1268,19 @@ class OutputPage extends ContextSource {
$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
*/
@@ -1236,7 +1315,7 @@ class OutputPage extends ContextSource {
*/
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 );
@@ -1263,6 +1342,27 @@ class OutputPage extends ContextSource {
return $this->mRevisionId;
}
+ /**
+ * Set the timestamp of the revision which will be displayed. This is used
+ * to avoid a extra DB call in Skin::lastModified().
+ *
+ * @param $revid Mixed: string, or null
+ * @return Mixed: previous value
+ */
+ public function setRevisionTimestamp( $timestmap ) {
+ return wfSetVar( $this->mRevisionTimestamp, $timestmap );
+ }
+
+ /**
+ * Get the timestamp of displayed revision.
+ * This will be null if not filled by setRevisionTimestamp().
+ *
+ * @return String or null
+ */
+ public function getRevisionTimestamp() {
+ return $this->mRevisionTimestamp;
+ }
+
/**
* Set the displayed file version
*
@@ -1367,8 +1467,6 @@ class OutputPage extends ContextSource {
wfProfileIn( __METHOD__ );
- wfIncrStats( 'pcache_not_possible' );
-
$popts = $this->parserOptions();
$oldTidy = $popts->setTidy( $tidy );
$popts->setInterfaceMessage( (bool) $interface );
@@ -1616,7 +1714,7 @@ class OutputPage extends ContextSource {
$this->mVaryHeader[$header] = $option;
}
}
- $this->mVaryHeader[$header] = array_unique( $this->mVaryHeader[$header] );
+ $this->mVaryHeader[$header] = array_unique( (array)$this->mVaryHeader[$header] );
}
/**
@@ -1717,6 +1815,7 @@ class OutputPage extends ContextSource {
} elseif ( $this->mPreventClickjacking && $wgEditPageFrameOptions ) {
return $wgEditPageFrameOptions;
}
+ return false;
}
/**
@@ -1806,7 +1905,7 @@ class OutputPage extends ContextSource {
* the object, let's actually output it:
*/
public function output() {
- global $wgLanguageCode, $wgDebugRedirects, $wgMimeType;
+ global $wgLanguageCode, $wgDebugRedirects, $wgMimeType, $wgVaryOnXFP;
if( $this->mDoNothing ) {
return;
@@ -1819,24 +1918,34 @@ class OutputPage extends ContextSource {
if ( $this->mRedirect != '' ) {
# Standards require redirect URLs to be absolute
$this->mRedirect = wfExpandUrl( $this->mRedirect, PROTO_CURRENT );
- if( $this->mRedirectCode == '301' || $this->mRedirectCode == '303' ) {
- if( !$wgDebugRedirects ) {
- $message = HttpStatus::getMessage( $this->mRedirectCode );
- $response->header( "HTTP/1.1 {$this->mRedirectCode} $message" );
+
+ $redirect = $this->mRedirect;
+ $code = $this->mRedirectCode;
+
+ if( wfRunHooks( "BeforePageRedirect", array( $this, &$redirect, &$code ) ) ) {
+ if( $code == '301' || $code == '303' ) {
+ if( !$wgDebugRedirects ) {
+ $message = HttpStatus::getMessage( $code );
+ $response->header( "HTTP/1.1 $code $message" );
+ }
+ $this->mLastModified = wfTimestamp( TS_RFC2822 );
+ }
+ if ( $wgVaryOnXFP ) {
+ $this->addVaryHeader( 'X-Forwarded-Proto' );
+ }
+ $this->sendCacheControl();
+
+ $response->header( "Content-Type: text/html; charset=utf-8" );
+ if( $wgDebugRedirects ) {
+ $url = htmlspecialchars( $redirect );
+ print "\n\nRedirect\n\n\n";
+ print "
Location: $url
\n";
+ print "\n\n";
+ } else {
+ $response->header( 'Location: ' . $redirect );
}
- $this->mLastModified = wfTimestamp( TS_RFC2822 );
- }
- $this->sendCacheControl();
-
- $response->header( "Content-Type: text/html; charset=utf-8" );
- if( $wgDebugRedirects ) {
- $url = htmlspecialchars( $this->mRedirect );
- print "\n\nRedirect\n\n\n";
- print "Location: $url
\n";
- print "\n\n";
- } else {
- $response->header( 'Location: ' . $this->mRedirect );
}
+
wfProfileOut( __METHOD__ );
return;
} elseif ( $this->mStatusCode ) {
@@ -1896,6 +2005,33 @@ class OutputPage extends ContextSource {
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 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 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->clearSubtitle();
+ $this->clearHTML();
+ }
+
/**
* Output a standard error page
*
@@ -1907,16 +2043,7 @@ class OutputPage extends ContextSource {
* @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() );
@@ -1934,16 +2061,71 @@ class OutputPage extends ContextSource {
* @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;
+
+ # Due to bug 32276, if a user does not have read permissions,
+ # $this->getTitle() will just give Special:Badtitle, which is
+ # not especially useful as a returnto parameter. Use the title
+ # from the request instead, if there was one.
+ $request = $this->getRequest();
+ $returnto = Title::newFromURL( $request->getVal( 'title', '' ) );
+ 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();
+
+ 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->userCan( 'read', $this->getUser() ) ) {
+ $this->returnToMain( null, $displayReturnto );
+ }
+ } else {
+ $this->prepareErrorPage( $this->msg( 'permissionserrors' ) );
+ $this->addWikiText( $this->formatPermissionsErrorMessage( $errors, $action ) );
+ }
}
/**
@@ -1953,11 +2135,7 @@ class OutputPage extends ContextSource {
* @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();
@@ -1974,33 +2152,11 @@ class OutputPage extends ContextSource {
/**
* 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' );
-
- # 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' );
}
/**
@@ -2012,14 +2168,14 @@ class OutputPage extends ContextSource {
*/
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 ) {
@@ -2027,13 +2183,13 @@ class OutputPage extends ContextSource {
foreach( $errors as $error ) {
$text .= '';
- $text .= call_user_func_array( 'wfMsgNoTrans', $error );
+ $text .= call_user_func_array( array( $this, 'msg' ), $error )->plain();
$text .= "\n";
}
$text .= '';
} else {
$text .= "\n" .
- call_user_func_array( 'wfMsgNoTrans', reset( $errors ) ) .
+ call_user_func_array( array( $this, 'msg' ), reset( $errors ) )->plain() .
"\n
";
}
@@ -2061,8 +2217,6 @@ class OutputPage extends ContextSource {
* @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 );
@@ -2075,12 +2229,10 @@ class OutputPage extends ContextSource {
if ( !empty( $reasons ) ) {
// Permissions error
if( $source ) {
- $this->setPageTitle( wfMsg( 'viewsource' ) );
- $this->setSubtitle(
- wfMsg( 'viewsourcefor', Linker::linkKnown( $this->getTitle() ) )
- );
+ $this->setPageTitle( $this->msg( 'viewsource-title', $this->getTitle()->getPrefixedText() ) );
+ $this->addBacklinkSubtitle( $this->getTitle() );
} else {
- $this->setPageTitle( wfMsg( 'badaccess' ) );
+ $this->setPageTitle( $this->msg( 'badaccess' ) );
}
$this->addWikiText( $this->formatPermissionsErrorMessage( $reasons, $action ) );
} else {
@@ -2099,25 +2251,17 @@ class OutputPage extends ContextSource {
'cols' => $this->getUser()->getOption( 'cols' ),
'rows' => $this->getUser()->getOption( 'rows' ),
'readonly' => 'readonly',
- 'lang' => $pageLang->getCode(),
+ 'lang' => $pageLang->getHtmlCode(),
'dir' => $pageLang->getDir(),
);
$this->addHTML( Html::element( 'textarea', $params, $source ) );
// Show templates used by this article
- $article = new Article( $this->getTitle() );
- $templates = Linker::formatTemplates( $article->getUsedTemplates() );
+ $templates = Linker::formatTemplates( $this->getTitle()->getTemplateLinksFrom() );
$this->addHTML( "
$templates
" );
- if ( $wgEnableInterwikiTranscluding && $wgEnableInterwikiTemplatesTracking ) {
- $distantTemplates = Linker::formatDistantTemplates( $article->getUsedDistantTemplates() );
- $this->addHTML( "
-$distantTemplates
-
-" );
- }
}
# If the title doesn't exist, it's fairly pointless to print a return
@@ -2152,37 +2296,34 @@ $distantTemplates
? '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->getLanguage()->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() );
}
/**
@@ -2194,10 +2335,8 @@ $distantTemplates
*/
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( "{$link}
\n" );
}
@@ -2240,18 +2379,19 @@ $distantTemplates
* @return String: The doctype, opening , and head element.
*/
public function headElement( Skin $sk, $includeStyle = true ) {
- global $wgContLang, $wgUseTrackbacks;
- $userdir = $this->getLang()->getDir();
+ global $wgContLang;
+
+ $userdir = $this->getLanguage()->getDir();
$sitedir = $wgContLang->getDir();
if ( $sk->commonPrintStylesheet() ) {
$this->addModuleStyles( 'mediawiki.legacy.wikiprintable' );
}
- $ret = Html::htmlHeader( array( 'lang' => $this->getLang()->getCode(), 'dir' => $userdir, 'class' => 'client-nojs' ) );
+ $ret = Html::htmlHeader( array( 'lang' => $this->getLanguage()->getHtmlCode(), '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' );
@@ -2269,10 +2409,6 @@ $distantTemplates
$this->getHeadItems()
) );
- if ( $wgUseTrackbacks && $this->isArticleRelated() ) {
- $ret .= $this->getTitle()->trackbackRDF();
- }
-
$closeHead = Html::closeElement( 'head' );
if ( $closeHead ) {
$ret .= "$closeHead\n";
@@ -2283,12 +2419,13 @@ $distantTemplates
# Classes for LTR/RTL directionality support
$bodyAttrs['class'] = "mediawiki $userdir sitedir-$sitedir";
- if ( $this->getContext()->getLang()->capitalizeAllNouns() ) {
+ if ( $this->getLanguage()->capitalizeAllNouns() ) {
# A class is probably not the best way to do this . . .
$bodyAttrs['class'] .= ' capitalize-all-nouns';
}
$bodyAttrs['class'] .= ' ' . $sk->getPageClasses( $this->getTitle() );
$bodyAttrs['class'] .= ' skin-' . Sanitizer::escapeClass( $sk->getSkinName() );
+ $bodyAttrs['class'] .= ' action-' . Sanitizer::escapeClass( Action::getActionName( $this->getContext() ) );
$sk->addToBodyAttributes( $this, $bodyAttrs ); // Allow skins to add body attributes they need
wfRunHooks( 'OutputPageBodyAttributes', array( $this, $sk, &$bodyAttrs ) );
@@ -2358,11 +2495,11 @@ $distantTemplates
* @param $only String ResourceLoaderModule TYPE_ class constant
* @param $useESI boolean
* @param $extraQuery Array with extra query parameters to add to each request. array( param => value )
+ * @param $loadCall boolean If true, output a mw.loader.load() call rather than a