From 78dc6d4f6edded4e3d91432c36a8369c901f8d7a Mon Sep 17 00:00:00 2001
From: Vitaliy Filippov
Date: Wed, 4 Mar 2015 13:34:40 +0300
Subject: [PATCH] Add separate parameters for "Period Worktime" column, remove
usage of global variables
---
Bugzilla/Search.pm | 47 +++++++++++--------
buglist.cgi | 8 ++--
colchange.cgi | 12 ++++-
js/change-columns.js | 3 ++
.../en/default/list/change-columns.html.tmpl | 16 ++++++-
.../en/default/worktime/supertime.html.tmpl | 22 +++++++--
6 files changed, 79 insertions(+), 29 deletions(-)
diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm
index 08af3e458..f565e8646 100644
--- a/Bugzilla/Search.pm
+++ b/Bugzilla/Search.pm
@@ -1287,15 +1287,35 @@ sub init
}
}
- $Bugzilla::Search::interval_from = undef;
- $Bugzilla::Search::interval_to = undef;
- $Bugzilla::Search::interval_who = undef;
+ # Setup interval_time column
+ if ($self->{user}->is_timetracker)
+ {
+ my $override = $H->{period_from} || $H->{period_to} || $H->{period_who};
+ $self->{interval_from} = $override ? $H->{period_from} : $H->{chfieldfrom};
+ $self->{interval_to} = $override ? $H->{period_to} : $H->{chfieldto};
+ $self->{interval_who} = $override ? $H->{period_who} : $H->{chfieldwho};
+ for ($self->{interval_from}, $self->{interval_to})
+ {
+ $_ = $_ && $_ ne 'now' ? SqlifyDate($_) : undef;
+ }
+ for ($self->{interval_who})
+ {
+ $_ = $_ ? ($_ eq '%user%' ? $self->{user} : Bugzilla::User::match_name($_, 1)->[0]) : undef;
+ }
+ COLUMNS->{interval_time}->{name} =
+ "(SELECT COALESCE(SUM(ldtime.work_time),0) FROM longdescs ldtime".
+ " WHERE ldtime.bug_id=bugs.bug_id".
+ ($self->{interval_from} ? " AND ldtime.bug_when >= ".$dbh->quote($self->{interval_from}) : '').
+ ($self->{interval_to} ? " AND ldtime.bug_when <= ".$dbh->quote($self->{interval_to}) : '').
+ ($self->{interval_who} ? " AND ldtime.who = ".$self->{interval_who}->id : '').
+ ")";
+ }
+ # Add "only bugs changed between..."
my $chfieldfrom = trim(lc($H->{chfieldfrom} || ''));
my $chfieldto = trim(lc($H->{chfieldto} || ''));
$chfieldfrom = '' if $chfieldfrom eq 'now';
$chfieldto = '' if $chfieldto eq 'now';
-
if ($chfieldfrom ne '' || $chfieldto ne '')
{
my @chfield = map { COLUMN_ALIASES->{$_} || $_ } list $H->{chfield};
@@ -2058,7 +2078,6 @@ sub changed
$who = $who eq '%user%' ? $self->{user} : Bugzilla::User::match_name($who, 1)->[0];
if ($who)
{
- $Bugzilla::Search::interval_who = $who;
$v->{who} = $who->login;
$v->{who} =~ s/\@.*$//so if !Bugzilla->user->id;
$who = $who->id;
@@ -2075,17 +2094,7 @@ sub changed
# on the time interval and user specified in "changes" search area
my $c;
my %f = map { $_ => 1 } @{$v->{fields}};
- if ($self->{user}->is_timetracker)
- {
- $Bugzilla::Search::interval_from = SqlifyDate($v->{after});
- $Bugzilla::Search::interval_to = SqlifyDate($v->{before});
- $c = $cond;
- $c =~ s/ \./ldtime./gs;
- COLUMNS->{interval_time}->{name} =
- "(SELECT COALESCE(SUM(ldtime.work_time),0) FROM longdescs ldtime".
- " WHERE ldtime.bug_id=bugs.bug_id AND $c)";
- }
- else
+ if (!$self->{user}->is_timetracker)
{
# Non-timetrackers can't search on time tracking fields
delete $f{$_} for keys %{TIMETRACKING_FIELDS()};
@@ -2532,9 +2541,9 @@ sub _work_time_equals_0
my $w = "$table.work_time != 0";
if ($self->{field} eq 'interval_time')
{
- $w .= " AND $table.bug_when >= ".$dbh->quote($Bugzilla::Search::interval_from) if $Bugzilla::Search::interval_from;
- $w .= " AND $table.bug_when <= ".$dbh->quote($Bugzilla::Search::interval_to) if $Bugzilla::Search::interval_to;
- $w .= " AND $table.who = ".$Bugzilla::Search::interval_who->id if $Bugzilla::Search::interval_who;
+ $w .= " AND $table.bug_when >= ".$dbh->quote($self->{interval_from}) if $self->{interval_from};
+ $w .= " AND $table.bug_when <= ".$dbh->quote($self->{interval_to}) if $self->{interval_to};
+ $w .= " AND $table.who = ".$self->{interval_who}->id if $self->{interval_who};
}
$w .= " AND $table.isprivate = 0" if $self->{user}->is_insider;
$self->{term} = {
diff --git a/buglist.cgi b/buglist.cgi
index f77904d65..640d2f0e1 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -811,7 +811,7 @@ if ($superworktime)
# Must come after Bugzilla::Search::getSQL
if (Bugzilla->user->in_group('worktimeadmin'))
{
- my $d = $Bugzilla::Search::interval_to;
+ my $d = $search->{interval_to};
if ($d)
{
# Use DateTime instead of SQL functions to be more DBMS-independent
@@ -824,7 +824,7 @@ if ($superworktime)
{
$d = POSIX::strftime("%Y-%m-%d", localtime);
}
- $vars->{worktime_user} = $ARGS->{worktime_user} || ($Bugzilla::Search::interval_who ? $Bugzilla::Search::interval_who->login : undef);
+ $vars->{worktime_user} = $ARGS->{worktime_user} || ($search->{interval_who} ? $search->{interval_who}->login : undef);
$vars->{worktime_date} = $ARGS->{worktime_date} || $d;
}
else
@@ -1078,8 +1078,8 @@ $vars->{caneditbugs} = 1;
$vars->{time_info} = $time_info;
$vars->{query_params} = { %$params }; # now used only in superworktime
-$vars->{query_params}->{chfieldfrom} = $Bugzilla::Search::interval_from;
-$vars->{query_params}->{chfieldto} = $Bugzilla::Search::interval_to;
+$vars->{query_params}->{chfieldfrom} = $search->{interval_from};
+$vars->{query_params}->{chfieldto} = $search->{interval_to};
if (!Bugzilla->user->in_group('editbugs'))
{
diff --git a/colchange.cgi b/colchange.cgi
index 0ac910220..c2fa1ed07 100755
--- a/colchange.cgi
+++ b/colchange.cgi
@@ -116,12 +116,14 @@ if ($ARGS->{rememberedquery})
{
my $params = http_decode_query($search->query);
$params->{columnlist} = join(",", @collist);
+ $params->{$_} = $ARGS->{$_} for qw(period_from period_to period_who);
$search->set_query(http_build_query($params));
$search->update();
}
my $params = http_decode_query($ARGS->{rememberedquery});
$params->{columnlist} = join(",", @collist);
+ $params->{$_} = $ARGS->{$_} for qw(period_from period_to period_who);
$vars->{redirect_url} = "buglist.cgi?".http_build_query($params);
# If we're running on Microsoft IIS, $cgi->redirect discards
@@ -138,7 +140,7 @@ if ($ARGS->{rememberedquery})
}
else
{
- print Bugzilla->cgi->redirect($vars->{'redirect_url'});
+ print Bugzilla->cgi->redirect($vars->{redirect_url});
exit;
}
@@ -170,6 +172,14 @@ $vars->{collist} = \@collist;
$vars->{splitheader} = Bugzilla->cookies->{SPLITHEADER} ? 1 : 0;
$vars->{buffer} = http_build_query($ARGS);
+$vars->{$_} = $ARGS->{$_} for qw(period_from period_to period_who);
+if (!$vars->{period_from} && !$vars->{period_to} && !$vars->{period_who})
+{
+ $vars->{period_from} = $ARGS->{chfieldfrom};
+ $vars->{period_to} = $ARGS->{chfieldto};
+ $vars->{period_who} = $ARGS->{chfieldwho};
+}
+
my $search;
if (defined $ARGS->{query_based_on})
{
diff --git a/js/change-columns.js b/js/change-columns.js
index 0c9362649..751cae590 100644
--- a/js/change-columns.js
+++ b/js/change-columns.js
@@ -27,6 +27,9 @@ function initChangeColumns()
switch_options(sel_select, av_select, false);
sel_select.selectedIndex = -1;
updateView();
+ Calendar.set('period_from');
+ Calendar.set('period_to');
+ new SimpleAutocomplete("period_who", userAutocomplete, { emptyText: 'No users found' });
}
function switch_options(from_box, to_box, selected)
diff --git a/template/en/default/list/change-columns.html.tmpl b/template/en/default/list/change-columns.html.tmpl
index c7dbebd54..01dd99dca 100644
--- a/template/en/default/list/change-columns.html.tmpl
+++ b/template/en/default/list/change-columns.html.tmpl
@@ -21,7 +21,8 @@
[% PROCESS global/header.html.tmpl
title = "Change Columns"
- javascript_urls = "js/change-columns.js"
+ javascript_urls = [ "js/calendar.js", "js/change-columns.js" ]
+ style_urls = [ "skins/standard/calendar.css" ]
onload = "initChangeColumns()"
%]
@@ -106,11 +107,22 @@
value="[% saved_search.id FILTER html%]" />
-
[% END %]
+ [% IF user.is_timetracker %]
+
+ In the "[% COLUMNS.interval_time.title | html %]" column, show working time for user:
+
+ between
+
+ and
+ (YYYY-MM-DD or relative dates)
+
+ [% END %]
+
diff --git a/template/en/default/worktime/supertime.html.tmpl b/template/en/default/worktime/supertime.html.tmpl
index 2637e88c9..56043097d 100644
--- a/template/en/default/worktime/supertime.html.tmpl
+++ b/template/en/default/worktime/supertime.html.tmpl
@@ -6,7 +6,8 @@
[% title = "Массовый ввод трудозатрат" %]
[% PROCESS global/header.html.tmpl
title = title
- style_urls = [ "skins/standard/buglist.css" ]
+ javascript_urls = [ "js/calendar.js", "js/change-columns.js" ]
+ style_urls = [ "skins/standard/calendar.css", "skins/standard/buglist.css" ]
%]
@@ -53,12 +54,21 @@
[% hidden_inputs(HideIndex=2) %]
- Дата:
+
+ Баг изменён:
с
по
(YYYY-MM-DD HH:MM:SS)
- Пользователь:
+ пользователем:
+
+
+ Period Worktime:
+ с
+ по
+ (YYYY-MM-DD HH:MM:SS)
+ пользователь:
+
@@ -303,6 +313,12 @@ function do_dry_run(frm)
}
wt_user_blur();
check_who_enabled();
+Calendar.set('chfieldfrom');
+Calendar.set('chfieldto');
+new SimpleAutocomplete("chfieldwho", userAutocomplete, { emptyText: 'No users found' });
+Calendar.set('period_from');
+Calendar.set('period_to');
+new SimpleAutocomplete("period_who", userAutocomplete, { emptyText: 'No users found' });
//-->