Merge "Support GENDER in MediaWiki:Blockip and Special:Block"
[lhc/web/wiklou.git] / includes / SkinTemplate.php
index 32c25b8..867d8ec 100644 (file)
@@ -74,12 +74,6 @@ class SkinTemplate extends Skin {
         */
        public $skinname = 'monobook';
 
-       /**
-        * @var string Stylesheets set to use. Subdirectory in skins/ where various
-        *   stylesheets are located.  Child classes should override the default.
-        */
-       public $stylename = 'monobook';
-
        /**
         * @var string For QuickTemplate, the name of the subclass which will
         *   actually fill the template.  Child classes should override the default.
@@ -111,14 +105,13 @@ class SkinTemplate extends Skin {
         * @private
         */
        function setupTemplate( $classname, $repository = false, $cache_dir = false ) {
-               return new $classname();
+               return new $classname( $this->getConfig() );
        }
 
        /**
         * Generates array of language links for the current page
         *
         * @return array
-        * @public
         */
        public function getLanguages() {
                global $wgHideInterlanguageLinks;
@@ -140,8 +133,16 @@ class SkinTemplate extends Skin {
                                $ilLangName = Language::fetchLanguageName( $ilInterwikiCode );
 
                                if ( strval( $ilLangName ) === '' ) {
-                                       $ilLangName = $languageLinkText;
+                                       $ilDisplayTextMsg = wfMessage( "interlanguage-link-$ilInterwikiCode" );
+                                       if ( !$ilDisplayTextMsg->isDisabled() ) {
+                                               // Use custom MW message for the display text
+                                               $ilLangName = $ilDisplayTextMsg->text();
+                                       } else {
+                                               // Last resort: fallback to the language link target
+                                               $ilLangName = $languageLinkText;
+                                       }
                                } else {
+                                       // Use the language autonym as display text
                                        $ilLangName = $this->formatLanguageName( $ilLangName );
                                }
 
@@ -153,7 +154,29 @@ class SkinTemplate extends Skin {
                                );
 
                                $languageLinkTitleText = $languageLinkTitle->getText();
-                               if ( $languageLinkTitleText === '' ) {
+                               if ( $ilLangLocalName === '' ) {
+                                       $ilFriendlySiteName = wfMessage( "interlanguage-link-sitename-$ilInterwikiCode" );
+                                       if ( !$ilFriendlySiteName->isDisabled() ) {
+                                               if ( $languageLinkTitleText === '' ) {
+                                                       $ilTitle = wfMessage(
+                                                               'interlanguage-link-title-nonlangonly',
+                                                               $ilFriendlySiteName->text()
+                                                       )->text();
+                                               } else {
+                                                       $ilTitle = wfMessage(
+                                                               'interlanguage-link-title-nonlang',
+                                                               $languageLinkTitleText,
+                                                               $ilFriendlySiteName->text()
+                                                       )->text();
+                                               }
+                                       } else {
+                                               // we have nothing friendly to put in the title, so fall back to
+                                               // displaying the interlanguage link itself in the title text
+                                               // (similar to what is done in page content)
+                                               $ilTitle = $languageLinkTitle->getInterwiki() .
+                                                       ":$languageLinkTitleText";
+                                       }
+                               } elseif ( $languageLinkTitleText === '' ) {
                                        $ilTitle = wfMessage(
                                                'interlanguage-link-title-langonly',
                                                $ilLangLocalName
@@ -271,8 +294,7 @@ class SkinTemplate extends Skin {
         * @return QuickTemplate The template to be executed by outputPage
         */
        protected function prepareQuickTemplate() {
-               global $wgContLang, $wgScript, $wgStylePath,
-                       $wgMimeType, $wgJsMimeType, $wgXhtmlNamespaces, $wgHtml5Version,
+               global $wgContLang, $wgScript, $wgStylePath, $wgMimeType, $wgJsMimeType,
                        $wgDisableCounters, $wgSitename, $wgLogo, $wgMaxCredits,
                        $wgShowCreditsIfMax, $wgPageShowWatchingUsers, $wgArticlePath,
                        $wgScriptPath, $wgServer;
@@ -336,13 +358,6 @@ class SkinTemplate extends Skin {
                $tpl->set( 'handheld', $request->getBool( 'handheld' ) );
                $tpl->setRef( 'loggedin', $this->loggedin );
                $tpl->set( 'notspecialpage', !$title->isSpecialPage() );
-               /* XXX currently unused, might get useful later
-               $tpl->set( 'editable', ( !$title->isSpecialPage() ) );
-               $tpl->set( 'exists', $title->getArticleID() != 0 );
-               $tpl->set( 'watch', $user->isWatched( $title ) ? 'unwatch' : 'watch' );
-               $tpl->set( 'protect', count( $title->isProtected() ) ? 'unprotect' : 'protect' );
-               $tpl->set( 'helppage', $this->msg( 'helppage' )->text() );
-               */
                $tpl->set( 'searchaction', $this->escapeSearchLink() );
                $tpl->set( 'searchtitle', SpecialPage::getTitleFor( 'Search' )->getPrefixedDBkey() );
                $tpl->set( 'search', trim( $request->getVal( 'search' ) ) );
@@ -748,7 +763,7 @@ class SkinTemplate extends Skin {
        /**
         * Builds an array with tab definition
         *
-        * @param Title $title page Where the tab links to
+        * @param Title $title Page Where the tab links to
         * @param string|array $message Message key or an array of message keys (will fall back)
         * @param bool $selected Display the tab as selected
         * @param string $query Query string attached to tab URL
@@ -1074,7 +1089,7 @@ class SkinTemplate extends Skin {
                                        /**
                                         * The following actions use messages which, if made particular to
                                         * the any specific skins, would break the Ajax code which makes this
-                                        * action happen entirely inline. Skin::makeGlobalVariablesScript
+                                        * action happen entirely inline. OutputPage::getJSVars
                                         * defines a set of messages in a javascript object - and these
                                         * messages are assumed to be global for all skins. Without making
                                         * a change to that procedure these messages will have to remain as
@@ -1182,7 +1197,7 @@ class SkinTemplate extends Skin {
 
        /**
         * an array of edit links by default used for the tabs
-        * @param $content_navigation
+        * @param array $content_navigation
         * @return array
         */
        private function buildContentActionUrls( $content_navigation ) {
@@ -1357,12 +1372,20 @@ class SkinTemplate extends Skin {
  * @ingroup Skins
  */
 abstract class QuickTemplate {
+
+       /** @var Config $config */
+       protected $config;
        /**
-        * Constructor
+        * @var Config $config
         */
-       function __construct() {
+       function __construct( Config $config = null ) {
                $this->data = array();
                $this->translator = new MediaWikiI18N();
+               if ( $config === null ) {
+                       wfDebug( __METHOD__ . ' was called with no Config instance passed to it' );
+                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
+               $this->config = $config;
        }
 
        /**
@@ -1782,9 +1805,9 @@ abstract class BaseTemplate extends QuickTemplate {
         * Makes a link, usually used by makeListItem to generate a link for an item
         * in a list used in navigation lists, portlets, portals, sidebars, etc...
         *
-        * @param string $key usually a key from the list you are generating this
+        * @param string $key Usually a key from the list you are generating this
         * link from.
-        * @param array $item contains some of a specific set of keys.
+        * @param array $item Contains some of a specific set of keys.
         *
         * The text of the link will be generated either from the contents of the
         * "text" key in the $item array, if a "msg" key is present a message by
@@ -1805,7 +1828,7 @@ abstract class BaseTemplate extends QuickTemplate {
         *
         * If you don't want an accesskey, set $item['tooltiponly'] = true;
         *
-        * @param array $options can be used to affect the output of a link.
+        * @param array $options Can be used to affect the output of a link.
         * Possible options are:
         *   - 'text-wrapper' key to specify a list of elements to wrap the text of
         *   a link in. This should be an array of arrays containing a 'tag' and