# A custom list of columns. Make sure each column is valid.
foreach my $fragment (split(/,/, $order)) {
$fragment = trim($fragment);
+ next unless $fragment;
# Accept an order fragment matching a column name, with
# asc|desc optionally following (to specify the direction)
if (grep($fragment =~ /^\Q$_\E(\s+(asc|desc))?$/, @columnnames, keys(%$columns))) {
$order = join(",", @order);
# Now that we have checked that all columns in the order are valid,
# detaint the order string.
- trick_taint($order);
+ trick_taint($order) if $order;
};
}
}
-else {
+
+if (!$order) {
# DEFAULT
$order = "bugs.bug_status, bugs.priority, map_assigned_to.login_name, bugs.bug_id";
}
[% IF sorted_by_relevance %]
ID
[% ELSE %]
+ [% desc = '' %]
+ [% IF (om = order.match("^bugs\.bug_id( desc)?")) %]
+ [% desc = ' desc' IF NOT om.0 %]
+ [% END %]
<a href="buglist.cgi?
- [% urlquerypart FILTER html %]&order=bugs.bug_id
+ [% urlquerypart FILTER html %]&order=bugs.bug_id[% desc FILTER url_quote %]
[%-#%]&query_based_on=
[% defaultsavename OR searchname FILTER url_quote %]">ID</a>
[% END %]
[%# Other columns may sort on their name directly. %]
[% column.sortalias = column.name %]
[% END %]
+ [% desc = '' %]
+ [% IF (om = order.match("$column.sortalias( desc)?")) %]
+ [% desc = ' desc' IF NOT om.0 %]
+ [% END %]
+ [% order = order.remove("$column.sortalias( desc)?,?") %]
<a href="buglist.cgi?[% urlquerypart FILTER html %]&order=
- [% column.sortalias FILTER url_quote %]
+ [% column.sortalias FILTER url_quote %][% desc FILTER url_quote %]
[% ",$order" FILTER url_quote IF order %]
[%-#%]&query_based_on=
[% defaultsavename OR searchname FILTER url_quote %]">