Merge "Correct case for the "MediaWiki:Revdelete-reason-dropdown" link in Special...
[lhc/web/wiklou.git] / includes / SkinLegacy.php
index d636883..e1ec897 100644 (file)
@@ -1,12 +1,25 @@
 <?php
 /**
- * @defgroup Skins Skins
+ * Base class for legacy skins.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
  */
 
-if ( !defined( 'MEDIAWIKI' ) ) {
-       die( 1 );
-}
-
 class SkinLegacy extends SkinTemplate {
        var $useHeadElement = true;
        protected $mWatchLinkNum = 0; // Appended to end of watch link id's
@@ -66,10 +79,10 @@ class SkinLegacy extends SkinTemplate {
 }
 
 class LegacyTemplate extends BaseTemplate {
-       
+
        // How many search boxes have we made?  Avoid duplicate id's.
        protected $searchboxes = '';
-       
+
        function execute() {
                $this->html( 'headelement' );
                echo $this->beforeContent();
@@ -80,10 +93,11 @@ class LegacyTemplate extends BaseTemplate {
                $this->printTrail();
                echo "\n</body></html>";
        }
-       
+
        /**
         * This will be called immediately after the <body> tag.  Split into
         * two functions to make it easier to subclass.
+        * @return string
         */
        function beforeContent() {
                return $this->doBeforeContent();
@@ -152,7 +166,9 @@ class LegacyTemplate extends BaseTemplate {
                return $this->doAfterContent();
        }
 
-       /** overloaded by derived classes */
+       /** overloaded by derived classes
+        * @return string
+        */
        function doAfterContent() {
                return '</div></div>';
        }
@@ -183,54 +199,16 @@ class LegacyTemplate extends BaseTemplate {
        }
 
        function pageStats() {
-               global $wgOut, $wgLang, $wgRequest, $wgUser;
-               global $wgDisableCounters, $wgMaxCredits, $wgShowCreditsIfMax, $wgPageShowWatchingUsers;
+               $ret = array();
+               $items = array( 'viewcount', 'credits', 'lastmod', 'numberofwatchingusers', 'copyright' );
 
-               if ( !is_null( $wgRequest->getVal( 'oldid' ) ) || !is_null( $wgRequest->getVal( 'diff' ) ) ) {
-                       return '';
-               }
-
-               if ( !$wgOut->isArticle() || !$this->getSkin()->getTitle()->exists() ) {
-                       return '';
-               }
-
-               $article = new Article( $this->getSkin()->getTitle(), 0 );
-
-               $s = '';
-
-               if ( !$wgDisableCounters ) {
-                       $count = $wgLang->formatNum( $article->getCount() );
-
-                       if ( $count ) {
-                               $s = wfMsgExt( 'viewcount', array( 'parseinline' ), $count );
+               foreach( $items as $item ) {
+                       if ( $this->data[$item] !== false ) {
+                               $ret[] = $this->data[$item];
                        }
                }
 
-               if ( $wgMaxCredits != 0 ) {
-                       $s .= ' ' . Action::factory( 'credits', $article )->getCredits( $wgMaxCredits, $wgShowCreditsIfMax );
-               } else {
-                       $s .= $this->data['lastmod'];
-               }
-
-               if ( $wgPageShowWatchingUsers && $wgUser->getOption( 'shownumberswatching' ) ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $res = $dbr->select(
-                               'watchlist',
-                               array( 'COUNT(*) AS n' ),
-                               array(
-                                       'wl_title' => $dbr->strencode( $this->getSkin()->getTitle()->getDBkey() ),
-                                       'wl_namespace' => $this->getSkin()->getTitle()->getNamespace()
-                               ),
-                               __METHOD__
-                       );
-                       $x = $dbr->fetchObject( $res );
-
-                       $s .= ' ' . wfMsgExt( 'number_of_watching_users_pageview',
-                               array( 'parseinline' ), $wgLang->formatNum( $x->n )
-                       );
-               }
-
-               return $s . ' ' .  $this->getSkin()->getCopyright();
+               return implode( ' ', $ret );
        }
 
        function topLinks() {
@@ -269,20 +247,23 @@ class LegacyTemplate extends BaseTemplate {
                $s = '';
 
                /* show links to different language variants */
-               global $wgDisableLangConversion, $wgLang, $wgContLang;
+               global $wgDisableLangConversion, $wgLang;
 
-               $variants = $wgContLang->getVariants();
+               $title = $this->getSkin()->getTitle();
+               $lang = $title->getPageLanguage();
+               $variants = $lang->getVariants();
 
-               if ( !$wgDisableLangConversion && sizeof( $variants ) > 1 ) {
+               if ( !$wgDisableLangConversion && sizeof( $variants ) > 1
+                       && !$title->isSpecialPage() ) {
                        foreach ( $variants as $code ) {
-                               $varname = $wgContLang->getVariantname( $code );
+                               $varname = $lang->getVariantname( $code );
 
                                if ( $varname == 'disable' ) {
                                        continue;
                                }
                                $s = $wgLang->pipeList( array(
                                        $s,
-                                       '<a href="' . $this->getSkin()->getTitle()->escapeLocalURL( 'variant=' . $code ) . '">' . htmlspecialchars( $varname ) . '</a>'
+                                       '<a href="' . htmlspecialchars( $title->getLocalURL( 'variant=' . $code ) ) . '" lang="' . $code . '" hreflang="' . $code .  '">' . htmlspecialchars( $varname ) . '</a>'
                                ) );
                        }
                }
@@ -319,7 +300,7 @@ class LegacyTemplate extends BaseTemplate {
        }
 
        function bottomLinks() {
-               global $wgOut, $wgUser, $wgUseTrackbacks;
+               global $wgOut, $wgUser;
                $sep = wfMsgExt( 'pipe-separator', 'escapenoentities' ) . "\n";
 
                $s = '';
@@ -335,16 +316,14 @@ class LegacyTemplate extends BaseTemplate {
                        $element[] = $this->whatLinksHere();
                        $element[] = $this->watchPageLinksLink();
 
-                       if ( $wgUseTrackbacks ) {
-                               $element[] = $this->trackbackLink();
-                       }
+                       $title = $this->getSkin()->getTitle();
 
                        if (
-                               $this->getSkin()->getTitle()->getNamespace() == NS_USER ||
-                               $this->getSkin()->getTitle()->getNamespace() == NS_USER_TALK
+                               $title->getNamespace() == NS_USER ||
+                               $title->getNamespace() == NS_USER_TALK
                        ) {
-                               $id = User::idFromName( $this->getSkin()->getTitle()->getText() );
-                               $ip = User::isIP( $this->getSkin()->getTitle()->getText() );
+                               $id = User::idFromName( $title->getText() );
+                               $ip = User::isIP( $title->getText() );
 
                                # Both anons and non-anons have contributions list
                                if ( $id || $ip ) {
@@ -358,7 +337,7 @@ class LegacyTemplate extends BaseTemplate {
 
                        $s = implode( $element, $sep );
 
-                       if ( $this->getSkin()->getTitle()->getArticleId() ) {
+                       if ( $title->getArticleID() ) {
                                $s .= "\n<br />";
 
                                // Delete/protect/move links for privileged users
@@ -382,7 +361,7 @@ class LegacyTemplate extends BaseTemplate {
        }
 
        function otherLanguages() {
-               global $wgOut, $wgContLang, $wgHideInterlanguageLinks;
+               global $wgOut, $wgLang, $wgHideInterlanguageLinks;
 
                if ( $wgHideInterlanguageLinks ) {
                        return '';
@@ -397,8 +376,8 @@ class LegacyTemplate extends BaseTemplate {
                $s = wfMsg( 'otherlanguages' ) . wfMsg( 'colon-separator' );
                $first = true;
 
-               if ( $wgContLang->isRTL() ) {
-                       $s .= '<span dir="LTR">';
+               if ( $wgLang->isRTL() ) {
+                       $s .= '<span dir="ltr">';
                }
 
                foreach ( $a as $l ) {
@@ -409,14 +388,14 @@ class LegacyTemplate extends BaseTemplate {
                        $first = false;
 
                        $nt = Title::newFromText( $l );
-                       $text = $wgContLang->getLanguageName( $nt->getInterwiki() );
+                       $text = Language::fetchLanguageName( $nt->getInterwiki() );
 
                        $s .= Html::element( 'a',
                                array( 'href' => $nt->getFullURL(), 'title' => $nt->getText(), 'class' => "external" ),
                                $text == '' ? $l : $text );
                }
 
-               if ( $wgContLang->isRTL() ) {
+               if ( $wgLang->isRTL() ) {
                        $s .= '</span>';
                }
 
@@ -425,36 +404,21 @@ class LegacyTemplate extends BaseTemplate {
 
        /**
         * Show a drop-down box of special pages
+        * @return string
         */
        function specialPagesList() {
-               global $wgContLang, $wgServer, $wgRedirectScript;
+               global $wgScript;
 
+               $select = new XmlSelect( 'title' );
                $pages = SpecialPageFactory::getUsablePages();
-
-               foreach ( $pages as $name => $page ) {
-                       $pages[$name] = $page->getDescription();
-               }
-
-               $go = wfMsg( 'go' );
-               $sp = wfMsg( 'specialpages' );
-               $spp = $wgContLang->specialPage( 'Specialpages' );
-
-               $s = '<form id="specialpages" method="get" ' .
-                 'action="' . htmlspecialchars( "{$wgServer}{$wgRedirectScript}" ) . "\">\n";
-               $s .= "<select name=\"wpDropdown\">\n";
-               $s .= "<option value=\"{$spp}\">{$sp}</option>\n";
-
-
-               foreach ( $pages as $name => $desc ) {
-                       $p = $wgContLang->specialPage( $name );
-                       $s .= "<option value=\"{$p}\">{$desc}</option>\n";
+               array_unshift( $pages, SpecialPageFactory::getPage( 'SpecialPages' ) );
+               foreach ( $pages as $obj ) {
+                       $select->addOption( $obj->getDescription(),
+                               $obj->getTitle()->getPrefixedDBkey() );
                }
 
-               $s .= "</select>\n";
-               $s .= "<input type='submit' value=\"{$go}\" name='redirect' />\n";
-               $s .= "</form>\n";
-
-               return $s;
+               return Html::rawElement( 'form', array( 'id' => 'specialpages', 'method' => 'get',
+                       'action' => $wgScript ), $select->getHTML() . Xml::submitButton( wfMsg( 'go' ) ) );
        }
 
        function pageTitleLinks() {
@@ -464,60 +428,58 @@ class LegacyTemplate extends BaseTemplate {
                $diff = $wgRequest->getVal( 'diff' );
                $action = $wgRequest->getText( 'action' );
 
+               $skin = $this->getSkin();
+               $title = $skin->getTitle();
+
                $s[] = $this->printableLink();
-               $disclaimer = $this->getSkin()->disclaimerLink(); # may be empty
+               $disclaimer = $skin->disclaimerLink(); # may be empty
 
                if ( $disclaimer ) {
                        $s[] = $disclaimer;
                }
 
-               $privacy = $this->getSkin()->privacyLink(); # may be empty too
+               $privacy = $skin->privacyLink(); # may be empty too
 
                if ( $privacy ) {
                        $s[] = $privacy;
                }
 
                if ( $wgOut->isArticleRelated() ) {
-                       if ( $this->getSkin()->getTitle()->getNamespace() == NS_FILE ) {
-                               $name = $this->getSkin()->getTitle()->getDBkey();
-                               $image = wfFindFile( $this->getSkin()->getTitle() );
+                       if ( $title->getNamespace() == NS_FILE ) {
+                               $name = $title->getDBkey();
+                               $image = wfFindFile( $title );
 
                                if ( $image ) {
                                        $link = htmlspecialchars( $image->getURL() );
-                                       $style = $this->getInternalLinkAttributes( $link, $name );
+                                       $style = Linker::getInternalLinkAttributes( $link, $name );
                                        $s[] = "<a href=\"{$link}\"{$style}>{$name}</a>";
                                }
                        }
                }
 
                if ( 'history' == $action || isset( $diff ) || isset( $oldid ) ) {
-                       $s[] .= Linker::link(
-                                       $this->getSkin()->getTitle(),
-                                       wfMsg( 'currentrev' ),
-                                       array(),
-                                       array(),
-                                       array( 'known', 'noclasses' )
+                       $s[] .= Linker::linkKnown(
+                                       $title,
+                                       wfMsg( 'currentrev' )
                        );
                }
 
                if ( $wgUser->getNewtalk() ) {
                        # do not show "You have new messages" text when we are viewing our
                        # own talk page
-                       if ( !$this->getSkin()->getTitle()->equals( $wgUser->getTalkPage() ) ) {
-                               $tl = Linker::link(
+                       if ( !$title->equals( $wgUser->getTalkPage() ) ) {
+                               $tl = Linker::linkKnown(
                                        $wgUser->getTalkPage(),
                                        wfMsgHtml( 'newmessageslink' ),
                                        array(),
-                                       array( 'redirect' => 'no' ),
-                                       array( 'known', 'noclasses' )
+                                       array( 'redirect' => 'no' )
                                );
 
-                               $dl = Linker::link(
+                               $dl = Linker::linkKnown(
                                        $wgUser->getTalkPage(),
                                        wfMsgHtml( 'newmessagesdifflink' ),
                                        array(),
-                                       array( 'diff' => 'cur' ),
-                                       array( 'known', 'noclasses' )
+                                       array( 'diff' => 'cur' )
                                );
                                $s[] = '<strong>' . wfMsg( 'youhavenewmessages', $tl, $dl ) . '</strong>';
                                # disable caching
@@ -526,7 +488,7 @@ class LegacyTemplate extends BaseTemplate {
                        }
                }
 
-               $undelete = $this->getSkin()->getUndeleteLink();
+               $undelete = $skin->getUndeleteLink();
 
                if ( !empty( $undelete ) ) {
                        $s[] = $undelete;
@@ -541,7 +503,7 @@ class LegacyTemplate extends BaseTemplate {
         */
        function pageTitle() {
                global $wgOut;
-               $s = '<h1 class="pagetitle">' . $wgOut->getPageTitle() . '</h1>';
+               $s = '<h1 class="pagetitle"><span dir="auto">' . $wgOut->getPageTitle() . '</span></h1>';
                return $s;
        }
 
@@ -585,8 +547,10 @@ class LegacyTemplate extends BaseTemplate {
 
        /**
         * @deprecated in 1.19
+        * @return string
         */
        function getQuickbarCompensator( $rows = 1 ) {
+               wfDeprecated( __METHOD__, '1.19' );
                return "<td width='152' rowspan='{$rows}'>&#160;</td>";
        }
 
@@ -596,20 +560,20 @@ class LegacyTemplate extends BaseTemplate {
                if ( !$wgOut->isArticleRelated() ) {
                        $s = wfMsg( 'protectedpage' );
                } else {
-                       if ( $this->getSkin()->getTitle()->quickUserCan( 'edit' ) && $this->getSkin()->getTitle()->exists() ) {
+                       $title = $this->getSkin()->getTitle();
+                       if ( $title->quickUserCan( 'edit' ) && $title->exists() ) {
                                $t = wfMsg( 'editthispage' );
-                       } elseif ( $this->getSkin()->getTitle()->quickUserCan( 'create' ) && !$this->getSkin()->getTitle()->exists() ) {
+                       } elseif ( $title->quickUserCan( 'create' ) && !$title->exists() ) {
                                $t = wfMsg( 'create-this-page' );
                        } else {
                                $t = wfMsg( 'viewsource' );
                        }
 
-                       $s = Linker::link(
-                               $this->getSkin()->getTitle(),
+                       $s = Linker::linkKnown(
+                               $title,
                                $t,
                                array(),
-                               $this->getSkin()->editUrlOptions(),
-                               array( 'known', 'noclasses' )
+                               $this->getSkin()->editUrlOptions()
                        );
                }
 
@@ -620,16 +584,16 @@ class LegacyTemplate extends BaseTemplate {
                global $wgUser, $wgRequest;
 
                $diff = $wgRequest->getVal( 'diff' );
+               $title = $this->getSkin()->getTitle();
 
-               if ( $this->getSkin()->getTitle()->getArticleId() && ( !$diff ) && $wgUser->isAllowed( 'delete' ) ) {
+               if ( $title->getArticleID() && ( !$diff ) && $wgUser->isAllowed( 'delete' ) ) {
                        $t = wfMsg( 'deletethispage' );
 
-                       $s = Linker::link(
-                               $this->getSkin()->getTitle(),
+                       $s = Linker::linkKnown(
+                               $title,
                                $t,
                                array(),
-                               array( 'action' => 'delete' ),
-                               array( 'known', 'noclasses' )
+                               array( 'action' => 'delete' )
                        );
                } else {
                        $s = '';
@@ -642,9 +606,10 @@ class LegacyTemplate extends BaseTemplate {
                global $wgUser, $wgRequest;
 
                $diff = $wgRequest->getVal( 'diff' );
+               $title = $this->getSkin()->getTitle();
 
-               if ( $this->getSkin()->getTitle()->getArticleId() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) ) {
-                       if ( $this->getSkin()->getTitle()->isProtected() ) {
+               if ( $title->getArticleID() && ( ! $diff ) && $wgUser->isAllowed( 'protect' ) ) {
+                       if ( $title->isProtected() ) {
                                $text = wfMsg( 'unprotectthispage' );
                                $query = array( 'action' => 'unprotect' );
                        } else {
@@ -652,12 +617,11 @@ class LegacyTemplate extends BaseTemplate {
                                $query = array( 'action' => 'protect' );
                        }
 
-                       $s = Linker::link(
-                               $this->getSkin()->getTitle(),
+                       $s = Linker::linkKnown(
+                               $title,
                                $text,
                                array(),
-                               $query,
-                               array( 'known', 'noclasses' )
+                               $query
                        );
                } else {
                        $s = '';
@@ -690,12 +654,11 @@ class LegacyTemplate extends BaseTemplate {
                                $id = 'mw-watch-link' . $this->mWatchLinkNum;
                        }
 
-                       $s = Linker::link(
+                       $s = Linker::linkKnown(
                                $title,
                                $text,
                                array( 'id' => $id ),
-                               $query,
-                               array( 'known', 'noclasses' )
+                               $query
                        );
                } else {
                        $s = wfMsg( 'notanarticle' );
@@ -706,12 +669,11 @@ class LegacyTemplate extends BaseTemplate {
 
        function moveThisPage() {
                if ( $this->getSkin()->getTitle()->quickUserCan( 'move' ) ) {
-                       return Linker::link(
+                       return Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Movepage' ),
                                wfMsg( 'movethispage' ),
                                array(),
-                               array( 'target' => $this->getSkin()->getTitle()->getPrefixedDBkey() ),
-                               array( 'known', 'noclasses' )
+                               array( 'target' => $this->getSkin()->getTitle()->getPrefixedDBkey() )
                        );
                } else {
                        // no message if page is protected - would be redundant
@@ -729,32 +691,23 @@ class LegacyTemplate extends BaseTemplate {
        }
 
        function whatLinksHere() {
-               return Linker::link(
+               return Linker::linkKnown(
                        SpecialPage::getTitleFor( 'Whatlinkshere', $this->getSkin()->getTitle()->getPrefixedDBkey() ),
-                       wfMsgHtml( 'whatlinkshere' ),
-                       array(),
-                       array(),
-                       array( 'known', 'noclasses' )
+                       wfMsgHtml( 'whatlinkshere' )
                );
        }
 
        function userContribsLink() {
-               return Linker::link(
+               return Linker::linkKnown(
                        SpecialPage::getTitleFor( 'Contributions', $this->getSkin()->getTitle()->getDBkey() ),
-                       wfMsgHtml( 'contributions' ),
-                       array(),
-                       array(),
-                       array( 'known', 'noclasses' )
+                       wfMsgHtml( 'contributions' )
                );
        }
 
        function emailUserLink() {
-               return Linker::link(
+               return Linker::linkKnown(
                        SpecialPage::getTitleFor( 'Emailuser', $this->getSkin()->getTitle()->getDBkey() ),
-                       wfMsg( 'emailuser' ),
-                       array(),
-                       array(),
-                       array( 'known', 'noclasses' )
+                       wfMsgHtml( 'emailuser' )
                );
        }
 
@@ -762,33 +715,26 @@ class LegacyTemplate extends BaseTemplate {
                global $wgOut;
 
                if ( !$wgOut->isArticleRelated() ) {
-                       return '(' . wfMsg( 'notanarticle' ) . ')';
+                       return wfMessage( 'parentheses', wfMessage( 'notanarticle' )->text() )->escaped();
                } else {
-                       return Linker::link(
+                       return Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Recentchangeslinked', $this->getSkin()->getTitle()->getPrefixedDBkey() ),
-                               wfMsg( 'recentchangeslinked-toolbox' ),
-                               array(),
-                               array(),
-                               array( 'known', 'noclasses' )
+                               wfMsgHtml( 'recentchangeslinked-toolbox' )
                        );
                }
        }
 
-       function trackbackLink() {
-               return '<a href="' . $this->getSkin()->getTitle()->trackbackURL() . '">'
-                       . wfMsg( 'trackbacklink' ) . '</a>';
-       }
-
        function talkLink() {
-               if ( NS_SPECIAL == $this->getSkin()->getTitle()->getNamespace() ) {
+               $title = $this->getSkin()->getTitle();
+               if ( NS_SPECIAL == $title->getNamespace() ) {
                        # No discussion links for special pages
                        return '';
                }
 
                $linkOptions = array();
 
-               if ( $this->getSkin()->getTitle()->isTalkPage() ) {
-                       $link = $this->getSkin()->getTitle()->getSubjectPage();
+               if ( $title->isTalkPage() ) {
+                       $link = $title->getSubjectPage();
                        switch( $link->getNamespace() ) {
                                case NS_MAIN:
                                        $text = wfMsg( 'articlepage' );
@@ -821,7 +767,7 @@ class LegacyTemplate extends BaseTemplate {
                                        $text = wfMsg( 'articlepage' );
                        }
                } else {
-                       $link = $this->getSkin()->getTitle()->getTalkPage();
+                       $link = $title->getTalkPage();
                        $text = wfMsg( 'talkpage' );
                }
 
@@ -833,30 +779,26 @@ class LegacyTemplate extends BaseTemplate {
        function commentLink() {
                global $wgOut;
 
-               if ( $this->getSkin()->getTitle()->getNamespace() == NS_SPECIAL ) {
+               $title = $this->getSkin()->getTitle();
+               if ( $title->isSpecialPage() ) {
                        return '';
                }
 
                # __NEWSECTIONLINK___ changes behaviour here
                # If it is present, the link points to this page, otherwise
                # it points to the talk page
-               if ( $this->getSkin()->getTitle()->isTalkPage() ) {
-                       $title = $this->getSkin()->getTitle();
-               } elseif ( $wgOut->showNewSectionLink() ) {
-                       $title = $this->getSkin()->getTitle();
-               } else {
-                       $title = $this->getSkin()->getTitle()->getTalkPage();
+               if ( !$title->isTalkPage() && !$wgOut->showNewSectionLink() ) {
+                       $title = $title->getTalkPage();
                }
 
-               return Linker::link(
+               return Linker::linkKnown(
                        $title,
                        wfMsg( 'postcomment' ),
                        array(),
                        array(
                                'action' => 'edit',
                                'section' => 'new'
-                       ),
-                       array( 'known', 'noclasses' )
+                       )
                );
        }
 
@@ -867,21 +809,17 @@ class LegacyTemplate extends BaseTemplate {
                        # Using an empty class attribute to avoid automatic setting of "external" class
                        return Linker::makeExternalLink( $wgUploadNavigationUrl, wfMsgHtml( 'upload' ), false, null, array( 'class' => '' ) );
                } else {
-                       return Linker::link(
+                       return Linker::linkKnown(
                                SpecialPage::getTitleFor( 'Upload' ),
-                               wfMsgHtml( 'upload' ),
-                               array(),
-                               array(),
-                               array( 'known', 'noclasses' )
+                               wfMsgHtml( 'upload' )
                        );
                }
        }
 
        function nameAndLogin() {
-               global $wgUser, $wgLang, $wgRequest, $wgContLang;
-
-               $logoutPage = $wgContLang->specialPage( 'Userlogout' );
+               global $wgUser, $wgLang, $wgRequest;
 
+               $returnTo = $this->getSkin()->getTitle();
                $ret = '';
 
                if ( $wgUser->isAnon() ) {
@@ -890,17 +828,17 @@ class LegacyTemplate extends BaseTemplate {
 
                                $talkLink = Linker::link( $wgUser->getTalkPage(),
                                        $wgLang->getNsText( NS_TALK ) );
+                               $talkLink = wfMessage( 'parentheses' )->rawParams( $talkLink )->escaped();
 
-                               $ret .= "$name ($talkLink)";
+                               $ret .= "$name $talkLink";
                        } else {
                                $ret .= wfMsg( 'notloggedin' );
                        }
 
-                       $returnTo = $this->getSkin()->getTitle()->getPrefixedDBkey();
                        $query = array();
 
-                       if ( $logoutPage != $returnTo ) {
-                               $query['returnto'] = $returnTo;
+                       if ( !$returnTo->isSpecial( 'Userlogout' ) ) {
+                               $query['returnto'] = $returnTo->getPrefixedDBkey();
                        }
 
                        $loginlink = $wgUser->isAllowed( 'createaccount' )
@@ -911,17 +849,17 @@ class LegacyTemplate extends BaseTemplate {
                                wfMsg( $loginlink ), array(), $query
                        );
                } else {
-                       $returnTo = $this->getSkin()->getTitle()->getPrefixedDBkey();
                        $talkLink = Linker::link( $wgUser->getTalkPage(),
                                $wgLang->getNsText( NS_TALK ) );
+                       $talkLink = wfMessage( 'parentheses' )->rawParams( $talkLink )->escaped();
 
                        $ret .= Linker::link( $wgUser->getUserPage(),
                                htmlspecialchars( $wgUser->getName() ) );
-                       $ret .= " ($talkLink)<br />";
+                       $ret .= " $talkLink<br />";
                        $ret .= $wgLang->pipeList( array(
                                Linker::link(
                                        SpecialPage::getTitleFor( 'Userlogout' ), wfMsg( 'logout' ),
-                                       array(), array( 'returnto' => $returnTo )
+                                       array(), array( 'returnto' => $returnTo->getPrefixedDBkey() )
                                ),
                                Linker::specialLink( 'Preferences' ),
                        ) );
@@ -937,6 +875,4 @@ class LegacyTemplate extends BaseTemplate {
 
                return $ret;
        }
-
 }
-