Commit 46e5d925 authored by Frédéric Buclin's avatar Frédéric Buclin

Bug 718289: The deadline field should be visible by non-members of the timetracking group

r=dkl a=LpSolit
parent ccf2d3e5
......@@ -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;
......
......@@ -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;
......
......@@ -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);
......
......@@ -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<string> The login name of the person who filed this bug (the reporter).
C<string> The day that this bug is due to be completed, in the format
C<YYYY-MM-DD>.
If you are not in the time-tracking group, this field will not be included
in the return value.
=item C<depends_on>
C<array> of C<int>s. The ids of bugs that this bug "depends on".
......
......@@ -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.
......
......@@ -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
......
......@@ -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 = (
......
......@@ -1174,7 +1174,8 @@
Users who belong to the group specified by the <quote>timetrackinggroup</quote>
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.
</para>
<para>
......
......@@ -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;
......
......@@ -111,7 +111,7 @@ if ($cgi->param("field")) {
}
unless ($user->is_timetracker) {
@fieldlist = grep($_ !~ /(^deadline|_time)$/, @fieldlist);
@fieldlist = grep($_ !~ /_time$/, @fieldlist);
}
foreach (@fieldlist) {
......
......@@ -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" %]
</tr>
[% END %]
[% IF Param("timetrackinggroup") && bug.deadline %]
[% INCLUDE bug/field.html.tmpl field = bug_fields.deadline, value = bug.deadline, editable = 0 %]
[% END %]
[% END %]
[%############################################################################%]
......
......@@ -233,6 +233,8 @@
</table>
</td>
</tr>
[% END %]
[% IF Param("timetrackinggroup") && bug.deadline %]
[% PROCESS row cell="deadline" %]
[% END %]
......
......@@ -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');
</div>
[% END %]
[%# Deadline %]
[% IF user.is_timetracker %]
[% IF Param('timetrackinggroup') %]
<div class="search_field_row">
[% INCLUDE "search/field.html.tmpl"
field = bug_fields.deadline
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment