[Rt-commit] rt branch, 4.0/preserve-txn-squelching, created. rt-4.0.9-15-g983cafa

Thomas Sibley trs at bestpractical.com
Tue Jan 22 19:47:19 EST 2013


The branch, 4.0/preserve-txn-squelching has been created
        at  983cafa82186758eb0a3ba56431a9961db019048 (commit)

- Log -----------------------------------------------------------------
commit 983cafa82186758eb0a3ba56431a9961db019048
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Tue Jan 22 16:44:14 2013 -0800

    Preserve the state of the per-transaction squelching checkboxes
    
    Now unchecked recipients are preserved across attachment uploads,
    article inclusions, and any other action which submits the form but
    doesn't submit the update.
    
    Refactors the code to process squelched recipients for use outside of
    Ticket/Update.html.
    
    Resolves #18761.

diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm
index 1eaefc7..f0d7235 100644
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@ -3026,6 +3026,24 @@ sub ProcessRecordLinks {
     return (@results);
 }
 
+=head2 ProcessTransactionSquelching
+
+Takes a hashref of the submitted form arguments, C<%ARGS>.
+
+Returns a hash of squelched addresses.
+
+=cut
+
+sub ProcessTransactionSquelching {
+    my $args    = shift;
+    my %checked = map { $_ => 1 } grep { defined }
+        (    ref $args->{'TxnSendMailTo'} eq "ARRAY"  ? @{$args->{'TxnSendMailTo'}} :
+         defined $args->{'TxnSendMailTo'}             ?  ($args->{'TxnSendMailTo'}) :
+                                                                             () );
+    my %squelched = map { $_ => 1 } grep { not $checked{$_} } split /,/, ($args->{'TxnRecipients'}||'');
+    return %squelched;
+}
+
 =head2 _UploadedFile ( $arg );
 
 Takes a CGI parameter name; if a file is uploaded under that name,
diff --git a/share/html/Ticket/Elements/PreviewScrips b/share/html/Ticket/Elements/PreviewScrips
index 0a86e24..e9e2fc9 100644
--- a/share/html/Ticket/Elements/PreviewScrips
+++ b/share/html/Ticket/Elements/PreviewScrips
@@ -52,6 +52,8 @@ $TicketObj => undef
 my $Object = $m->notes("DryRun-".$TicketObj->Id) || $TicketObj->DryRun(%ARGS);
 my %recips = %{ $m->notes("DryRun-Recipients-".$TicketObj->Id) || {} };
 return unless $Object;
+
+my %squelched = ProcessTransactionSquelching( \%ARGS );
 </%init>
 <p>
 <&|/l, RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$TicketObj->Id,
@@ -75,7 +77,7 @@ return unless $Object;
               <ul>
 %             for my $addr (@addresses) {
                   <li>
-%                 my $checked = 1;
+%                 my $checked = not $squelched{$addr->address};
 %                 $m->callback(CallbackName => 'BeforeAddress', Ticket => $TicketObj, Address => $addr, Type => $type, Checked => \$checked);
 %                 $recips{$addr->address}++;
                   <b><%loc($type)%></b>: <input type="checkbox" class="checkbox" name="TxnSendMailTo" <% $checked ? 'checked="checked"' : '' |n%> value="<%$addr->address%>" id="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>" />
@@ -102,7 +104,7 @@ return unless $Object;
               <ul>
 %             for my $address (@{$data->{$type}}) {
                   <li>
-%                 my $checked = 1;
+%                 my $checked = not $squelched{$address};
 %                 $m->callback(CallbackName => 'BeforeAddress', Ticket => $TicketObj, Address => Email::Address->parse($address), Type => $type, Checked => \$checked);
 %                 $recips{$address}++;
                   <b><%loc($type)%></b>: <input type="checkbox" class="checkbox" name="TxnSendMailTo" <% $checked ? 'checked="checked"' : '' |n%> value="<%$address%>" id="TxnSendMailTo-<% $address %>-<% $recips{$address} %>" />
diff --git a/share/html/Ticket/Elements/ShowSimplifiedRecipients b/share/html/Ticket/Elements/ShowSimplifiedRecipients
index c3442a9..a27375a 100644
--- a/share/html/Ticket/Elements/ShowSimplifiedRecipients
+++ b/share/html/Ticket/Elements/ShowSimplifiedRecipients
@@ -73,6 +73,7 @@ if ($Object->Rules) {
     }
 }
 my %recips;
+my %squelched = ProcessTransactionSquelching( \%ARGS );
 </%init>
 <&|/Widgets/TitleBox, title => loc('Recipients'), id => 'recipients' &>
 <table>
@@ -82,7 +83,7 @@ my %recips;
 <td valign="top"><% $type %>:</td>
 <td valign="top">
 %     for my $addr (sort {$a->address cmp $b->address} values %{$headers{$type}}) {
-%         my $checked = 1;
+%         my $checked = not $squelched{$addr->address};
 %         $m->callback(CallbackName => 'BeforeAddress', Ticket => $TicketObj, Address => $addr, Type => $type, Checked => \$checked);
 %         $recips{$addr->address}++;
 <input type="checkbox" class="checkbox" name="TxnSendMailTo" <% $checked ? 'checked="checked"' : '' |n%> value="<%$addr->address%>" id="TxnSendMailTo-<% $addr->address %>-<% $recips{$addr->address} %>" />
diff --git a/share/html/Ticket/Update.html b/share/html/Ticket/Update.html
index a23bb2f..1e07bf8 100644
--- a/share/html/Ticket/Update.html
+++ b/share/html/Ticket/Update.html
@@ -276,12 +276,8 @@ $m->comp( '/Elements/GnuPG/SignEncryptWidget:Process',
 
 if ( $ARGS{'SubmitTicket'} ) {
 
-    my %checked = map {$_ => 1} grep {defined}
-        (ref $ARGS{'TxnSendMailTo'} eq "ARRAY" ? @{$ARGS{'TxnSendMailTo'}}
-             : defined $ARGS{'TxnSendMailTo'} ? ($ARGS{'TxnSendMailTo'}) : ());
-
-    my @squelchlist = grep {not $checked{$_}} split /,/, ($ARGS{'TxnRecipients'}||'');
-    $ARGS{'SquelchMailTo'} = \@squelchlist if @squelchlist;
+    my %squelched = ProcessTransactionSquelching( \%ARGS );
+    $ARGS{'SquelchMailTo'} = [keys %squelched] if keys %squelched;
 
     my $CFs = $TicketObj->TransactionCustomFields;
     my $ValidCFs = $m->comp(

-----------------------------------------------------------------------


More information about the Rt-commit mailing list