diff --git a/application/modules/requests/models/ApprovalActionQueueModel.php b/application/modules/requests/models/ApprovalActionQueueModel.php index f9fa857710cf52e5dc60a8fb50d33b4ae89c80f7..6606c45815e348c22ffc05ebb1ebed7e16ab5785 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())); }