[rt-devel] PATCH: 'Bounce' (re-send) action for data transactions

Victor Danilchenko danilche at cs.umass.edu
Thu Oct 23 15:00:08 EDT 2003


	Hi,

	This is my first contribution (as well as my first semi-serious
foray into both RT innards and Mason), so be please gentle...

	Summary:
	In our RT installation, we have often wished to be able to
forward a message from RT to an arbitrary address, most often for the
purpose of e-mailing attachments that came with the message (downloading
them by hand and then mailing them is a pain). This seems impossible in
current RT; so I implemented this capability. I have added a third
action tab ('[Bounce]') to share/html/Ticket/Elements/ShowTransaction,
and I have created share/html/Ticket/Bounce.html

	The code allows you to specify an arbitrary list of To: and Cc:
recipients, as well as the subject, the latter being initially set from
the subject of the first attachment of transaction, or the ticket
subject if the former doesn't exist. It will insert the ticket tag into
subject if necessary. Once it receives the destination information, it
will construct a MIME::Entity object, populate it with all the
attachments for a given transaction, and send it on its way via the
Action::Mail::SendEmail facility.

	Two questions:

1) is the patch stylistically OK? is this patch submission? Should I
   supply any additional info, such as the snapshot of the modified
   interface?
2) Is it actually useful to anyone besides my group?

-- 
|  Victor  Danilchenko  | When in danger or in doubt,        |
| danilche at cs.umass.edu | run in circles, scream, and shout. |
|   CSCF   |   5-4231   |                    Robert Heinlein |
-------------- next part --------------
--- share/html/Ticket/Elements/ShowTransaction.orig	2003-10-23 14:19:03.000000000 -0400
+++ share/html/Ticket/Elements/ShowTransaction	2003-10-23 14:21:02.000000000 -0400
@@ -164,8 +164,16 @@
 	     $titlebar_commands .= 
 	     "[<a href=\"Update.html?id=".$Transaction->Ticket. 
 	     "&QuoteTransaction=".$Transaction->Id.
-	     "&Action=Comment\">". loc('Comment') ."</a>]";
+	     "&Action=Comment\">". loc('Comment') ."</a>]&nbsp;";
 	}
+
+	if ($Transaction->TicketObj->CurrentUserHasRight('ShowTicket')) {
+		$titlebar_commands .= 
+	  	  "[<a href=\"Bounce.html?id=".
+		  $Transaction->Ticket . "&QuoteTransaction=".$Transaction->Id.
+		  "\">". loc('Bounce') ."</a>]";
+	}
+
 }
 
 </%INIT>
--- share/html/Ticket/Bounce.html	2003-10-23 14:41:55.000000000 -0400
+++ share/html/Ticket/Bounce.html	2003-10-23 14:33:37.000000000 -0400
@@ -0,0 +1,107 @@
+%# BEGIN LICENSE BLOCK
+%# 
+%# Copyright (c) 1996-2003 Jesse Vincent <jesse at bestpractical.com>
+%# 
+%# (Except where explictly superceded by other copyright notices)
+%# 
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%# 
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+%# General Public License for more details.
+%# 
+%# Unless otherwise specified, all modifications, corrections or
+%# extensions to this work which alter its source code become the
+%# property of Best Practical Solutions, LLC when submitted for
+%# inclusion in the work.
+%# 
+%# 
+%# END LICENSE BLOCK
+<& /Elements/Header, Title => loc("Bounce Transaction # [_1] [_2]", $Ticket->Id, $Ticket->Subject) &>
+<& /Ticket/Elements/Tabs, 
+    Ticket => $Ticket, current_tab => 'Ticket/Bounce.html?id='.$Ticket->id, 
+    Title => loc("Bounce Transaction # [_1] [_2]", $Ticket->Id, $Ticket->Subject) &>
+
+<% $To && "<h1>Message sent!</h1>" | n %>
+
+% if ($To) {
+%     use RT::Action::SendEmail;
+%     use MIME::Entity;
+%     my $sub = $Subject;
+%     my $tag  = "[$RT::rtname #" . $Ticket->id . "]";
+%     $sub = "$tag $sub" unless $sub =~ /\Q$tag\E/;
+%     my $attachments = $Transaction->Attachments; 
+%     my $MIMEObj = MIME::Entity->build (Type    => "multipart/mixed",
+%                                        From    => "$RT::CorrespondAddress",
+%                                        To      => "$To",
+%                                        Cc      => "$Cc",
+%                                        Subject => "$sub");
+%     for (my $attch = $attachments->First; $attch; $attch = $attachments->Next) {
+%         $MIMEObj->attach(Type => $attch->ContentType,
+%                          Data => $attch->Content);
+%     }
+%
+%     my $mailer = new RT::Action::SendEmail;
+%     $mailer->SendMessage($MIMEObj);
+% }
+
+<BR>
+<FORM ACTION="Bounce.html" NAME="TicketBounce" 
+	METHOD=GET enctype="multipart/form-data">
+<input type="hidden" name="id" value="<% "$id" %>">
+<input type="hidden" name="QuoteTransaction" value="<% $Transaction->id %>">
+
+<TABLE BORDER=0 cellspacing=0 cellpadding=0>
+<TR><TD align=right>Subject:</TD>
+    <TD><input type="text" name="Subject" size=60 value="<% "$Subject" %>"></TD></TR>
+<TR><TD align=right>To:</TD>
+    <TD><input type="text" name="To" size=60 value="<% "$To" %>"></TD></TR>
+<TR><TD align=right>Cc:</TD>
+    <TD><input type="text" name="Cc" size=60></TD></TR>
+<TR><TD colspan=2>
+<& /Elements/Submit, Name => 'SubmitTicket' &>
+
+    </TD></TR>
+</TABLE>
+
+<TABLE WIDTH=100% CELLSPACING=0 CELLPADDING=2 BORDER=0>
+      <& /Ticket/Elements/ShowTransaction, Ticket => $Ticket, Transaction => $Transaction, ShowHeaders => $ARGS{'ShowHeaders'}, ShowTitleBarCommands => $ShowTitleBarCommands, Collapsed => $Collapsed &>
+</TABLE>
+</FORM>
+
+<%ARGS>
+$id => undef
+$ShowTitleBarCommands => 0
+$Collapsed => 0
+$To => undef
+$Cc => undef
+$Subject => undef
+</%ARGS>
+
+<%INIT>
+
+  
+
+my $Ticket = LoadTicket ($id);
+my $Transaction;
+for (my $trs = $Ticket->Transactions;
+     $Transaction = $trs->Next;) {
+    last if $Transaction->id == $ARGS{'QuoteTransaction'};
+}
+
+my $header = (grep (/^Subject/i, split (/\n/, $Transaction->Message->First->Headers)))[0];
+$Subject = $1 if ($header && $header =~ /^subject:\s+(.*)/i);
+$Subject ||= $Ticket->Subject;
+
+unless ($Ticket->CurrentUserHasRight('ShowTicket')) {
+	Abort("No permission to view ticket");
+}
+</%INIT>
+
+
+
+


More information about the Rt-devel mailing list