[Rt-commit] rt branch, 3.8-approvals-queryfix, created. rt-3.8.8-144-ge69223f

Kevin Falcone falcone at bestpractical.com
Tue Aug 31 15:20:42 EDT 2010


The branch, 3.8-approvals-queryfix has been created
        at  e69223f5436077aabc40cf6e0be825cff238c48f (commit)

- Log -----------------------------------------------------------------
commit ae634b768fd3500f775659dfd1dedc3ed673f834
Author: Kevin Falcone <falcone at bestpractical.com>
Date:   Tue Aug 31 15:04:04 2010 -0400

    Update from RT2 code
    
    Rather than making two queries, OR the two owner conditions and get
    one list of tickets.
    This was written before we had TicketSQL, convert to building a query
    and using that rather than Limit which converts to TicketSQL internally.

diff --git a/share/html/Approvals/Elements/PendingMyApproval b/share/html/Approvals/Elements/PendingMyApproval
index 0a1047f..529c626 100755
--- a/share/html/Approvals/Elements/PendingMyApproval
+++ b/share/html/Approvals/Elements/PendingMyApproval
@@ -50,12 +50,10 @@
     onLoadHook('createCalendarLink("CreatedAfter");');
 --></script>
 % my %done;
-% foreach ($tickets, $group_tickets) {
-%   while (my $ticket = $_->Next() ) {
-%     next if !$ARGS{'ShowDependent'} and $ticket->HasUnresolvedDependencies( Type => 'approval' );
-%     next if $done{$ticket->Id}++; # don't show duplicate tickets
+% while (my $ticket = $tickets->Next() ) {
+%   next if !$ARGS{'ShowDependent'} and $ticket->HasUnresolvedDependencies( Type => 'approval' );
+%   next if $done{$ticket->Id}++; # don't show duplicate tickets
 <& Approve, ticket => $ticket &>
-%   }
 % }
 
 <&| /Widgets/TitleBox, title => loc("Search for approvals") &>
@@ -74,38 +72,38 @@
 
 <%init>
 my $tickets = RT::Tickets->new( $session{'CurrentUser'} );
-$tickets->LimitOwner( VALUE => $session{'CurrentUser'}->Id );
-
-# also consider AdminCcs as potential approvers.
-my $group_tickets = RT::Tickets->new( $session{'CurrentUser'} );
-$group_tickets->LimitWatcher( VALUE => $session{'CurrentUser'}->UserObj->EmailAddress, TYPE => 'AdminCc' );
-
 my $created_before = RT::Date->new( $session{'CurrentUser'} );
 my $created_after = RT::Date->new( $session{'CurrentUser'} );
 
-foreach ($tickets, $group_tickets) {
-    $_->Limit( FIELD      => 'Type', VALUE => 'approval' );
+my @clauses;
+push @clauses,
+    "Owner = '".$session{CurrentUser}->Id."' OR AdminCc = '".$session{CurrentUser}->UserObj->EmailAddress."'";
+push @clauses, "Type = 'Approval'";
+
+my @statuses;
+if ( $ARGS{'ShowResolved'} ) {
+    push @statuses,'resolved';
+}
+if ( $ARGS{'ShowRejected'} ) {
+    push @statuses,'rejected';
+}
+if ( $ARGS{'ShowPending'} || ( !$ARGS{'ShowRejected'} && !$ARGS{'Resolved'} ) ) {
+    push @statuses,qw(open new stalled);
+}
 
-    if ( $ARGS{'ShowResolved'} ) {
-	$_->LimitStatus( VALUE => 'resolved' );
-    }
-    if ( $ARGS{'ShowRejected'} ) {
-	$_->LimitStatus( VALUE => 'rejected' );
-    }
-    if ( $ARGS{'ShowPending'} || ( !$ARGS{'ShowRejected'} && !$ARGS{'Resolved'} ) ) {
-	$_->LimitStatus( VALUE => 'open' );
-	$_->LimitStatus( VALUE => 'new' );
-	$_->LimitStatus( VALUE => 'stalled' );
-    }
+push @clauses, join(' OR ', map { " Status = '$_' " } @statuses);
 
-    if ( $ARGS{'CreatedBefore'} ) {
-	$created_before->Set( Format => 'unknown', Value => $ARGS{'CreatedBefore'} );
-	$_->LimitCreated( OPERATOR => "<=", VALUE => $created_before->ISO );
-    }
-    if ( $ARGS{'CreatedAfter'} ) {
-	$created_after->Set( Format => 'unknown', Value => $ARGS{'CreatedAfter'} );
-	$_->LimitCreated( OPERATOR => ">=", VALUE => $created_after->ISO );
-    }
+if ( $ARGS{'CreatedBefore'} ) {
+    $created_before->Set( Format => 'unknown', Value => $ARGS{'CreatedBefore'} );
+    push @clauses, "Created <= ".$created_before->ISO;
 }
+if ( $ARGS{'CreatedAfter'} ) {
+    $created_after->Set( Format => 'unknown', Value => $ARGS{'CreatedAfter'} );
+    push @clauses, "Created >= ".$created_after->ISO;
+}
+
+$m->callback(CallbackName => 'Search', clauses => \@clauses);
+my $query = join (' AND ', map { "( $_ )" } @clauses);
+$tickets->FromSQL($query);
 
 </%init>

commit e69223f5436077aabc40cf6e0be825cff238c48f
Author: Kevin Falcone <falcone at bestpractical.com>
Date:   Tue Aug 31 15:11:30 2010 -0400

    Order the Approvals
    
    Without this, you're going to get random orderings on Oracle or Pg,
    depending on the current state of statistics.

diff --git a/share/html/Approvals/Elements/PendingMyApproval b/share/html/Approvals/Elements/PendingMyApproval
index 529c626..52e6031 100755
--- a/share/html/Approvals/Elements/PendingMyApproval
+++ b/share/html/Approvals/Elements/PendingMyApproval
@@ -105,5 +105,6 @@ if ( $ARGS{'CreatedAfter'} ) {
 $m->callback(CallbackName => 'Search', clauses => \@clauses);
 my $query = join (' AND ', map { "( $_ )" } @clauses);
 $tickets->FromSQL($query);
+$tickets->OrderBy( FIELD => 'id' );
 
 </%init>

-----------------------------------------------------------------------


More information about the Rt-commit mailing list