summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/Template.pm7
-rw-r--r--t/008filter.t2
-rw-r--r--template/en/default/admin/components/create.html.tmpl3
-rw-r--r--template/en/default/bug/create/create.html.tmpl32
-rw-r--r--template/en/default/bug/edit.html.tmpl1
-rw-r--r--template/en/default/global/userselect.html.tmpl27
-rw-r--r--template/en/default/list/edit-multiple.html.tmpl2
7 files changed, 57 insertions, 17 deletions
diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm
index fbddbb395..3141c8a4c 100644
--- a/Bugzilla/Template.pm
+++ b/Bugzilla/Template.pm
@@ -391,6 +391,13 @@ $Template::Stash::LIST_OPS->{ containsany } =
return 0;
};
+# Clone the array reference to leave the original one unaltered.
+$Template::Stash::LIST_OPS->{ clone } =
+ sub {
+ my $list = shift;
+ return [@$list];
+ };
+
# Allow us to still get the scalar if we use the list operation ".0" on it,
# as we often do for defaults in query.cgi and other places.
$Template::Stash::SCALAR_OPS->{ 0 } =
diff --git a/t/008filter.t b/t/008filter.t
index d999e2008..9a53ced93 100644
--- a/t/008filter.t
+++ b/t/008filter.t
@@ -211,7 +211,7 @@ sub directive_ok {
return 1 if $directive =~ /^(time2str|url)\(/;
# Safe Template Toolkit virtual methods
- return 1 if $directive =~ /\.(length$|size$|push\()/;
+ return 1 if $directive =~ /\.(length$|size$|push\(|delete\()/;
# Special Template Toolkit loop variable
return 1 if $directive =~ /^loop\.(index|count)$/;
diff --git a/template/en/default/admin/components/create.html.tmpl b/template/en/default/admin/components/create.html.tmpl
index 86411adad..0949837fc 100644
--- a/template/en/default/admin/components/create.html.tmpl
+++ b/template/en/default/admin/components/create.html.tmpl
@@ -52,7 +52,6 @@
[% INCLUDE global/userselect.html.tmpl
name => "initialowner"
id => "initialowner"
- value => ""
size => 64
%]
</td>
@@ -65,7 +64,6 @@
[% INCLUDE global/userselect.html.tmpl
name => "initialqacontact"
id => "initialqacontact"
- value => ""
size => 64
emptyok => 1
%]
@@ -80,7 +78,6 @@
[% INCLUDE global/userselect.html.tmpl
name => "initialcc"
id => "initialcc"
- value => ""
size => 64
multiple => 5
%]
diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl
index 089292603..5b99d38ba 100644
--- a/template/en/default/bug/create/create.html.tmpl
+++ b/template/en/default/bug/create/create.html.tmpl
@@ -206,11 +206,23 @@ function handleWantsAttachment(wants_attachment) {
</th>
<td>
<select name="component" onchange="set_assign_to();" size="7">
+ [%# Build the lists of assignees and QA contacts if "usemenuforusers" is enabled. %]
+ [% IF Param("usemenuforusers") %]
+ [% assignees_list = user.get_userlist.clone %]
+ [% qa_contacts_list = user.get_userlist.clone %]
+ [% END %]
+
[%- FOREACH c = product.components %]
<option value="[% c.name FILTER html %]"
[% " selected=\"selected\"" IF c.name == default.component_ %]>
[% c.name FILTER html -%]
</option>
+ [% IF Param("usemenuforusers") %]
+ [% INCLUDE build_userlist default_user = c.default_assignee,
+ userlist = assignees_list %]
+ [% INCLUDE build_userlist default_user = c.default_qa_contact,
+ userlist = qa_contacts_list %]
+ [% END %]
[%- END %]
</select>
</td>
@@ -352,6 +364,7 @@ function handleWantsAttachment(wants_attachment) {
disabled => assigned_to_disabled
size => 30
emptyok => 1
+ custom_userlist => assignees_list
%]
<noscript>(Leave blank to assign to component's default assignee)</noscript>
</td>
@@ -367,6 +380,7 @@ function handleWantsAttachment(wants_attachment) {
disabled => qa_contact_disabled
size => 30
emptyok => 1
+ custom_userlist => qa_contacts_list
%]
<noscript>(Leave blank to assign to default qa contact)</noscript>
</td>
@@ -651,3 +665,21 @@ function handleWantsAttachment(wants_attachment) {
[% END %]
</td>
[% END %]
+
+[% BLOCK build_userlist %]
+ [% user_found = 0 %]
+ [% default_login = default_user.login %]
+ [% RETURN UNLESS default_login %]
+
+ [% FOREACH user = userlist %]
+ [% IF user.login == default_login %]
+ [% user_found = 1 %]
+ [% LAST %]
+ [% END %]
+ [% END %]
+
+ [% userlist.push({login => default_login,
+ identity => default_user.identity,
+ visible => 1})
+ UNLESS user_found %]
+[% END %]
diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl
index 73efa0b6c..4cb5017e1 100644
--- a/template/en/default/bug/edit.html.tmpl
+++ b/template/en/default/bug/edit.html.tmpl
@@ -871,7 +871,6 @@
[% INCLUDE global/userselect.html.tmpl
id => "newcc"
name => "newcc"
- value => ""
size => 30
multiple => 5
%]
diff --git a/template/en/default/global/userselect.html.tmpl b/template/en/default/global/userselect.html.tmpl
index e27ca0d6f..35075ef9d 100644
--- a/template/en/default/global/userselect.html.tmpl
+++ b/template/en/default/global/userselect.html.tmpl
@@ -11,6 +11,7 @@
# The Original Code is the Bugzilla Bug Tracking System.
#
# Contributor(s): Byron Jones <bugzilla@glob.com.au>
+ # Frédéric Buclin <LpSolit@gmail.com>
#%]
[%# INTERFACE:
@@ -23,7 +24,6 @@
# size: optional, input only; size attribute value
# emptyok: optional, select only; if true, prepend menu option to start of select
# multiple: optional, do multiselect box, value is size (height) of box
- # do_not_change: optional, contains the string meaning "do not alter this role"
# custom_userlist: optional, specify a limited list of users to use
#%]
@@ -39,27 +39,34 @@
<option value=""></option>
[% END %]
- [% IF do_not_change %]
- <option value="[% do_not_change FILTER html %]">
- [% do_not_change FILTER html %]
- </option>
- [% END %]
-
[% UNLESS custom_userlist %]
[% custom_userlist = user.get_userlist %]
[% END %]
[% SET selected = {} %]
- [% FOREACH selected_value IN value.split(', ') %]
- [% SET selected.$selected_value = 1 %]
+ [% IF value.defined %]
+ [% FOREACH selected_value IN value.split(', ') %]
+ [% SET selected.$selected_value = 1 %]
+ [% END %]
[% END %]
+
[% FOREACH tmpuser = custom_userlist %]
[% IF tmpuser.visible OR selected.${tmpuser.login} == 1 %]
<option value="[% tmpuser.login FILTER html %]"
- [% " selected=\"selected\"" IF selected.${tmpuser.login} == 1 %]
+ [% IF selected.${tmpuser.login} == 1 %]
+ selected="selected"
+ [%# A user account appears only once. Remove it from the list, so that
+ # we know if there are some selected accounts which have not been listed. %]
+ [% selected.delete(tmpuser.login) %]
+ [% END %]
>[% tmpuser.identity FILTER html %]</option>
[% END %]
[% END %]
+
+ [%# If the list is not empty, this means some accounts have not been mentioned yet. %]
+ [% FOREACH selected_user = selected.keys %]
+ <option value="[% selected_user FILTER html %]" selected="selected">[% selected_user FILTER html %]</option>
+ [% END %]
</select>
[% ELSE %]
<input
diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl
index d49709dbc..9fa5a1088 100644
--- a/template/en/default/list/edit-multiple.html.tmpl
+++ b/template/en/default/list/edit-multiple.html.tmpl
@@ -173,7 +173,6 @@
id => "assigned_to"
name => "assigned_to"
value => dontchange
- do_not_change => dontchange
size => 32
%]
<input type="checkbox" id="set_default_assignee" name="set_default_assignee" value="1">
@@ -189,7 +188,6 @@
id => "qa_contact"
name => "qa_contact"
value => dontchange
- do_not_change => dontchange
size => 32
%]
<input type="checkbox" id="set_default_qa_contact" name="set_default_qa_contact" value="1">