push @supptables, "components AS map_components";
push @wherepart, "bugs.component_id = map_components.id";
}
-
+
+ if (grep($_ =~ /AS (actual_time|percentage_complete)$/, @$fieldsref)) {
+ push(@supptables, "longdescs AS ldtime");
+ push(@wherepart, "ldtime.bug_id = bugs.bug_id");
+ }
+
my $minvotes;
if (defined $params->param('votes')) {
my $c = trim($params->param('votes'));
push(@specialchart, ["keywords", $t, $params->param('keywords')]);
}
- if (lsearch($fieldsref, "(SUM(ldtime.work_time)*COUNT(DISTINCT ldtime.bug_when)/COUNT(bugs.bug_id)) AS actual_time") != -1) {
- push(@supptables, "longdescs AS ldtime");
- push(@wherepart, "ldtime.bug_id = bugs.bug_id");
- }
-
foreach my $id ("1", "2") {
if (!defined ($params->param("email$id"))) {
next;
# Add order columns to selectnames
# The fragment has already been validated
$fragment =~ s/\s+(asc|desc)$//;
- $fragment =~ tr/a-zA-Z\.0-9\-_//cd;
+ # This fixes an issue where columns being used in the ORDER BY statement
+ # can have the SQL that generates the value changed to become invalid -
+ # mainly affects time tracking.
+ if ($fragment =~ / AS (\w+)/) {
+ $fragment = $columns->{$1}->{'name'};
+ }
+ else {
+ $fragment =~ tr/a-zA-Z\.0-9\-_//cd;
+ }
push @selectnames, $fragment;
}
}