Commit 23d260a3 authored by lpsolit%gmail.com's avatar lpsolit%gmail.com

Bug 344435: Let me remove bugs from saved buglists - Patch by Frédéric Buclin…

Bug 344435: Let me remove bugs from saved buglists - Patch by Frédéric Buclin <LpSolit@gmail.com> r=bkor a=myk
parent 61d670d9
......@@ -504,28 +504,49 @@ elsif (($cgi->param('cmdtype') eq "doit") && defined $cgi->param('remtype')) {
my $query_name = $cgi->param('newqueryname');
my $new_query = $cgi->param('newquery');
my $query_type = QUERY_LIST;
# If add_bugids is true, we are adding individual bugs to a saved
# search. We get the existing list of bug IDs (if any) and append
# the new ones.
if ($cgi->param('add_bugids')) {
my %bug_ids;
foreach my $bug_id (split(/[\s,]+/, $cgi->param('bug_ids'))) {
next unless $bug_id;
ValidateBugID($bug_id);
$bug_ids{$bug_id} = 1;
# If list_of_bugs is true, we are adding/removing individual bugs
# to a saved search. We get the existing list of bug IDs (if any)
# and add/remove the passed ones.
if ($cgi->param('list_of_bugs')) {
# We add or remove bugs based on the action choosen.
my $action = trim($cgi->param('action') || '');
$action =~ /^(add|remove)$/
|| ThrowCodeError('unknown_action', {'action' => $action});
# If we are removing bugs, then we must have an existing
# saved search selected.
if ($action eq 'remove') {
$query_name && ThrowUserError('no_bugs_to_remove');
}
ThrowUserError("no_bug_ids") unless scalar(keys %bug_ids);
if (!trim($query_name)) {
# No new query name has been given. We append new bug IDs
# to the existing list.
my %bug_ids;
unless ($query_name) {
# No new query name has been given. We retrieve bug IDs
# currently set in the selected saved search.
$query_name = $cgi->param('oldqueryname');
my $old_query = LookupNamedQuery($query_name);
foreach my $bug_id (split(/[\s,=]+/, $old_query)) {
$bug_ids{$bug_id} = 1 if detaint_natural($bug_id);
}
}
$new_query = "bug_id=" . join(',', sort {$a <=> $b} keys %bug_ids);
my $keep_bug = ($action eq 'add') ? 1 : 0;
my $changes = 0;
foreach my $bug_id (split(/[\s,]+/, $cgi->param('bug_ids'))) {
next unless $bug_id;
ValidateBugID($bug_id);
$bug_ids{$bug_id} = $keep_bug;
$changes = 1;
}
ThrowUserError('no_bug_ids', {'action' => $action}) unless $changes;
# Only keep bug IDs we want to add/keep. Disregard deleted ones.
my @bug_ids = grep { $bug_ids{$_} == 1 } keys %bug_ids;
# If the list is now empty, we could as well delete it completely.
ThrowUserError('no_bugs_in_list', {'saved_search' => $query_name})
unless scalar(@bug_ids);
$new_query = "bug_id=" . join(',', sort {$a <=> $b} @bug_ids);
$query_type = LIST_OF_BUGS;
}
my $tofooter = 1;
......
......@@ -15,28 +15,79 @@
#%]
[% IF user.id && user.settings.per_bug_queries.value == "on" %]
<script type="text/javascript">
<!--
function update_text() {
// 'lob' means list_of_bugs.
var lob_action = document.getElementById('lob_action');
var action = lob_action.options[lob_action.selectedIndex].value;
var text = document.getElementById('lob_direction');
var new_query_text = document.getElementById('lob_new_query_text');
if (action == "add") {
text.innerHTML = "to";
new_query_text.style.display = 'inline';
}
else {
text.innerHTML = "from";
new_query_text.style.display = 'none';
}
}
function manage_old_lists() {
var old_lists = document.getElementById('oldqueryname');
// If there is no saved searches available, returns.
if (!old_lists) return;
var new_query = document.getElementById('newqueryname').value;
if (new_query != "") {
old_lists.disabled = true;
}
else {
old_lists.disabled = false;
}
}
//-->
</script>
[%# Get existing lists of bugs for this user %]
[% lists_of_bugs = [] %]
[% FOREACH q = user.queries %]
[% NEXT UNLESS q.query_type == constants.LIST_OF_BUGS %]
[% lists_of_bugs.push(q.name) %]
[% END %]
<div id="links-special">
<div class="label">&nbsp;</div>
<div class="links">
<form action="buglist.cgi" method="get">
<hr>
<form id="list_of_bugs" action="buglist.cgi" method="get">
<input type="hidden" name="cmdtype" value="doit">
<input type="hidden" name="remtype" value="asnamed">
<input type="hidden" name="add_bugids" value="1">
<input type="submit" value="Add" id="add"> [% terms.bugs %]
<input type="text" name="bug_ids" size="8" maxlength="80"> to
[% foundq = 0 %]
[% FOREACH q = user.queries %]
[% NEXT UNLESS q.query_type == constants.LIST_OF_BUGS %]
[% IF !foundq %]
[% foundq = 1 %]
<select name="oldqueryname">
<input type="hidden" name="list_of_bugs" value="1">
<select id="lob_action" name="action" onchange="update_text();">
<option value="add">Add</option>
[% IF lists_of_bugs.size %]
<option value="remove">Remove</option>
[% END %]
<option value="[% q.name FILTER html %]">
[% q.name FILTER html %]</option>
</select>
[%+ terms.bugs %]
<input type="text" name="bug_ids" size="12" maxlength="80">
<span id="lob_direction">to</span>
[% IF lists_of_bugs.size %]
<select id="oldqueryname" name="oldqueryname">
[% FOREACH query = lists_of_bugs %]
<option value="[% query FILTER html %]">[% query FILTER html %]</option>
[% END %]
</select>
[% END %]
[% "</select> or to " IF foundq %]
the new saved search:
<input type="text" name="newqueryname" size="20" maxlength="64">
<span id="lob_new_query_text">
[% " or to" IF lists_of_bugs.size %] the new saved search:
<input type="text" id="newqueryname" name="newqueryname" size="20" maxlength="64"
onkeyup="manage_old_lists();">
</span>
<input type="submit" value="Commit" id="commit_list_of_bugs">
</form>
</div>
</div>
......
......@@ -1002,7 +1002,21 @@
[% ELSIF error == "no_bug_ids" %]
[% title = BLOCK %]No [% terms.Bugs %] Chosen[% END %]
You didn't choose any [% terms.bugs %] to add to the saved search.
You didn't choose any [% terms.bugs %] to
[% IF action == "add" %] add to [% ELSE %] remove from [% END %]
the saved search.
[% ELSIF error == "no_bugs_in_list" %]
[% title = "Delete Saved Search?" %]
You are going to remove all [% terms.bugs %] from the '[% saved_search FILTER html %]'
saved search. This will delete this saved search completely. Click
<a href="buglist.cgi?cmdtype=dorem&amp;remaction=forget&amp;namedcmd=
[%- saved_search FILTER url_quote %]">here</a> if you really want to
remove it.
[% ELSIF error == "no_bugs_to_remove" %]
[% title = "No Saved Search Selected" %]
You didn't select any saved search to remove [% terms.bugs %] from.
[% ELSIF error == "no_component_change_for_multiple_products" %]
[% title = "Action Not Permitted" %]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment