<?php
/*=====================================================================*\
-|| ################################################################### ||
-|| # BugStrike [#]version[#]
-|| # --------------------------------------------------------------- # ||
-|| # Copyright ©2002-[#]year[#] by Iris Studios, Inc. All Rights Reserved. # ||
-|| # This file may not be reproduced in any way without permission. # ||
-|| # --------------------------------------------------------------- # ||
-|| # User License Agreement at http://www.iris-studios.com/license/ # ||
-|| ################################################################### ||
+|| ###################################################################
+|| # Bugdar
+|| # Copyright (c)2004-2009 Blue Static
+|| #
+|| # This program is free software; you can redistribute it and/or modify
+|| # it under the terms of the GNU General Public License as published by
+|| # the Free Software Foundation; version 2 of the License.
+|| #
+|| # This program is distributed in the hope that it will be useful, but
+|| # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+|| # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+|| # more details.
+|| #
+|| # You should have received a copy of the GNU General Public License along
+|| # with this program; if not, write to the Free Software Foundation, Inc.,
+|| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+|| ###################################################################
\*=====================================================================*/
$fetchtemplates = array(
'history_bit'
);
+
+$focus['showreport'] = 'focus';
+
require_once('./global.php');
+require_once('./includes/api_user.php');
-$bug = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "bug WHERE bugid = " . intval($bugsys->in['bugid']));
+$bug = $db->queryFirst("SELECT * FROM " . TABLE_PREFIX . "bug WHERE bugid = " . $input->inputClean('bugid', TYPE_UINT));
if (!$bug)
{
- echo 'alert: bad bug';
- exit;
+ $message->error(L_INVALID_ID);
+}
+
+if (!check_bug_permissions($bug))
+{
+ $message->errorPermission();
+}
+
+$lookupfields = array(
+ 'status' => 'status',
+ 'priority' => 'priority',
+ 'severity' => 'severity',
+ 'resolution' => 'resolution',
+ 'version' => 'version',
+ 'product' => 'title',
+ 'component' => 'title'
+);
+
+// ###################################################################
+
+$customfields = $db->query("
+ SELECT bugfield.*, MAX(permission.mask) AS mask
+ FROM " . TABLE_PREFIX . "bugfield AS bugfield
+ LEFT JOIN " . TABLE_PREFIX . "bugfieldpermission AS permission
+ ON (bugfield.fieldid = permission.fieldid)
+ WHERE mask <> 0
+ AND permission.usergroupid IN (" . bugdar::$userinfo['usergroupid'] . (sizeof(bugdar::$userinfo['groupids']) != 0 ? ',' . implode(',', bugdar::$userinfo['groupids']) : '') . ")
+ GROUP BY (bugfield.fieldid)"
+);
+
+foreach ($customfields as $field)
+{
+ $fieldlist["$field[fieldid]"] = sprintf(T('Custom Field %1$s (%2$s)'), $field['fieldid'], $field['name']);
}
// ###################################################################
-$logs = $db->query("SELECT history.*, user.* FROM " . TABLE_PREFIX . "history LEFT JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = history.userid) WHERE bugid = $bug[bugid]");
-while ($log = $db->fetch_array($logs))
+$logs = array();
+$logs_fetch = $db->query("
+ SELECT history.*, user.userid, user.email, user.displayname, user.showemail
+ FROM " . TABLE_PREFIX . "history AS history
+ LEFT JOIN " . TABLE_PREFIX . "user AS user
+ ON (user.userid = history.userid)
+ WHERE bugid = $bug[bugid]"
+);
+foreach ($logs_fetch as $log)
{
- $log['formatted'] = call_user_func_array('phrase', array_merge(array($log['language']), unserialize($log['arguments'])));
- $log['date'] = datelike('standard', $log['dateline']);
+ $log['date'] = $datef->format(bugdar::$options['dateformat'], $log['dateline']);
$log['user'] = construct_user_display($log);
- eval('$history .= "' . $template->fetch('history_bit') . '";');
+
+ $logs["$log[dateline]"]["$log[historyid]"] = $log;
+ ksort($logs["$log[dateline]"]);
}
-eval('$template->flush("' . $template->fetch('history') . '");');
+ksort($logs);
+
+$toKill = array();
+
+foreach ($logs AS $dateline => $logitems)
+{
+ $show['group'] = true;
+
+ foreach ($logitems AS $log)
+ {
+ if ($log['field'] == '.' OR ($log['original'] == '' AND $log['changed'] == ''))
+ {
+ $toKill[] = $log['historyid'];
+ continue;
+ }
+
+ if (preg_match('#^(comment|attachment)\.(.*)#', $log['field'], $matches))
+ {
+ if ($matches[1] == 'comment')
+ {
+ $log['field'] = sprintf(T('Comment #%1$s %2$s'), $log['commentid'], ucwords($matches[2]));
+ }
+ else if ($matches[1] == 'attachment')
+ {
+ $log['field'] = sprintf(T('Attachment #2%1$s %2$s'), $log['attachmentid'], ucwords($matches[2]));
+ }
+ }
+ else if (preg_match('#^.?custom(.field)?([0-9]+?)#', $log['field'], $matches))
+ {
+ if ($fieldlist["$matches[2]"])
+ {
+ $log['field'] = $fieldlist["$matches[2]"];
+ }
+ else
+ {
+ continue;
+ }
+ }
+ else if (preg_match('#^\.(.*)#', $log['field'], $matches))
+ {
+ $log['field'] = ucwords($matches[1]);
+
+ if (isset($lookupfields["$matches[1]"]))
+ {
+ $lookup = $matches[1];
+ $log['original'] = bugdar::$datastore["$lookup"]["$log[original]"][ $lookupfields["$lookup"] ];
+ $log['changed'] = bugdar::$datastore["$lookup"]["$log[changed]"][ $lookupfields["$lookup"] ];
+ }
+ else if ($matches[1] == 'assignto' OR $matches[1] == 'assignedto')
+ {
+ if ($log['original'])
+ {
+ $user = new UserAPI();
+ $user->set('userid', $log['original']);
+ $user->setCondition();
+ $user->fetch();
+ $log['original'] = construct_user_display($user->record);
+ }
+
+ if ($log['changed'])
+ {
+ $user = new UserAPI();
+ $user->set('userid', $log['changed']);
+ $user->setCondition();
+ $user->fetch();
+ $log['changed'] = construct_user_display($user->record);
+ }
+ }
+ }
+
+ BSFunctions::swap_css_classes('', 'altcolor');
+
+ $tpl = new BSTemplate('history_bit');
+ $tpl->vars = array(
+ 'bgcolor' => BSFunctions::$cssClass,
+ 'log' => $log
+ );
+ $history .= $tpl->evaluate()->getTemplate();
+ $show['group'] = false;
+ }
+}
+
+// we can now remove all useless logs
+if (sizeof($toKill) > 0)
+{
+ $db->query("DELETE FROM " . TABLE_PREFIX . "history WHERE historyid IN (" . implode(',', $toKill) . ")");
+}
+
+$tpl = new BSTemplate('history');
+$tpl->vars = array(
+ 'history' => $history,
+ 'bug' => $bug
+);
+$tpl->evaluate()->flush();
-/*=====================================================================*\
-|| ###################################################################
-|| # $HeadURL$
-|| # $Id$
-|| ###################################################################
-\*=====================================================================*/
?>
\ No newline at end of file