Location: PHPKode > projects > Bugdar > upload/showreport.php
<?php
/*=====================================================================*\
|| ###################################################################
|| # Bugdar
|| # Copyright ©2002-2007 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(
	'showreport',
	'showreport_attachment',
	'showreport_comment',
	'quicksearch',
	'bugfield_static_text'
);

define('SVN', '$Id$');

$focus['showreport'] = 'focus';

require_once('./global.php');
require_once('./includes/functions_product.php');

$bugid = $bugsys->input_clean('bugid', TYPE_UINT);

// ###################################################################

if (empty($bugid) OR $_REQUEST['do'] == 'quicksearch')
{
	if (!empty($bugid))
	{
		if ($db->query_first("SELECT bugid FROM " . TABLE_PREFIX . "bug WHERE bugid = $bugid"))
		{
			header("Location: showreport.php?bugid=$bugid");
			exit;
		}
		else
		{
			$error = L_INVALID_ID;
		}
	}
	
	eval('$template->flush("' . $template->fetch('quicksearch') . '");');
	exit;
}

// ###################################################################

// -------------------------------------------------------------------
// get the report
$bug = $db->query_first("
	SELECT bug.*, user.email, user.displayname, user.showemail
	FROM " . TABLE_PREFIX . "bug AS bug
	LEFT JOIN " . TABLE_PREFIX . "user AS user
		ON (bug.userid = user.userid)
	WHERE bug.bugid = $bugid"
);

if (!is_array($bug))
{
	$message->error(L_INVALID_ID);
}

if (!check_bug_permissions($bug))
{
	$message->errorPermission();
}

$show['edit'] = ((can_perform('caneditown', $bug['product']) AND $bugsys->userinfo['userid'] == $bug['userid'] AND $bug['userid'] != 0) OR (can_perform('caneditother', $bug['product']) AND $bugsys->userinfo['userid'] != $bug['userid']));
$show['delete'] = can_perform('candeletedata', $bug['product']);

// ###################################################################
// edit display
if ($show['edit'])
{
	$select['severity'] = construct_datastore_select('severity', 'severity', 'severityid', $bug['severity']);
	
	$show['changestatus'] = (can_perform('canchangestatus', $bug['product']) ? true : false);
	if (can_perform('canchangestatus', $bug['product']))
	{
		$select['priority'] = construct_datastore_select('priority', 'priority', 'priorityid', $bug['priority']);
		$select['status'] = construct_datastore_select('status', 'status', 'statusid', $bug['status']);
		$select['resolution'] = construct_datastore_select('resolution', 'resolution', 'resolutionid', $bug['resolution']);		
	}
	else
	{
		$bug['status'] = $bugsys->datastore['status']["$bug[status]"]['status'];
		$bug['resolution'] = $bugsys->datastore['resolution']["$bug[resolution]"]['resolution'];
		$bug['severity'] = $bugsys->datastore['severity']["$bug[severity]"]['severity'];
		$bug['priority'] = $bugsys->datastore['priority']["$bug[priority]"]['priority'];
	}
	
	$show['assign'] = (can_perform('canassign', $bug['product']) ? true : false);
	if (can_perform('canassign', $bug['product']) AND is_array($bugsys->datastore['assignto']))
	{
		foreach ($bugsys->datastore['assignto'] AS $dev)
		{
			$value = $dev['userid'];
			$selected = (($dev['userid'] == $bug['assignedto']) ? true : false);
			$label = construct_user_display($dev, false);
			eval('$select[dev] .= "' . $template->fetch('selectoption') . '";');
		}
	}
	
	$productSelect = ConstructProductSelect('canviewbugs', "$bug[product],$bug[component],$bug[version]");
	
	if ($bug['duplicateof'])
	{
		$duplicate = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "bug WHERE bugid = $bug[duplicateof]");
	}
	
	if ($bug['dependency'])
	{
		$depends = array();
		$dependencies = $db->query("SELECT * FROM " . TABLE_PREFIX . "bug WHERE bugid IN ($bug[dependency])");
		while ($dependency = $db->fetch_array($dependencies))
		{
			$depends[] = "<a href=\"showreport.php?bugid=$dependency[bugid]\" title=\"$dependency[summary]\">$dependency[bugid]</a>";
		}
		$dependencies = implode(' ', $depends);
	}
	
	$select['automations'] = '';
	$show['automations'] = false;
	if (is_array($bugsys->datastore['automation']))
	{
		foreach ($bugsys->datastore['automation'] AS $action)
		{
			$label = $action['name'];
			$value = $action['actionid'];
			$selected = false;
			eval('$select[automation] .= "' . $template->fetch('selectoption') . '";');
			$show['automations'] = true;
		}
		if ($show['automations'])
		{
			$label = '';
			$value = 0;
			$selected = true;
			eval('$select[automation] = "' . $template->fetch('selectoption') . '" . $select[automation];');
		}
	}
}

// ###################################################################
// non-edit display
else
{
	// -------------------------------------------------------------------
	// prep display
	$bug['status'] = $bugsys->datastore['status']["$bug[status]"]['status'];
	$bug['resolution'] = $bugsys->datastore['resolution']["$bug[resolution]"]['resolution'];
	$bug['severity'] = $bugsys->datastore['severity']["$bug[severity]"]['severity'];
	$bug['priority'] = $bugsys->datastore['priority']["$bug[priority]"]['priority'];
	
	$assigninfo = $bugsys->datastore['assignto']["$bug[assignedto]"];
	$bug['assigninfo'] = ((is_array($assigninfo)) ? construct_user_display($assigninfo) : '');
		
	$duplicateof = $db->query_first("SELECT bugid, summary FROM " . TABLE_PREFIX . "bug WHERE bugid = $bug[duplicateof]");
	
	$dupelist = array();
	$duplicates = $db->query("SELECT bugid, summary FROM " . TABLE_PREFIX . "bug WHERE duplicateof = $bug[bugid]");
	while ($duplicate = $db->fetch_array($duplicates))
	{
		$dupelist[] = "<a href=\"showreport.php?bugid=$duplicate[bugid]\" target=\"_blank\">$duplicate[summary]</a>";
	}
	$dupelist = implode(', ', $dupelist);
	
	if ($bug['dependency'])
	{
		$depends = array();
		$dependencies = $db->query("SELECT bugid, summary FROM " . TABLE_PREFIX . "bug WHERE bugid IN ($bug[dependency])");
		while ($dependency = $db->fetch_array($dependencies))
		{
			$depends[] = "<a href=\"showreport.php?bugid=$dependency[bugid]\" title=\"$dependency[summary]\" target=\"_blank\">$dependency[bugid]</a>";
		}
		$dependencies = implode(' ', $depends);
	}
}

// ###################################################################
// global display items

$show['subscribe'] = can_perform('cansubscribe', $bug['product']);

$favorite = (bool)$db->query_first("SELECT * FROM " . TABLE_PREFIX . "favorite WHERE bugid = $bug[bugid] AND userid = " . $bugsys->userinfo['userid']);
$favoritetext = ($favorite ? T('Remove from Favorites') : T('Add to Favorites'));

$bug['userinfo'] = construct_user_display($bug);
$bug['datetime'] = $datef->format($bugsys->options['dateformat'], $bug['dateline']);
$bug['productid'] = $bug['product'];
$bug['product'] = $bugsys->datastore['product']["$bug[product]"]['title'];
$bug['componentid'] = $bug['component'];
$bug['component'] = ($bug['component'] ? $bugsys->datastore['product']["$bug[component]"]['title'] : '');
$bug['versionid'] = $bug['version'];
$bug['version'] = $bugsys->datastore['version']["$bug[version]"]['version'];

// ###################################################################
// custom field output

$fields = construct_custom_fields($bug);
$i = 0;
foreach ($fields AS $field)
{
	if ($i % 2 == 0)
	{
		$customfields['left'] .= $field;
	}
	else
	{
		$customfields['right'] .= $field;
	}
	$i++;
}

// ###################################################################
// other elements

// -------------------------------------------------------------------
// hilight
$words = explode(' ', $bugsys->in['hilight']);
foreach ($words AS $word)
{
	if (trim($word))
	{
		$word = preg_quote($bugsys->unsanitize($word));
		$hilight[] = $temp = trim(preg_replace('#[^0-9a-zA-Z_ ]#', '', $word));
	}
}

// -------------------------------------------------------------------
// attachments
$show['getattachments'] = ((can_perform('cangetattach', $bug['productid']) OR can_perform('caneditattach', $bug['productid'])) ? true : false);
$show['putattachments'] = ((can_perform('canputattach', $bug['productid']) OR can_perform('caneditattach', $bug['productid'])) ? true : false);
$show['attachments'] = ($show['getattachments'] OR $show['putattachments']) ? true : false;

if ($show['getattachments'] OR $show['putattachments'])
{
	$attachments_fetch = $db->query("
		SELECT attachment.attachmentid, attachment.filename,
			attachment.description, attachment.dateline,
			attachment.userid, attachment.obsolete, user.email,
			user.showemail, user.displayname
		FROM " . TABLE_PREFIX . "attachment AS attachment
		LEFT JOIN " . TABLE_PREFIX . "user AS user
			ON (attachment.userid = user.userid)
		WHERE attachment.bugid = $bug[bugid]
		ORDER BY attachment.dateline"
	);
	
	$attaches = false;
	while ($attachment = $db->fetch_array($attachments_fetch))
	{
		$attaches = true;
		$show['editattach'] = ((can_perform('caneditattach', $bug['productid']) OR ($attachment['userid'] == $bugsys->userinfo['userid'] AND can_perform('canputattach', $bug['productid']))) ? true : false);
		$attachment['date'] = $datef->format($bugsys->options['dateformat'], $attachment['dateline']);
		$attachment['user'] = construct_user_display($attachment, false);
		eval('$attachments .= "' . $template->fetch('showreport_attachment') . '";');
	}
	
	$show['attachments'] = (!$show['putattachments'] AND !$attaches) ? false : true;
}

// -------------------------------------------------------------------
// votes

$vote = $db->query_first("SELECT *, FIND_IN_SET(" . $bugsys->userinfo['userid'] . ", userids) AS uservote FROM " . TABLE_PREFIX . "vote WHERE bugid = $bug[bugid]");

$vote['total'] = $vote['votefor'] + $vote['voteagainst'];
if ($vote['total'] != 0)
{
	$vote['forpercent'] = round($vote['votefor'] / $vote['total'], 3) * 100;
	$vote['againstpercent'] = round($vote['voteagainst'] / $vote['total'], 3) * 100;
}
else
{
	$vote['forpercent'] = 0;
	$vote['againstpercent'] = 0;
}

$show['vote'] = ((can_perform('canvote', $bug['productid']) AND !$vote['uservote']) ? true : false);

// -------------------------------------------------------------------
// get comments
$comments_fetch = $db->query("
	SELECT comment.*, user.email, user.showemail, user.displayname
	FROM " . TABLE_PREFIX . "comment AS comment
	LEFT JOIN " . TABLE_PREFIX . "user AS user
		ON (comment.userid = user.userid)
	WHERE comment.bugid = $bug[bugid]" . (!can_perform('canviewhidden', $bug['productid']) ? "
		AND !hidden" : '') . "
	ORDER BY comment.dateline ASC"
);
$description = null;
while ($comment = $db->fetch_array($comments_fetch))
{
	$comment['posttime'] = $datef->format($bugsys->options['dateformat'], $comment['dateline']);
	$comment['postby'] = construct_user_display($comment);
	$show['editcomment'] = ((can_perform('caneditownreply', $bug['productid']) AND $bugsys->userinfo['userid'] == $comment['userid']) OR (can_perform('caneditotherreply', $bug['productid']) AND $bugsys->userinfo['userid'] != $comment['userid']));
	
	$bugsys->debug('can edit own replies: ' . (int)(can_perform('caneditownreply', $bug['productid']) AND $bugsys->userinfo['userid'] == $comment['userid']));
	$bugsys->debug('can edit other replies:' . (int)(can_perform('caneditotherreply', $bug['productid']) AND $bugsys->userinfo['userid'] != $comment['userid']));
	$bugsys->debug('$show[editcomment]: ' . $show['editcomment']);
	
	if (is_array($hilight))
	{
		foreach ($hilight AS $id => $find)
		{
			$find = "#($find)#i";
			$replace = "<span style=\"background-color: yellow; font-weight: bold; color: red;\">\\1</span>";
			$comment['comment_parsed'] = preg_replace($find, $replace, $comment['comment_parsed']);
		}
	}
	
	eval('$temp = "' . $template->fetch('showreport_comment') . '";');
	if ($description == null)
	{
		$description = $temp;
	}
	else
	{
		$comments .= $temp;
	}
}

$show['newreply'] = (can_perform('canpostcomments', $bug['productid']) ? true : false);

$bug['summary_title'] = $bug['summary'];
if (is_array($hilight) AND !$show['edit'])
{
	foreach ($hilight AS $id => $find)
	{
		$find = "#($find)#i";
		$replace = "<span style=\"background-color: yellow; font-weight: bold; color: red;\">\\1</span>";
		$bug['summary'] = preg_replace($find, $replace, $bug['summary']);
	}
}

eval('$template->flush("' . $template->fetch('showreport') . '");');

/*=====================================================================*\
|| ###################################################################
|| # $HeadURL$
|| # $Id$
|| ###################################################################
\*=====================================================================*/
?>
Return current item: Bugdar