diff options
-rw-r--r-- | Bugzilla/Template.pm | 15 | ||||
-rw-r--r-- | t/011pod.t | 1 | ||||
-rw-r--r-- | template/en/default/search/boolean-charts.html.tmpl | 10 | ||||
-rw-r--r-- | template/en/default/search/search-report-select.html.tmpl | 2 |
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=""><none></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') %] |