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