From 46e5d925026ccde28118bfcf28061c75f188b066 Mon Sep 17 00:00:00 2001 From: Frédéric Buclin Date: Mon, 26 Nov 2012 20:20:29 +0100 Subject: Bug 718289: The deadline field should be visible by non-members of the timetracking group r=dkl a=LpSolit --- Bugzilla/Bug.pm | 11 +++++------ Bugzilla/Constants.pm | 3 +-- Bugzilla/Search.pm | 3 +-- Bugzilla/WebService/Bug.pm | 11 ++++------- buglist.cgi | 8 +++----- colchange.cgi | 1 + config.cgi | 4 +++- docs/en/xml/using.xml | 3 ++- query.cgi | 6 +++--- show_bug.cgi | 2 +- template/en/default/bug/edit.html.tmpl | 9 ++++++--- template/en/default/bug/show-multiple.html.tmpl | 2 ++ template/en/default/search/form.html.tmpl | 5 ++--- 13 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index b72a8fcdb..7a3ec4c8a 100644 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -3734,9 +3734,7 @@ sub editable_bug_fields { # Custom multi-select fields are not stored in the bugs table. splice(@fields, $location, 1) if ($location > -1); } - # Sorted because the old @::log_columns variable, which this replaces, - # was sorted. - return sort(@fields); + return @fields; } # XXX - When Bug::update() will be implemented, we should make this routine @@ -4048,9 +4046,10 @@ sub check_can_change_field { # $PrivilegesRequired = PRIVILEGES_REQUIRED_REPORTER : the reporter, assignee or an empowered user; # $PrivilegesRequired = PRIVILEGES_REQUIRED_ASSIGNEE : the assignee or an empowered user; # $PrivilegesRequired = PRIVILEGES_REQUIRED_EMPOWERED : an empowered user. - - # Only users in the time-tracking group can change time-tracking fields. - if ( grep($_ eq $field, TIMETRACKING_FIELDS) ) { + + # Only users in the time-tracking group can change time-tracking fields, + # including the deadline. + if (grep { $_ eq $field } (TIMETRACKING_FIELDS, 'deadline')) { if (!$user->is_timetracker) { $$PrivilegesRequired = PRIVILEGES_REQUIRED_EMPOWERED; return 0; diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 514c81143..dbb1edf74 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -399,8 +399,7 @@ use constant ABNORMAL_SELECTS => { # 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); + qw(estimated_time remaining_time work_time actual_time percentage_complete); # The maximum number of days a token will remain valid. use constant MAX_TOKEN_AGE => 3; diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 3d09def65..401d2f2af 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -1475,9 +1475,8 @@ sub _special_parse_chfield { sub _special_parse_deadline { my ($self) = @_; - return if !$self->_user->is_timetracker; my $params = $self->_params; - + my $clause = new Bugzilla::Search::Clause(); if (my $from = $params->{'deadlinefrom'}) { $clause->add('deadline', 'greaterthaneq', $from); diff --git a/Bugzilla/WebService/Bug.pm b/Bugzilla/WebService/Bug.pm index 7a29d325f..f4cb53600 100644 --- a/Bugzilla/WebService/Bug.pm +++ b/Bugzilla/WebService/Bug.pm @@ -418,7 +418,7 @@ sub search { delete $params->{WHERE}; unless (Bugzilla->user->is_timetracker) { - delete $params->{$_} foreach qw(estimated_time remaining_time deadline); + delete $params->{$_} foreach TIMETRACKING_FIELDS; } # Do special search types for certain fields. @@ -851,6 +851,9 @@ sub _bug_to_hash { classification => $self->type('string', $bug->classification), component => $self->type('string', $bug->component), creation_time => $self->type('dateTime', $bug->creation_ts), + # No need to format $bug->deadline specially, because Bugzilla::Bug + # already does it for us. + deadline => $self->type('string', $bug->deadline), id => $self->type('int', $bug->bug_id), is_confirmed => $self->type('boolean', $bug->everconfirmed), last_change_time => $self->type('dateTime', $bug->delta_ts), @@ -943,9 +946,6 @@ sub _bug_to_hash { if (Bugzilla->user->is_timetracker) { $item{'estimated_time'} = $self->type('double', $bug->estimated_time); $item{'remaining_time'} = $self->type('double', $bug->remaining_time); - # No need to format $bug->deadline specially, because Bugzilla::Bug - # already does it for us. - $item{'deadline'} = $self->type('string', $bug->deadline); $item{'actual_time'} = $self->type('double', $bug->actual_time); } @@ -1782,9 +1782,6 @@ C The login name of the person who filed this bug (the reporter). C The day that this bug is due to be completed, in the format C. -If you are not in the time-tracking group, this field will not be included -in the return value. - =item C C of Cs. The ids of bugs that this bug "depends on". diff --git a/buglist.cgi b/buglist.cgi index 5a8dcb6fd..a59f0ee18 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -522,11 +522,9 @@ else { # Remove the timetracking columns if they are not a part of the group # (happens if a user had access to time tracking and it was revoked/disabled) if (!$user->is_timetracker) { - @displaycolumns = grep($_ ne 'estimated_time', @displaycolumns); - @displaycolumns = grep($_ ne 'remaining_time', @displaycolumns); - @displaycolumns = grep($_ ne 'actual_time', @displaycolumns); - @displaycolumns = grep($_ ne 'percentage_complete', @displaycolumns); - @displaycolumns = grep($_ ne 'deadline', @displaycolumns); + foreach my $tt_field (TIMETRACKING_FIELDS) { + @displaycolumns = grep($_ ne $tt_field, @displaycolumns); + } } # Remove the relevance column if the user is not doing a fulltext search. diff --git a/colchange.cgi b/colchange.cgi index 0aa6c7cba..66b661e5a 100755 --- a/colchange.cgi +++ b/colchange.cgi @@ -26,6 +26,7 @@ use constant COLUMN_PARAMS => { 'usetargetmilestone' => ['target_milestone'], 'useqacontact' => ['qa_contact', 'qa_contact_realname'], 'usestatuswhiteboard' => ['status_whiteboard'], + 'timetrackinggroup' => ['deadline'], }; # We only show these columns if an object of this type exists in the diff --git a/config.cgi b/config.cgi index c4f64a007..4c0881a11 100755 --- a/config.cgi +++ b/config.cgi @@ -100,7 +100,9 @@ $vars->{'closed_status'} = \@closed_status; my @fields = @{Bugzilla::Field->match({obsolete => 0})}; # Exclude fields the user cannot query. if (!$user->is_timetracker) { - @fields = grep { $_->name !~ /^(estimated_time|remaining_time|work_time|percentage_complete|deadline)$/ } @fields; + foreach my $tt_field (TIMETRACKING_FIELDS) { + @fields = grep { $_->name ne $tt_field } @fields; + } } my %FIELD_PARAMS = ( diff --git a/docs/en/xml/using.xml b/docs/en/xml/using.xml index 18d536bc9..88a87f0fc 100644 --- a/docs/en/xml/using.xml +++ b/docs/en/xml/using.xml @@ -1174,7 +1174,8 @@ Users who belong to the group specified by the timetrackinggroup parameter have access to time-related fields. Developers can see deadlines and estimated times to fix bugs, and can provide time spent - on these bugs. + on these bugs. Users who do not belong to this group can only see the deadline, + but not edit it. Other time-related fields remain invisible to them. diff --git a/query.cgi b/query.cgi index 29e278c6d..b62f77b53 100755 --- a/query.cgi +++ b/query.cgi @@ -190,9 +190,9 @@ foreach my $val (editable_bug_fields()) { if ($user->is_timetracker) { push @chfields, "work_time"; } else { - @chfields = grep($_ ne "deadline", @chfields); - @chfields = grep($_ ne "estimated_time", @chfields); - @chfields = grep($_ ne "remaining_time", @chfields); + foreach my $tt_field (TIMETRACKING_FIELDS) { + @chfields = grep($_ ne $tt_field, @chfields); + } } @chfields = (sort(@chfields)); $vars->{'chfield'} = \@chfields; diff --git a/show_bug.cgi b/show_bug.cgi index f84bfc531..7b9157959 100755 --- a/show_bug.cgi +++ b/show_bug.cgi @@ -111,7 +111,7 @@ if ($cgi->param("field")) { } unless ($user->is_timetracker) { - @fieldlist = grep($_ !~ /(^deadline|_time)$/, @fieldlist); + @fieldlist = grep($_ !~ /_time$/, @fieldlist); } foreach (@fieldlist) { diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl index de9afb56c..0eefc1b48 100644 --- a/template/en/default/bug/edit.html.tmpl +++ b/template/en/default/bug/edit.html.tmpl @@ -65,8 +65,8 @@ [% PROCESS section_spacer %] - [%# *** severity, priority, version and milestone *** %] - [% PROCESS section_details2 %] + [%# *** severity, priority, version, milestone, and deadline *** %] + [% PROCESS section_details2 %] [%# *** assigned to and qa contact *** %] [% PROCESS section_people %] @@ -355,7 +355,10 @@ [% PROCESS select selname = "target_milestone" %] [% END %] - + + [% IF Param("timetrackinggroup") && bug.deadline %] + [% INCLUDE bug/field.html.tmpl field = bug_fields.deadline, value = bug.deadline, editable = 0 %] + [% END %] [% END %] [%############################################################################%] diff --git a/template/en/default/bug/show-multiple.html.tmpl b/template/en/default/bug/show-multiple.html.tmpl index 7207e8cf9..a20daedfa 100644 --- a/template/en/default/bug/show-multiple.html.tmpl +++ b/template/en/default/bug/show-multiple.html.tmpl @@ -233,6 +233,8 @@ + [% END %] + [% IF Param("timetrackinggroup") && bug.deadline %] [% PROCESS row cell="deadline" %] [% END %] diff --git a/template/en/default/search/form.html.tmpl b/template/en/default/search/form.html.tmpl index 48980b633..6ced46236 100644 --- a/template/en/default/search/form.html.tmpl +++ b/template/en/default/search/form.html.tmpl @@ -114,7 +114,7 @@ TUI_hide_default('information_query'); [%+ field_descs.longdesc FILTER html %]s, [%+ field_descs.bug_file_loc FILTER html %], [% IF Param('usestatuswhiteboard') %] [%+ field_descs.status_whiteboard FILTER html %], [%+ END %] [% IF use_keywords %] [%+ field_descs.keywords FILTER html %], [%+ END %] - [% IF user.is_timetracker %] [%+ field_descs.deadline FILTER html %], [%+ END %] + [% IF Param('timetrackinggroup') %] [%+ field_descs.deadline FILTER html %], [%+ END %] [% terms.Bug %] Numbers, [%+ field_descs.version FILTER html %], [% IF Param('usetargetmilestone') %] [%+ field_descs.target_milestone FILTER html %], [%+ END %] [% field_descs.bug_severity FILTER html %], [%+ field_descs.priority FILTER html %], [%+ field_descs.rep_platform FILTER html %], @@ -153,8 +153,7 @@ TUI_hide_default('information_query'); [% END %] - [%# Deadline %] - [% IF user.is_timetracker %] + [% IF Param('timetrackinggroup') %]
[% INCLUDE "search/field.html.tmpl" field = bug_fields.deadline -- cgit v1.2.3-24-g4f1b