Merge branch 'master' of https://github.com/jgoodman/Freeside
[freeside.git] / rt / lib / RT / Action / ExtractSubjectTag.pm
index 7121c13..92a7214 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
 #
 # END BPS TAGGED BLOCK }}}
 
+=head1 NAME
+
+  RT::Action::ExtractSubjectTag
+
+=head1 DESCRIPTION
+
+ExtractSubjectTag is a ScripAction which allows ticket bonding between
+two RT instances or between RT and other Ticket systems like Siebel
+or Remedy.
+
+By default this ScripAction is set up to run on every transaction on
+every Correspondence.
+
+One can configure this ScripActions behaviour by changing the
+global C<$ExtractSubjectTagMatch> in C<RT_Config.pm>.
+
+If a transaction's subject matches this regexp, we append the match
+tag to the ticket's current subject. This helps ensure that
+further communication on the ticket will include the remote
+system's subject tag.
+
+If you modify this code, be careful not to remove the code where it
+ensures that it only examines remote systems' tags.
+
+=head1 EXAMPLE
+
+As an example, Siebel will set their subject tag to something
+like:
+
+    B<[SR ID:1-554]>
+
+To record this tag in the local ticket's subject, we need to change
+ExtractSubjectTagMatch to something like:
+
+    Set($ExtractSubjectTagMatch, qr/\[[^\]]+[#:][0-9-]+\]/);
+
+=cut
+
 package RT::Action::ExtractSubjectTag;
 use base 'RT::Action';
 use strict;
+use warnings;
 
 sub Describe {
     my $self = shift;
@@ -63,13 +102,15 @@ sub Commit {
     my $self            = shift;
     my $Transaction     = $self->TransactionObj;
     my $FirstAttachment = $Transaction->Attachments->First;
-    return 1 unless ($FirstAttachment);
+    return 1 unless $FirstAttachment;
+
+    my $TransactionSubject = $FirstAttachment->Subject;
+    return 1 unless $TransactionSubject;
 
     my $Ticket = $self->TicketObj;
 
     my $TicketSubject      = $self->TicketObj->Subject;
     my $origTicketSubject  = $TicketSubject;
-    my $TransactionSubject = $FirstAttachment->Subject;
 
     my $match   = RT->Config->Get('ExtractSubjectTagMatch');
     my $nomatch = RT->Config->Get('ExtractSubjectTagNoMatch');