* (bug 1577) Add 'printable version' tab in MonoBook for people who don't
[lhc/web/wiklou.git] / includes / SkinTemplate.php
index 04c9803..6c732e8 100644 (file)
@@ -146,7 +146,7 @@ class SkinTemplate extends Skin {
                global $wgTitle, $wgArticle, $wgUser, $wgLang, $wgContLang, $wgOut;
                global $wgScript, $wgStylePath, $wgLanguageCode, $wgContLanguageCode, $wgUseNewInterlanguage;
                global $wgMimeType, $wgJsMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest;
-               global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses;
+               global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses, $wgHideInterlanguageLinks;
                global $wgMaxCredits, $wgShowCreditsIfMax;
                global $wgPageShowWatchingUsers;
 
@@ -158,7 +158,7 @@ class SkinTemplate extends Skin {
                wfProfileIn( "$fname-init" );
                $this->initPage( $out );
 
-               $this->mTitle = $wgTitle;
+               $this->mTitle =& $wgTitle;
                $this->mUser =& $wgUser;
 
                $tpl =& $this->setupTemplate( $this->template, 'skins' );
@@ -224,6 +224,7 @@ class SkinTemplate extends Skin {
                $tpl->setRef( 'wgScript', $wgScript );
                $tpl->setRef( 'skinname', $this->skinname );
                $tpl->setRef( 'stylename', $this->stylename );
+               $tpl->set( 'printable', $wgRequest->getBool( 'printable' ) );
                $tpl->setRef( 'loggedin', $this->loggedin );
                $tpl->set('nsclass', 'ns-'.$this->mTitle->getNamespace());
                $tpl->set('notspecialpage', $this->mTitle->getNamespace() != NS_SPECIAL);
@@ -310,7 +311,6 @@ class SkinTemplate extends Skin {
                                $tpl->set('numberofwatchingusers', false);
                        }
 
-                       $tpl->set('lastmod', $this->lastModified());
                        $tpl->set('copyright',$this->getCopyright());
 
                        $this->credits = false;
@@ -318,6 +318,8 @@ class SkinTemplate extends Skin {
                        if (isset($wgMaxCredits) && $wgMaxCredits != 0) {
                                require_once("Credits.php");
                                $this->credits = getCredits($wgArticle, $wgMaxCredits, $wgShowCreditsIfMax);
+                       } else {
+                               $tpl->set('lastmod', $this->lastModified());
                        }
 
                        $tpl->setRef( 'credits', $this->credits );
@@ -353,11 +355,14 @@ class SkinTemplate extends Skin {
 
                # Language links
                $language_urls = array();
-               foreach( $wgOut->getLanguageLinks() as $l ) {
-                       $nt = Title::newFromText( $l );
-                       $language_urls[] = array('href' => $nt->getFullURL(),
-                       'text' => ($wgContLang->getLanguageName( $nt->getInterwiki()) != ''?$wgContLang->getLanguageName( $nt->getInterwiki()) : $l),
-                       'class' => $wgContLang->isRTL() ? 'rtl' : 'ltr');
+               
+               if ( !$wgHideInterlanguageLinks ) {
+                       foreach( $wgOut->getLanguageLinks() as $l ) {
+                               $nt = Title::newFromText( $l );
+                               $language_urls[] = array('href' => $nt->getFullURL(),
+                               'text' => ($wgContLang->getLanguageName( $nt->getInterwiki()) != ''?$wgContLang->getLanguageName( $nt->getInterwiki()) : $l),
+                               'class' => $wgContLang->isRTL() ? 'rtl' : 'ltr');
+                       }
                }
                if(count($language_urls)) {
                        $tpl->setRef( 'language_urls', $language_urls);
@@ -383,7 +388,7 @@ class SkinTemplate extends Skin {
                } else {
                        $tpl->set( 'body_onload', false );
                }
-               $tpl->set( 'navigation_urls', $this->buildNavigationUrls() );
+               $tpl->set( 'sidebar', $this->buildSidebar() );
                $tpl->set( 'nav_urls', $this->buildNavUrls() );
 
                // execute template
@@ -518,7 +523,7 @@ class SkinTemplate extends Skin {
         * @access private
         */
        function buildContentActionUrls () {
-               global $wgContLang, $wgUseValidation, $wgDBprefix;
+               global $wgContLang, $wgUseValidation, $wgDBprefix, $wgValidationForAnons;
                $fname = 'SkinTemplate::buildContentActionUrls';
                wfProfileIn( $fname );
                
@@ -641,7 +646,9 @@ class SkinTemplate extends Skin {
                                                'href' => $this->mTitle->getLocalUrl( 'action=unwatch' )
                                        );
                                }
+                       }
 
+                       if( $wgUser->isLoggedIn() || $wgValidationForAnons ) { # and $action != 'submit' ) {
                                # Validate tab. TODO: add validation to logged-in user rights 
                                if($wgUseValidation && ( $action == "" || $action=='view' ) ){ # && $wgUser->isAllowed('validate')){
                                        if ( $oldid ) $oid = IntVal( $oldid ) ; # Use the oldid
@@ -671,7 +678,7 @@ class SkinTemplate extends Skin {
                        $content_actions['article'] = array(
                                'class' => 'selected',
                                'text' => wfMsg('specialpage'),
-                               'href' => false
+                               'href' => $this->mTitle->getLocalUrl(), // @bug 2457
                        );
                }
 
@@ -696,46 +703,53 @@ class SkinTemplate extends Skin {
                                        );
                                $vcount ++;
                        }
-               }               
+               }
+               
+               // A print stylesheet is attached to all pages, but nobody ever
+               // figures that out. :)  Add a link...
+               if( $this->iscontent && ($action == '' || $action == 'view' || $action == 'purge' ) ) {
+                       $content_actions['print'] = array(
+                               'class' => false,
+                               'text' => wfMsg( 'printableversion' ),
+                               'href' => $wgRequest->appendQuery( 'printable=yes' ) );
+               }
 
                wfProfileOut( $fname );
                return $content_actions;
        }
        
-       function getNavigationLinks() {
-               global $wgNavigationLinks;
-               return $wgNavigationLinks;
-       }
-
        /**
-        * build array of global navigation links
+        * Build an array that represents the sidebar(s), the navigation bar among them
+        *
         * @return array
         * @access private
         */ 
-       function buildNavigationUrls () {
-               $fname = 'SkinTemplate::buildNavigationUrls';
+       function buildSidebar() {
+               $fname = 'SkinTemplate::buildSidebar';
                wfProfileIn( $fname );
                
-               $links = $this->getNavigationLinks();
-               
-               $result = array();
-               foreach ( $links as $link ) {
-                       $text = wfMsg( $link['text'] );
-                       wfProfileIn( "$fname-{$link['text']}" );
-                       if ($text != '-') {
-                               $dest = wfMsgForContent( $link['href'] );
-                               wfProfileIn( "$fname-{$link['text']}2" );
-                               $result[] = array(
-                                       'text' => $text,
-                                       'href' => $this->makeInternalOrExternalUrl( $dest ),
-                                       'id' => 'n-'.$link['text']
-                               );
-                               wfProfileOut( "$fname-{$link['text']}2" );
+               $bar = array();
+               $lines = explode( "\n", wfMsgForContent( 'sidebar' ) );
+               foreach ($lines as $line) {
+                       if (strpos($line, '*') !== 0)
+                               continue;
+                       if (strpos($line, '**') !== 0) {
+                               $line = trim($line, '* ');
+                               $heading = $line;
+                       } else {
+                               if (strpos($line, '|') !== false) { // sanity check
+                                       $line = explode( '|' , trim($line, '* '), 2 );
+                                       $bar[$heading][] = array(
+                                               'text' => wfMsg( $line[1] ),
+                                               'href' => $this->makeInternalOrExternalUrl( wfMsgForContent( $line[0] ) ),
+                                               'id' => 'n-' . $line[1],
+                                       );
+                               } else { continue; }
                        }
-                       wfProfileOut( "$fname-{$link['text']}" );
                }
+               
                wfProfileOut( $fname );
-               return $result;
+               return $bar;
        }
 
        /**