aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Green <sgreen@redhat.com>2014-08-10 17:42:10 +1000
committerSimon Green <sgreen@redhat.com>2014-08-10 17:42:10 +1000
commitf4b9806c5ab5e63383269ef328643145ade66004 (patch)
tree3bc3f7918a1aa5c80387c69846de5e34b241fba7
parentBug 1046145: It is no longer possible to cancel an email address change when ... (diff)
downloadbugzilla-f4b9806c5ab5e63383269ef328643145ade66004.tar.gz
bugzilla-f4b9806c5ab5e63383269ef328643145ade66004.tar.bz2
bugzilla-f4b9806c5ab5e63383269ef328643145ade66004.zip
Bug 897915 - Field lists not sorted alphabetically
r=dkl, a=sgreen
-rw-r--r--Bugzilla/Template.pm15
-rw-r--r--t/011pod.t1
-rw-r--r--template/en/default/search/boolean-charts.html.tmpl10
-rw-r--r--template/en/default/search/search-report-select.html.tmpl2
4 files changed, 26 insertions, 2 deletions
diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm
index b36249b2f..52ccee593 100644
--- a/Bugzilla/Template.pm
+++ b/Bugzilla/Template.pm
@@ -611,6 +611,21 @@ $Template::Stash::LIST_OPS->{ clone } =
return [@$list];
};
+# Allow us to sort the list of fields correctly
+$Template::Stash::LIST_OPS->{ sort_by_field_name } =
+ sub {
+ sub field_name {
+ if ($_[0] eq 'noop') {
+ # Sort --- first
+ return '';
+ }
+ # Otherwise sort by field_desc or description
+ return $_[1]{$_[0]} || $_[0];
+ }
+ my ($list, $field_desc) = @_;
+ return [ sort { lc field_name($a, $field_desc) cmp lc field_name($b, $field_desc) } @$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/011pod.t b/t/011pod.t
index c3ec39898..fc66bca63 100644
--- a/t/011pod.t
+++ b/t/011pod.t
@@ -32,6 +32,7 @@ use constant SUB_WHITELIST => (
'Bugzilla::FlagType' => qr/^sqlify_criteria$/,
'Bugzilla::JobQueue' => qr/(?:^work_once|work_until_done|subprocess_worker)$/,
'Bugzilla::Search' => qr/^SPECIAL_PARSING$/,
+ 'Bugzilla::Template' => qr/^field_name$/,
);
# These modules do not need to be documented, generally because they
diff --git a/template/en/default/search/boolean-charts.html.tmpl b/template/en/default/search/boolean-charts.html.tmpl
index 901de0501..bfb4e7bf1 100644
--- a/template/en/default/search/boolean-charts.html.tmpl
+++ b/template/en/default/search/boolean-charts.html.tmpl
@@ -134,7 +134,15 @@
id="f[% cond_num FILTER html %]"
onchange="fix_query_string(this)"
class="custom_search_form_field">
- [% FOREACH field = fields %]
+ [%# Turn the array in to a hash with the name as the key %]
+ [%
+ field_hash = {};
+ FOREACH field IN fields;
+ field_hash.${field.name} = field;
+ END;
+ %]
+ [% FOREACH field_name = field_hash.keys.sort_by_field_name(field_descs) %]
+ [% field = field_hash.$field_name %]
<option value="[% field.name FILTER html %]"
[%~ ' selected="selected"' IF field.name == condition.f %]>
[% field_descs.${field.name} || field.description FILTER html %]
diff --git a/template/en/default/search/search-report-select.html.tmpl b/template/en/default/search/search-report-select.html.tmpl
index 93b4c44f8..40eeda1c1 100644
--- a/template/en/default/search/search-report-select.html.tmpl
+++ b/template/en/default/search/search-report-select.html.tmpl
@@ -17,7 +17,7 @@
<select name="[% name FILTER html %]">
<option value="">&lt;none&gt;</option>
- [% FOREACH field = report_columns.keys.sort %]
+ [% FOREACH field = report_columns.keys.sort_by_field_name(field_descs) %]
[% NEXT IF field == "classification" AND !Param('useclassification') %]
[% NEXT IF field == "target_milestone" AND !Param('usetargetmilestone') %]
[% NEXT IF field == "qa_contact" AND !Param('useqacontact') %]