From 530fab40eec65c78b0d8cd0becdb5df205db495a Mon Sep 17 00:00:00 2001
From: Tim Steiner <tsteiner2@unl.edu>
Date: Mon, 22 Jun 2009 22:20:10 +0000
Subject: [PATCH] After a user logs in, redirect them to their previous
 location.

---
 .../auth/controllers/IndexController.php      | 28 +++++++++++++++----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/application/modules/auth/controllers/IndexController.php b/application/modules/auth/controllers/IndexController.php
index 6e435bfd..4291c41a 100644
--- a/application/modules/auth/controllers/IndexController.php
+++ b/application/modules/auth/controllers/IndexController.php
@@ -18,12 +18,25 @@ class Auth_IndexController extends App_Controller_Action {
 	
 	public function loginAction()
 	{
+		$session = new Zend_Session_Namespace(__CLASS__);
+		$baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
+		$referer = Zend_Uri_Http::factory($_SERVER['HTTP_REFERER']);
+		if ($referer->getHost() == $_SERVER['HTTP_HOST'] &&
+		    (!$referer->getPort() || $referer->getPort() == $_SERVER['SERVER_PORT']) &&
+		    substr($referer->getPath(), 0, strlen($baseUrl)) == $baseUrl) {
+		    $session->referer = substr($referer->getPath(), strlen($baseUrl));
+		    if ($referer->getQuery()) {
+		    	$session->referer .= '?' . $referer->getQuery();
+		    }
+		    if ($referer->getFragment()) {
+		    	$session->referer .= '#' . $referer->getFragment();
+		    }
+		} else {
+			$session->referer = '/';
+		}
+		
         $this->_redirect('/auth/index/validate');
         return;
-        
-		$session = new Zend_Session_Namespace(__CLASS__);
-		$this->view->errorMessage = $session->errorMessage;
-		unset($session->errorMessage);
 	}
 	
 	public function logoutAction()
@@ -72,7 +85,12 @@ class Auth_IndexController extends App_Controller_Action {
 			$user = Auth_UserModel::fetchNewFromLdap($auth->getIdentity());
 		}
 		
-        $this->_redirect('/');
+		$session = new Zend_Session_Namespace(__CLASS__);
+		if ($session->referer) {
+			$this->_redirect($session->referer);
+		} else {
+        	$this->_redirect('/');
+		}
 	}
 
 }
-- 
GitLab