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

r=dkl a=LpSolit
trunk
Frédéric Buclin 2012-11-26 20:20:29 +01:00
parent 7ee590fa2c
commit 951d16e861
13 changed files with 34 additions and 34 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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".

View File

@ -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.

View File

@ -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

View File

@ -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 = (

View File

@ -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>

View File

@ -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;

View File

@ -111,7 +111,7 @@ if ($cgi->param("field")) {
}
unless ($user->is_timetracker) {
@fieldlist = grep($_ !~ /(^deadline|_time)$/, @fieldlist);
@fieldlist = grep($_ !~ /_time$/, @fieldlist);
}
foreach (@fieldlist) {

View File

@ -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 %]
[%############################################################################%]

View File

@ -233,6 +233,8 @@
</table>
</td>
</tr>
[% END %]
[% IF Param("timetrackinggroup") && bug.deadline %]
[% PROCESS row cell="deadline" %]
[% END %]

View File

@ -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