From b36c5497405fb152260d8cc06abc503ab83ff174 Mon Sep 17 00:00:00 2001
From: Tim Steiner <tsteiner2@unl.edu>
Date: Tue, 1 Jul 2008 20:58:31 +0000
Subject: [PATCH] Request viewing now has previous and next links (again)

---
 .../courses/controllers/ViewController.php    | 21 +++++++++++++++++++
 .../courses/views/scripts/view/index.phtml    |  4 ++--
 .../requests/controllers/IndexController.php  | 18 ++++++++++++++++
 .../requests/controllers/ViewController.php   | 10 +++++++++
 .../requests/views/scripts/index/index.phtml  |  7 ++-----
 5 files changed, 53 insertions(+), 7 deletions(-)

diff --git a/application/modules/courses/controllers/ViewController.php b/application/modules/courses/controllers/ViewController.php
index 94995d41..6a466e9b 100644
--- a/application/modules/courses/controllers/ViewController.php
+++ b/application/modules/courses/controllers/ViewController.php
@@ -5,6 +5,7 @@ class Courses_ViewController extends App_Controller_Action
     public function indexAction()
     {
     	$requestId = $this->getRequest()->getParam('id');
+        $roleId = $this->getRequest()->getParam('role');
     	if ($requestId == 'session') {
     		$session = new Zend_Session_Namespace('Edit Request');
     		$request = $session->request;
@@ -26,6 +27,24 @@ class Courses_ViewController extends App_Controller_Action
 	        }
 	        $initialRequest = false;
 	        $preview = false;
+	        
+	        // if we can know our role, we can create next and prev links.
+	        if ($roleId) {
+	        	$list = $this->getRequest()->getParam('list');
+	        	$myRequestSession = new Zend_Session_Namespace('My Requests');
+	        	$requestOrder = $myRequestSession->requestOrder[$roleId][$list];
+	        	$listPosition = array_search($request->getId(), $requestOrder);
+	        	if ($listPosition == 0) {
+	        		$prevRequestId = $requestOrder[count($requestOrder) - 1];
+	        	} else {
+	        		$prevRequestId = $requestOrder[$listPosition - 1];
+	        	}
+	        	if ($listPosition == count($requestOrder) - 1) {
+	        		$nextRequestId = $requestOrder[0];
+	        	} else {
+	        		$nextRequestId = $requestOrder[$listPosition + 1];
+	        	}
+	        }
     	}
 
     	$comments = Requests_CommentsModel::findByRequest($request);
@@ -40,6 +59,8 @@ class Courses_ViewController extends App_Controller_Action
     	$this->view->preview = $preview;
     	$this->view->terms = $this->_getFutureTerms();
     	$this->view->isRequestValid = $course->isValid() && $request->isValid();
+    	$this->view->prevRequestId = $prevRequestId;
+    	$this->view->nextRequestId = $nextRequestId;
 
         $session = new Zend_Session_Namespace(__CLASS__);
         if ($session->tabName) {
diff --git a/application/modules/courses/views/scripts/view/index.phtml b/application/modules/courses/views/scripts/view/index.phtml
index 9df090ad..a7028077 100644
--- a/application/modules/courses/views/scripts/view/index.phtml
+++ b/application/modules/courses/views/scripts/view/index.phtml
@@ -283,10 +283,10 @@
         </div>
     </div>
     <?php if ($this->prevRequestId > 0) { ?>
-    <a id="prevRequestLink" href="/Request/View/<?php echo $this->prevRequestId; ?>">&lt;--Prev</a>
+    <a id="prevRequestLink" href="<?php echo $this->url(array('id' => $this->prevRequestId)); ?>">&lt;--Prev</a>
     <?php } ?>
     <?php if ($this->nextRequestId > 0) { ?>
-    <a id="nextRequestLink" href="/Request/View/<?php echo $this->nextRequestId; ?>">Next--&gt;</a>
+    <a id="nextRequestLink" href="<?php echo $this->url(array('id' => $this->nextRequestId)); ?>">Next--&gt;</a>
     <?php } ?>
     <?php } ?>
 
diff --git a/application/modules/requests/controllers/IndexController.php b/application/modules/requests/controllers/IndexController.php
index 1cbb3cfd..07319c6d 100644
--- a/application/modules/requests/controllers/IndexController.php
+++ b/application/modules/requests/controllers/IndexController.php
@@ -178,6 +178,24 @@ class Requests_IndexController extends App_Controller_Action
 		$this->view->roles = $roleData;
 		$this->view->user = $user;
 		$this->view->userRequests = $userRequestsData;
+		
+		// save the order of requests to the session so we can have next/previous links on other pages.
+		$session = new Zend_Session_Namespace('My Requests');
+        $session->requestOrder = array();
+		foreach ($roleData as $role) {
+			$roleId = $role['role']->getId();
+			$session->requestOrder[$roleId] = array();
+			$session->requestOrder[$roleId]['normal'];
+			foreach ($role['requests'] as $request) {
+                $requestId = $request['request']->getId();
+                $session->requestOrder[$roleId]['normal'][] = $requestId;
+			}
+            $session->requestOrder[$roleId]['watching'];
+			foreach ($role['watchingRequests'] as $request) {
+                $requestId = $request['request']->getId();
+                $session->requestOrder[$roleId]['watching'][] = $requestId;
+			}
+		}
 	}
 
 	public function decidePostAction()
diff --git a/application/modules/requests/controllers/ViewController.php b/application/modules/requests/controllers/ViewController.php
index 07eb114f..44f83a71 100644
--- a/application/modules/requests/controllers/ViewController.php
+++ b/application/modules/requests/controllers/ViewController.php
@@ -6,10 +6,20 @@ class Requests_ViewController extends App_Controller_Action
 	public function indexAction()
 	{
 		$id = $this->getRequest()->getParam('id');
+		$roleId = $this->getRequest()->getParam('role');
+		$list = $this->getRequest()->getParam('list');
+		
 		$request = Requests_RequestModel::find($id);
 		$module = $request->getModule();
 		$redirectUrl = Zend_Controller_Action::getFrontController()->getBaseUrl()
 		             . '/' . $module . '/view/index/id/' . $id;
+        if ($roleId) {
+        	$redirectUrl .= '/role/' . $roleId;
+        }
+        if ($list) {
+        	$redirectUrl .= '/list/' . $list;
+        }
+        
 		$this->getResponse()->setRedirect($redirectUrl);
 	}
 	
diff --git a/application/modules/requests/views/scripts/index/index.phtml b/application/modules/requests/views/scripts/index/index.phtml
index 74d89467..904e5094 100644
--- a/application/modules/requests/views/scripts/index/index.phtml
+++ b/application/modules/requests/views/scripts/index/index.phtml
@@ -321,7 +321,7 @@ foreach($this->roles as $roleData) {
 
                         */ ?>
                         <a class="requestLink<?php echo $linkClass; ?>"
-                           href="<?php echo $this->baseUrl(); ?>/requests/view/index/id/<?php echo $request->getId(); ?>">
+                           href="<?php echo $this->baseUrl(); ?>/requests/view/index/id/<?php echo $request->getId(); ?>/role/<?php echo $role->getId(); ?>/list/normal">
                             View
                         </a>
                         <?php if ($request->isEditable()) { ?>
@@ -399,10 +399,7 @@ foreach($this->roles as $roleData) {
                     ?>
                 </td>
                 <td>
-                    <a href="<?php echo $this->baseUrl(); ?>/requests/view/index/id/<?php echo $request->getId(); ?>">View</a>
-                    <!-- /
-                    <a href="<?php echo $this->baseUrl(); ?>/requests/edit/load/id/<?php echo $request->getId(); ?>">Edit</a>
-                    -->
+                    <a href="<?php echo $this->baseUrl(); ?>/requests/view/index/id/<?php echo $request->getId(); ?>/role/<?php echo $role->getId(); ?>/list/watching">View</a>
                 </td>
                 <td>
                     <?php
-- 
GitLab