Validation database prefix fix
[lhc/web/wiklou.git] / includes / SkinTemplate.php
index 7fd5adc..04c9803 100644 (file)
@@ -145,7 +145,7 @@ class SkinTemplate extends Skin {
        function outputPage( &$out ) {
                global $wgTitle, $wgArticle, $wgUser, $wgLang, $wgContLang, $wgOut;
                global $wgScript, $wgStylePath, $wgLanguageCode, $wgContLanguageCode, $wgUseNewInterlanguage;
-               global $wgMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest;
+               global $wgMimeType, $wgJsMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest;
                global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses;
                global $wgMaxCredits, $wgShowCreditsIfMax;
                global $wgPageShowWatchingUsers;
@@ -218,6 +218,7 @@ class SkinTemplate extends Skin {
                        $tpl->set( 'feeds', false );
                }
                $tpl->setRef( 'mimetype', $wgMimeType );
+               $tpl->setRef( 'jsmimetype', $wgJsMimeType );
                $tpl->setRef( 'charset', $wgOutputEncoding );
                $tpl->set( 'headlinks', $out->getHeadLinks() );
                $tpl->setRef( 'wgScript', $wgScript );
@@ -420,14 +421,16 @@ class SkinTemplate extends Skin {
                global $wgShowIPinHeader;
                $personal_urls = array();
                if ($this->loggedin) {
-                       /* Logged in users personal toolbar */
                        $personal_urls['userpage'] = array(
-                               'text' => wfMsg('mypage'),
-                               'href' => $this->makeSpecialUrl('Mypage')
+                               'text' => $this->username,
+                               'href' => &$this->userpageUrlDetails['href'],
+                               'class' => $this->userpageUrlDetails['exists']?false:'new'
                        );
+                       $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage);
                        $personal_urls['mytalk'] = array(
                                'text' => wfMsg('mytalk'),
-                               'href' => $this->makeSpecialUrl('Mytalk')
+                               'href' => &$usertalkUrlDetails['href'],
+                               'class' => $usertalkUrlDetails['exists']?false:'new'
                        );
                        $personal_urls['preferences'] = array(
                                'text' => wfMsg('preferences'),
@@ -439,7 +442,7 @@ class SkinTemplate extends Skin {
                        );
                        $personal_urls['mycontris'] = array(
                                'text' => wfMsg('mycontris'),
-                               'href' => $this->makeSpecialUrl('Mycontributions')
+                               'href' => $this->makeSpecialUrl("Contributions/$this->username")
                        );
                        $personal_urls['logout'] = array(
                                'text' => wfMsg('userlogout'),
@@ -447,22 +450,23 @@ class SkinTemplate extends Skin {
                        );
                } else {
                        if( $wgShowIPinHeader && isset(  $_COOKIE[ini_get("session.name")] ) ) {
-                               /* Anonymous with session users personal toolbar */
                                $personal_urls['anonuserpage'] = array(
-                                       'text' => wfMsg('mypage'),
-                                       'href' => $this->makeSpecialUrl('Mypage')
+                                       'text' => $this->username,
+                                       'href' => &$this->userpageUrlDetails['href'],
+                                       'class' => $this->userpageUrlDetails['exists']?false:'new'
                                );
-                               $personal_urls['mytalk'] = array(
-                                       'text' => wfMsg('mytalk'),
-                                       'href' => $this->makeSpecialUrl('Mytalk')
+                               $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage);
+                               $personal_urls['anontalk'] = array(
+                                       'text' => wfMsg('anontalk'),
+                                       'href' => &$usertalkUrlDetails['href'],
+                                       'class' => $usertalkUrlDetails['exists']?false:'new'
                                );
-
                                $personal_urls['anonlogin'] = array(
                                        'text' => wfMsg('userlogin'),
                                        'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl )
                                );
                        } else {
-                               /* Anonymous users personal toolbar */
+
                                $personal_urls['login'] = array(
                                        'text' => wfMsg('userlogin'),
                                        'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl )
@@ -487,6 +491,26 @@ class SkinTemplate extends Skin {
                        'text' => wfMsg( $message ),
                        'href' => $title->getLocalUrl( $query ) );
        }
+
+       function makeTalkUrlDetails( $name, $urlaction='' ) {
+               $title = Title::newFromText( $name );
+               $title = $title->getTalkPage();
+               $this->checkTitle($title, $name);
+               return array(
+                       'href' => $title->getLocalURL( $urlaction ),
+                       'exists' => $title->getArticleID() != 0?true:false
+               );
+       }
+       
+       function makeArticleUrlDetails( $name, $urlaction='' ) {
+               $title = Title::newFromText( $name );
+               $title= $title->getSubjectPage();
+               $this->checkTitle($title, $name);
+               return array(
+                       'href' => $title->getLocalURL( $urlaction ),
+                       'exists' => $title->getArticleID() != 0?true:false
+               );
+       }
        
        /**
         * an array of edit links by default used for the tabs
@@ -494,7 +518,7 @@ class SkinTemplate extends Skin {
         * @access private
         */
        function buildContentActionUrls () {
-               global $wgContLang, $wgUseValidation;
+               global $wgContLang, $wgUseValidation, $wgDBprefix;
                $fname = 'SkinTemplate::buildContentActionUrls';
                wfProfileIn( $fname );
                
@@ -585,7 +609,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" )
                                                );
                                        }
                                }
@@ -596,7 +620,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")
                                                );
                                        }
                                }
@@ -625,7 +649,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 ;
@@ -701,11 +725,11 @@ class SkinTemplate extends Skin {
                        if ($text != '-') {
                                $dest = wfMsgForContent( $link['href'] );
                                wfProfileIn( "$fname-{$link['text']}2" );
-                           $result[] = array(
-                                                                 'text' => $text,
-                                                                 'href' => $this->makeInternalOrExternalUrl( $dest ),
-                                                                 'id' => 'n-'.$link['text']
-                                                                 );
+                               $result[] = array(
+                                       'text' => $text,
+                                       'href' => $this->makeInternalOrExternalUrl( $dest ),
+                                       'id' => 'n-'.$link['text']
+                               );
                                wfProfileOut( "$fname-{$link['text']}2" );
                        }
                        wfProfileOut( "$fname-{$link['text']}" );
@@ -732,7 +756,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;
@@ -741,7 +765,7 @@ class SkinTemplate extends Skin {
                $nav_urls['sitesupport'] = array('href' => $wgSiteSupportPage);
                $nav_urls['help'] = array('href' => $this->makeI18nUrl('helppage'));
                if( $wgEnableUploads ) {
-                       if (isset($wgUploadNavigationUrl)) {
+                       if ($wgUploadNavigationUrl) {
                                $nav_urls['upload'] = array('href' => $wgUploadNavigationUrl );                 
                        } else {                        
                                $nav_urls['upload'] = array('href' => $this->makeSpecialUrl('Upload'));
@@ -752,8 +776,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 ) {
@@ -766,7 +794,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;
@@ -774,7 +802,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 );
@@ -875,7 +903,7 @@ class SkinTemplate extends Skin {
                $fname = 'SkinTemplate::setupUserJs';
                wfProfileIn( $fname );
                
-               global $wgRequest, $wgAllowUserJs;
+               global $wgRequest, $wgAllowUserJs, $wgJsMimeType;
                $action = $wgRequest->getText('action');
 
                if( $wgAllowUserJs && $this->loggedin ) {
@@ -883,7 +911,7 @@ class SkinTemplate extends Skin {
                                # XXX: additional security check/prompt?
                                $this->userjsprev = '/*<![CDATA[*/ ' . $wgRequest->getText('wpTextbox1') . ' /*]]>*/';
                        } else {
-                               $this->userjs = $this->makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype=text/javascript&dontcountme=s');
+                               $this->userjs = $this->makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype='.$wgJsMimeType.'&dontcountme=s');
                        }
                }
                wfProfileOut( $fname );
@@ -916,7 +944,14 @@ class SkinTemplate extends Skin {
                $s = '/* generated javascript */';
                $s .= "var skin = '{$this->skinname}';\nvar stylepath = '{$wgStylePath}';";
                $s .= '/* MediaWiki:'.ucfirst($this->skinname)." */\n";
-               $s .= wfMsg(ucfirst($this->skinname).'.js');
+
+               // avoid inclusion of non defined user JavaScript (with custom skins only)
+               // by checking for default message content
+               $msgKey = ucfirst($this->skinname).'.js';
+               $userJS = wfMsg($msgKey);
+               if ('&lt;'.$msgKey.'&gt;' != $userJS) {
+                       $s .= $userJS;
+               }
                
                wfProfileOut( $fname );
                return $s;