From a78a5f753b2801d5e5d53ca571870e29dfb1b0ac Mon Sep 17 00:00:00 2001
From: Tim Steiner <tsteiner2@unl.edu>
Date: Mon, 1 Mar 2010 21:29:37 +0000
Subject: [PATCH] Initial skeleton for a queue manager.

---
 .../controllers/QueueManagerController.php    | 35 ++++++++++++
 .../models/ApprovalActionQueueModel.php       | 17 ++++++
 .../modules/requests/models/RequestModel.php  | 57 +++++++++++++++++++
 .../views/scripts/queue-manager/index.phtml   | 10 ++++
 .../views/scripts/queue-manager/view.phtml    |  8 +++
 5 files changed, 127 insertions(+)
 create mode 100644 application/modules/requests/controllers/QueueManagerController.php
 create mode 100644 application/modules/requests/views/scripts/queue-manager/index.phtml
 create mode 100644 application/modules/requests/views/scripts/queue-manager/view.phtml

diff --git a/application/modules/requests/controllers/QueueManagerController.php b/application/modules/requests/controllers/QueueManagerController.php
new file mode 100644
index 00000000..b6312b63
--- /dev/null
+++ b/application/modules/requests/controllers/QueueManagerController.php
@@ -0,0 +1,35 @@
+<?php
+
+class Requests_QueueManagerController extends App_Controller_Action
+{
+    public function preDispatch()
+    {
+        $user = Auth_UserModel::findCurrentUser();
+        $roles = Auth_GroupModel::findByUser($user);
+        if (!in_array(1, $roles->getId())) {
+            throw new Exception('You must be logged in to view this page.');
+        }
+    }
+    
+    public function indexAction()
+    {
+    	$queues = Requests_ApprovalActionQueueModel::findAll();
+    	
+    	$this->view->queues = $queues;
+    }
+
+    public function viewAction()
+    {
+        $in = $this->_getAllParams();
+        $queue = Requests_ApprovalActionModel::find($in['id']);
+        $requests = Requests_RequestModel::findWithCurrentApprovalAction($queue);
+        
+        $this->view->queue = $queue;
+        $this->view->requests = $requests;
+    }
+    
+    public function editPostAction()
+    {
+        $in = $this->_getAllParams();
+    }
+}
diff --git a/application/modules/requests/models/ApprovalActionQueueModel.php b/application/modules/requests/models/ApprovalActionQueueModel.php
index b0bb67c8..a9d5a30a 100644
--- a/application/modules/requests/models/ApprovalActionQueueModel.php
+++ b/application/modules/requests/models/ApprovalActionQueueModel.php
@@ -46,6 +46,23 @@ class Requests_ApprovalActionQueueModel extends Requests_ApprovalActionModel
         }
     }
     
+    static public function findAll()
+    {
+    	$db = Zend_Registry::get('db');
+
+        $select = new Zend_Db_Select($db);
+        $select->from('creqApprovalActionsQueue', array('approvalActionId'));
+        
+        $data = $select->query()->fetchAll();
+        
+        $approvalActionIds = array(-1);
+        foreach ($data as $row) {
+        	$approvalActionIds[] = $row['approvalActionId'];
+        }
+        
+        return self::find($approvalActionIds);
+    }
+    
     static public function fetchNew()
     {
         $data = array(
diff --git a/application/modules/requests/models/RequestModel.php b/application/modules/requests/models/RequestModel.php
index dd92621b..ae78fe50 100644
--- a/application/modules/requests/models/RequestModel.php
+++ b/application/modules/requests/models/RequestModel.php
@@ -302,6 +302,63 @@ class Requests_RequestModel extends Unl_Model
     	
     	return self::find($requestIds);
     }
+    
+    static public function findWithCurrentApprovalAction($approvalActions)
+    {
+    	$singleId = FALSE;
+    	
+    	if (!Unl_Util::isArray($approvalActions)) {
+    		if (!$approvalActions) {
+    			return array();
+    		}
+    		if (!($approvalActions instanceof Requests_ApprovalActionModel)) {
+    			throw new Zend_Exception('Invalid Argument');
+    		}
+    		$singleId = $approvalActions->getId();
+    		$collection = new Unl_Model_Collection('Requests_ApprovalActionModel');
+    		$collection[] = $approvalActions;
+    		$approvalActions = $collection;
+    	} else {
+    		if (count($approvalActions) == 0) {
+    			return array();
+    		}
+    	}
+    	
+    	$db = Zend_Registry::get('db');
+    	$select = new Zend_Db_Select($db);
+    	
+    	$select->from(array('r' => 'creqRequests'), array('requestId'));
+    	$select->join(array('s' => 'creqRequestStacks'), 'r.stackPointer = s.requestStackId', array('action'));
+    	$select->where('s.action IN(?)', $approvalActions->getId());
+    	
+    	$data = $select->query()->fetchAll();
+    	$requestIds = array();
+    	$actionRequestIds = array();
+    	foreach ($data as $row) {
+    		$requestIds[] = $row['requestId'];
+    		$actionRequestIds[$row['action']][] = $row['requestId'];
+    	}
+    	
+    	$requests = self::find($requestIds);
+    	
+    	$actionRequests = array();
+    	foreach ($approvalActions as $approvalAction) {
+    		$approvalActionId = $approvalAction->getId();
+    		$actionRequests[$approvalActionId] = new Unl_Model_Collection('Requests_RequestModel');
+    		if (!array_key_exists($approvalActionId, $actionRequestIds)) {
+    			continue;
+    		}
+    		foreach ($actionRequestIds[$approvalActionId] as $requestId) {
+    			$actionRequests[$approvalActionId][$requestId] = $requests[$requestId];
+    		}
+    	}
+    	
+    	if ($singleId) {
+    		return $actionRequests[$singleId];
+    	} else {
+    		return $actionRequests;
+    	}
+    }
 
     static protected function _loadTypeMap()
     {
diff --git a/application/modules/requests/views/scripts/queue-manager/index.phtml b/application/modules/requests/views/scripts/queue-manager/index.phtml
new file mode 100644
index 00000000..f142b522
--- /dev/null
+++ b/application/modules/requests/views/scripts/queue-manager/index.phtml
@@ -0,0 +1,10 @@
+<?php $this->layout()->breadcrumbs = array('Queue Manager'); ?>
+
+<ul>
+<?php $this->queues->orderBy('getName'); ?>
+<?php foreach ($this->queues as $queue) { ?>
+<li>
+    <a href="<?php echo $this->baseUrl(); ?>/requests/queue-manager/view/id/<?php echo $queue->getId(); ?>"><?php echo $queue->getName();?></a>    
+</li>
+<?php } ?>
+</ul>
diff --git a/application/modules/requests/views/scripts/queue-manager/view.phtml b/application/modules/requests/views/scripts/queue-manager/view.phtml
new file mode 100644
index 00000000..aa45df69
--- /dev/null
+++ b/application/modules/requests/views/scripts/queue-manager/view.phtml
@@ -0,0 +1,8 @@
+<?php $this->layout()->breadcrumbs = array('Queue Manager: ' . $this->queue->getName()); ?>
+
+<h3>Requests:</h3>
+<ul>
+<?php foreach ($this->requests as $request) { ?>
+    <li><a href="<?php echo $this->baseUrl(); ?>/requests/view/index/id/<?php echo $request->getId(); ?>"><?php echo $request->getId(); ?></a></li>
+<?php } ?>
+</ul>
-- 
GitLab