diff options
Diffstat (limited to 'rt/html/RTx/Statistics/Elements')
-rw-r--r-- | rt/html/RTx/Statistics/Elements/CollectionAsTable/Header | 126 | ||||
-rw-r--r-- | rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat | 109 | ||||
-rw-r--r-- | rt/html/RTx/Statistics/Elements/CollectionAsTable/Row | 112 | ||||
-rw-r--r-- | rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox | 103 | ||||
-rw-r--r-- | rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage | 5 | ||||
-rw-r--r-- | rt/html/RTx/Statistics/Elements/DateSelectRow | 55 | ||||
-rwxr-xr-x | rt/html/RTx/Statistics/Elements/DurationAsString | 18 | ||||
-rw-r--r-- | rt/html/RTx/Statistics/Elements/GraphBox | 27 | ||||
-rwxr-xr-x | rt/html/RTx/Statistics/Elements/SelectMultiQueue | 81 | ||||
-rw-r--r-- | rt/html/RTx/Statistics/Elements/StatColumnMap | 173 | ||||
-rwxr-xr-x | rt/html/RTx/Statistics/Elements/Tabs | 72 |
11 files changed, 881 insertions, 0 deletions
diff --git a/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header new file mode 100644 index 0000000..cecb02e --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header @@ -0,0 +1,126 @@ +%# 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> +@Format => undef +$FormatString => undef +$AllowSorting => undef +$Order=>undef +$BaseURL => undef +$Query => undef +$Rows => undef +$Page => undef +$maxitems => undef +</%ARGS> +<TR class="collection-as-table"> +<%perl> + +my %generic_query_args = ( Query => $Query, Rows => $Rows, Page => $Page, Format => $FormatString ); + +my $item = 0; +foreach my $col (@Format) { + $item++; + if ( $col->{title} eq 'NEWLINE' ) { + while ( $item < $maxitems ) { + $m->out(qq{<th class="collection-as-table"> </th>\n}); + $item++; + } + + $item = 0; + $m->out(qq{</TR>\n<TR class="collection-as-table">}); + } + else { + $m->out('<TH class="collection-as-table" '); + $m->out( 'align="' . $col->{align} . '"' ) if ( $col->{align} ); + $m->out( 'style="' . $col->{style} . '"' ) if ( $col->{style} ); + $m->out('>'); + my $title = $col->{title}; + $title =~ s/^__(.*)__$/$1/o; + $title = ( + $m->comp( + '/RTx/Statistics/Elements/StatColumnMap', + Name => $title, + Attr => 'title' + ) + || $title + ); + if ( + $AllowSorting + && $col->{'attribute'} + && $m->comp( + '/RTx/Statistics/Elements/StatColumnMap', + Name => $col->{'attribute'}, + Attr => 'attribute' + ) + ) + { + + $m->out( + '<a href="' . $BaseURL + . $m->comp( + '/Elements/QueryString', + %generic_query_args, + OrderBy => ( + $m->comp( + '/RTx/Statistics/Elements/StatColumnMap', + Name => $col->{'attribute'}, + Attr => 'attribute' + ) + || $col->{'attribute'} + ), + Order => ( $ARGS{'Order'} eq 'ASC' ? 'DESC' : 'ASC' ) + ) + . '">' + . loc($title) . '</a>' + ); + } + else { + $m->out( loc($title) ); + } + $m->out('</TH>'); + } +} +</%perl> +</TR> diff --git a/rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat b/rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat new file mode 100644 index 0000000..a482f81 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat @@ -0,0 +1,109 @@ +%# 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> +$Format +</%ARGS> + +<%init> +use Regexp::Common; +my @Columns; + +while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) { + my $col = $1; + + if ($col =~ /^$RE{quoted}$/o) { + substr($col,0,1) = ""; + substr($col,-1,1) = ""; + } + + my $colref; + + # kfh at mqsoftware.com added this to be able + # to create columns where the actual heading and value + # aren't know ahead of time. For instance queue names. + # it will work with subcols, but all subcols will have the same KEY + if ( $col =~ s!/KEY:([^/]+)!!io ) { + $colref->{'keyname'} = $1; + } + if ( $col =~ s!/STYLE:([^/]+)!!io ) { + $colref->{'style'} = $1; + } + if ( $col =~ s!/CLASS:([^/]+)!!io ) { + $colref->{'class'} = $1; + } + if ( $col =~ s!/TITLE:([^/]+)!!io ) { + $colref->{'title'} = $1; + } + if ( $col =~ s!/ALIGN:([^\/]+)!!io ) { + $colref->{'align'} = $1; + } + if ( $col =~ /__(.*?)__/gio ) { + my @subcols; + while ( $col =~ s/^(.*?)__(.*?)__//o ) { + push ( @subcols, $1 ) if ($1); + push ( @subcols, "__$2__" ); + $colref->{'attribute'} = $2; + } + push ( @subcols, $col ); + @{ $colref->{'output'} } = @subcols; + } + else { + @{ $colref->{'output'} } = ( "__" . $col . "__" ); + $colref->{'attribute'} = $col; + } + + if ( !$colref->{'title'} && grep { /^__(.*?)__$/io } + @{ $colref->{'output'} } ) + { + $colref->{'title'} = $1; + $colref->{'attribute'} = $1; + } + + + push @Columns, $colref; +} + return(@Columns); +</%init> diff --git a/rt/html/RTx/Statistics/Elements/CollectionAsTable/Row b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Row new file mode 100644 index 0000000..bcfabe5 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Row @@ -0,0 +1,112 @@ +%# 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> +$i => undef +@Format => undef +$record => undef +$maxitems => undef +$Depth => undef +$Warning => undef +</%ARGS> + +<%PERL> +$m->out('<TR class="' . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' ) . '" >' ); +my $item; +foreach my $column (@Format) { + if ( $column->{title} eq 'NEWLINE' ) { + while ( $item < $maxitems ) { + $m->out(qq{<td class="collection-as-table"> </td>\n}); + $item++; + } + $item = 0; + $m->out('</TR>'); + $m->out('<TR class="' + . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' ) + . '" >' ); + next; + } + $item++; + $m->out('<td class="collection-as-table" '); + $m->out( 'align="' . $column->{align} . '"' ) if ( $column->{align} ); + $m->out( 'style="' . $column->{style} . '"' ) if ( $column->{style} ); + $m->out('>'); + foreach my $subcol ( @{ $column->{output} } ) { + if ( $subcol =~ /^__(.*?)__$/o ) { + my $col = $1; + my $value = $m->comp( + '/RTx/Statistics/Elements/StatColumnMap', + Name => $col, + Attr => 'value' + ); + my @out; + + if ( $value && ref($value) ) { + + # All HTML snippets are returned by the callback function + # as scalar references. Data fetched from the objects are + # plain scalars, and needs to be escaped properly. + @out = + map { + ref($_) ? $$_ : $m->interp->apply_escapes( $_ => 'h' ) + } &{$value}( $record, $i, $column->{keyname} ); + ; + } + else { + + # Simple value; just escape it. + @out = $m->interp->apply_escapes( $value => 'h' ); + } + s/\n/<br>/gs for @out; + $m->out( @out ); + } + else { + $m->out($subcol); + } + } + $m->out('</td>'); +} +$m->out('</TR>'); +</%PERL> diff --git a/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox b/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox new file mode 100644 index 0000000..ce043e2 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox @@ -0,0 +1,103 @@ +<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_control')">X</a></span> + <span class="titleboxtitle" style="color: rgb(255, 255, 255);"> + <b><% $Title %></b></span> + </th> + <th style="color: rgb(51, 102, 153);" class="titleboxright"> + <span class="titleboxright"> </span> + </th> + </tr> + <tr id="element-stats_control"> + <td colspan="3" class="" bgcolor="#dddddd"> + <table border="0" cellpadding="1" cellspacing="0"> +% if (defined $ShowStatus) { + <tr> + <td class="collection-as-table" style="text-align:left;">Show Status:</td> + <td COLSPAN=3 class="collection-as-table" style="text-align:left;"> + <& /Elements/SelectStatus, Name=>"status", Default => $Status, DefaultValue => undef &> + </td> + </tr> +% } +% if (defined $ShowSingleQueue) { + <tr> + <td class="collection-as-table" style="text-align:left;">Show Queue:</td> + <td COLSPAN=3 class="collection-as-table" style="text-align:left;"> + <& /Elements/SelectQueue, Name=>"Queue", Default=>$Queue ,ShowNullOption=>0, + CheckQueueRight=>'SeeQueue' &> + </td> + </tr> +% } +% if (defined $ShowDates) { + <tr> + <& /RTx/Statistics/Elements/DateSelectRow, Label => "Start Date:", + refMonth => $sMonth, nameMonth => "sMonth", + refDay => $sDay, nameDay => "sDay", + refYear => $sYear, nameYear => "sYear" &> + </tr> + <tr> + <& /RTx/Statistics/Elements/DateSelectRow, Label => "End Date:", + refMonth => $eMonth, nameMonth => "eMonth", + refDay => $eDay, nameDay => "eDay", + refYear => $eYear, nameYear => "eYear" &> + </tr> + <tr> + <td class="collection-as-table" style="text-align:left;">Show Weekends:</td> + <td class="collection-as-table" style="text-align:left;"> + <select name=weekends> + <option value=0 <% (!$weekends) && 'selected' %> >No</option> + <option value=1 <% $weekends && 'selected' %> >Yes</option> + </select> + </td> + </tr> +% } +% if (defined $ShowMultiQueues) { + <tr> +% if (defined $ShowDates) { +%# If we're showing the dates, we put these side by side. + <td COLSPAN=2 class="collection-as-table" style="text-align:left;">Select All Queues: <input type=checkbox name="AddAllCheck"></td> + <td COLSPAN=3 class="collection-as-table" > + <& /RTx/Statistics/Elements/SelectMultiQueue, Name=>"queues", Selected=>$queues_ref, + ShowNullOption=>0, CheckQueueRight=>'SeeQueue', Size => 10, NamedValues => 1 &> + </td> +% } else { + <td COLSPAN=3 class="collection-as-table" style="text-align:left;"> + <& /RTx/Statistics/Elements/SelectMultiQueue, Name=>"queues", Selected=>$queues_ref, + ShowNullOption=>0, CheckQueueRight=>'SeeQueue', Size => 10, NamedValues => 1 &> + </td> + </tr> + <tr> + <td class="collection-as-table" style="text-align:left;">Select All Queues: <input type=checkbox name="AddAllCheck"></td> +% } + </tr> +% } + <& /RTx/Statistics/Elements/ControlsAsTable/UpdatePage &> + </table> + </td> + </tr> + </tbody> +</table> + + +<BR> +<%args> +$Title => undef +$ShowMultiQueues => undef +$queues_ref => undef +$ShowDates => undef +$sMonth => undef +$sDay => undef +$sYear => undef +$eMonth => undef +$eDay => undef +$eYear => undef +$weekends => undef +$ShowSingleQueue => undef +$Queue => undef +$ShowStatus => undef +$Status => undef +</%args> + diff --git a/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage b/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage new file mode 100644 index 0000000..b4ccfd5 --- /dev/null +++ b/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage @@ -0,0 +1,5 @@ +<tr> + <td colspan="4" style="text-align:center;padding-top:3px; background-color:#C8C8C8;"> + <INPUT TYPE="submit" VALUE="<&|/l&>Update Page</&>"> + </td> +</tr> diff --git a/rt/html/RTx/Statistics/Elements/DateSelectRow b/rt/html/RTx/Statistics/Elements/DateSelectRow new file mode 100644 index 0000000..325e168 --- /dev/null +++ b/rt/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/html/RTx/Statistics/Elements/DurationAsString b/rt/html/RTx/Statistics/Elements/DurationAsString new file mode 100755 index 0000000..c0b4d9a --- /dev/null +++ b/rt/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/html/RTx/Statistics/Elements/GraphBox b/rt/html/RTx/Statistics/Elements/GraphBox new file mode 100644 index 0000000..3dc0697 --- /dev/null +++ b/rt/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/html/RTx/Statistics/Elements/SelectMultiQueue b/rt/html/RTx/Statistics/Elements/SelectMultiQueue new file mode 100755 index 0000000..637f6dc --- /dev/null +++ b/rt/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/html/RTx/Statistics/Elements/StatColumnMap b/rt/html/RTx/Statistics/Elements/StatColumnMap new file mode 100644 index 0000000..aef9e2f --- /dev/null +++ b/rt/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/html/RTx/Statistics/Elements/Tabs b/rt/html/RTx/Statistics/Elements/Tabs new file mode 100755 index 0000000..4fde113 --- /dev/null +++ b/rt/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> |