Add separate parameters for "Period Worktime" column, remove usage of global variables
parent
c53339f1bf
commit
78dc6d4f6e
|
@ -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} = {
|
||||
|
|
|
@ -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'))
|
||||
{
|
||||
|
|
|
@ -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})
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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%]" />
|
||||
<input type="checkbox" id="save_columns_for_search" checked="checked"
|
||||
name="save_columns_for_search" value="1" />
|
||||
<label for="save_columns_for_search">Save this column list only
|
||||
<label for="save_columns_for_search">Save this column list
|
||||
for search '[% saved_search.name FILTER html %]'</label>
|
||||
</p>
|
||||
[% END %]
|
||||
|
||||
[% IF user.is_timetracker %]
|
||||
<p>
|
||||
In the "[% COLUMNS.interval_time.title | html %]" column, show working time for user:
|
||||
<input name="period_who" id="period_who" size="30" value="[% period_who | html %]" />
|
||||
between
|
||||
<input name="period_from" id="period_from" size="10" value="[% period_from | html %]" />
|
||||
and <input name="period_to" id="period_to" size="10" value="[% period_to | html %]" />
|
||||
(YYYY-MM-DD or relative dates)
|
||||
</p>
|
||||
[% END %]
|
||||
|
||||
<p>
|
||||
<input type="submit" id="change" value="Change Columns" />
|
||||
</p>
|
||||
|
|
|
@ -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" ]
|
||||
%]
|
||||
|
||||
<p>
|
||||
|
@ -53,12 +54,21 @@
|
|||
|
||||
[% hidden_inputs(HideIndex=2) %]
|
||||
|
||||
Дата:
|
||||
<p style="margin: 8px 0">
|
||||
Баг изменён:
|
||||
с <input type="text" name="chfieldfrom" id="chfieldfrom" value="[% query_params.chfieldfrom | html %]" onchange="check_who_enabled()" />
|
||||
по <input type="text" name="chfieldto" id="chfieldto" value="[% query_params.chfieldto | html %]" onchange="check_who_enabled()" />
|
||||
<span style="color: #aaa">(YYYY-MM-DD HH:MM:SS)</span>
|
||||
Пользователь: <input type="text" name="chfieldwho" id="chfieldwho" value="[% query_params.chfieldwho | html %]" />
|
||||
пользователем: <input type="text" name="chfieldwho" id="chfieldwho" value="[% query_params.chfieldwho | html %]" />
|
||||
</p>
|
||||
<p style="margin: 0">
|
||||
Period Worktime:
|
||||
с <input type="text" name="period_from" id="period_from" value="[% query_params.period_from || query_params.period_to || query_params.period_who ? query_params.period_from : query_params.chfieldfrom | html %]" />
|
||||
по <input type="text" name="period_to" id="period_to" value="[% query_params.period_from || query_params.period_to || query_params.period_who ? query_params.period_to : query_params.chfieldto | html %]" />
|
||||
<span style="color: #aaa">(YYYY-MM-DD HH:MM:SS)</span>
|
||||
пользователь: <input type="text" name="period_who" id="period_who" value="[% query_params.period_from || query_params.period_to || query_params.period_who ? query_params.period_who : query_params.chfieldwho | html %]" />
|
||||
<input type="submit" value=" Показать трудозатраты " />
|
||||
</p>
|
||||
</form>
|
||||
</fieldset>
|
||||
|
||||
|
@ -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' });
|
||||
//-->
|
||||
</script>
|
||||
|
||||
|
|
Loading…
Reference in New Issue