📄 edit_bug.aspx
字号:
}
}
void display_bug_not_found(int id)
{
Response.Write ("<link rel=StyleSheet href=btnet.css type=text/css>");
security.write_menu(Response, Util.get_setting("PluralBugLabel","bugs"));
Response.Write("<p> </p><div class=align>");
Response.Write("<div class=err>");
Response.Write(Util.capitalize_first_letter(Util.get_setting("SingularBugLabel","bug")));
Response.Write(" not found: " + Convert.ToString(id) + "</div>");
Response.Write("<p><a href=bugs.aspx>View ");
Response.Write(Util.get_setting("PluralBugLabel","bug"));
Response.Write("</a>");
Response.End();
}
///////////////////////////////////////////////////////////////////////
void Page_Unload(Object sender, EventArgs e)
{
if (dbutil != null) {dbutil.close();}
}
///////////////////////////////////////////////////////////////////////
void format_subcribe_cancel_link()
{
bool notification_email_enabled = (btnet.Util.get_setting("NotificationEmailEnabled","1") == "1");
if (notification_email_enabled)
{
int subscribed;
if (!IsPostBack)
{
subscribed = (int) dr["subscribed"];
}
else
{
// User might have changed bug to a project where we automatically subscribe
// so be prepared to format the link even if this isn't the first time in.
sql = "select count(1) from bug_subscriptions where bs_bug = $bg and bs_user = $us";
sql = sql.Replace("$bg",Convert.ToString(id));
sql = sql.Replace("$us",Convert.ToString(security.this_usid));
subscribed = (int) dbutil.execute_scalar(sql);
}
if (security.this_is_guest)
{
subscriptions.InnerHtml = "";
}
else
{
string subscription_link;
if (subscribed > 0)
{
subscription_link = "<a href=subscribe.aspx?action=0&id="
+ Convert.ToString(id)
+ ">cancel notifications subscription</a>";
}
else
{
subscription_link = "<a href=subscribe.aspx?action=1&id="
+ Convert.ToString(id)
+ ">subscribe to notifications</a>";
}
subscriptions.InnerHtml = subscription_link;
}
}
}
///////////////////////////////////////////////////////////////////////
void set_controls_to_readonly()
{
// get rid of the drop downs
// turn on the spans to hold the data
if (id != 0)
{
static_short_desc.Style["display"] = "";
}
static_project.Style["display"] = "";
static_category.Style["display"] = "";
static_priority.Style["display"] = "";
static_status.Style["display"] = "";
static_udf.Style["display"] = "";
// fill in the static vars
static_short_desc.InnerText = short_desc.Value;
static_category.InnerText = category.SelectedItem.Text;
static_priority.InnerText = priority.SelectedItem.Text;
static_status.InnerText = status.SelectedItem.Text;
static_udf.InnerText = udf.SelectedItem.Text;
if (id != 0)
{
short_desc.Style["display"] = "none";
}
change_project_label.Style["display"] = "none";
project.Style["display"] = "none";
category.Style["display"] = "none";
priority.Style["display"] = "none";
reassign_label.Style["display"] = "none";
assigned_to.Style["display"] = "none";
status.Style["display"] = "none";
udf.Style["display"] = "none";
// even turn off commenting updating for read only
if (permission_level == PERMISSION_READONLY)
{
sub.Disabled = true;
sub.Style["display"] = "none";
plus_label.Style["display"] = "none";
comment_label.Style["display"] = "none";
comment.Style["display"] = "none";
}
}
///////////////////////////////////////////////////////////////////////
void format_prev_next_bug()
{
// for next/prev bug links
DataView dv_bugs = (DataView) Session["bugs"];
int prev_bug = 0;
int next_bug = 0;
int this_bug = 0;
bool this_bug_found = false;
if (dv_bugs != null)
{
foreach (DataRowView drv in dv_bugs)
{
if (this_bug_found)
{
next_bug = (int) drv[1];
break;
}
else if (id == (int) drv[1])
{
this_bug_found = true;
}
else
{
prev_bug = (int) drv[1];
}
}
string prev_next_link = "";
if (this_bug_found)
{
if (prev_bug != 0)
{
prev_next_link =
" <a href=edit_bug.aspx?id="
+ Convert.ToString(prev_bug)
+ ">prev</a>";
}
else
{
prev_next_link = " <span class=gray_link>prev</span>";
}
if (next_bug != 0)
{
prev_next_link +=
" <a href=edit_bug.aspx?id="
+ Convert.ToString(next_bug)
+ ">next</a>";
}
else
{
prev_next_link += " <span class=gray_link>next</span>";
}
prev_next.InnerHtml = prev_next_link;
}
}
}
///////////////////////////////////////////////////////////////////////
private void on_project_changed(object sender, System.EventArgs e)
{
project_changed = true;
}
///////////////////////////////////////////////////////////////////////
private void on_assigned_to_changed(object sender, System.EventArgs e)
{
assigned_to_changed = true;
}
///////////////////////////////////////////////////////////////////////
void load_drop_downs()
{
// only show projects where user has permissions
sql = @"select pj_id, pj_name
from projects
left outer join project_user_xref on pj_id = pu_project
and pu_user = $us
where pj_active = 1
and 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"));
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"));
}
///////////////////////////////////////////////////////////////////////
string get_dropdown_text_from_value(DropDownList dropdown, string value)
{
foreach (ListItem li in dropdown.Items)
{
if (li.Value == value)
{
return li.Text;
}
}
return null;
}
///////////////////////////////////////////////////////////////////////
bool did_something_change()
{
bool something_changed = false;
if (prev_short_desc.Value != short_desc.Value
|| comment.Value.Length > 0
|| project_changed
|| prev_category.Value != category.SelectedItem.Value
|| prev_priority.Value != priority.SelectedItem.Value
|| assigned_to_changed
|| prev_status.Value != status.SelectedItem.Value
|| (Util.get_setting("ShowUserDefinedBugAttribute","1") == "1" &&
prev_udf.Value != udf.SelectedItem.Value))
{
something_changed = true;
}
if (!something_changed)
{
foreach (DataRow drcc in ds_custom_cols.Tables[0].Rows)
{
string var = (string)drcc["name"];
string before = hash_prev_custom_cols[var].ToString();
string after = hash_custom_cols[var].ToString();
if (before != after)
{
something_changed = true;
break;
}
}
}
if (!something_changed)
{
if ((Request["pcd1"] != null && prev_pcd1.Value != Request["pcd1"])
|| (Request["pcd2"] != null && prev_pcd2.Value != Request["pcd2"])
|| (Request["pcd3"] != null && prev_pcd3.Value != Request["pcd3"]))
{
something_changed = true;
}
}
return something_changed;
}
///////////////////////////////////////////////////////////////////////
void record_changes()
{
string base_sql = @"
insert into bug_comments
(bc_bug, bc_user, bc_date, bc_comment, bc_type)
values($id, $us, getdate(), N'$3', 'update')";
base_sql = base_sql.Replace("$id", Convert.ToString(id));
base_sql = base_sql.Replace("$us", Convert.ToString(security.this_usid));
string from;
string to;
sql = "";
bool do_update = false;
if (prev_short_desc.Value != short_desc.Value)
{
do_update = true;
sql += base_sql.Replace(
"$3",
"changed desc from \""
+ prev_short_desc.Value.Replace("'","''") + "\" to \""
+ short_desc.Value.Replace("'","''") + "\"");
prev_short_desc.Value = short_desc.Value;
}
if (project_changed)
{
from = get_dropdown_text_from_value(project, prev_project.Value);
do_update = true;
sql += base_sql.Replace(
"$3",
"changed project from \""
+ from.Replace("'","''") + "\" to \""
+ project.SelectedItem.Text.Replace("'","''") + "\"");
prev_project.Value = project.SelectedItem.Value;
current_project.InnerText = project.SelectedItem.Text;
}
if (prev_category.Value != category.SelectedItem.Value)
{
from = get_dropdown_text_from_value(category, prev_category.Value);
do_update = true;
sql += base_sql.Replace(
"$3",
"changed category from \""
+ from.Replace("'","''") + "\" to \""
+ category.SelectedItem.Text.Replace("'","''") + "\"");
prev_category.Value = category.SelectedItem.Value;
}
if (prev_priority.Value != priority.SelectedItem.Value)
{
from = get_dropdown_text_from_value(priority, prev_priority.Value);
do_update = true;
sql += base_sql.Replace(
"$3",
"changed priority from \""
+ from.Replace("'","''") + "\" to \""
+ priority.SelectedItem.Text.Replace("'","''") + "\"");
prev_priority.Value = priority.SelectedItem.Value;
}
if (assigned_to_changed)
{
from = get_dropdown_text_from_value(assigned_to, prev_assigned_to.Value);
// not sure why i have to do this, but I do, otherwise
// program writes an extra bug_history entry.
if (assigned_to.SelectedItem.Text != from)
{
do_update = true;
sql += base_sql.Replace(
"$3",
"changed assigned_to from \""
+ from.Replace("'","''") + "\" to \""
+ assigned_to.SelectedItem.Text.Replace("'","''") + "\"");
}
prev_assigned_to.Value = assigned_to.SelectedItem.Value;
assigned_to_username.InnerText = assigned_to.SelectedItem.Text;
}
if (prev_status.Value != status.SelectedItem.Value)
{
status_changed = true;
from = get_dropdown_text_from_value(status, prev_status.Value);
do_update = true;
sql += base_sql.Replace(
"$3",
"changed status from \""
+ from.Replace("'","''") + "\" to \""
+ status.SelectedItem.Text.Replace("'","''") + "\"");
prev_status.Value = status.SelectedItem.Value;
}
if (Util.get_setting("ShowUserDefinedBugAttribute","1") == "1")
{
if (prev_udf.Value != udf.SelectedItem.Value)
{
from = get_dropdown_text_from_value(udf, prev_udf.Value);
do_update = true;
sql += base_sql.Replace(
"$3",
"changed " + Util.get_setting("UserDefinedBugAttributeName","YourAttribute")
+ " from \""
+ from.Replace("'","''") + "\" to \""
+ udf.SelectedItem.Text.Replace("'","''") + "\"");
prev_udf.Value = udf.SelectedItem.Value;
}
}
// Handle custom columns
foreach (DataRow drcc in ds_custom_cols.Tables[0].Rows)
{
string var = (string)drcc["name"];
string before = hash_prev_custom_cols[var].ToString();
string after = hash_custom_cols[var].ToString();
if (before != after)
{
do_update = true;
sql += base_sql.Replace(
"$3",
"changed " + var + " from \"" + before.Replace("'","''") + "\" to \"" + after.Replace("'","''") + "\"");
hash_prev_custom_cols[(string)drcc["name"]] = hash_custom_cols[(string)drcc["name"]];
}
}
// Handle project custom dropdowns
if (Request["pcd1"] != null && prev_pcd1.Value != Request["pcd1"])
{
do_update = true;
sql += base_sql.Replace(
"$3",
"changed "
+ Request["label_pcd1"]
+ " from \"" + prev_pcd1.Value + "\" to \"" + Request["pcd1"] + "\"");
prev_pcd1.Value = Request["pcd1"];
}
if (Request["pcd2"] != null && prev_pcd2.Value != Request["pcd2"])
{
do_update = true;
sql += base_sql.Replace(
"$3",
"changed "
+ Request["label_pcd2"]
+ " from \"" + prev_pcd2.Value + "\" to \"" + Request["pcd2"] + "\"");
prev_pcd2.Value = Request["pcd2"];
}
if (Request["pcd3"] != null && prev_pcd3.Value != Request["pcd3"])
{
do_update = true;
sql += base_sql.Replace(
"$3",
"changed "
+ Request["label_pcd3"]
+ " from \"" + prev_pcd3.Value + "\" to \"" + Request["pcd3"] + "\"");
prev_pcd3.Value = Request["pcd3"];
}
if (do_update
&& Util.get_setting("TrackBugHistory","1") == "1")
{
dbutil.execute_nonquery(sql);
}
if (project_changed)
{
permission_level = fetch_permission_level();
}
}
///////////////////////////////////////////////////////////////////////
int fetch_permission_level()
{
// fetch the revised permission level
sql = @"declare @permission_level int
set @permission_level = -1
select @permission_level = isnull(pu_permission_level,$dpl)
from project_user_xref
where pu_project = $pj
and pu_user = $us
if @permission_level = -1 set @permission_level = $dpl
select @permission_level";
sql = sql.Replace("$dpl", Util.get_setting("DefaultPermissionLevel","2"));
sql = sql.Replace("$pj", project.SelectedItem.Value);
sql = sql.Replace("$us", Convert.ToString(security.this_usid));
int pl = (int) dbutil.execute_scalar(sql);
// reduce permissions for guest
if (security.this_is_guest && permission_level == PERMISSION_ALL)
{
pl = PERMISSION_REPORTER;
}
return pl;
}
///////////////////////////////////////////////////////////////////////
Boolean validate()
{
Boolean good = true;
if (short_desc.Value == "")
{
good = false;
short_desc_err.InnerText = "Short Description is required.";
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -