예제 #1
0
파일: Issue.php 프로젝트: Roave/issues
 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()));
 }