summaryrefslogtreecommitdiff
path: root/includes/events.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/events.inc.php')
-rw-r--r--includes/events.inc.php308
1 files changed, 308 insertions, 0 deletions
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} &rarr; {$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;
+}
+
+?>