From 6ead1a2575509273484fd9c3a9186ebec2f338b8 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Mon, 9 Nov 2009 19:09:03 +0000 Subject: Bug 524669: Allow every simple field in fielddefs to be specified directly in search URLs. Patch by Max Kanat-Alexander r=gerv, a=mkanat --- Bugzilla/Constants.pm | 8 ++++++++ Bugzilla/Search.pm | 41 ++++++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 21 deletions(-) (limited to 'Bugzilla') diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 6c2e648bf..6e22eb793 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -126,6 +126,8 @@ use File::Basename; FIELD_TYPE_BUG_ID FIELD_TYPE_BUG_URLS + TIMETRACKING_FIELDS + USAGE_MODE_BROWSER USAGE_MODE_CMDLINE USAGE_MODE_XMLRPC @@ -358,6 +360,12 @@ use constant FIELD_TYPE_DATETIME => 5; use constant FIELD_TYPE_BUG_ID => 6; use constant FIELD_TYPE_BUG_URLS => 7; +# The fields from fielddefs that are blocked from non-timetracking users. +# work_time is sometimes called actual_time. +use constant TIMETRACKING_FIELDS => + qw(estimated_time remaining_time work_time actual_time + percentage_complete deadline); + # The maximum number of days a token will remain valid. use constant MAX_TOKEN_AGE => 3; # How many days a logincookie will remain valid if not used. diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 9ba7a8c42..fa18a0e78 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -328,27 +328,30 @@ sub init { } } - my @legal_fields = ("product", "version", "assigned_to", "reporter", - "component", "classification", "target_milestone", - "bug_group"); - - # Include custom select fields. - push(@legal_fields, map { $_->name } @select_fields); - push(@legal_fields, map { $_->name } @multi_select_fields); - - foreach my $field ($params->param()) { - if (lsearch(\@legal_fields, $field) != -1) { - push(@specialchart, [$field, "anyexact", - join(',', $params->param($field))]); + # All fields that don't have a . in their name should be specifyable + # in the URL directly. + my @legal_fields = grep { $_->name !~ /\./ } Bugzilla->get_fields; + if (!$user->is_timetracker) { + foreach my $field (TIMETRACKING_FIELDS) { + @legal_fields = grep { $_->name ne $field } @legal_fields; } } - if ($params->param('keywords')) { - my $t = $params->param('keywords_type'); - if (!$t || $t eq "or") { - $t = "anywords"; + foreach my $field ($params->param()) { + if (grep { $_->name eq $field } @legal_fields) { + my $type = $params->param("${field}_type"); + if (!$type) { + if ($field eq 'keywords') { + $type = 'anywords'; + } + else { + $type = 'anyexact'; + } + } + $type = 'matches' if $field eq 'content'; + push(@specialchart, [$field, $type, + join(',', $params->param($field))]); } - push(@specialchart, ["keywords", $t, $params->param('keywords')]); } foreach my $id ("1", "2") { @@ -574,10 +577,6 @@ sub init { } } - if (defined $params->param('content')) { - push(@specialchart, ['content', 'matches', $params->param('content')]); - } - my $multi_fields = join('|', map($_->name, @multi_select_fields)); my $chartid; -- cgit v1.2.3-24-g4f1b