From d83cffc80aacb5f0d4e6ea10f3f653889f47f5be Mon Sep 17 00:00:00 2001 From: Tim Steiner <tsteiner2@unl.edu> Date: Wed, 7 Apr 2010 19:27:14 +0000 Subject: [PATCH] Have queue approvalActions create "periods" between each advance in order to better keep track of votes. --- .../models/ApprovalActionQueueModel.php | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/application/modules/requests/models/ApprovalActionQueueModel.php b/application/modules/requests/models/ApprovalActionQueueModel.php index f9fa8577..6606c458 100644 --- a/application/modules/requests/models/ApprovalActionQueueModel.php +++ b/application/modules/requests/models/ApprovalActionQueueModel.php @@ -154,7 +154,8 @@ class Requests_ApprovalActionQueueModel extends Requests_ApprovalActionModel static protected function _insert(Unl_Model_Collection $models) { $db = Zend_Registry::get('db'); - + + // Insert the queue row $sql = 'INSERT INTO creqApprovalActionsQueue (approvalActionId, canChangeVote) VALUES '; $sqlParts = array(); foreach ($models as $model) { @@ -163,6 +164,18 @@ class Requests_ApprovalActionQueueModel extends Requests_ApprovalActionModel } $sql .= implode(', ', $sqlParts); $db->query($sql); + + + + // Insert the initial queue period starting at the current time. + $sql = 'INSERT INTO creqApprovalActionsQueuePeriods (approvalAction, startTime) VALUES '; + $sqlParts = array(); + foreach ($models as $model) { + $sqlParts[] = $db->quoteInto('(?, ', $model->_data['approvalActionId']) + . $db->quoteInto('?)' , time()); + } + $sql .= implode(', ', $sqlParts); + $db->query($sql); } static protected function _insertDates(array $models) @@ -248,6 +261,38 @@ class Requests_ApprovalActionQueueModel extends Requests_ApprovalActionModel Requests_ApprovalChainModel::advance($requests); Requests_ApprovalChainModel::consider($requests); + + + $select = new Zend_Db_Select($db); + $select->from(array('q' => 'creqApprovalActionsQueueDates'), array('approvalAction')); + $select->where('q.date <= ?', time()); + + $queueIds = array(); + $records = $select->query()->fetchAll(); + if (count($records) == 0) { + return; + } + foreach ($records as $record) { + $queueIds[] = $record['approvalAction']; + } + + + $sql = 'UPDATE creqApprovalActionsQueuePeriods ' + . $db->quoteInto('SET endTime = ? ', time()) + . 'WHERE endTime IS NULL ' + . $db->quoteInto('AND approvalAction IN (?) ', $queueIds); + $db->query($sql); + + $sql = 'INSERT INTO creqApprovalActionsQueuePeriods (approvalAction, startTime) VALUES '; + $sqlParts = array(); + foreach ($queueIds as $queueId) { + $sqlParts[] = $db->quoteInto('(?, ', $queueId) + . $db->quoteInto('?)' , time()); + } + $sql .= implode(', ', $sqlParts); + $db->query($sql); + + $db->query($db->quoteInto('DELETE FROM creqApprovalActionsQueueDates WHERE date <= ?', time())); } -- GitLab