%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC
%# <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
next if lc($queue->{Lifecycle} || '') ne lc $lifecycle->Name;
$i++;
- my $name = $queue->{Name};
- $name =~ s/(['\\])/\\$1/g;
- my $queue_cond = "Queue = '$name' AND ";
- my $all_q = $queue_cond . '(' . join( " OR ", map "Status = '$_'", @cur_statuses ) . ')';
+
+ my $classes = $i%2 ? 'oddline' : 'evenline';
+ $classes .= ' unreplied-ticket' if $queue->{Unreplied} > 0;
</%PERL>
-<tr class="<% $i%2 ? 'oddline' : 'evenline'%>" >
+<tr class="<% $classes %>">
<td>
- <a href="<% RT->Config->Get('WebPath') %>/Search/Results.html?Query=<% $all_q |u,n %>" title="<% $queue->{Description} %>"><% $queue->{Name} %></a>
+ <a href="<% $link_all->($queue, \@cur_statuses) %>" title="<% $queue->{Description} %>"><% $queue->{Name} %></a>
</td>
% for my $status (@cur_statuses) {
<td align="right">
- <a href="<% RT->Config->Get('WebPath') %>/Search/Results.html?Query=<% $queue_cond ."Status = '$status'" |u,n %>"><% $data->{$queue->{id}}->{$status } || '-' %></a>
+ <a href="<% $link_status->($queue, $status) %>"><% $data->{$queue->{id}}->{lc $status} || '-' %></a>
</td>
% }
</tr>
</table>
% }
<%INIT>
+my $build_search_link = sub {
+ my ($queue_name, $extra_query) = @_;
+ $queue_name =~ s/(['\\])/\\$1/g; #'
+
+ return RT->Config->Get('WebPath')
+ . "/Search/Results.html?Query="
+ . $m->interp->apply_escapes("Queue = '$queue_name' AND $extra_query", 'u');
+};
+
+my $link_all = sub {
+ my ($queue, $all_statuses) = @_;
+ my @escaped = @{$all_statuses};
+ s{(['\\])}{\\$1}g for @escaped;
+ return $build_search_link->($queue->{Name}, "(".join(" OR ", map "Status = '$_'", @escaped).")");
+};
+
+my $link_status = sub {
+ my ($queue, $status) = @_;
+ $status =~ s{(['\\])}{\\$1}g;
+ return $build_search_link->($queue->{Name}, "Status = '$status'");
+};
+
+$m->callback(
+ CallbackName => 'LinkBuilders',
+ build_search_link => \$build_search_link,
+ link_all => \$link_all,
+ link_status => \$link_status,
+);
my $Queues = RT::Queues->new( $session{'CurrentUser'} );
$Queues->UnLimit();
{ id => $_->Id,
Name => $_->Name,
Description => $_->Description || '',
- Lifecycle => $_->Lifecycle->Name,
+ Lifecycle => $_->Lifecycle,
}
} grep $_, @queues;
my %lifecycle;
for my $queue (@queues) {
- my $cycle = RT::Lifecycle->Load( $queue->{'Lifecycle'} );
+ my $cycle = RT::Lifecycle->Load( Name => $queue->{'Lifecycle'} );
$lifecycle{ lc $cycle->Name } = $cycle;
}
+use RT::Search::UnrepliedTickets;
+my $Tickets = RT::Tickets->new( RT->SystemUser );
+my $Search = RT::Search::UnrepliedTickets->new( TicketsObj => $Tickets );
+$Search->Prepare;
+
+for my $queue (@queues) {
+ # show whether there are unreplied tickets
+ # somewhat inefficient but we only use the count query
+ my $tix = $Tickets->Clone;
+ $tix->Limit(FIELD => 'Queue',
+ OPERATOR => '=',
+ VALUE => $queue->{id});
+ $queue->{Unreplied} = $tix->Count;
+}
+
unless (@statuses) {
my %seen;
foreach my $set ( 'initial', 'active' ) {
use RT::Report::Tickets;
my $report = RT::Report::Tickets->new( RT->SystemUser );
+my @escaped = @statuses;
+s{(['\\])}{\\$1}g for @escaped;
my $query =
"(".
- join(" OR ", map {s{(['\\])}{\\$1}g; "Status = '$_'"} @statuses) #'
+ join(" OR ", map {"Status = '$_'"} @escaped) #'
.") AND (".
join(' OR ', map "Queue = ".$_->{id}, @queues)
.")";