From 3e4ca16191bcf1d07dbdc6c370491446fbf0f028 Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Thu, 1 Jul 2010 14:01:50 -0700 Subject: Bug 545766: Figure out what columns can be reported on from the database, instead of from a static list r=glob, a=mkanat --- Bugzilla/Search.pm | 28 ++++++++++++++++++++++ Bugzilla/Template.pm | 3 +++ report.cgi | 21 ++++------------ template/en/default/global/field-descs.none.tmpl | 3 +++ .../default/search/search-report-select.html.tmpl | 6 +---- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index e164e6332..90d22c38c 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -55,6 +55,8 @@ use Bugzilla::Keyword; use Date::Format; use Date::Parse; +use Storable qw(dclone); + # If you specify a search type in the boolean charts, this describes # which operator maps to which internal function here. use constant OPERATORS => { @@ -365,6 +367,32 @@ sub COLUMNS { return $cache->{search_columns}; } +sub REPORT_COLUMNS { + my $columns = dclone(COLUMNS); + # There's no reason to support reporting on unique fields. + # Also, some other fields don't make very good reporting axises, + # or simply don't work with the current reporting system. + my @no_report_columns = + qw(bug_id alias short_short_desc opendate changeddate + flagtypes.name keywords relevance); + + # Multi-select fields are not currently supported. + my @multi_selects = Bugzilla->get_fields( + { obsolete => 0, type => FIELD_TYPE_MULTI_SELECT }); + push(@no_report_columns, map { $_->name } @multi_selects); + + # If you're not a time-tracker, you can't use time-tracking + # columns. + if (!Bugzilla->user->is_timetracker) { + push(@no_report_columns, TIMETRACKING_FIELDS); + } + + foreach my $name (@no_report_columns) { + delete $columns->{$name}; + } + return $columns; +} + # Create a new Search # Note that the param argument may be modified by Bugzilla::Search sub new { diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index 00d7b6d28..a317bb7c7 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -44,6 +44,7 @@ use Bugzilla::Keyword; use Bugzilla::Util; use Bugzilla::User; use Bugzilla::Error; +use Bugzilla::Search; use Bugzilla::Status; use Bugzilla::Token; @@ -773,6 +774,8 @@ sub create { 'install_string' => \&Bugzilla::Install::Util::install_string, + 'report_columns' => \&Bugzilla::Search::REPORT_COLUMNS, + # These don't work as normal constants. DB_MODULE => \&Bugzilla::Constants::DB_MODULE, REQUIRED_MODULES => diff --git a/report.cgi b/report.cgi index 0537235fe..5d2679e1e 100755 --- a/report.cgi +++ b/report.cgi @@ -107,30 +107,17 @@ else { } # Valid bug fields that can be reported on. -my @columns = qw( - assigned_to - reporter - qa_contact - classification - version - keywords - target_milestone -); -# Single-select fields (custom or not) are also accepted as valid. -my @single_selects = Bugzilla->get_fields({ type => FIELD_TYPE_SINGLE_SELECT, - obsolete => 0 }); -push(@columns, map { $_->name } @single_selects); -my %valid_columns = map { $_ => 1 } @columns; +my $valid_columns = Bugzilla::Search::REPORT_COLUMNS; # Validate the values in the axis fields or throw an error. !$row_field - || ($valid_columns{$row_field} && trick_taint($row_field)) + || ($valid_columns->{$row_field} && trick_taint($row_field)) || ThrowCodeError("report_axis_invalid", {fld => "x", val => $row_field}); !$col_field - || ($valid_columns{$col_field} && trick_taint($col_field)) + || ($valid_columns->{$col_field} && trick_taint($col_field)) || ThrowCodeError("report_axis_invalid", {fld => "y", val => $col_field}); !$tbl_field - || ($valid_columns{$tbl_field} && trick_taint($tbl_field)) + || ($valid_columns->{$tbl_field} && trick_taint($tbl_field)) || ThrowCodeError("report_axis_invalid", {fld => "z", val => $tbl_field}); my @axis_fields = ($row_field || EMPTY_COLUMN, diff --git a/template/en/default/global/field-descs.none.tmpl b/template/en/default/global/field-descs.none.tmpl index 6b406431e..ee75efaa3 100644 --- a/template/en/default/global/field-descs.none.tmpl +++ b/template/en/default/global/field-descs.none.tmpl @@ -100,6 +100,7 @@ "actual_time" => "Actual Hours", "alias" => "Alias", "assigned_to" => "Assignee", + "assigned_to_realname" => "Assignee Real Name", "attach_data.thedata" => "Attachment data", "attachments.description" => "Attachment description", "attachments.filename" => "Attachment filename", @@ -143,10 +144,12 @@ "product_id" => "Product ID", "product" => "Product", "qa_contact" => "QA Contact", + "qa_contact_realname" => "QA Contact Real Name", "remaining_time" => "Hours Left", "rep_platform" => "Hardware", "reporter" => "Reporter", "reporter_accessible" => "Reporter accessible", + "reporter_realname" => "Reporter Real Name", "requestees.login_name" => "Flag Requestee", "resolution" => "Resolution", "see_also" => "See Also", diff --git a/template/en/default/search/search-report-select.html.tmpl b/template/en/default/search/search-report-select.html.tmpl index 2ad779248..5e5db06e2 100644 --- a/template/en/default/search/search-report-select.html.tmpl +++ b/template/en/default/search/search-report-select.html.tmpl @@ -26,16 +26,12 @@ [% PROCESS "global/field-descs.none.tmpl" %] [% BLOCK select %] - [% rep_fields = ["classification", "product", "component", "version", "rep_platform", - "op_sys", "bug_status", "resolution", "bug_severity", - "priority", "target_milestone", "assigned_to", - "reporter", "qa_contact" ] %] [% Hook.process('rep_fields', 'search/search-report-select.html.tmpl') %]