[Rt-commit] r5050 - in rt/branches/3.7-EXPERIMENTAL: . html/Search lib/RT/Report

ruz at bestpractical.com ruz at bestpractical.com
Wed Apr 19 11:18:50 EDT 2006


Author: ruz
Date: Wed Apr 19 11:18:48 2006
New Revision: 5050

Modified:
   rt/branches/3.7-EXPERIMENTAL/   (props changed)
   rt/branches/3.7-EXPERIMENTAL/html/Search/Chart
   rt/branches/3.7-EXPERIMENTAL/html/Search/Elements/Chart
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Report/Tickets.pm

Log:
 r2409 at cubic-pc:  cubic | 2006-04-19 19:26:05 +0400
 * change API of the GroupBy to be consistent with DBIx::SB
 * add initial changes to allow to group by custom field values


Modified: rt/branches/3.7-EXPERIMENTAL/html/Search/Chart
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Search/Chart	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Search/Chart	Wed Apr 19 11:18:48 2006
@@ -34,7 +34,7 @@
 my $tix = RT::Report::Tickets->new( $session{'CurrentUser'} );
 $tix->FromSQL( $Query );
 my $count_name = $tix->Column( FUNCTION => 'COUNT', FIELD => 'id' );
-$tix->GroupBy( $PrimaryGroupBy );
+$tix->GroupBy( FIELD => $PrimaryGroupBy );
 my $value_name = $tix->Column( FIELD => $PrimaryGroupBy );
 
 my %class = (

Modified: rt/branches/3.7-EXPERIMENTAL/html/Search/Elements/Chart
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Search/Elements/Chart	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Search/Elements/Chart	Wed Apr 19 11:18:48 2006
@@ -9,7 +9,7 @@
 my $tix = RT::Report::Tickets->new( $session{'CurrentUser'} );
 $tix->FromSQL( $Query );
 my $count_name = $tix->Column( FUNCTION => 'COUNT', FIELD => 'id' );
-$tix->GroupBy( $PrimaryGroupBy );
+$tix->GroupBy( FIELD => $PrimaryGroupBy );
 my $value_name = $tix->Column( FIELD => $PrimaryGroupBy );
 
 my %class = (

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Report/Tickets.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Report/Tickets.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Report/Tickets.pm	Wed Apr 19 11:18:48 2006
@@ -1,7 +1,10 @@
 package RT::Report::Tickets;
+
 use base qw/RT::Tickets/;
 use RT::Report::Tickets::Entry;
 
+use strict;
+use warnings;
 
 sub Groupings {
     qw (Owner
@@ -26,19 +29,16 @@
     StartsMonthly
     StartsAnnually
     )
-
 }
 
 sub GroupBy {
     my $self = shift;
-    my $field = shift;
+    my %args = ref $_[0]? %{ $_[0] }: (@_);
 
-    $self->{'_group_by_field'} = $field; 
-
-    my $function;
-    (undef, $function) = $self->_FieldToFunction($field);
-    $self->GroupByCols({ FIELD => $field, FUNCTION => $function});
+    $self->{'_group_by_field'} = $args{'FIELD'};
+    %args = $self->_FieldToFunction( %args );
 
+    $self->SUPER::GroupBy( \%args );
 }
 
 sub Column {
@@ -46,9 +46,10 @@
     my %args = (@_);
 
     if ( $args{'FIELD'} && !$args{'FUNCTION'} ) {
-        ( undef, $args{'FUNCTION'} ) = $self->_FieldToFunction( $args{'FIELD'} ); }
+        %args = $self->_FieldToFunction( %args );
+    }
 
-    return $self->SUPER::Column(%args);
+    return $self->SUPER::Column( %args );
 }
 
 =head2 _DoSearch
@@ -60,13 +61,10 @@
 
 sub _DoSearch {
     my $self = shift;
-    $self->SUPER::_DoSearch(@_);
-    $self->AddEmptyRows();
-
+    $self->SUPER::_DoSearch( @_ );
+    $self->AddEmptyRows;
 }
 
-
-
 =head2 _FieldToFunction FIELD
 
 Returns a tuple of the field or a database function to allow grouping on that 
@@ -74,29 +72,35 @@
 
 =cut
 
-sub _FieldToFunction{
+sub _FieldToFunction {
     my $self = shift;
-    my $field = shift;
-    my $func = '';
+    my %args = (@_);
+
+    my $field = $args{'FIELD'};
 
     if ($field =~ /^(.*)(Daily|Monthly|Annually)$/) {
-        $field = $1;
-        $grouping = $2;
-        if ($grouping =~ /Daily/) {
-            $func = "SUBSTR($field,1,10)";
-            $field = '';
+        my ($field, $grouping) = ($1, $2);
+        if ( $grouping =~ /Daily/ ) {
+            $args{'FUNCTION'} = "SUBSTR($field,1,10)";
         }
-        elsif ($grouping =~ /Monthly/) {
-            $func = "SUBSTR($field,1,7)";
-            $field = '';
+        elsif ( $grouping =~ /Monthly/ ) {
+            $args{'FUNCTION'} = "SUBSTR($field,1,7)";
         }
-        elsif ($grouping =~ /Annually/) {
-            $func = "SUBSTR($field,1,4)";
-            $field = '';
+        elsif ( $grouping =~ /Annually/ ) {
+            $args{'FUNCTION'} = "SUBSTR($field,1,4)";
+        }
+    } elsif ( $field =~ /^(?:CF|CustomField)\.{(.*)}$/ ) { #XXX: use CFDecipher method
+        my $cf_name = $1;
+        my $cf = RT::CustomField->new( $self->CurrentUser );
+        $cf->Load($cf_name);
+        unless ( $cf->id ) {
+            $RT::Logger->error("Couldn't load CustomField #$cf_name");
+        } else {
+            my ($ticket_cf_alias, $cf_alias) = $self->_CustomFieldJoin($cf->id, $cf->id, $cf_name);
+            @args{qw(ALIAS FIELD)} = ($ticket_cf_alias, 'Content');
         }
-
     }
-    return ($field, $func);
+    return %args;
 }
 
 
@@ -136,19 +140,18 @@
 
 sub AddEmptyRows {
     my $self = shift;
-     if ( $self->{'_group_by_field'} eq 'Status' ) {
-            foreach my $status (RT::Queue->new($self->CurrentUser)->StatusArray ) {
-            unless ( grep { $_->__Value('Status') eq $status } @{ $self->ItemsArrayRef } )  {
-                my $record =     $self->NewItem;
-                $record->LoadFromHash(
-                        {
-                            id     => 0,
-                            status => $status
-                        }
-                    );
-                $self->AddRecord($record);
-            } 
+    if ( $self->{'_group_by_field'} eq 'Status' ) {
+        foreach my $status ( RT::Queue->new($self->CurrentUser)->StatusArray ) {
+            next if grep $_->__Value('Status') eq $status, @{ $self->ItemsArrayRef };
+
+            my $record = $self->NewItem;
+            $record->LoadFromHash( {
+                id     => 0,
+                status => $status
+            } );
+            $self->AddRecord($record);
+        }
     }
 }
-}
+
 1;


More information about the Rt-commit mailing list