diff options
Diffstat (limited to 'rt/share/html/RTx/Statistics/Elements')
| -rw-r--r-- | rt/share/html/RTx/Statistics/Elements/DateSelectRow | 55 | ||||
| -rwxr-xr-x | rt/share/html/RTx/Statistics/Elements/DurationAsString | 18 | ||||
| -rw-r--r-- | rt/share/html/RTx/Statistics/Elements/GraphBox | 27 | ||||
| -rwxr-xr-x | rt/share/html/RTx/Statistics/Elements/SelectMultiQueue | 81 | ||||
| -rw-r--r-- | rt/share/html/RTx/Statistics/Elements/StatColumnMap | 173 | ||||
| -rwxr-xr-x | rt/share/html/RTx/Statistics/Elements/Tabs | 72 |
6 files changed, 426 insertions, 0 deletions
diff --git a/rt/share/html/RTx/Statistics/Elements/DateSelectRow b/rt/share/html/RTx/Statistics/Elements/DateSelectRow new file mode 100644 index 000000000..325e168c9 --- /dev/null +++ b/rt/share/html/RTx/Statistics/Elements/DateSelectRow @@ -0,0 +1,55 @@ + <td class="collection-as-table" style="text-align:left;"><% $Label %></td> + <td class="collection-as-table" style="text-align:left;"> + <select name=<% $nameMonth %> > +% for ($n=0;$n<=$#Statistics::months;$n++){ +% if ($$refMonth eq $n){ +% $selected ="selected"; +% }else { +% $selected =""; +% } + <option value=<% $n %> <% $selected %> ><% $Statistics::months[$n] %></option> +%} + </select> + </td> + <td class="collection-as-table" style="text-align:left;"> + <select name=<% $nameDay %> > +% for ($n=1;$n<=31;$n++){ +% if ($$refDay == $n ){ +% $selected ="selected"; +% }else { +% $selected =""; +% } + <option value=<% $n %> <% $selected %> ><% $n %></option> +% } + </select> + </td> + <td class="collection-as-table" style="text-align:left;"> + <select name=<% $nameYear %> > +% +% for ($n=0;$n <= scalar @Statistics::years-1;$n++){ +% if ($Statistics::years[$n] == $$refYear){ +% $selected ="selected"; +% }else{ +% $selected =""; +% } + <option value=<% $Statistics::years[$n] %> <% $selected %> ><% $Statistics::years[$n] %></option> +% } + </select> + </td> + + +<%args> +$Label => undef +$refMonth => undef +$nameMonth => undef +$refDay => undef +$nameDay => undef +$refYear => undef +$nameYear => undef +</%args> +<%init> +use RTx::Statistics; +my $n; +my $selected; + +</%init> diff --git a/rt/share/html/RTx/Statistics/Elements/DurationAsString b/rt/share/html/RTx/Statistics/Elements/DurationAsString new file mode 100755 index 000000000..c0b4d9af4 --- /dev/null +++ b/rt/share/html/RTx/Statistics/Elements/DurationAsString @@ -0,0 +1,18 @@ +<%$days|'00'%> days <%$hours|'00'%>:<%$minutes|'00'%> +<%INIT> + +my $MINUTE = 60; +my $HOUR = $MINUTE*60; +my $DAY = $HOUR * 24; +my $WEEK = $DAY * 7; +my $days = int($Duration / $DAY); +$Duration = $Duration % $DAY; +my $hours = int($Duration / $HOUR); +$hours = sprintf("%02d", $hours); +$Duration = $Duration % $HOUR; +my $minutes = int($Duration/$MINUTE); +$minutes = sprintf("%02d", $minutes); +</%INIT> +<%ARGS> +$Duration => undef +</%ARGS> diff --git a/rt/share/html/RTx/Statistics/Elements/GraphBox b/rt/share/html/RTx/Statistics/Elements/GraphBox new file mode 100644 index 000000000..3dc06973e --- /dev/null +++ b/rt/share/html/RTx/Statistics/Elements/GraphBox @@ -0,0 +1,27 @@ +<div style="float:left; padding-right:30px;"> +<table class="box" bgcolor="#336699" style="border-style:none solid solid solid;border-width:1px;border-color:#2E2E8C;" cellpadding="0" cellspacing="0"> + <tbody><tr> + <th style="color: rgb(51, 102, 153);" class="titlebox"> + <span class="titleboxclose"> + <a href="#" onclick="hideshow('stats_chart')">X</a></span> + + <span class="titleboxtitle"> + <b><a href="<% $GraphURL %>">Download Chart as Image</a></b> + </span> + </th> + <th style="color: rgb(51, 102, 153);" class="titleboxright"> + <span class="titleboxright"> </span> + </th> + </tr> + + <tr id="element-stats_chart"> + <td colspan="3" class="" bgcolor="#dddddd"> + <img src="<% $GraphURL %>" ALT="Result Graph" > + </td> + </tr> + </tbody> +</table> +</div> +<%args> +$GraphURL => undef +</%args> diff --git a/rt/share/html/RTx/Statistics/Elements/SelectMultiQueue b/rt/share/html/RTx/Statistics/Elements/SelectMultiQueue new file mode 100755 index 000000000..637f6dc80 --- /dev/null +++ b/rt/share/html/RTx/Statistics/Elements/SelectMultiQueue @@ -0,0 +1,81 @@ +%# 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 }}} +<SELECT NAME ="<%$Name%>" multiple size="<% $Size %>"> +% if ($ShowNullOption) { +<OPTION VALUE="">-</OPTION> +% } +% while (my $queue=$q->Next) { +% if ($ShowAllQueues || $queue->CurrentUserHasRight($CheckQueueRight)) { +% my $targ="," . $queue->Name . ","; +<OPTION VALUE="<%($NamedValues ? $queue->Name : $queue->Id) %>" <%( ($sel_list =~ m/$targ/) ? 'SELECTED' : '')%>><%$queue->Name%> +% if (($Verbose) and ($queue->Description) ){ +(<%$queue->Description%>) +% } +</OPTION> +% } +% } +</SELECT> +<%ARGS> +$CheckQueueRight => 'CreateTicket' +$ShowNullOption => 1 +$ShowAllQueues => 1 +$Name => undef +$Verbose => undef +$NamedValues => 0 +$Selected => undef # ref to array containing selected queue names +$Lite => 0 +$Size => 5 +</%ARGS> + +<%INIT> + +# put list of queue names into string, starting and ending with commas +my $sel_list = "," . join(",", @$Selected) . ","; + +my $q=new RT::Queues($session{'CurrentUser'}); +$q->UnLimit; + +</%INIT> diff --git a/rt/share/html/RTx/Statistics/Elements/StatColumnMap b/rt/share/html/RTx/Statistics/Elements/StatColumnMap new file mode 100644 index 000000000..aef9e2f3e --- /dev/null +++ b/rt/share/html/RTx/Statistics/Elements/StatColumnMap @@ -0,0 +1,173 @@ +%# 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> +$Name => undef +$Attr => undef +</%ARGS> + + +<%ONCE> +our ( $STAT_COLUMN_MAP ); + +sub StatColumnMap { + my $name = shift; + my $attr = shift; + + # First deal with the simple things from the map + if ( $STAT_COLUMN_MAP->{$name} ) { + return ( $STAT_COLUMN_MAP->{$name}->{$attr} ); + } + + # now, let's deal with harder things, like Custom Fields + + elsif ( $name =~ /^(?:CF|CustomField)\.\{(.+)\}$/ ) { + my $field = $1; + + if ( $attr eq 'attribute' ) { + return (undef); + } + elsif ( $attr eq 'title' ) { + return ( $field ); + } + elsif ( $attr eq 'value' ) { + # Display custom field contents, separated by newlines. + # For Image custom fields we also show a thumbnail here. + return sub { + my $values = $_[0]->CustomFieldValues($field); + return map { + ( + ($_->CustomFieldObj->Type eq 'Image') + ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ )) + : $_->Content + ), + \'<br>', + } @{ $values->ItemsArrayRef } + }; + } + } +} + +sub LinkCallback { + my $method = shift; + + my $mode = $RT::Ticket::LINKTYPEMAP{$method}{Mode}; + my $type = $RT::Ticket::LINKTYPEMAP{$method}{Type}; + my $mode_uri = $mode.'URI'; + my $local_type = 'Local'.$mode; + + return sub { + map { + \'<A HREF="', + $_->$mode_uri->Resolver->HREF, + \'">', + ( $_->$mode_uri->IsLocal ? $_->$local_type : $_->$mode ), + \'</A><BR>', + } @{ $_[0]->Links($mode,$type)->ItemsArrayRef } + } +} + +$STAT_COLUMN_MAP = { + LastUpdated => { + attribute => 'LastUpdated', + title => 'Last Updated', + value => sub { return $_[0]->LastUpdatedObj->AsString } + }, + + Statistics_Date => { + title => 'Date', + value => sub { return $_[0]{values}{Statistics_Date} } + }, + + Statistics_Created_Count => { + title => 'Created', + value => sub { return $_[0]{values}{Statistics_Created_Count} } + }, + + Statistics_Resolved_Count => { + title => 'Resolved', + value => sub { return $_[0]{values}{Statistics_Resolved_Count} } + }, + + Statistics_Deleted_Count => { + title => 'Deleted', + value => sub { return $_[0]{values}{Statistics_Deleted_Count} } + }, + + Statistics_Totals => { + title => 'Totals', + value => sub { return $_[0]{values}{Statistics_Totals} } + }, + + Statistics_Status => { + title => 'Status', + value => sub { return $_[0]{values}{Statistics_Status} } + }, + + Statistics_Dynamic => { + # Depends on having a KEY as second param + value => sub { + my $record = shift; + my $line = shift; + my $key = shift; + return $$record{values}{$key} + } + }, + + # Everything from LINKTYPEMAP + (map { + $_ => { value => LinkCallback( $_ ) } + } keys %RT::Ticket::LINKTYPEMAP), + + '_CLASS' => { + value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' } + }, + +}; +</%ONCE> +<%init> +$m->comp( '/Elements/Callback', STAT_COLUMN_MAP => $STAT_COLUMN_MAP, _CallbackName => 'StatColumnMap'); +return StatColumnMap($Name, $Attr); +</%init> diff --git a/rt/share/html/RTx/Statistics/Elements/Tabs b/rt/share/html/RTx/Statistics/Elements/Tabs new file mode 100755 index 000000000..4fde113ea --- /dev/null +++ b/rt/share/html/RTx/Statistics/Elements/Tabs @@ -0,0 +1,72 @@ +%# BEGIN LICENSE BLOCK +%# +%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# +%# (Except where explictly superceded by other copyright notices) +%# +%# 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. +%# +%# Unless otherwise specified, all modifications, corrections or +%# extensions to this work which alter its source code become the +%# property of Best Practical Solutions, LLC when submitted for +%# inclusion in the work. +%# +%# +%# END LICENSE BLOCK +<& /Elements/Tabs, + tabs => $tabs, + current_toptab => 'RTx/Statistics/index.html', + current_tab => $current_tab, + Title => $Title &> + +<%INIT> + my $tabs = { A => { title => loc('Tickets per Day'), + path => 'RTx/Statistics/CallsQueueDay/index.html', + }, + B => { title => loc('Tickets by status'), + path => 'RTx/Statistics/OpenStalled/index.html', + }, + C => { title => loc('Multiple Queues'), + path => 'RTx/Statistics/CallsMultiQueue/index.html', + }, + D => { title => loc('Ticket Trends by Day'), + path => 'RTx/Statistics/DayOfWeek/index.html', + }, + E => { 'title' => loc('Time to Resolve'), + path => 'RTx/Statistics/Resolution/index.html', + }, + F => { 'title' => loc('Resolve Time Graph'), + path => 'RTx/Statistics/TimeToResolve/index.html', + }, + Z => { 'title' => loc('FAQ'), + path => 'RTx/Statistics/FAQ/index.html', + }, + }; + + # Now let callbacks add their extra tabs + $m->comp('/Elements/Callback', tabs => $tabs, %ARGS); + + foreach my $tab (sort keys %{$tabs}) { + if ($tabs->{$tab}->{'path'} eq $current_tab) { + $tabs->{$tab}->{"subtabs"} = $subtabs; + $tabs->{$tab}->{"current_subtab"} = $current_subtab; + } + } + +</%INIT> + + +<%ARGS> +$subtabs => undef +$current_tab => undef +$current_subtab => undef +$Title => undef +</%ARGS> |
