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

📄 merge_bug.aspx

📁 Bug管理系统
💻 ASPX
字号:
<%@ 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">

String sql;
DbUtil dbutil;
Security security;
DataRow dr;

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

	Util.do_not_cache(Response);
	dbutil = new DbUtil();

	security = new Security();

	if (Util.get_setting("AllowBugMergingForNonAdmins","0") == "1")
	{
		security.check_security(dbutil, Request, Response, Security.ANY_USER_OK_EXCEPT_GUEST);
	}
	else
	{
		security.check_security(dbutil, Request, Response, Security.MUST_BE_ADMIN);
	}

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


	if (!IsPostBack)
	{
		string orig_id_string = Request.QueryString["id"];
		orig_id.Value = orig_id_string;
		back_href.HRef = "edit_bug.aspx?id=" + orig_id_string;
		from_bug.Value = orig_id_string;
	}
	else {
		from_err.InnerText = "";
		into_err.InnerText = "";
	}

}

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


bool validate()
{

	bool good = true;
	
	// validate FROM
	
	if (from_bug.Value == "")
	{
		from_err.InnerText = "\"From\" bug is required.";
		good = false;
	}
	else {
		if (!Util.is_int(from_bug.Value))
		{
			from_err.InnerText = "\"From\" bug must be an integer.";
			good = false;

		}
	}

	// validate INTO

	if (into_bug.Value == "")
	{
		into_err.InnerText = "\"Into\" bug is required.";
		good = false;
	}
	else {
		if (!Util.is_int(into_bug.Value))
		{
			into_err.InnerText = "\"Into\" bug must be an integer.";
			good = false;

		}
	}


	if (!good)
	{
		return false;
	}


	if (from_bug.Value == into_bug.Value)
	{
		from_err.InnerText = "\"From\" bug cannot be the same as \"Into\" bug.";
		return false;	
	}
	
	// Continue and see if from and to exist in db

	sql = @"
	declare @from_desc varchar(100)
	declare @into_desc varchar(100)
	declare @from_id int
	declare @into_id int
	set @from_id = -1
	set @into_id = -1
	select @from_desc = bg_short_desc, @from_id = bg_id from bugs where bg_id = $from
	select @into_desc = bg_short_desc, @into_id = bg_id from bugs where bg_id = $into
	select @from_desc, @into_desc, @from_id, @into_id	";
	
	sql = sql.Replace("$from", from_bug.Value);
	sql = sql.Replace("$into", into_bug.Value);
	
	dr = dbutil.get_datarow(sql);
	
	if ((int) dr[2] == -1)
	{
		from_err.InnerText = "\"From\" bug not found.";
		good = false;
	}


	if ((int) dr[3] == -1)
	{
		into_err.InnerText = "\"Into\" bug not found.";
		good = false;
	}
	
	
	if (!good)
	{
		return false;
	}
	else
	{
		return true;
	}

}


///////////////////////////////////////////////////////////////////////
void on_update(object Source, EventArgs e)
{

	// does it say "Merge" or "Confirm Merge"?
	
	if (submit.Value == "Merge")
	{
		if (!validate()) 
		{
			prev_from_bug.Value = "";
			prev_into_bug.Value = "";
			return;
		}
	}


	if (prev_from_bug.Value == from_bug.Value
	&& prev_into_bug.Value == into_bug.Value)
	{


		// rename the attachments
		
		string upload_folder = Util.get_setting("UploadFolder","c:\\");

		sql = @"select ba_id, ba_file from bug_attachments where ba_bug = $from";
		sql = sql.Replace("$from", prev_from_bug.Value);
		DataSet ds = dbutil.get_dataset(sql);
		
		foreach (DataRow dr in ds.Tables[0].Rows)
		{

			// create path
			StringBuilder path = new StringBuilder(upload_folder);
			path.Append("\\");
			path.Append(prev_from_bug.Value);
			path.Append("_");
			path.Append(Convert.ToString(dr["ba_id"]));
			path.Append("_");
			path.Append(Convert.ToString(dr["ba_file"]));
			if (System.IO.File.Exists(path.ToString()))
			{

				StringBuilder path2 = new StringBuilder(upload_folder);
				path2.Append("\\");
				path2.Append(prev_into_bug.Value);
				path2.Append("_");
				path2.Append(Convert.ToString(dr["ba_id"]));
				path2.Append("_");
				path2.Append(Convert.ToString(dr["ba_file"]));

				System.IO.File.Move(path.ToString(), path2.ToString());
			}

		}


		
		// copy the from db entries to the to
		sql = @"
		insert into bug_comments
			(bc_bug, bc_user, bc_date, bc_comment, bc_email_from, bc_email_to, bc_type)
			select $into, bc_user, bc_date, bc_comment, bc_email_from, bc_email_to, bc_type
			from bug_comments
			where bc_bug = $from
			
		insert into bug_subscriptions
			(bs_bug, bs_user)
			select $into, bs_user
			from bug_subscriptions
			where bs_bug = $from
			and bs_user not in (select bs_user from bug_subscriptions where bs_bug = $into)

		update bug_attachments
			set ba_bug = $into 
			where ba_bug = $from";
		
		sql = sql.Replace("$from",prev_from_bug.Value);
		sql = sql.Replace("$into",prev_into_bug.Value);

		dbutil.execute_nonquery(sql);
		
		// record the merge itself
		
		sql = @"insert into bug_comments
			(bc_bug, bc_user, bc_date, bc_type, bc_comment)
			values($into,$us,getdate(), 'comment', 'merged bug $from into this bug:')
			select @@IDENTITY";
		
		sql = sql.Replace("$from",prev_from_bug.Value);
		sql = sql.Replace("$into",prev_into_bug.Value);
		sql = sql.Replace("$us",Convert.ToString(security.this_usid));
		
		int comment_id = Convert.ToInt32(dbutil.execute_scalar(sql));

		// update bug comments with info from old bug
		sql = @"update bug_comments
			set bc_comment = convert(nvarchar,bc_comment) + char(10) + bg_short_desc			
			from bugs where bg_id = $from
			and bc_id = $bc";
		
		sql = sql.Replace("$from",prev_from_bug.Value);
		sql = sql.Replace("$bc",Convert.ToString(comment_id));
		dbutil.execute_nonquery(sql);


		// delete the from bug
		
		Util.delete_bug(dbutil, Convert.ToInt32(prev_from_bug.Value));
		
		
		Response.Redirect ("edit_bug.aspx?id=" + prev_into_bug.Value);
				
	}
	else
	{
		prev_from_bug.Value = from_bug.Value;
		prev_into_bug.Value = into_bug.Value;
		static_from_bug.InnerText = from_bug.Value;
		static_into_bug.InnerText = into_bug.Value;
		static_from_desc.InnerText = (string)dr[0];
		static_into_desc.InnerText = (string)dr[1];
		from_bug.Style["display"] = "none";
		into_bug.Style["display"] = "none";
		static_from_bug.Style["display"] = "";
		static_into_bug.Style["display"] = "";
		static_from_desc.Style["display"] = "";
		static_into_desc.Style["display"] = "";
		submit.Value = "Confirm Merge";
	}

}

</script>

<html>
<head>
<title id="title" runat="server">btnet merge bug</title>
<link rel="StyleSheet" href="btnet.css" type="text/css">
</head>
<body>
<% security.write_menu(Response, "admin"); %>
<p>
<div class=align><table border=0><tr><td>

<a id="back_href" runat="server" href="">back to <% Response.Write(Util.get_setting("SingularBugLabel","bug")); %></a>
<!--<a id="confirm_href" runat="server" href="">confirm delete</a>
</a>-->
<p>
Merge all comments, attachments, and subscriptions 
from "FROM" <% Response.Write(Util.get_setting("SingularBugLabel","bug")); %> 
into "INTO" <% Response.Write(Util.get_setting("SingularBugLabel","bug")); %>.
<br>
<span class=err>Note:&nbsp;&nbsp;"FROM" <% Response.Write(Util.get_setting("SingularBugLabel","bug")); %> will be deleted!</err>
<p>

<form runat="server" class=frm>
<table border=0>

<tr>
<td class=lbl align=right>
FROM <% Response.Write(Util.get_setting("SingularBugLabel","bug")); %>:
<td align=left valign=bottom>
<input type=text id="from_bug" runat="server" size=8>
<span class=static id="static_from_bug" runat="server" style='display: none;'></span>
<br>
<span class=static id="static_from_desc" runat="server" style='display: none;'></span>
		
<tr><td colspan=2><span class=err id="from_err" runat="server">&nbsp;</span>


<tr>
<td class=lbl align=right>
INTO <% Response.Write(Util.get_setting("SingularBugLabel","bug")); %>:
<td align=left valign=bottom>
<input type=text id="into_bug" runat="server" size=8>
<span class=static id="static_into_bug" runat="server" style='display: none;'></span>
<br>
<span class=static id="static_into_desc" runat="server" style='display: none;'></span>

<tr><td colspan=2><span class=err id="into_err" runat="server">&nbsp;</span>


</tr>


<tr><td colspan=2 align=center><br>
<input class=btn type=submit runat="server" id="submit" value="Merge" OnServerClick="on_update">



</table>

<input type=hidden id="confirm" runat="server">
<input type=hidden id="prev_from_bug" runat="server">
<input type=hidden id="prev_into_bug" runat="server">
<input type=hidden id="orig_id" runat="server">

</form>

<p>


</td></tr></table></div>
</body>
</html>


⌨️ 快捷键说明

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