Implemented param tracking for hook users, feels a bit hackish
[lhc/web/wiklou.git] / includes / SkinTemplate.php
index 1148845..9b65685 100644 (file)
@@ -140,12 +140,10 @@ class SkinTemplate extends Skin {
                global $wgMaxCredits, $wgShowCreditsIfMax;
                global $wgPageShowWatchingUsers;
                global $wgUseTrackbacks, $wgUseSiteJs, $wgDebugComments;
-               global $wgArticlePath, $wgScriptPath, $wgServer, $wgProfiler;
+               global $wgArticlePath, $wgScriptPath, $wgServer;
 
                wfProfileIn( __METHOD__ );
-               if ( is_object( $wgProfiler ) ) {
-                       $wgProfiler->setTemplated( true );
-               }
+               Profiler::instance()->setTemplated( true );
 
                $oldid = $wgRequest->getVal( 'oldid' );
                $diff = $wgRequest->getVal( 'diff' );
@@ -568,10 +566,26 @@ class SkinTemplate extends Skin {
 
                /* set up the default links for the personal toolbar */
                $personal_urls = array();
-               $page = $wgRequest->getVal( 'returnto', $this->thisurl );
-               $query = $wgRequest->getVal( 'returntoquery', $this->thisquery );
-               $returnto = wfArrayToCGI( array( 'returnto' => $page ) );
-               if( $this->thisquery != '' ) {
+               
+               // Get the returnto and returntoquery parameters from the query string
+               // or fall back on $this->thisurl or $this->thisquery
+               // We can't use getVal()'s default value feature here because
+               // stuff from $wgRequest needs to be escaped, but thisurl and thisquery
+               // are already escaped.
+               $page = $wgRequest->getVal( 'returnto' );
+               if ( !is_null( $page ) ) {
+                       $page = wfUrlencode( $page );
+               } else {
+                       $page = $this->thisurl;
+               }
+               $query = $wgRequest->getVal( 'returntoquery' );
+               if ( !is_null( $query ) ) {
+                       $query = wfUrlencode( $query );
+               } else {
+                       $query = $this->thisquery;
+               }
+               $returnto = "returnto=$page";
+               if( $query != '' ) {
                        $returnto .= "&returntoquery=$query";
                }
                if( $this->loggedin ) {
@@ -608,8 +622,7 @@ class SkinTemplate extends Skin {
                        # contain the original alias-with-subpage.
                        $origTitle = Title::newFromText( $wgRequest->getText( 'title' ) );
                        if( $origTitle instanceof Title && $origTitle->getNamespace() == NS_SPECIAL ) {
-                               list( $spName, $spPar ) =
-                                       SpecialPage::resolveAliasWithSubpage( $origTitle->getText() );
+                               list( $spName, $spPar ) = SpecialPageFactory::resolveAlias( $origTitle->getText() );
                                $active = $spName == 'Contributions'
                                        && ( ( $spPar && $spPar == $this->username )
                                                || $wgRequest->getText( 'target' ) == $this->username );