diff --git a/application/modules/requests/models/ApprovalActionWatchersModel.php b/application/modules/requests/models/ApprovalActionWatchersModel.php index a26304cbbc6db9cc2ce07cac00e640b89abdd73d..38626351b14ed708e5bdac57b0b3598061872a58 100644 --- a/application/modules/requests/models/ApprovalActionWatchersModel.php +++ b/application/modules/requests/models/ApprovalActionWatchersModel.php @@ -39,7 +39,8 @@ class Requests_ApprovalActionWatchersModel extends Requests_ApprovalActionModel 'className' => '', 'participatingRoles' => array(), 'editingRoles' => array(), - 'watchingRole' => NULL + 'watchingRole' => NULL, + 'action' => NULL ); $new = new self($data); @@ -92,14 +93,16 @@ class Requests_ApprovalActionWatchersModel extends Requests_ApprovalActionModel $sqlParts = array(); foreach ($models as $model) { $sqlParts[] = $db->quoteInto('(?, ', $model->_data['approvalActionId']) - . $db->quoteInto('?) ', $model->_data['watchingRole']); + . $db->quoteInto('?, ', $model->_data['watchingRole']) + . $db->quoteInto('?) ', $model->_data['action']); } $sql .= implode(', ', $sqlParts); $db->query($sql); $sql = 'UPDATE creqApprovalActionsWatchers AS a, ' . ' creqApprovalActionsWatchersUpdate AS b ' - . 'SET a.watchingRole = b.watchingRole ' + . 'SET a.watchingRole = b.watchingRole, ' + . ' a.action = b.action ' . 'WHERE a.approvalActionId = b.approvalActionId '; $db->query($sql); } @@ -108,11 +111,12 @@ class Requests_ApprovalActionWatchersModel extends Requests_ApprovalActionModel { $db = Zend_Registry::get('db'); - $sql = 'INSERT INTO creqApprovalActionsWatchers (approvalActionId, watchingRole) VALUES '; + $sql = 'INSERT INTO creqApprovalActionsWatchers (approvalActionId, watchingRole, action) VALUES '; $sqlParts = array(); foreach ($models as $model) { $sqlParts[] = $db->quoteInto('(?, ', $model->_data['approvalActionId']) - . $db->quoteInto('?)' , $model->_data['watchingRole']); + . $db->quoteInto('?, ', $model->_data['watchingRole']) + . $db->quoteInto('?)' , $model->_data['action']); } $sql .= implode(', ', $sqlParts); $db->query($sql); @@ -125,13 +129,23 @@ class Requests_ApprovalActionWatchersModel extends Requests_ApprovalActionModel } $db = Zend_Registry::get('db'); - $sql = 'INSERT INTO creqRequestWatchers (request, watchingApprovalRole) VALUES '; - $sqlParts = array(); - foreach ($requests as $request) { - $sqlParts[] = $db->quoteInto('(?, ', $request->getId()) - . $db->quoteInto('?)', $this->_data['watchingRole']); + if ($this->_data['action'] == 'add') { + $sql = 'INSERT INTO creqRequestWatchers (request, watchingApprovalRole) VALUES '; + $sqlParts = array(); + foreach ($requests as $request) { + $sqlParts[] = $db->quoteInto('(?, ', $request->getId()) + . $db->quoteInto('?)', $this->_data['watchingRole']); + } + $sql .= implode(', ', $sqlParts); + } else if ($this->_data['action'] == 'remove') { + $sql = 'DELETE FROM creqRequestWatchers WHERE (request, watchingApprovalRole) IN ('; + $sqlParts = array('(-1, -1)'); + foreach ($requests as $request) { + $sqlParts[] = $db->quoteInto('(?, ', $request->getId()) + . $db->quoteInto('?)', $this->_data['watchingRole']); + } + $sql .= implode(', ', $sqlParts) . ')'; } - $sql .= implode(', ', $sqlParts); try { $db->query($sql); } catch (Exception $e) { @@ -151,10 +165,16 @@ class Requests_ApprovalActionWatchersModel extends Requests_ApprovalActionModel public function setExtendedData($in) { $this->_data['watchingRole'] = $in['watchingRole']; + $this->_data['action'] = $in['action']; } public function getWatchingRole() { return $this->_data['watchingRole']; } + + public function getAction() + { + return $this->_data['action']; + } } \ No newline at end of file diff --git a/application/modules/requests/views/scripts/approval-chain-manager/edit-action/watchers.phtml b/application/modules/requests/views/scripts/approval-chain-manager/edit-action/watchers.phtml index d11133f3b37c8f4958cfdfa98c5aee1f4b2fa78a..506c4fc7fbe2ad00810357572efb488efaacc636 100644 --- a/application/modules/requests/views/scripts/approval-chain-manager/edit-action/watchers.phtml +++ b/application/modules/requests/views/scripts/approval-chain-manager/edit-action/watchers.phtml @@ -5,8 +5,17 @@ if ($this->approvalAction->getId()) { } ?> -Role to set as watchers:<br /> +Role to +<?php echo $this->formSelect($prefix . 'action' . $postifx, + $this->approvalAction->getAction(), + null, + array('add' => 'add', 'remove' => 'remove')); ?> + as watchers:<br /> + <?php echo $this->formSelect($prefix . 'watchingRole' . $postifx, $this->approvalAction->getWatchingRole(), null, array('' => '--Select--') + $this->approvalRoles); ?> + +<br /> + \ No newline at end of file