[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