[rt-commit] [svn] r503 - rt/branches/rt-3.1/lib/RT/Action

leira at fsck.com leira at fsck.com
Mon Mar 8 16:43:53 EST 2004


Author: leira
Date: Mon Mar  8 16:43:53 2004
New Revision: 503

Modified:
   rt/branches/rt-3.1/lib/RT/Action/CreateTickets.pm
Log:
Support for offline Watcher update.


Modified: rt/branches/rt-3.1/lib/RT/Action/CreateTickets.pm
==============================================================================
--- rt/branches/rt-3.1/lib/RT/Action/CreateTickets.pm	(original)
+++ rt/branches/rt-3.1/lib/RT/Action/CreateTickets.pm	Mon Mar  8 16:43:53 2004
@@ -468,6 +468,10 @@
 			 TimeLeft
 			 Status
 			 Queue
+			 Due
+			 Starts
+			 Started
+			 Resolved
 			 );
 
 	my $id = $template_id;
@@ -494,12 +498,14 @@
 	if ($base ne $current) {
 	    push @results, "Could not update ticket " . $T::Tickets{$template_id}->Id . ": Ticket has changed";
 	    next;
-	} 
+	}
 
 	push @results,
 	    $T::Tickets{$template_id}->Update(AttributesRef => \@attribs,
 					      ARGSRef => $ticketargs);
 
+	push @results, $self->UpdateWatchers($T::Tickets{$template_id}, $ticketargs);
+
 	next unless exists $ticketargs->{'UpdateType'};
         if ( $ticketargs->{'UpdateType'} =~ /^(private|public)$/ ) {
             my ( $Transaction, $Description, $Object ) = $T::Tickets{$template_id}->Comment(
@@ -826,6 +832,46 @@
     $string .= "FinalPriority: \n";
 
     return $string;
+}
+
+sub UpdateWatchers {
+    my $self = shift;
+    my $ticket = shift;
+    my $args = shift;
+
+    my @results;
+
+    foreach my $type qw(Requestor Cc AdminCc) {
+	my $method = $type.'Addresses';
+	my $oldaddr = $ticket->$method;
+	my $newaddr = $args->{$type};
+	
+	my @old = split (', ', $oldaddr);
+	my @new = split (', ', $newaddr);
+	my %oldhash = map {$_ => 1} @old;
+	my %newhash = map {$_ => 1} @new;
+	
+	my @add = grep(!defined $oldhash{$_}, @new);
+	my @delete = grep(!defined $newhash{$_}, @old);
+	
+	foreach (@add) {
+	    my ($val, $msg) =
+		$ticket->AddWatcher(Type => $type,
+				    Email => $_);
+	    
+	    push @results, $ticket->loc("Ticket [_1]", $ticket->Id) . 
+		': ' . $msg;
+	}
+	
+	foreach (@delete) {
+	    my ($val, $msg) =
+		$ticket->DeleteWatcher(Type => $type,
+				       Email => $_);
+	    push @results, $ticket->loc("Ticket [_1]", $ticket->Id) . 
+		': ' . $msg;
+	}
+    }
+    return @results;
 }
 
 eval "require RT::Action::CreateTickets_Vendor";



More information about the Rt-commit mailing list