]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 545766: Figure out what columns can be reported on from the database,
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 1 Jul 2010 21:01:50 +0000 (14:01 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 1 Jul 2010 21:01:50 +0000 (14:01 -0700)
instead of from a static list
r=glob, a=mkanat

Bugzilla/Search.pm
Bugzilla/Template.pm
report.cgi
template/en/default/global/field-descs.none.tmpl
template/en/default/search/search-report-select.html.tmpl

index e164e633213346620947ceef179f466cefc4a276..90d22c38c932327dadc36f22257909318cc7adb0 100644 (file)
@@ -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 {
index 00d7b6d288cfb54ad930040f6fc451b8129b87cd..a317bb7c708577a90589c0090accc24ce861c089 100644 (file)
@@ -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 => 
index 0537235fe78e9861a1266397124f94da86b5a92b..5d2679e1ef7e3f55b644c4bdc4c6de03a33b0c1f 100755 (executable)
@@ -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, 
index 6b406431e40b980884752dce5fa869c3004536bf..ee75efaa3a39e7c498dc85f92300cdd27463fac0 100644 (file)
      "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",
      "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",
index 2ad7792487f36a176a15d9ab1c314f63af98da62..5e5db06e284148f187667952adb766c30ba4a367 100644 (file)
 [% 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') %]
 
   <select name="[% name FILTER html %]">
     <option value="">&lt;none&gt;</option>
     
-    [% FOREACH field = rep_fields %]
+    [% FOREACH field = report_columns.keys.sort %]
       [% NEXT IF field == "classification" AND !Param('useclassification') %]
       [% NEXT IF field == "target_milestone" AND !Param('usetargetmilestone') %]
       [% NEXT IF field == "qa_contact" AND !Param('useqacontact') %]