⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 search.aspx

📁 Bug管理系统
💻 ASPX
📖 第 1 页 / 共 2 页
字号:
<%@ Page language="C#"%>
<!--
Copyright 2002-2005 Corey Trager
Distributed under the terms of the GNU General Public License
-->
<!-- #include file = "inc.aspx" -->

<script language="C#" runat="server">

DbUtil dbutil;
Security security;
bool show_udf;

///////////////////////////////////////////////////////////////////////
string build_where(string where, string clause)
{
	if (clause == "")
	{
		return where;
	}

	string sql = "";

	if (where == "")
	{
		sql = " where ";
		sql += clause;
	}
	else
	{
		sql = where;
		sql += "and ";
		sql += clause;
	}

	return sql;
}


///////////////////////////////////////////////////////////////////////
string build_clause_from_listbox(ListBox lb, string column_name)
{

	string clause = "";
	foreach (ListItem li in lb.Items)
	{
		if (li.Selected)
		{
			if (clause == "")
			{
				clause += column_name + " in (";
			}
			else
			{
				clause += ",";
			}
			clause += li.Value;
		}
	}

	if (clause != "")
	{
		clause += ") ";
	}

	return clause;

}

///////////////////////////////////////////////////////////////////////
void do_query()
{
	prev_sort.Value = "-1";
	prev_dir.Value = "ASC";
	new_page.Value = "0";

	string select = @"select isnull(pr_background_color,'#ffffff') [color], bg_id [id],
		bg_short_desc [desc], pj_name [project], ct_name [category],
		rpt.us_username [reported by], bg_reported_date [reported on],
		pr_name [priority], asg.us_username [assigned to], st_name [status]
		";

	if (show_udf)
	{
		string udf_name = Util.get_setting("UserDefinedBugAttributeName","YourAttribute");
		select += ", udf_name [" + udf_name + "]";
	}


	string custom_cols_sql = "";

	// determine custom fields
	DataSet ds_custom_cols = Util.get_custom_columns(dbutil);
	foreach (DataRow drcc in ds_custom_cols.Tables[0].Rows)
	{
		custom_cols_sql +=  ",[" + drcc["name"].ToString() + "]";
	}

	select += custom_cols_sql;

	select += @"from bugs
		left outer join users rpt on rpt.us_id = bg_reported_user
		left outer join users asg on asg.us_id = bg_assigned_to_user
		left outer join projects on pj_id = bg_project
		left outer join categories on ct_id = bg_category
		left outer join priorities on pr_id = bg_priority
		left outer join statuses on st_id = bg_status
		";

	if (show_udf)
	{
		select += "left outer join user_defined_attribute on udf_id = bg_user_defined_attribute";
	}


	string where = "";

	string reported_by_clause = build_clause_from_listbox (reported_by, "bg_reported_user");
	string assigned_to_clause = build_clause_from_listbox (assigned_to, "bg_assigned_to_user");
	string project_clause = build_clause_from_listbox (project, "bg_project");
	string category_clause = build_clause_from_listbox (category, "bg_category");
	string priority_clause = build_clause_from_listbox (priority, "bg_priority");
	string status_clause = build_clause_from_listbox (status, "bg_status");
	string udf_clause = "";

	if (show_udf)
	{
		udf_clause = build_clause_from_listbox(udf, "bg_user_defined_attribute");
	}


	// SQL "LIKE" uses [, %, and _ in a special way

	string like_string = like.Value.Replace("'", "''");
	like_string = like_string.Replace("[","[[]");
	like_string = like_string.Replace("%","[%]");
	like_string = like_string.Replace("_","[_]");

	string like2_string = like2.Value.Replace("'","''");
	like2_string = like2_string.Replace("[","[[]");
	like2_string = like2_string.Replace("%","[%]");
	like2_string = like2_string.Replace("_","[_]");

	string desc_clause = "";
	if (like.Value != "") {
		desc_clause = " bg_short_desc like";
		desc_clause += " '%" + like_string + "%'\n";
	}

	string comments_clause = "";
	if (like2.Value != "") {
		comments_clause = " bg_id in (select bc_bug from bug_comments where bc_comment like";
		comments_clause += " '%" + like2_string + "%')\n";
	}


	string comments_since_clause = "";
	if (comments_since.Value != "") {
		comments_since_clause = " bg_id in (select bc_bug from bug_comments where bc_type = 'comment' and bc_date > '";
		comments_since_clause += Util.format_local_date_into_db_format(comments_since.Value).Replace(" 12:00:00","");
		comments_since_clause += "')\n";
	}

	string from_clause = "";
	if (from_date.Value != "")
	{
		from_clause = " bg_reported_date >= '" + Util.format_local_date_into_db_format(from_date.Value).Replace(" 12:00:00","") + "'\n";
	}

	string to_clause = "";
	if (to_date.Value != "")
	{
		to_clause = " bg_reported_date <= '" + Util.format_local_date_into_db_format(to_date.Value).Replace(" 00:00:00","") + " 23:59:59'\n";
	}

	string lu_from_clause = "";
	if (lu_from_date.Value != "")
	{
		lu_from_clause = " bg_last_updated_date >= '" + Util.format_local_date_into_db_format(lu_from_date.Value).Replace(" 12:00:00","") + "'\n";
	}

	string lu_to_clause = "";
	if (lu_to_date.Value != "")
	{
		lu_to_clause = " bg_last_updated_date <= '" + Util.format_local_date_into_db_format(lu_to_date.Value).Replace(" 00:00:00","") + " 23:59:59'\n";
	}


	where = build_where(where, reported_by_clause);
	where = build_where(where, assigned_to_clause);
	where = build_where(where, project_clause);
	where = build_where(where, category_clause);
	where = build_where(where, priority_clause);
	where = build_where(where, status_clause);
	where = build_where(where, desc_clause);
	where = build_where(where, comments_clause);
	where = build_where(where, comments_since_clause);
	where = build_where(where, from_clause);
	where = build_where(where, to_clause);
	where = build_where(where, lu_from_clause);
	where = build_where(where, lu_to_clause);

	if (show_udf)
	{
		where = build_where(where, udf_clause);
	}

	sql = select + where + " order by bg_id desc";

	sql = Util.alter_sql_per_project_permissions(sql, security.this_usid);

	DataSet ds = dbutil.get_dataset(sql);
	dv = new DataView (ds.Tables[0]);
	Session["bugs"] = dv;
}

///////////////////////////////////////////////////////////////////////
void Page_Load(Object sender, EventArgs e)
{

	Util.do_not_cache(Response);
	dbutil = new DbUtil();
	security = new Security();
	security.check_security(dbutil, Request, Response, Security.ANY_USER_OK);


	title.InnerText = Util.get_setting("AppTitle","BugTracker.NET") + " - "
		+ "search";

	show_udf = (Util.get_setting("ShowUserDefinedBugAttribute","1") == "1");

	if (!IsPostBack)
	{
		load_drop_downs();
	}
	else
	{
		if (hit_submit_button.Value == "1")
		{
			do_query();
		}
		else {
			dv = (DataView) Session["bugs"];
			if (dv == null)
			{
				do_query();
			}
			sort_dataview();
		}
	}

	hit_submit_button.Value = "0";

	if (Util.get_setting("HideSql", "0") == "1")
	{
		visible_sql_label.Style["display"] = "none";
		visible_sql_text.Style["display"] = "none";
	}

}

///////////////////////////////////////////////////////////////////////
void load_drop_downs()
{

	if (Util.get_setting("DefaultPermissionLevel","2") == "0")
	{
		// only show users who have explicit permission
		// for projects that this user has permissions for

		sql = @"select us_id, 
		case when $fullnames then us_lastname + ', ' + us_firstname else us_username end us_username 
		from users
		where us_id in
			(select pu_user from project_user_xref
			where pu_project in
				(select pu_project from project_user_xref
				where pu_user = $us
				and pu_permission_level <> 0
				)
			)
		order by us_username";
	}
	else
	{
		// show users UNLESS they have been explicitly excluded
		// from all the projects the viewer is able to view

		// the cartesian join in the first select is intentional

		sql=@"select  pj_id, us_id, 
		case when $fullnames then us_lastname + ', ' + us_firstname else us_username end us_username 
		into #temp
		from projects, users
		where pj_id not in
		(
			select pu_project from project_user_xref
			where pu_permission_level = 0 and pu_user = $us
		)
		select distinct us_id, us_username from #temp
		left outer join project_user_xref on pj_id = pu_project
		and us_id = pu_user
		where isnull(pu_permission_level,2) <> 0
		order by us_username
		drop table #temp";


	}

	if (Util.get_setting("UseFullNames","0") == "0")
	{
		// false condition
		sql = sql.Replace("$fullnames","0 = 1");
	}
	else
	{
		// true condition
		sql = sql.Replace("$fullnames","1 = 1");
	}
	sql = sql.Replace("$us",Convert.ToString(security.this_usid));

	reported_by.DataSource = dbutil.get_dataview(sql);
	reported_by.DataTextField = "us_username";
	reported_by.DataValueField = "us_id";
	reported_by.DataBind();


	// only show projects where user has permissions
	if (security.this_is_admin)
	{
		sql = "select pj_id, pj_name from projects order by pj_name";
	}
	else
	{
		sql = @"select pj_id, pj_name
			from projects
			left outer join project_user_xref on pj_id = pu_project
			and pu_user = $us
			where isnull(pu_permission_level,$dpl) <> 0
			order by pj_name";

		sql = sql.Replace("$us",Convert.ToString(security.this_usid));
		sql = sql.Replace("$dpl", Util.get_setting("DefaultPermissionLevel","2"));
	}

	project.DataSource = dbutil.get_dataview(sql);
	project.DataTextField = "pj_name";
	project.DataValueField = "pj_id";
	project.DataBind();
	project.Items.Insert(0, new ListItem("[no project]", "0"));


	category.DataSource =
		dbutil.get_dataview("select ct_id, ct_name from categories order by ct_sort_seq, ct_name");
	category.DataTextField = "ct_name";
	category.DataValueField = "ct_id";
	category.DataBind();
	category.Items.Insert(0, new ListItem("[no category]", "0"));

	priority.DataSource =
		dbutil.get_dataview("select pr_id, pr_name from priorities order by pr_sort_seq, pr_name");
	priority.DataTextField = "pr_name";
	priority.DataValueField = "pr_id";
	priority.DataBind();
	priority.Items.Insert(0, new ListItem("[no priority]", "0"));

	status.DataSource =
		dbutil.get_dataview("select st_id, st_name from statuses order by st_sort_seq, st_name");
	status.DataTextField = "st_name";
	status.DataValueField = "st_id";
	status.DataBind();
	status.Items.Insert(0, new ListItem("[no status]", "0"));

	assigned_to.DataSource = reported_by.DataSource;
	assigned_to.DataTextField = "us_username";
	assigned_to.DataValueField = "us_id";
	assigned_to.DataBind();
	assigned_to.Items.Insert(0, new ListItem("[not assigned]", "0"));

	if (show_udf)
	{
		udf.DataSource =
			dbutil.get_dataview("select udf_id, udf_name from user_defined_attribute order by udf_sort_seq, udf_name");
		udf.DataTextField = "udf_name";
		udf.DataValueField = "udf_id";
		udf.DataBind();
		udf.Items.Insert(0, new ListItem("[none]", "0"));
	}





}

void Page_Unload(Object sender, EventArgs e)
{
	if (dbutil != null) {dbutil.close();}
}


</script>
<!-- #include file = "inc_bugs.aspx" -->

<html>
<head>
<title id="title" runat="server">btnet search</title>
<link rel="StyleSheet" href="btnet.css" type="text/css">
<script type="text/javascript" language="JavaScript" src="overlib_mini.js"></script>
<script type="text/javascript" language="JavaScript" src="calendar.js"></script>


<script>

<% if (security.this_is_admin) { %>

function select_all(sel)
{
	var frm = document.getElementById("massform");
	for (var i = 0; i < frm.elements.length; i++)
	{
		var varname = frm.elements[i].name;
		if (!isNaN(parseInt(varname)))
		{
			frm.elements[i].checked = sel;
		}
	}
}

function validate_mass()
{

	var at_least_one_selected = false;

	// make sure at least one item is selected	
	var frm = document.getElementById("massform");
	for (var i = 0; i < frm.elements.length; i++)
	{
		var varname = frm.elements[i].name;
		if (!isNaN(parseInt(varname)))
		{
			var checkbox = frm.elements[i];
			if (checkbox.checked == true)
			{
				at_least_one_selected = true;
				break;
			}
		}
	}
	
	if (!at_least_one_selected)
	{
		alert ("No items selected for mass update/delete.");
		return false;
	}
	
	if (frm.mass_project.selectedIndex==0
	&& frm.mass_category.selectedIndex==0
	&& frm.mass_priority.selectedIndex==0
	&& frm.mass_assigned_to.selectedIndex==0
	&& frm.mass_status.selectedIndex==0)
	{
		if (!frm.mass_delete.checked)	
		{
			alert ("No updates were specified and delete wasn't checked.  Please specify updates or delete.");
			return false;
		}
	}
	else
	{
		if (frm.mass_delete.checked)	
		{
			alert ("Both updates and delete were specified.   Please select one or the other.");
			return false;
		}
	}

	return true;
}

function load_one_massedit_select(from_id, to_id)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -