summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrédéric Buclin <LpSolit@gmail.com>2012-11-26 20:20:29 +0100
committerFrédéric Buclin <LpSolit@gmail.com>2012-11-26 20:20:29 +0100
commit46e5d925026ccde28118bfcf28061c75f188b066 (patch)
treed9d95ff2e945ba67f1b8368cc33d24e38cd5dc6f
parentccf2d3e5e476ce72cb95894b68358950bfa1d24b (diff)
downloadbugzilla-46e5d925026ccde28118bfcf28061c75f188b066.tar.gz
bugzilla-46e5d925026ccde28118bfcf28061c75f188b066.tar.xz
Bug 718289: The deadline field should be visible by non-members of the timetracking group
r=dkl a=LpSolit
-rw-r--r--Bugzilla/Bug.pm11
-rw-r--r--Bugzilla/Constants.pm3
-rw-r--r--Bugzilla/Search.pm3
-rw-r--r--Bugzilla/WebService/Bug.pm11
-rwxr-xr-xbuglist.cgi8
-rwxr-xr-xcolchange.cgi1
-rwxr-xr-xconfig.cgi4
-rw-r--r--docs/en/xml/using.xml3
-rwxr-xr-xquery.cgi6
-rwxr-xr-xshow_bug.cgi2
-rw-r--r--template/en/default/bug/edit.html.tmpl9
-rw-r--r--template/en/default/bug/show-multiple.html.tmpl2
-rw-r--r--template/en/default/search/form.html.tmpl5
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<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".
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 <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>
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" %]
</tr>
[% 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 @@
</table>
</td>
</tr>
+ [% 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');
</div>
[% END %]
- [%# Deadline %]
- [% IF user.is_timetracker %]
+ [% IF Param('timetrackinggroup') %]
<div class="search_field_row">
[% INCLUDE "search/field.html.tmpl"
field = bug_fields.deadline