diff options
Diffstat (limited to 'rt/html/RTx/Statistics/OpenStalled')
-rwxr-xr-x | rt/html/RTx/Statistics/OpenStalled/Elements/Chart | 27 | ||||
-rw-r--r-- | rt/html/RTx/Statistics/OpenStalled/Results.tsv | 114 | ||||
-rwxr-xr-x | rt/html/RTx/Statistics/OpenStalled/index.html | 188 |
3 files changed, 329 insertions, 0 deletions
diff --git a/rt/html/RTx/Statistics/OpenStalled/Elements/Chart b/rt/html/RTx/Statistics/OpenStalled/Elements/Chart new file mode 100755 index 000000000..9505881e8 --- /dev/null +++ b/rt/html/RTx/Statistics/OpenStalled/Elements/Chart @@ -0,0 +1,27 @@ +<%perl> +$r->content_type("image/$format"); +print $graph->plot(\@data)->$format(); +$m->abort(); +print $#data+1 . " Elements:<p>"; +for (0..$#data) { +print $data[$_]; +print "<p>"; +} +</%perl> +<%INIT> +use GD::Graph::bars; + +my @data; +my $graph = GD::Graph::bars->new($Statistics::GraphWidth,$Statistics::GraphHeight); +$graph->set(export_format => "png", + x_label => 'Queue name', + y_label => 'Total per queue by status'); +my $format = $graph->export_format; +$graph->set_legend(split /,/ , $ARGS{set_legend}); +push @data, [split /,/ , $ARGS{x_labels}]; +push @data, [split /,/ , $ARGS{data1}]; +push @data, [split /,/ , $ARGS{data2}]; +push @data, [split /,/ , $ARGS{data3}]; +</%INIT> +<%ARGS> +</%ARGS> diff --git a/rt/html/RTx/Statistics/OpenStalled/Results.tsv b/rt/html/RTx/Statistics/OpenStalled/Results.tsv new file mode 100644 index 000000000..2ec1e0c4a --- /dev/null +++ b/rt/html/RTx/Statistics/OpenStalled/Results.tsv @@ -0,0 +1,114 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> +%# +%# (Except where explicitly superseded by other copyright notices) +%# +%# +%# LICENSE: +%# +%# This work is made available to you under the terms of Version 2 of +%# the GNU General Public License. A copy of that license should have +%# been provided with this software, but in any event can be snarfed +%# from www.gnu.org. +%# +%# This work is distributed in the hope that it will be useful, but +%# WITHOUT ANY WARRANTY; without even the implied warranty of +%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%# General Public License for more details. +%# +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%ARGS> +@queues => @Statistics::OpenStalledQueueList +</%ARGS> + +<%INIT> +use RTx::Statistics; +use Time::Local; + + my $n = 0; + my @data; + my @msgs; + my %totals; + my $QueryString; + my $now = new RT::Date($session{CurrentUser}); + my $tix = new RT::Tickets($session{'CurrentUser'}); + + my %queues = map { + $_ => 1; + } (@queues); + + # set content type + $r->content_type('application/vnd.ms-excel'); + + $QueryString = "queues=" . join("&queues=", @queues); + + my $queue = new RT::Queues($session{CurrentUser}); + $queue->UnLimit; + + my $QueueObj = new RT::Queue($session{'CurrentUser'}); + $QueueObj->Load($queue); + + # Put out some data about the generation of this file + $m->out("Tickets by Status by Queue for Queues:\t" . join(',', @queues) . "\tGenerated at:\t" . Statistics::FormatDate("%x %X", $now). "\n\n"); + + # basically the same as index.html + + # Output header row + $m->out("Status"); + for ( sort keys %queues) { + push @data, $_; + my $Queueobj = new RT::Queue($session{'CurrentUser'}); + $Queueobj->Load($_); + next if !$Queueobj->CurrentUserHasRight('SeeQueue'); + $m->out("\t" . $_); + } + $m->out("\tTotals\n"); + + foreach my $s (qw(new open stalled)) { + $m->out("$s"); + my $total=0; + foreach my $q (sort keys %queues) { + $tix = new RT::Tickets($session{'CurrentUser'}); + $tix->LimitQueue(VALUE => "$q"); + $tix->LimitStatus(VALUE => "$s"); + $totals{$q} += $tix->Count; # Add up columns for each queue + $m->out("\t" . $tix->Count); + $total += $tix->Count; + } + $m->out("\t$total\n"); + $totals{"Totals"} += $total; + } + $m->out("Totals"); + foreach my $q (sort keys %queues) { + $m->out("\t" . $totals{$q}); + } + $m->out("\t" . $totals{"Totals"} . "\n"); + + $m->abort(); +</%INIT> diff --git a/rt/html/RTx/Statistics/OpenStalled/index.html b/rt/html/RTx/Statistics/OpenStalled/index.html new file mode 100755 index 000000000..d0cd9f158 --- /dev/null +++ b/rt/html/RTx/Statistics/OpenStalled/index.html @@ -0,0 +1,188 @@ +<& /Elements/Header, Title => loc('New, Open and Stalled tickets by Queue') &> +<& /RTx/Statistics/Elements/Tabs, Title => loc('New, Open and Stalled tickets by Queue') &> + +<h3>Description</h3> +<p>The purpose of this page is to show a snapshot of the current status of tickets by Queue. You can multi select Queues from the dropdown +list or simply show all available queues. This will indicate how many tickets have not yet been viewed (New), how many have been at least +viewed once (Open) and how many have had their status changed to stalled.</p> + +<form method="POST" action="index.html"> + +%my $tix = new RT::Tickets($session{'CurrentUser'}); +%if ($queue) { +% $tix->LimitQueue (VALUE => $queue); +%} + + +%my $title = "New, Open and Stalled Tickets in " . join(', ', @queues); +<& /Elements/TitleBoxStart, title => $title, title_href => "/RTx/Statistics/OpenStalled/index.html?$QueryString"&> +<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH="100%"> +% if ($ShowHeader) { +<& /RTx/Statistics/Elements/CollectionAsTable/Header, + Format => \@RowFormat, + FormatString => $RowFormat, + AllowSorting => $AllowSorting, + Order => $Order, + Query => undef, + Rows => $Rows, + Page => $Page, + OrderBy => $OrderBy , + BaseURL => $BaseURL, + maxitems => $maxitems &> +% } + +% for ( sort keys %queues_to_show) { +% push @data, $_; +% } +% my @legend; +% my $total = 0; +% my $line = 0; +%# NOTE need to handle all status values (see share/html/Elements/SelectStatus). +% foreach my $s (qw(new open stalled)) { +% $line++; +% push @legend, $s; +% $total=0; +% foreach my $q (sort keys %queues_to_show) { +% $tix = new RT::Tickets($session{'CurrentUser'}); +% $tix->LimitQueue(VALUE => "$q"); +% $tix->LimitStatus(VALUE => "$s"); +% push @data, $tix->Count; +% $totals{$q} += $tix->Count; # Add up columns for each queue +% $total += $tix->Count; +% $values{$q} = $tix->Count; +% } +% $totals{"Totals"} += $total; +% $values{Statistics_Status} = $s; +% $values{Statistics_Totals} = $total; +<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@RowFormat, i => $line, record => $record, maxitems => $maxitems &> +% } +% $values{Statistics_Status} = "Totals"; +% foreach my $q (sort keys %queues_to_show) { +% $values{$q} = $totals{$q}; +% } +% $values{Statistics_Totals} = $totals{"Totals"}; +<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@BoldRowFormat, i => $line+1, record => $record, maxitems => $maxitems &> +</table> +<& /Elements/TitleBoxEnd&> + +<hr> + +<BR /> +<BR /> + +% use Data::Dumper; +% Statistics::DebugLog("Dump of data array is " . Dumper(@data) . "\n"); +% my $url = 'Elements/Chart?x_labels='; +% for (1..(scalar keys %queues_to_show)) { +% $url .= $m->interp->apply_escapes((shift @data),'u') . ','; +% } +% chop $url; +% $url .= '&data1=' ; +% for (1..(scalar keys %queues_to_show)) { +% $url .= $m->interp->apply_escapes((shift @data),'u') . ','; +% } +% chop $url; +% $url .= '&data2=' ; +% for (1..(scalar keys %queues_to_show)) { +% $url .= $m->interp->apply_escapes((shift @data),'u') . ','; +% } +% chop $url; +% $url .= '&data3=' ; +% for (1..(scalar keys %queues_to_show)) { +% $url .= $m->interp->apply_escapes((shift @data),'u') . ','; +% } +% $url .= '&set_legend='.(join ",", @legend); + + +<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &> + +<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox, Title => "Select Queues", ShowMultiQueues => 1, queues_ref => \@queues &> + +<a href="<%$RT::WebPath%>/RTx/Statistics/OpenStalled/index.html?<% $QueryString %>"><&|/l&>Bookmarkable link</&></a> +%# | <a href="<%$RT::WebPath%>/RTx/Statistics/OpenStalled/Results.tsv?<%$QueryString%>"><&|/l&>spreadsheet</&></a> +<BR> +<BR> + +</FORM> + +% Statistics::DebugInit( $m ); + +<%ARGS> +@queues => @Statistics::OpenStalledQueueList +$AllowSorting => undef +$Order => undef +$OrderBy => undef +$ShowNavigation => 1 +$ShowHeader => 1 +$Rows => 50 +$Page => 1 +$BaseURL => undef +$AddAllCheck => undef +</%ARGS> + +<%INIT> + use RTx::Statistics; + + my $n = 0; + my @data; + my @msgs; + my %totals; + my $QueryString; + my %queues_to_show; + my $maxitems; + my $RowFormat; + my $BoldRowFormat; + my %record; + my %values; + my $record = \%record; + + $record{values} = \%values; + + Statistics::DebugClear(); + + # Handle the Add All Checkbox + if($AddAllCheck eq "on") { + $AddAllCheck = undef; + undef (@queues); + my $q=new RT::Queues($session{'CurrentUser'}); + $q->UnLimit; + while (my $queue=$q->Next) { + next if !$queue->CurrentUserHasRight('SeeQueue'); + push @queues, $queue->Name; + } + } + + # If the user has the right to see the queue, put it into the map + for my $q (@queues) { + my $Queueobj = new RT::Queue($session{'CurrentUser'}); + $Queueobj->Load($q); + next if !$Queueobj->CurrentUserHasRight('SeeQueue'); + $queues_to_show{$q} = 1; + } + + $maxitems = (scalar @queues) + 2; + + # Build the new query string + $QueryString = "queues=" . join("&queues=", @queues); + + # Build the format strings + $RowFormat = "'__Statistics_Status__'"; + $BoldRowFormat = "'<B>__Statistics_Status__</B>'"; + for my $q (@queues) { + $RowFormat .= ",'__Statistics_Dynamic__/KEY:$q/TITLE:$q/STYLE:text-align:right;'"; + $BoldRowFormat .= ",'<B>__Statistics_Dynamic__</B>/KEY:$q/TITLE:$q/STYLE:text-align:right;'"; + } + $RowFormat .= ",'<B>__Statistics_Totals__</B>/STYLE:text-align:right;'"; + $BoldRowFormat .= ",'<B>__Statistics_Totals__</B>/STYLE:text-align:right;'"; + # Parse the formats into structures. + my (@RowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $RowFormat); + my (@BoldRowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldRowFormat); + + + my $queue = new RT::Queues($session{CurrentUser}); + $queue->UnLimit; + + my $QueueObj = new RT::Queue($session{'CurrentUser'}); + $QueueObj->Load($queue); + +</%INIT> |