* (bug 1577) Add 'printable version' tab in MonoBook for people who don't
[lhc/web/wiklou.git] / includes / SkinTemplate.php
index 6f71eaa..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
@@ -442,7 +447,7 @@ class SkinTemplate extends Skin {
                        );
                        $personal_urls['mycontris'] = array(
                                'text' => wfMsg('mycontris'),
-                               'href' => $this->makeSpecialUrl('Contributions','target=' . urlencode( $this->username ) )
+                               'href' => $this->makeSpecialUrl("Contributions/$this->username")
                        );
                        $personal_urls['logout'] = array(
                                'text' => wfMsg('userlogout'),
@@ -518,7 +523,7 @@ class SkinTemplate extends Skin {
         * @access private
         */
        function buildContentActionUrls () {
-               global $wgContLang, $wgUseValidation;
+               global $wgContLang, $wgUseValidation, $wgDBprefix, $wgValidationForAnons;
                $fname = 'SkinTemplate::buildContentActionUrls';
                wfProfileIn( $fname );
                
@@ -609,7 +614,7 @@ class SkinTemplate extends Skin {
                                                $content_actions['move'] = array(
                                                        'class' => ($this->mTitle->getDbKey() == 'Movepage' and $this->mTitle->getNamespace == NS_SPECIAL) ? 'selected' : false,
                                                        'text' => wfMsg('move'),
-                                                       'href' => $this->makeSpecialUrl('Movepage', 'target='. urlencode( $this->thispage ) )
+                                                       'href' => $this->makeSpecialUrl("Movepage/$this->thispage" )
                                                );
                                        }
                                }
@@ -620,7 +625,7 @@ class SkinTemplate extends Skin {
                                                $content_actions['undelete'] = array(
                                                        'class' => false,
                                                        'text' => ($n == 1) ? wfMsg( 'undelete_short1' ) : wfMsg('undelete_short', $n ),
-                                                       'href' => $this->makeSpecialUrl('Undelete/'.$this->thispage)
+                                                       'href' => $this->makeSpecialUrl("Undelete/$this->thispage")
                                                );
                                        }
                                }
@@ -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
@@ -649,7 +656,7 @@ class SkinTemplate extends Skin {
                                                {# Trying to get the current article revision through this weird stunt
                                                $tid = $this->mTitle->getArticleID();
                                                $tns = $this->mTitle->getNamespace();
-                                               $sql = "SELECT page_latest FROM page WHERE page_id={$tid} AND page_namespace={$tns}" ;
+                                               $sql = "SELECT page_latest FROM {$wgDBprefix}page WHERE page_id={$tid} AND page_namespace={$tns}" ;
                                                $res = wfQuery( $sql, DB_READ );
                                                if( $s = wfFetchObject( $res ) )
                                                        $oid = $s->page_latest ;
@@ -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;
        }
 
        /**
@@ -756,7 +770,7 @@ class SkinTemplate extends Skin {
                
                $nav_urls = array();
                $nav_urls['mainpage'] = array('href' => $this->makeI18nUrl('mainpage'));
-               $nav_urls['randompage'] = array('href' => $this->makeSpecialUrl('Randompage'));
+               $nav_urls['randompage'] = array('href' => $this->makeSpecialUrl('Random'));
                $nav_urls['recentchanges'] = array('href' => $this->makeSpecialUrl('Recentchanges'));
                $nav_urls['currentevents'] = (wfMsgForContent('currentevents') != '-') ? array('href' => $this->makeI18nUrl('currentevents')) : false;
                $nav_urls['portal'] =  (wfMsgForContent('portal') != '-') ? array('href' => $this->makeI18nUrl('portal-url')) : false;
@@ -776,8 +790,12 @@ class SkinTemplate extends Skin {
                $nav_urls['specialpages'] = array('href' => $this->makeSpecialUrl('Specialpages'));
 
                if( $this->mTitle->getNamespace() != NS_SPECIAL) {
-                       $nav_urls['whatlinkshere'] = array('href' => $this->makeSpecialUrl('Whatlinkshere', 'target='.urlencode( $this->thispage)));
-                       $nav_urls['recentchangeslinked'] = array('href' => $this->makeSpecialUrl('Recentchangeslinked', 'target='.urlencode( $this->thispage)));
+                       $nav_urls['whatlinkshere'] = array(
+                               'href' => $this->makeSpecialUrl("Whatlinkshere/$this->thispage")
+                       );
+                       $nav_urls['recentchangeslinked'] = array(
+                               'href' => $this->makeSpecialUrl("Recentchangeslinked/$this->thispage")
+                       );
                }
 
                if( $this->mTitle->getNamespace() == NS_USER || $this->mTitle->getNamespace() == NS_USER_TALK ) {
@@ -790,7 +808,7 @@ class SkinTemplate extends Skin {
 
                if($id || $ip) { # both anons and non-anons have contri list
                        $nav_urls['contributions'] = array(
-                               'href' => $this->makeSpecialUrl('Contributions', "target=" . $this->mTitle->getPartialURL() )
+                               'href' => $this->makeSpecialUrl('Contributions/' . $this->mTitle->getText() )
                        );
                } else {
                        $nav_urls['contributions'] = false;
@@ -798,7 +816,7 @@ class SkinTemplate extends Skin {
                $nav_urls['emailuser'] = false;
                if( $this->showEmailUser( $id ) ) {
                        $nav_urls['emailuser'] = array(
-                               'href' => $this->makeSpecialUrl('Emailuser', "target=" . $this->mTitle->getPartialURL() )
+                               'href' => $this->makeSpecialUrl('Emailuser/' . $this->mTitle->getText() )
                        );
                }
                wfProfileOut( $fname );