protected function _update(Default_Model_Issue $issue) { $db = $this->getWriteAdapter(); $oldIssue = $this->getIssueById($issue->getIssueId()); $data = array(); if ($oldIssue->getTitle() != $issue->getTitle()) { $data['title'] = $issue->getTitle(false); $oldData['title'] = $oldIssue->getTitle(); } if ($oldIssue->getDescription() != $issue->getDescription()) { $data['description'] = $issue->getDescription(false); $oldData['description'] = $oldIssue->getDescription(); } if ($oldIssue->getStatus() != $issue->getStatus()) { $data['status'] = $issue->getStatus(); $oldData['status'] = $oldIssue->getStatus(); } if ($oldIssue->getProject() != $issue->getProject()) { $data['project'] = $issue->getProject(); $oldData['project'] = $oldIssue->getProject(); } if ($oldIssue->getPrivate() != $issue->getPrivate()) { $data['private'] = $issue->getPrivate() ? 1 : 0; $oldData['private'] = $oldIssue->getPrivate() ? 1 : 0; } if ($oldIssue->getAssignedTo() != null && $issue->getAssignedTo() != null) { if ($oldIssue->getAssignedTo()->getUserId() != $issue->getAssignedTo()->getUserId()) { $data['assigned_to'] = $issue->getAssignedTo()->getUserId(); $oldData['assigned_to'] = $oldIssue->getAssignedTo()->getUserId(); } } else { if ($oldIssue->getAssignedTo() == null && $issue->getAssignedTo() != null) { $data['assigned_to'] = $issue->getAssignedTo()->getUserId(); $oldData['assigned_to'] = ''; } else { if ($oldIssue->getAssignedTo() != null && $issue->getAssignedTo() == null) { $data['assigned_to'] = ''; $oldData['assigned_to'] = $oldIssue->getAssignedTo()->getUserId(); } else { if ($oldIssue->getAssignedTo() == null && $issue->getAssignedTo() == null) { // no update } } } } if (!count($data)) { return true; } // save audit trail $changes = array(); $changes['action'] = 'update'; $changes['fields'] = array(); foreach ($data as $field => $newValue) { if ($field != 'status' && $field != 'private') { $changes['fields'][$field] = array('old_value' => $oldData[$field], 'new_value' => $newValue); } } $changes = array($changes); foreach ($data as $field => $newValue) { if ($field == 'status') { $changes[] = array('action' => 'open-close', 'old_value' => $oldData[$field], 'new_value' => $newValue); } if ($field == 'status') { $changes[] = array('action' => 'changed-privacy', 'old_value' => $oldData[$field], 'new_value' => $newValue); } } $this->auditTrail($issue, $changes); $data['last_update_time'] = new Zend_Db_Expr('NOW()'); return $db->update('issue', $data, array('issue_id = ?' => $issue->getIssueId())); }
public function canEditIssue(Default_Model_Issue $issue) { $acl = Zend_Registry::get('Default_DiContainer')->getAclService(); if ($acl->isAllowed('issue', 'edit-all')) { return true; } $user = Zend_Registry::get('Default_DiContainer')->getUserService()->getIdentity(); if ($acl->isAllowed('issue', 'edit-own')) { if ($issue->getAssignedTo() instanceof Default_Model_User && $issue->getAssignedTo()->getUserId() == $user->getUserId()) { return true; } if ($issue->getCreatedBy()->getUserId() == $user->getUserId()) { return true; } } return false; }