[Rt-commit] r5021 - in rtir/branches/1.9-EXPERIMENTAL: html/RTIR html/RTIR/Elements lib/RT/Action lib/RT/Condition

ruz at bestpractical.com ruz at bestpractical.com
Tue Apr 11 23:03:42 EDT 2006


Author: ruz
Date: Tue Apr 11 23:03:39 2006
New Revision: 5021

Modified:
   rtir/branches/1.9-EXPERIMENTAL/   (props changed)
   rtir/branches/1.9-EXPERIMENTAL/html/RTIR/Elements/QueueTabs
   rtir/branches/1.9-EXPERIMENTAL/html/RTIR/Update.html
   rtir/branches/1.9-EXPERIMENTAL/lib/RT/Action/RTIR_SetBlockState.pm
   rtir/branches/1.9-EXPERIMENTAL/lib/RT/Condition/RTIR_RequireStateChange.pm

Log:
 r1292 at cubic-pc:  cubic | 2006-04-12 07:10:07 +0400
 * Blocks workflow
 ** activate block only when requestor replies
 ** remove block when it's in 'pending removal' state and requestor replies
 ** 'Pending Removal' action tab


Modified: rtir/branches/1.9-EXPERIMENTAL/html/RTIR/Elements/QueueTabs
==============================================================================
--- rtir/branches/1.9-EXPERIMENTAL/html/RTIR/Elements/QueueTabs	(original)
+++ rtir/branches/1.9-EXPERIMENTAL/html/RTIR/Elements/QueueTabs	Tue Apr 11 23:03:39 2006
@@ -224,6 +224,12 @@
                 };
             }
         }
+        if ( $Type eq 'Block' && $Ticket->FirstCustomFieldValue('_RTIR_State') eq 'active' ) {
+            $actions->{'Ab'} = {
+                path  => "RTIR/Update.html?Action=Comment&DefaultStatus=stalled&id=$id",
+                title => loc('Pending Removal'),
+            };
+        }
     }
 
     if ( $can{'OwnTicket'} ) {

Modified: rtir/branches/1.9-EXPERIMENTAL/html/RTIR/Update.html
==============================================================================
--- rtir/branches/1.9-EXPERIMENTAL/html/RTIR/Update.html	(original)
+++ rtir/branches/1.9-EXPERIMENTAL/html/RTIR/Update.html	Tue Apr 11 23:03:39 2006
@@ -31,8 +31,10 @@
 <form action="Update.html" name="TicketUpdate" 
 	method="post" enctype="multipart/form-data">
 <input type="hidden" name="QuoteTransaction" value="<% $ARGS{'QuoteTransaction'} || '' %>" />
-<input type="hidden" name="DefaultStatus" value="<% $DefaultStatus || '' %>" />
-<input type="hidden" name="Status" value="<% $DefaultStatus || '' %>" />
+% if ( $ARGS{'Status'} ) {
+<input type="hidden" name="DefaultStatus" value="<% $DefaultStatus %>" />
+<input type="hidden" name="Status" value="<% $DefaultStatus %>" />
+% }
 <input type="hidden" name="Action" value="<% $Action || '' %>" />
 <input type="hidden" name="TakeOrStealFirst" value="<% $ARGS{TakeOrStealFirst} || '' %>" />
 % if ($Type eq 'Report' and $ARGS{'DefaultStatus'} eq 'rejected') {
@@ -115,7 +117,8 @@
     $name = $Type;
 }
 
-$DefaultStatus ||= $ARGS{'Status'} || $Ticket->Status;
+$DefaultStatus ||= $ARGS{'Status'} || '';
+$ARGS{'Status'} ||= $DefaultStatus; # XXX: we should get rid of the DefaultStatus
 $DefaultStatus = 'open' if $DefaultStatus eq 'new';
 
 if ( $DefaultStatus eq 'resolved' ) {

Modified: rtir/branches/1.9-EXPERIMENTAL/lib/RT/Action/RTIR_SetBlockState.pm
==============================================================================
--- rtir/branches/1.9-EXPERIMENTAL/lib/RT/Action/RTIR_SetBlockState.pm	(original)
+++ rtir/branches/1.9-EXPERIMENTAL/lib/RT/Action/RTIR_SetBlockState.pm	Tue Apr 11 23:03:39 2006
@@ -59,12 +59,37 @@
     my $self = shift;
     my %state = (
         new      => 'pending activation',
-        open     => 'active',
+#        open     => 'active',
         stalled  => 'pending removal',
         resolved => 'removed',
         rejected => 'removed',
     );
-    return $state{ $self->TicketObj->Status } || '';
+    my $t = $self->TicketObj;
+    my $status = $t->Status;
+    return $state{ $status } if $state{ $status };
+
+    my $old_state = $t->FirstCustomFieldValue('_RTIR_State');
+
+    if ( $old_state eq 'pending activation' ) {
+        # switch to active state if it is reply from requestor(s)
+        my $txn = $self->TransactionObj;
+        return '' unless $txn->Type eq 'Correspond';
+        return '' unless $t->Requestors->HasMember( $txn->CreatorObj->PrincipalObj );
+        return 'active';
+    } elsif ( $old_state eq 'pending removal' ) {
+        # switch to removed state when requestor(s) replies
+        # but do it via changing status!
+        my $txn = $self->TransactionObj;
+        return '' unless $txn->Type eq 'Correspond';
+        return '' unless $t->Requestors->HasMember( $txn->CreatorObj->PrincipalObj );
+        my ($val, $msg) = $t->SetStatus( 'resolved' );
+        $RT::Logger->error("Couldn't change status: $msg") unless $val;
+        return '';
+    } elsif ( $status eq 'open' && $old_state eq 'removed' ) {
+        return 'active';
+    }
+
+    return '';
 }
 
 eval "require RT::Action::RTIR_SetBlockState_Vendor";

Modified: rtir/branches/1.9-EXPERIMENTAL/lib/RT/Condition/RTIR_RequireStateChange.pm
==============================================================================
--- rtir/branches/1.9-EXPERIMENTAL/lib/RT/Condition/RTIR_RequireStateChange.pm	(original)
+++ rtir/branches/1.9-EXPERIMENTAL/lib/RT/Condition/RTIR_RequireStateChange.pm	Tue Apr 11 23:03:39 2006
@@ -72,6 +72,8 @@
         ( $type =~ /^(Add|Delete)Link$/ and $field eq "MemberOf" ) or
         ( $type eq "Set" and $field eq "Queue" );
 
+    return 1 if $type eq 'Correspond' && $self->TicketObj->QueueObj->Name eq 'Blocks';
+
     return 0;
 }
 


More information about the Rt-commit mailing list