Use protocol-relative URL for link to MediaWiki.org (as with the footer logo on each...
[lhc/web/wiklou.git] / includes / Skin.php
index 10eba64..5d0f877 100644 (file)
@@ -183,7 +183,7 @@ abstract class Skin extends ContextSource {
                $titles = array( $user->getUserPage(), $user->getTalkPage() );
 
                // Other tab link
-               if ( $this->getTitle()->getNamespace() == NS_SPECIAL ) {
+               if ( $this->getTitle()->isSpecialPage() ) {
                        // nothing
                } elseif ( $this->getTitle()->isTalkPage() ) {
                        $titles[] = $this->getTitle()->getSubjectPage();
@@ -268,8 +268,8 @@ abstract class Skin extends ContextSource {
                        if ( User::isIP( $rootUser ) ) {
                                $this->mRelevantUser = User::newFromName( $rootUser, false );
                        } else {
-                               $user = User::newFromName( $rootUser );
-                               if ( $user->isLoggedIn() ) {
+                               $user = User::newFromName( $rootUser, false );
+                               if ( $user && $user->isLoggedIn() ) {
                                        $this->mRelevantUser = $user;
                                }
                        }
@@ -294,31 +294,6 @@ abstract class Skin extends ContextSource {
                }
        }
 
-       /**
-        * Generated JavaScript action=raw&gen=js
-        * This used to load MediaWiki:Common.js and the skin-specific style
-        * before the ResourceLoader.
-        *
-        * @deprecated since 1.18 Use the ResourceLoader instead. This may be removed at some
-        * point.
-        * @param $skinName String: If set, overrides the skin name
-        * @return String
-        */
-       public function generateUserJs( $skinName = null ) {
-               return '';
-       }
-
-       /**
-        * Generate user stylesheet for action=raw&gen=css
-        *
-        * @deprecated since 1.18 Use the ResourceLoader instead. This may be removed at some
-        * point.
-        * @return String
-        */
-       public function generateUserStylesheet() {
-               return '';
-       }
-
        /**
         * Get the query to generate a dynamic stylesheet
         *
@@ -354,7 +329,7 @@ abstract class Skin extends ContextSource {
        function getPageClasses( $title ) {
                $numeric = 'ns-' . $title->getNamespace();
 
-               if ( $title->getNamespace() == NS_SPECIAL ) {
+               if ( $title->isSpecialPage() ) {
                        $type = 'ns-special';
                        // bug 23315: provide a class based on the canonical special page name without subpages
                        list( $canonicalName ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
@@ -408,29 +383,30 @@ abstract class Skin extends ContextSource {
                $pop = "</li>";
 
                $s = '';
-               $colon = wfMsgExt( 'colon-separator', 'escapenoentities' );
+               $colon = $this->msg( 'colon-separator' )->escaped();
 
                if ( !empty( $allCats['normal'] ) ) {
                        $t = $embed . implode( "{$pop}{$embed}" , $allCats['normal'] ) . $pop;
 
-                       $msg = wfMsgExt( 'pagecategories', array( 'parsemag', 'escapenoentities' ), count( $allCats['normal'] ) );
-                       $s .= '<div id="mw-normal-catlinks">' .
-                               Linker::link( Title::newFromText( wfMsgForContent( 'pagecategorieslink' ) ), $msg )
+                       $msg = $this->msg( 'pagecategories', count( $allCats['normal'] ) )->escaped();
+                       $linkPage = wfMessage( 'pagecategorieslink' )->inContentLanguage()->text();
+                       $s .= '<div id="mw-normal-catlinks" class="mw-normal-catlinks">' .
+                               Linker::link( Title::newFromText( $linkPage ), $msg )
                                . $colon . '<ul>' . $t . '</ul>' . '</div>';
                }
 
                # Hidden categories
                if ( isset( $allCats['hidden'] ) ) {
                        if ( $this->getUser()->getBoolOption( 'showhiddencats' ) ) {
-                               $class = 'mw-hidden-cats-user-shown';
+                               $class = ' mw-hidden-cats-user-shown';
                        } elseif ( $this->getTitle()->getNamespace() == NS_CATEGORY ) {
-                               $class = 'mw-hidden-cats-ns-shown';
+                               $class = ' mw-hidden-cats-ns-shown';
                        } else {
-                               $class = 'mw-hidden-cats-hidden';
+                               $class = ' mw-hidden-cats-hidden';
                        }
 
-                       $s .= "<div id=\"mw-hidden-catlinks\" class=\"$class\">" .
-                               wfMsgExt( 'hidden-categories', array( 'parsemag', 'escapenoentities' ), count( $allCats['hidden'] ) ) .
+                       $s .= "<div id=\"mw-hidden-catlinks\" class=\"mw-hidden-catlinks$class\">" .
+                               $this->msg( 'hidden-categories', count( $allCats['hidden'] ) )->escaped() .
                                $colon . '<ul>' . $embed . implode( "{$pop}{$embed}" , $allCats['hidden'] ) . $pop . '</ul>' .
                                '</div>';
                }
@@ -562,7 +538,7 @@ abstract class Skin extends ContextSource {
                        $pre = '';
                        if ( $wgDebugTimestamps ) {
                                $matches = array();
-                               if ( preg_match( '/^(\d+\.\d+\s{2})/', $line, $matches ) ) {
+                               if ( preg_match( '/^(\d+\.\d+   \d+.\dM\s{2})/', $line, $matches ) ) {
                                        $pre = $matches[1];
                                        $line = substr( $line, strlen( $pre ) );
                                }
@@ -624,18 +600,22 @@ abstract class Skin extends ContextSource {
         */
        function printSource() {
                $oldid = $this->getRevisionId();
-               $url = htmlspecialchars( $this->getTitle()->getFullURL( 'oldid=' . $oldid ) );
-               return wfMsg( 'retrievedfrom', '<a href="' . $url . '">' . $url . '</a>' );
+               if ( $oldid ) {
+                       $url = htmlspecialchars( $this->getTitle()->getCanonicalURL( 'oldid=' . $oldid ) );
+               } else {
+                       // oldid not available for non existing pages
+                       $url = htmlspecialchars( $this->getTitle()->getCanonicalURL() );
+               }
+               return $this->msg( 'retrievedfrom', '<a href="' . $url . '">' . $url . '</a>' )->text();
        }
 
        function getUndeleteLink() {
                $action = $this->getRequest()->getVal( 'action', 'view' );
 
-               if ( $this->getUser()->isAllowed( 'deletedhistory' ) && !$this->getUser()->isBlocked() &&
+               if ( $this->getUser()->isAllowed( 'deletedhistory' ) &&
                        ( $this->getTitle()->getArticleId() == 0 || $action == 'history' ) ) {
+                       $n = $this->getTitle()->isDeleted();
 
-                       $includeSuppressed = $this->getUser()->isAllowed( 'suppressrevision' );
-                       $n = $this->getTitle()->isDeleted( $includeSuppressed );
 
                        if ( $n ) {
                                if ( $this->getUser()->isAllowed( 'undelete' ) ) {
@@ -644,13 +624,11 @@ abstract class Skin extends ContextSource {
                                        $msg = 'viewdeleted';
                                }
 
-                               return wfMsg(
-                                       $msg,
+                               return $this->msg( $msg )->rawParams(
                                        Linker::linkKnown(
                                                SpecialPage::getTitleFor( 'Undelete', $this->getTitle()->getPrefixedDBkey() ),
-                                               wfMsgExt( 'restorelink', array( 'parsemag', 'escape' ), $this->getLang()->formatNum( $n ) )
-                                       )
-                               );
+                                               $this->msg( 'restorelink' )->numParams( $n )->escaped() )
+                                       )->text();
                        }
                }
 
@@ -688,7 +666,7 @@ abstract class Skin extends ContextSource {
                                                $c++;
 
                                                if ( $c > 1 ) {
-                                                       $subpages .= wfMsgExt( 'pipe-separator', 'escapenoentities' );
+                                                       $subpages .= $this->msg( 'pipe-separator' )->escaped();
                                                } else  {
                                                        $subpages .= '&lt; ';
                                                }
@@ -725,10 +703,10 @@ abstract class Skin extends ContextSource {
        }
 
        function getCopyright( $type = 'detect' ) {
-               global $wgRightsPage, $wgRightsUrl, $wgRightsText;
+               global $wgRightsPage, $wgRightsUrl, $wgRightsText, $wgContLang;
 
                if ( $type == 'detect' ) {
-                       if ( !$this->isRevisionCurrent() && wfMsgForContent( 'history_copyright' ) !== '-' ) {
+                       if ( !$this->isRevisionCurrent() && !$this->msg( 'history_copyright' )->inContentLanguage()->isDisabled() ) {
                                $type = 'history';
                        } else {
                                $type = 'normal';
@@ -758,10 +736,15 @@ abstract class Skin extends ContextSource {
 
                wfRunHooks( 'SkinCopyrightFooter', array( $this->getTitle(), $type, &$msg, &$link, &$forContent ) );
 
+               $msgObj = $this->msg( $msg )->rawParams( $link );
                if ( $forContent ) {
-                       return wfMsgForContent( $msg, $link );
+                       $msg = $msgObj->inContentLanguage()->text();
+                       if ( $this->getLanguage()->getCode() !== $wgContLang->getCode() ) {
+                               $msg = Html::rawElement( 'span', array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() ), $msg );
+                       }
+                       return $msg;
                } else {
-                       return wfMsg( $msg, $link );
+                       return $msgObj->text();
                }
        }
 
@@ -799,7 +782,7 @@ abstract class Skin extends ContextSource {
                global $wgStylePath;
 
                $url = htmlspecialchars( "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" );
-               $text = '<a href="http://www.mediawiki.org/"><img src="' . $url . '" height="31" width="88" alt="Powered by MediaWiki" /></a>';
+               $text = '<a href="//www.mediawiki.org/"><img src="' . $url . '" height="31" width="88" alt="Powered by MediaWiki" /></a>';
                wfRunHooks( 'SkinGetPoweredBy', array( &$text, $this ) );
                return $text;
        }
@@ -807,26 +790,26 @@ abstract class Skin extends ContextSource {
        /**
         * Get the timestamp of the latest revision, formatted in user language
         *
-        * @param $article Article object. Used if we're working with the current revision
+        * @param $page WikiPage object. Used if we're working with the current revision
         * @return String
         */
-       protected function lastModified( $article ) {
+       protected function lastModified( $page ) {
                if ( !$this->isRevisionCurrent() ) {
                        $timestamp = Revision::getTimestampFromId( $this->getTitle(), $this->getRevisionId() );
                } else {
-                       $timestamp = $article->getTimestamp();
+                       $timestamp = $page->getTimestamp();
                }
 
                if ( $timestamp ) {
-                       $d = $this->getLang()->date( $timestamp, true );
-                       $t = $this->getLang()->time( $timestamp, true );
-                       $s = ' ' . wfMsg( 'lastmodifiedat', $d, $t );
+                       $d = $this->getLanguage()->userDate( $timestamp, $this->getUser() );
+                       $t = $this->getLanguage()->userTime( $timestamp, $this->getUser() );
+                       $s = ' ' . $this->msg( 'lastmodifiedat', $d, $t )->text();
                } else {
                        $s = '';
                }
 
                if ( wfGetLB()->getLaggedSlaveMode() ) {
-                       $s .= ' <strong>' . wfMsg( 'laggedslavemode' ) . '</strong>';
+                       $s .= ' <strong>' . $this->msg( 'laggedslavemode' )->text() . '</strong>';
                }
 
                return $s;
@@ -839,7 +822,7 @@ abstract class Skin extends ContextSource {
                        $a = '';
                }
 
-               $mp = wfMsgHtml( 'mainpage' );
+               $mp = $this->msg( 'mainpage' )->escaped();
                $mptitle = Title::newMainPage();
                $url = ( is_object( $mptitle ) ? $mptitle->escapeLocalURL() : '' );
 
@@ -880,7 +863,7 @@ abstract class Skin extends ContextSource {
        function mainPageLink() {
                $s = Linker::linkKnown(
                        Title::newMainPage(),
-                       wfMsgHtml( 'mainpage' )
+                       $this->msg( 'mainpage' )->escaped()
                );
 
                return $s;
@@ -888,18 +871,18 @@ abstract class Skin extends ContextSource {
 
        public function footerLink( $desc, $page ) {
                // if the link description has been set to "-" in the default language,
-               if ( wfMsgForContent( $desc )  == '-' ) {
+               if ( $this->msg( $desc )->inContentLanguage()->isDisabled() ) {
                        // then it is disabled, for all languages.
                        return '';
                } else {
                        // Otherwise, we display the link for the user, described in their
                        // language (which may or may not be the same as the default language),
                        // but we make the link target be the one site-wide page.
-                       $title = Title::newFromText( wfMsgForContent( $page ) );
+                       $title = Title::newFromText( $this->msg( $page )->inContentLanguage()->text() );
 
                        return Linker::linkKnown(
                                $title,
-                               wfMsgExt( $desc, array( 'parsemag', 'escapenoentities' ) )
+                               $this->msg( $desc )->escaped()
                        );
                }
        }
@@ -946,7 +929,11 @@ abstract class Skin extends ContextSource {
        }
 
        function showEmailUser( $id ) {
-               $targetUser = User::newFromId( $id );
+               if ( $id instanceof User ) {
+                       $targetUser = $id;
+               } else {
+                       $targetUser = User::newFromId( $id );
+               }
                return $this->getUser()->canSendEmail() && # the sending user must have a confirmed email address
                        $targetUser->canReceiveEmail(); # the target user must have a confirmed email address and allow emails from users
        }
@@ -1074,7 +1061,7 @@ abstract class Skin extends ContextSource {
                global $parserMemc, $wgEnableSidebarCache, $wgSidebarCacheExpiry;
                wfProfileIn( __METHOD__ );
 
-               $key = wfMemcKey( 'sidebar', $this->getLang()->getCode() );
+               $key = wfMemcKey( 'sidebar', $this->getLanguage()->getCode() );
 
                if ( $wgEnableSidebarCache ) {
                        $cachedsidebar = $parserMemc->get( $key );
@@ -1139,7 +1126,7 @@ abstract class Skin extends ContextSource {
                                        $line = array_map( 'trim', explode( '|', $line, 2 ) );
                                        $extraAttribs = array();
 
-                                       $msgLink = wfMessage( $line[0] )->inContentLanguage();
+                                       $msgLink = $this->msg( $line[0] )->inContentLanguage();
                                        if ( $msgLink->exists() ) {
                                                $link = $msgLink->text();
                                                if ( $link == '-' ) {
@@ -1149,7 +1136,7 @@ abstract class Skin extends ContextSource {
                                                $link = $line[0];
                                        }
 
-                                       $msgText = wfMessage( $line[1] );
+                                       $msgText = $this->msg( $line[1] );
                                        if ( $msgText->exists() ) {
                                                $text = $msgText->text();
                                        } else {
@@ -1196,10 +1183,9 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * Should we include common/wikiprintable.css?  Skins that have their own
+        * Should we load mediawiki.legacy.wikiprintable?  Skins that have their own
         * print stylesheet should override this and return false.  (This is an
-        * ugly hack to get Monobook to play nicely with
-        * OutputPage::headElement().)
+        * ugly hack to get Monobook to play nicely with OutputPage::headElement().)
         *
         * @return bool
         */
@@ -1224,29 +1210,29 @@ abstract class Skin extends ContextSource {
                        if ( !$userTalkTitle->equals( $out->getTitle() ) ) {
                                $newMessagesLink = Linker::linkKnown(
                                        $userTalkTitle,
-                                       wfMsgHtml( 'newmessageslink' ),
+                                       $this->msg( 'newmessageslink' )->escaped(),
                                        array(),
                                        array( 'redirect' => 'no' )
                                );
 
                                $newMessagesDiffLink = Linker::linkKnown(
                                        $userTalkTitle,
-                                       wfMsgHtml( 'newmessagesdifflink' ),
+                                       $this->msg( 'newmessagesdifflink' )->escaped(),
                                        array(),
                                        array( 'diff' => 'cur' )
                                );
 
-                               $ntl = wfMsg(
+                               $ntl = $this->msg(
                                        'youhavenewmessages',
                                        $newMessagesLink,
                                        $newMessagesDiffLink
-                               );
+                               )->text();
                                # Disable Squid cache
                                $out->setSquidMaxage( 0 );
                        }
                } elseif ( count( $newtalks ) ) {
                        // _>" " for BC <= 1.16
-                       $sep = str_replace( '_', ' ', wfMsgHtml( 'newtalkseparator' ) );
+                       $sep = str_replace( '_', ' ', $this->msg( 'newtalkseparator' )->escaped() );
                        $msgs = array();
 
                        foreach ( $newtalks as $newtalk ) {
@@ -1256,7 +1242,7 @@ abstract class Skin extends ContextSource {
                                );
                        }
                        $parts = implode( $sep, $msgs );
-                       $ntl = wfMsgHtml( 'youhavenewmessagesmulti', $parts );
+                       $ntl = $this->msg( 'youhavenewmessagesmulti' )->rawParams( $parts )->escaped();
                        $out->setSquidMaxage( 0 );
                }
 
@@ -1285,7 +1271,7 @@ abstract class Skin extends ContextSource {
                                return false;
                        }
                } else {
-                       $msg = wfMessage( $name )->inContentLanguage();
+                       $msg = $this->msg( $name )->inContentLanguage();
                        if( $msg->isDisabled() ) {
                                wfProfileOut( __METHOD__ );
                                return false;