X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=rt%2Fshare%2Fhtml%2FElements%2FQueueSummaryByLifecycle;h=0c3370f4897d8cc4626f226b7ac39aea3fc83ff0;hb=187086c479a09629b7d180eec513fb7657f4e291;hp=da31ebb5919b2688f016500958a9ebc5cd003121;hpb=73a6a80a9ca5edbd43d139b7cb25bfee4abfd35e;p=freeside.git diff --git a/rt/share/html/Elements/QueueSummaryByLifecycle b/rt/share/html/Elements/QueueSummaryByLifecycle index da31ebb59..0c3370f48 100644 --- a/rt/share/html/Elements/QueueSummaryByLifecycle +++ b/rt/share/html/Elements/QueueSummaryByLifecycle @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2018 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -66,8 +66,11 @@ for my $queue (@queues) { next if lc($queue->{Lifecycle} || '') ne lc $lifecycle->Name; $i++; + + my $classes = $i%2 ? 'oddline' : 'evenline'; + $classes .= ' unreplied-ticket' if $queue->{Unreplied} > 0; - + <% $queue->{Name} %> @@ -94,11 +97,14 @@ my $build_search_link = sub { my $link_all = sub { my ($queue, $all_statuses) = @_; - return $build_search_link->($queue->{Name}, "(".join(" OR ", map "Status = '$_'", @$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'"); }; @@ -120,17 +126,32 @@ $m->callback( CallbackName => 'Filter', Queues => \@queues ); { 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' ) { @@ -145,9 +166,11 @@ my $statuses = {}; 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) .")";