Fix double-escaping on login/logout return page
[lhc/web/wiklou.git] / includes / SkinPHPTal.php
index 1d48775..cd28f43 100644 (file)
        {
                var $_context = array();
 
-               function set($varName, $value)
-               {
+               function set($varName, $value) {
                        $this->_context[$varName] = $value;
                }
 
-               function translate($value)
-               {
+               function translate($value) {
                        $value = wfMsg( $value );
-
                        // interpolate variables
                        while (preg_match('/\$([0-9]*?)/sm', $value, $m)) {
                                list($src, $var) = $m;
-                               $varValue = $this->_context[$var];
+                               $varValue = @$this->_context[$var];
                                $value = str_replace($src, $varValue, $value);
                        }
                        return $value;
 
                function outputPage( &$out ) {
                        global $wgTitle, $wgArticle, $wgUser, $wgLang, $wgOut;
-                       global $wgScript, $wgStyleSheetPath, $wgLanguageCode, $wgUseNewInterlanguage;
+                       global $wgScript, $wgStylePath, $wgLanguageCode, $wgUseNewInterlanguage;
                        global $wgMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest;
                        global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses;
                        
                        extract( $wgRequest->getValues( 'oldid', 'diff' ) );
 
+                       $this->initPage( $out );
+                       $tpl = new PHPTAL($this->template . '.pt', 'templates');
+                       
+                       #if ( $wgUseDatabaseMessages ) { // uncomment this to fall back to GetText
+                       $tpl->setTranslator(new MediaWiki_I18N());
+                       #}
+                       
                        $this->thispage = $wgTitle->getPrefixedDbKey();
                        $this->thisurl = $wgTitle->getPrefixedURL();
-                       $this->thisurle = urlencode($this->thisurl);
                        $this->loggedin = $wgUser->getID() != 0;
                        $this->username = $wgUser->getName();
                        $this->userpage = $wgLang->getNsText( Namespace::getUser() ) . ":" . $wgUser->getName();
-                       $this->titletxt = $wgTitle->getPrefixedText();
+                       $this->userpageurl = $this->makeUrl($this->userpage);
                        
-                       $this->initPage( $out );
-                       $tpl = new PHPTAL($this->template . '.pt', 'templates');
+                       if( $this->loggedin ) {
+                               $this->usercss = $this->makeUrl($this->userpage.'/'.$this->skinname.'.css', 'action=raw&ctype=text/css');
+                               $this->usercsse = htmlspecialchars($this->usercss);
+                               $this->userjs = $this->makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype=text/javascript');
+                               $this->userjse = htmlspecialchars($this->userjs);
+                       } else {
+                               $this->usercss = $this->usercsse =  $this->userjs = $this->userjse = false;
+                       }
+                       $this->titletxt = $wgTitle->getPrefixedText();
                        
-                       #if ( $wgUseDatabaseMessages ) { // uncomment this to fall back to GetText
-                       $tpl->setTranslator(new MediaWiki_I18N());
-                       #}
-
                        $tpl->set( "title", $wgOut->getPageTitle() );
                        $tpl->set( "pagetitle", $wgOut->getHTMLTitle() );
                        
                        $tpl->setRef( "thispage", &$this->thispage );
-                       $tpl->set( "subtitle", $out->getSubtitle() );
-                       $tpl->set( 'catlinks', getCategories());
+                       $subpagestr = $this->subPageSubtitle();
+                       $tpl->set( 
+                               "subtitle",  !empty($subpagestr)?
+                               '<span class="subpages">'.$subpagestr.'</span>'.$out->getSubtitle():
+                               $out->getSubtitle()  
+                       );
+                       $tpl->set( 'catlinks', $this->getCategories());
                        if( $wgOut->isSyndicated() ) {
                                $feeds = array();
                                foreach( $wgFeedClasses as $format => $class ) {
                        $tpl->set( "sysop", $wgUser->isSysop() );
                        */
                        $tpl->set( "searchaction", $this->escapeSearchLink() );
-                       $tpl->setRef( "stylepath", &$wgStyleSheetPath );
+                       $tpl->setRef( "stylepath", &$wgStylePath );
                        $tpl->setRef( "logopath", &$wgLogo );
                        $tpl->setRef( "lang", &$wgLanguageCode );
+                       $tpl->set( "dir", $wgLang->isRTL() ? "rtl" : "ltr" );
+                       $tpl->set( "rtl", $wgLang->isRTL() );
                        $tpl->set( "langname", $wgLang->getLanguageName( $wgLanguageCode ) );
                        $tpl->setRef( "username", &$this->username );
                        $tpl->setRef( "userpage", &$this->userpage);
+                       $tpl->setRef( "userpageurl", &$this->userpageurl);
+                       $tpl->setRef( "usercss", &$this->usercss);
+                       $tpl->setRef( "usercsse", &$this->usercsse);
+                       $tpl->setRef( "userjs", &$this->userjs);
+                       $tpl->setRef( "userjse", &$this->userjse);
                        if( $wgUser->getNewtalk() ) {
                                $usertitle = Title::newFromText( $this->userpage );
                                $usertalktitle = $usertitle->getTalkPage();
                        if ($this->loggedin) {
                                $personal_urls['userpage'] = array(
                                        'text' => $this->username,
-                                       'href' => $this->makeUrl($this->userpage),
+                                       'href' => &$this->userpageurl,
                                        'ttip' => wfMsg('tooltip-userpage'),
                                        'akey' => wfMsg('accesskey-userpage')
                                );
                                );
                                $personal_urls['logout'] = array(
                                        'text' => wfMsg('userlogout'),
-                                       'href' => $this->makeSpecialUrl('Userlogout','returnpage=' . $this->thisurle),
+                                       'href' => $this->makeSpecialUrl('Userlogout','returnto=' . $this->thisurl),
                                        'ttip' => wfMsg('tooltip-logout'),
                                        'akey' => wfMsg('accesskey-logout')
                                );
                                        );
                                        $personal_urls['anonlogin'] = array(
                                                'text' => wfMsg('userlogin'),
-                                               'href' => $this->makeSpecialUrl('Userlogin', 'return='.$this->thisurle),
+                                               'href' => $this->makeSpecialUrl('Userlogin', 'returnto='.$this->thisurl),
                                                'ttip' => wfMsg('tooltip-login'),
                                                'akey' => wfMsg('accesskey-login')
                                        );
 
                                        $personal_urls['login'] = array(
                                                'text' => wfMsg('userlogin'),
-                                               'href' => $this->makeSpecialUrl('Userlogin', 'return='.$this->thisurle),
+                                               'href' => $this->makeSpecialUrl('Userlogin', 'returnto='.$this->thisurl),
                                                'ttip' => wfMsg('tooltip-login'),
                                                'akey' => wfMsg('accesskey-login')
                                        );
                                        );
                                } else {
                                        $content_actions['talk'] = array(
-                                               'class' => $talk_class.' new',
+                                               'class' => $talk_class?$talk_class.' new':'new',
                                                'text' => wfMsg('talk'),
                                                'href' => $this->makeTalkUrl($this->titletxt,'action=edit'),
                                                'ttip' => wfMsg('tooltip-talk'),
                        $nav_urls['randompage'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Randompage')));
                        $nav_urls['recentchanges'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Recentchanges')));
                        $nav_urls['whatlinkshere'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Whatlinkshere', 'target='.$this->thispage)));
-                       $nav_urls['currentevents'] = (wfMsg('currentevents') != '') ? array('href' => htmlspecialchars( $this->makeI18nUrl('currentevents'))) : '';
-                       $nav_urls['portal'] = (wfMsg('portal') != '') ? array('href' => htmlspecialchars( $this->makeI18nUrl('portal-url'))) : '';
+                       $nav_urls['currentevents'] = (wfMsg('currentevents') != '-') ? array('href' => htmlspecialchars( $this->makeI18nUrl('currentevents'))) : '';
+                       $nav_urls['portal'] = (wfMsg('portal') != '-') ? array('href' => htmlspecialchars( $this->makeI18nUrl('portal-url'))) : '';
                        $nav_urls['recentchangeslinked'] = array('href' => htmlspecialchars( $this->makeSpecialUrl('Recentchangeslinked', 'target='.$this->thispage)));
                        $nav_urls['bugreports'] = array('href' => htmlspecialchars( $this->makeI18nUrl('bugreportspage')));
                        // $nav_urls['sitesupport'] = array('href' => htmlspecialchars( $this->makeI18nUrl('sitesupportpage')));
                        return $nav_urls;
                }
 
-               function getPageTitleActionText () {
-                       global $action;
-                       switch($action) {
-                               case 'edit':
-                                       return  wfMsg('edit');
-                               case 'history':
-                                       return wfMsg('history_short');
-                               case 'protect':
-                                       return wfMsg('unprotect');
-                               case 'unprotect':
-                                       return wfMsg('unprotect');
-                               case 'delete':
-                                       return wfMsg('delete');
-                               case 'watch':
-                                       return wfMsg('watch');
-                               case 'unwatch':
-                                       return wfMsg('unwatch');
-                               case 'submit':
-                                       return wfMsg('preview');
-                               default:
-                                       return '';
-                       }
-               }
                /*static*/ function makeSpecialUrl( $name, $urlaction='' ) {
                        $title = Title::makeTitle( NS_SPECIAL, $name );
                        $this->checkTitle(&$title, &$name);