index : flyspray | |
Archlinux32 customized Flyspray installation | gitolite user |
summaryrefslogtreecommitdiff |
-rw-r--r-- | includes/events.inc.php | 308 |
diff --git a/includes/events.inc.php b/includes/events.inc.php new file mode 100644 index 0000000..ec9f2a7 --- /dev/null +++ b/includes/events.inc.php @@ -0,0 +1,308 @@ +<?php + +// XXX be aware: make sure you quote correctly using qstr() +// the variables used in the $where parameter, since statement is +// executed AS IS. + +function get_events($task_id, $where = '') +{ + global $db; + return $db->query("SELECT h.*, + tt1.tasktype_name AS task_type1, + tt2.tasktype_name AS task_type2, + los1.os_name AS operating_system1, + los2.os_name AS operating_system2, + lc1.category_name AS product_category1, + lc2.category_name AS product_category2, + p1.project_title AS project_id1, + p2.project_title AS project_id2, + lv1.version_name AS product_version1, + lv2.version_name AS product_version2, + ls1.status_name AS item_status1, + ls2.status_name AS item_status2, + lr.resolution_name, + c.date_added AS c_date_added, + c.user_id AS c_user_id, + att.orig_name + + FROM {history} h + + LEFT JOIN {list_tasktype} tt1 ON tt1.tasktype_id::text = h.old_value AND h.field_changed='task_type' + LEFT JOIN {list_tasktype} tt2 ON tt2.tasktype_id::text = h.new_value AND h.field_changed='task_type' + + LEFT JOIN {list_os} los1 ON los1.os_id::text = h.old_value AND h.field_changed='operating_system' + LEFT JOIN {list_os} los2 ON los2.os_id::text = h.new_value AND h.field_changed='operating_system' + + LEFT JOIN {list_category} lc1 ON lc1.category_id::text = h.old_value AND h.field_changed='product_category' + LEFT JOIN {list_category} lc2 ON lc2.category_id::text = h.new_value AND h.field_changed='product_category' + + LEFT JOIN {list_status} ls1 ON ls1.status_id::text = h.old_value AND h.field_changed='item_status' + LEFT JOIN {list_status} ls2 ON ls2.status_id::text = h.new_value AND h.field_changed='item_status' + + LEFT JOIN {list_resolution} lr ON lr.resolution_id::text = h.new_value AND h.event_type = 2 + + LEFT JOIN {projects} p1 ON p1.project_id::text = h.old_value AND h.field_changed='project_id' + LEFT JOIN {projects} p2 ON p2.project_id::text = h.new_value AND h.field_changed='project_id' + + LEFT JOIN {comments} c ON c.comment_id::text = h.field_changed AND h.event_type = 5 + + LEFT JOIN {attachments} att ON att.attachment_id::text = h.new_value AND h.event_type = 7 + + LEFT JOIN {list_version} lv1 ON lv1.version_id::text = h.old_value + AND (h.field_changed='product_version' OR h.field_changed='closedby_version') + LEFT JOIN {list_version} lv2 ON lv2.version_id::text = h.new_value + AND (h.field_changed='product_version' OR h.field_changed='closedby_version') + + WHERE h.task_id = ? $where + ORDER BY event_date ASC, history_id ASC, event_type ASC", array($task_id)); +} + +/** + * XXX: A mess,remove my in 1.0. No time for that, sorry. + */ +function event_description($history) { + $return = ''; + global $fs, $baseurl, $details, $proj; + + $translate = array('item_summary' => 'summary', 'project_id' => 'attachedtoproject', + 'task_type' => 'tasktype', 'product_category' => 'category', 'item_status' => 'status', + 'task_priority' => 'priority', 'operating_system' => 'operatingsystem', 'task_severity' => 'severity', + 'product_version' => 'reportedversion', 'mark_private' => 'visibility', + 'estimated_effort' => 'estimatedeffort'); + // if somehing gets double escaped, add it here. + $noescape = array('new_value', 'old_value'); + + foreach($history as $key=> $value) { + if(!in_array($key, $noescape)) { + $history[$key] = Filters::noXSS($value); + } + } + + $new_value = $history['new_value']; + $old_value = $history['old_value']; + + switch($history['event_type']) { + case '3': //Field changed + if (!$new_value && !$old_value) { + $return .= eL('taskedited'); + break; + } + + $field = $history['field_changed']; + switch ($field) { + case 'item_summary': + case 'project_id': + case 'task_type': + case 'product_category': + case 'item_status': + case 'task_priority': + case 'operating_system': + case 'task_severity': + case 'product_version': + if($field == 'task_priority') { + $old_value = $fs->priorities[$old_value]; + $new_value = $fs->priorities[$new_value]; + } elseif($field == 'task_severity') { + $old_value = $fs->severities[$old_value]; + $new_value = $fs->severities[$new_value]; + } elseif($field == 'item_summary') { + $old_value = Filters::noXSS($old_value); + $new_value = Filters::noXSS($new_value); + } else { + $old_value = $history[$field . '1']; + $new_value = $history[$field . '2']; + } + $field = eL($translate[$field]); + break; + case 'closedby_version': + $field = eL('dueinversion'); + $old_value = ($old_value == '0') ? eL('undecided') : $history['product_version1']; + $new_value = ($new_value == '0') ? eL('undecided') : $history['product_version2']; + break; + case 'due_date': + $field = eL('duedate'); + $old_value = formatDate($old_value, false, eL('undecided')); + $new_value = formatDate($new_value, false, eL('undecided')); + break; + case 'percent_complete': + $field = eL('percentcomplete'); + $old_value .= '%'; + $new_value .= '%'; + break; + case 'mark_private': + $field = eL($translate[$field]); + if ($old_value == 1) { + $old_value = eL('private'); + } else { + $old_value = eL('public'); + } + if ($new_value == 1) { + $new_value = eL('private'); + } else { + $new_value = eL('public'); + } + break; + case 'detailed_desc': + $field = "<a href=\"javascript:getHistory('{$history['task_id']}', '$baseurl', 'history', '{$history['history_id']}');showTabById('history', true);\">" . eL('details') . '</a>'; + if (!empty($details)) { + $details_previous = TextFormatter::render($old_value); + $details_new = TextFormatter::render($new_value); + } + $old_value = ''; + $new_value = ''; + break; + case 'estimated_effort': + $field = eL($translate[$field]); + $old_value = effort::secondsToString($old_value, $proj->prefs['hours_per_manday'], $proj->prefs['estimated_effort_format']); + $new_value = effort::secondsToString($new_value, $proj->prefs['hours_per_manday'], $proj->prefs['estimated_effort_format']);; + break; + } + $return .= eL('fieldchanged').": {$field}"; + if ($old_value || $new_value) { + $return .= " ({$old_value} → {$new_value})"; + } + break; + case '1': //Task opened + $return .= eL('taskopened'); + break; + case '2': //Task closed + $return .= eL('taskclosed'); + $return .= " ({$history['resolution_name']}"; + if (!empty($old_value)) { + $return .= ': ' . TextFormatter::render($old_value, true); + } + $return .= ')'; + break; + case '4': //Comment added + $return .= '<a href="#comments">' . eL('commentadded') . '</a>'; + break; + case '5': //Comment edited + $return .= "<a href=\"javascript:getHistory('{$history['task_id']}', '$baseurl', 'history', '{$history['history_id']}');\">".eL('commentedited')."</a>"; + if ($history['c_date_added']) { + $return .= " (".eL('commentby').' ' . tpl_userlink($history['c_user_id']) . " - " . formatDate($history['c_date_added'], true) . ")"; + } + if ($details) { + $details_previous = TextFormatter::render($old_value); + $details_new = TextFormatter::render($new_value); + } + break; + case '6': //Comment deleted + $return .= "<a href=\"javascript:getHistory('{$history['task_id']}', '$baseurl', 'history', '{$history['history_id']}');\">".eL('commentdeleted')."</a>"; + if ($new_value != '' && $history['field_changed'] != '') { + $return .= " (". eL('commentby'). ' ' . tpl_userlink($new_value) . " - " . formatDate($history['field_changed'], true) . ")"; + } + if (!empty($details)) { + $details_previous = TextFormatter::render($old_value); + $details_new = ''; + } + break; + case '7': //Attachment added + $return .= eL('attachmentadded'); + if ($history['orig_name']) { + $return .= ": <a href=\"{$baseurl}?getfile=" . intval($new_value) . '">' . "{$history['orig_name']}</a>"; + } else if ($history['old_value']) { + $return .= ': ' . $history['old_value']; + } + break; + case '8': //Attachment deleted + $return .= eL('attachmentdeleted') . ': ' . Filters::noXSS($new_value); + break; + case '9': //Notification added + $return .= eL('notificationadded') . ': ' . tpl_userlink($new_value); + break; + case '10': //Notification deleted + $return .= eL('notificationdeleted') . ': ' . tpl_userlink($new_value); + break; + case '11': //Related task added + $return .= eL('relatedadded') . ': ' . tpl_tasklink($new_value); + break; + case '12': //Related task deleted + $return .= eL('relateddeleted') . ': ' . tpl_tasklink($new_value); + break; + case '13': //Task reopened + $return .= eL('taskreopened'); + break; + case '14': //Task assigned + if (empty($old_value)) { + $users = explode(' ', trim($new_value)); + $users = array_map('tpl_userlink', $users); + $return .= eL('taskassigned').' '; + $return .= implode(', ', $users); + } elseif (empty($new_value)) { + $return .= eL('assignmentremoved'); + } else { + $users = explode(' ', trim($new_value)); + $users = array_map('tpl_userlink', $users); + $return .= eL('taskreassigned').' '; + $return .= implode(', ', $users); + } + break; + // Mentioned in docs, not used anywhere. Will implement if suitable + // translations already exist, otherwise leave to 1.1. (Found translations) + case '15': // This task was added to another task's related list + $return .= eL('addedasrelated') . ': ' . tpl_tasklink($new_value); + break; + case '16': // This task was removed from another task's related list + $return .= eL('deletedasrelated') . ': ' . tpl_tasklink($new_value); + break; + case '17': //Reminder added + $return .= eL('reminderadded') . ': ' . tpl_userlink($new_value); + break; + case '18': //Reminder deleted + $return .= eL('reminderdeleted') . ': ' . tpl_userlink($new_value); + break; + case '19': //User took ownership + $return .= eL('ownershiptaken') . ': ' . tpl_userlink($new_value); + break; + case '20': //User requested task closure + $return .= eL('closerequestmade') . ' - ' . $new_value; + break; + case '21': //User requested task + $return .= eL('reopenrequestmade') . ' - ' . $new_value; + break; + case '22': // Dependency added + $return .= eL('depadded') . ': ' . tpl_tasklink($new_value); + break; + case '23': // Dependency added to other task + $return .= eL('depaddedother') . ': ' . tpl_tasklink($new_value); + break; + case '24': // Dependency removed + $return .= eL('depremoved') . ': ' . tpl_tasklink($new_value); + break; + case '25': // Dependency removed from other task + $return .= eL('depremovedother') . ': ' . tpl_tasklink($new_value); + break; + // 26 and 27 replaced by 0 (mark_private) + case '28': // PM request denied + $return .= eL('pmreqdenied') . ' - ' . $new_value; + break; + case '29': // User added to assignees list + $return .= eL('addedtoassignees'); + break; + case '30': // user created + $return .= eL('usercreated'); + break; + case '31': // user deleted + $return .= eL('userdeleted'); + break; + case '32': // Subtask added + $return .= eL('subtaskadded') . ' ' . tpl_tasklink($new_value); + break; + case '33': // Subtask removed + $return .= eL('subtaskremoved') . ' ' . tpl_tasklink($new_value); + break; + case '34': // supertask added + $return .= eL('supertaskadded') . ' ' . tpl_tasklink($new_value); + break; + case '35': // supertask removed + $return .= eL('supertaskremoved') . ' ' . tpl_tasklink($new_value); + break; + } + + if (isset($details_previous)) $GLOBALS['details_previous'] = $details_previous; + if (isset($details_new)) $GLOBALS['details_new'] = $details_new; + + return $return; +} + +?> |