From: mkanat%bugzilla.org <> Date: Mon, 9 Nov 2009 19:09:03 +0000 (+0000) Subject: Bug 524669: Allow every simple field in fielddefs to be specified directly in search... X-Git-Tag: bugzilla-3.5.2~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6ead1a2575509273484fd9c3a9186ebec2f338b8;p=thirdparty%2Fbugzilla.git Bug 524669: Allow every simple field in fielddefs to be specified directly in search URLs. Patch by Max Kanat-Alexander r=gerv, a=mkanat --- diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 6c2e648bf2..6e22eb7933 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 9ba7a8c42f..fa18a0e787 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; diff --git a/query.cgi b/query.cgi index d07773bde3..fd18bab67a 100755 --- a/query.cgi +++ b/query.cgi @@ -266,10 +266,8 @@ $vars->{'resolution'} = Bugzilla::Field->new({name => 'resolution'})->legal_valu my @fields = Bugzilla->get_fields({ obsolete => 0 }); # If we're not in the time-tracking group, exclude time-tracking fields. -if (!Bugzilla->user->in_group(Bugzilla->params->{'timetrackinggroup'})) { - foreach my $tt_field (qw(estimated_time remaining_time work_time - percentage_complete deadline)) - { +if (!Bugzilla->user->is_timetracker) { + foreach my $tt_field (TIMETRACKING_FIELDS) { @fields = grep($_->name ne $tt_field, @fields); } }