(bug 32230) Expose wgRedirectedFrom (title of the page we were redirected from, if...
[lhc/web/wiklou.git] / includes / OutputPage.php
index 866275b..feae2c1 100644 (file)
@@ -222,6 +222,14 @@ class OutputPage extends ContextSource {
                'Cookie' => null
        );
 
+       /**
+        * If the current page was reached through a redirect, $mRedirectedFrom contains the Title
+        * of the redirect.
+        *
+        * @var Title
+        */
+       private $mRedirectedFrom = null;
+
        /**
         * Constructor for OutputPage. This should not be called directly.
         * Instead a new RequestContext should be created and it will implicitly create
@@ -776,6 +784,15 @@ class OutputPage extends ContextSource {
                return $this->mHTMLtitle;
        }
 
+       /**
+        * Set $mRedirectedFrom, the Title of the page which redirected us to the current page.
+        *
+        * param @t Title
+        */
+       public function setRedirectedFrom( $t ) {
+               $this->mRedirectedFrom = $t;
+       }
+
        /**
         * "Page title" means the contents of \<h1\>. It is stored as a valid HTML fragment.
         * This function allows good tags like \<sup\> in the \<h1\> tag, but not bad tags like \<script\>.
@@ -2029,7 +2046,13 @@ class OutputPage extends ContextSource {
                        || ( isset( $wgGroupPermissions['autoconfirmed'][$action] ) && $wgGroupPermissions['autoconfirmed'][$action] ) )
                ) {
                        $displayReturnto = null;
-                       $returnto = $this->getTitle();
+
+                       # Due to bug 32276, if a user does not have read permissions,
+                       # $this->getTitle() will just give Special:Badtitle, which is
+                       # not especially useful as a returnto parameter. Use the title
+                       # from the request instead, if there was one.
+                       $request = $this->getRequest();
+                       $returnto = Title::newFromURL( $request->getVal( 'title', '' ) );
                        if ( $action == 'edit' ) {
                                $msg = 'whitelistedittext';
                                $displayReturnto = $returnto;
@@ -2043,9 +2066,10 @@ class OutputPage extends ContextSource {
                        }
 
                        $query = array();
+
                        if ( $returnto ) {
                                $query['returnto'] = $returnto->getPrefixedText();
-                               $request = $this->getRequest();
+
                                if ( !$request->wasPosted() ) {
                                        $returntoquery = $request->getValues();
                                        unset( $returntoquery['title'] );
@@ -2714,6 +2738,7 @@ $templates
         * - in other words, page-independent/site-wide variables (without state).
         * You will only be adding bloat to the html page and causing page caches to
         * have to be purged on configuration changes.
+        * @return array
         */
        protected function getJSVars() {
                global $wgUseAjax, $wgEnableMWSuggest;
@@ -2773,6 +2798,9 @@ $templates
                if ( $title->isMainPage() ) {
                        $vars['wgIsMainPage'] = true;
                }
+               if ( $this->mRedirectedFrom ) {
+                       $vars['wgRedirectedFrom'] = $this->mRedirectedFrom->getPrefixedDBKey();
+               }
 
                // Allow extensions to add their custom variables to the mw.config map.
                // Use the 'ResourceLoaderGetConfigVars' hook if the variable is not