[Rt-commit] rt branch, 4.6/reverse-transaction-order, created. rt-4.4.4-573-g5fbf906b83

Michel Rodriguez michel at bestpractical.com
Mon Jan 6 09:55:04 EST 2020


The branch, 4.6/reverse-transaction-order has been created
        at  5fbf906b83ea1920ef7319d2420de1a1443b58a8 (commit)

- Log -----------------------------------------------------------------
commit 5fbf906b83ea1920ef7319d2420de1a1443b58a8
Author: michel <michel at bestpractical.com>
Date:   Thu Jan 2 10:11:21 2020 -0500

    Add a control to reverse the transaction display order on the current ticket.
    
    Add the option in the template.
    Pass the new parameter through the various layers of templates.
    Add an option to SortedTransactions to change the original order.

diff --git a/lib/RT/Record.pm b/lib/RT/Record.pm
index 4ef6f4d057..b09c67f531 100644
--- a/lib/RT/Record.pm
+++ b/lib/RT/Record.pm
@@ -1729,13 +1729,19 @@ sub Transactions {
 Returns the result of L</Transactions> ordered per the
 I<OldestTransactionsFirst> preference/option.
 
+The second argument reverses the order if true, to 
+provide the "Reverse Transaction Order" feature.
+
 =cut
 
 sub SortedTransactions {
     my $self  = shift;
+    my $reverse_order = shift || 0;
+
     my $txns  = $self->Transactions;
-    my $order = RT->Config->Get("OldestTransactionsFirst", $self->CurrentUser)
-        ? 'ASC' : 'DESC';
+    # parens required because the priority of 'xor' is lower than the one of '='
+    my $order_param = ( RT->Config->Get("OldestTransactionsFirst", $self->CurrentUser) xor $reverse_order );
+    my $order = $order_param ? 'ASC' : 'DESC';
     $txns->OrderByCols(
         { FIELD => 'Created',   ORDER => $order },
         { FIELD => 'id',        ORDER => $order },
diff --git a/share/html/Elements/ShowHistory b/share/html/Elements/ShowHistory
index 5622649967..b157e3c8d2 100644
--- a/share/html/Elements/ShowHistory
+++ b/share/html/Elements/ShowHistory
@@ -58,7 +58,8 @@
 </div>
 <%ARGS>
 $Object
-$Transactions      => $Object->SortedTransactions
+$ReverseTransactionOrder => 0
+$Transactions      => $Object->SortedTransactions( $ReverseTransactionOrder )
 $Attachments       => $Object->Attachments( WithHeaders => 1 )
 $AttachmentContent => $Object->TextAttachments
 
diff --git a/share/html/Elements/ShowHistoryHeader b/share/html/Elements/ShowHistoryHeader
index c12fce532e..e856937554 100644
--- a/share/html/Elements/ShowHistoryHeader
+++ b/share/html/Elements/ShowHistoryHeader
@@ -48,6 +48,7 @@
 <%ARGS>
 $Object
 $ShowHeaders       => 0
+$ReverseTransactionOrder  => 0
 $ShowTitle         => 1
 $ShowDisplayModes  => 1
 $ScrollShowHistory => 0
@@ -58,6 +59,8 @@ my $histid      = "\L$record_type\E-" . $Object->id . "-history";
 </%INIT>
 <div class="history <% lc $record_type %>" id="<% $histid %>">
 <%perl>
+$ShowHeaders   //= 0;
+$ReverseTransactionOrder //= 0;
 if ( $ShowDisplayModes or $ShowTitle or $ScrollShowHistory ) {
     my $title = $ShowTitle
                     ? loc('History')
@@ -68,6 +71,7 @@ if ( $ShowDisplayModes or $ShowTitle or $ScrollShowHistory ) {
                          qq{<a href="#" id="LoadAllHistory">} .
                          loc('Load all history') .
                          qq{</a>} .
+                         ($ShowDisplayModes ? '—' : '') .
                          qq{</span>} );
     }
 
@@ -94,6 +98,16 @@ if ( $ShowDisplayModes or $ShowTitle or $ScrollShowHistory ) {
         }
     }
 
+    my @TransactionHeaders= ( loc( 'Oldest transaction first'), loc( 'Newest transaction first') );
+    my $Order = (RT->Config->Get("OldestTransactionsFirst", $Object->CurrentUser) xor $ReverseTransactionOrder);
+    my $TransactionHeader= $TransactionHeaders[$Order];
+
+    my $switched_order = 1 - $ReverseTransactionOrder;
+    push( @elements, qq{<a href="?ReverseTransactionOrder=$switched_order;ForceShowHistory=1;ShowHeaders=$ShowHeaders;id=} .
+                     $Object->id.qq{#$histid">} .
+                     $TransactionHeader .
+                     qq{</a>} );
+
     # build the new link
     my $alt = loc('Edit');
     my $titleright = qq{<div class="btn-group dropdown"><a id="history-dropdown" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="fas fa-cog icon-bordered fa-2x" alt="$alt" data-toggle="tooltip" data-placement="top" data-original-title="$alt"></span></a><ul class="dropdown-menu dropdown-menu-right">};
diff --git a/share/html/Elements/ShowHistoryPage b/share/html/Elements/ShowHistoryPage
index 51237de147..89a353a0a5 100644
--- a/share/html/Elements/ShowHistoryPage
+++ b/share/html/Elements/ShowHistoryPage
@@ -47,7 +47,8 @@
 %# END BPS TAGGED BLOCK }}}
 <%ARGS>
 $Object
-$Transactions      => $Object->SortedTransactions
+$ReverseTransactionOrder => 0
+$Transactions      => $Object->SortedTransactions( $ReverseTransactionOrder )
 $Attachments       => $Object->Attachments( WithHeaders => 1 )
 $AttachmentContent => $Object->TextAttachments
 
diff --git a/share/html/Helpers/TicketHistory b/share/html/Helpers/TicketHistory
index 075598be12..84b4ce6569 100644
--- a/share/html/Helpers/TicketHistory
+++ b/share/html/Helpers/TicketHistory
@@ -47,6 +47,8 @@
 %# END BPS TAGGED BLOCK }}}
 <%ARGS>
 $id
+$ShowHeaders => 0
+$ReverseTransactionOrder => 0
 </%ARGS>
 <%INIT>
 my $TicketObj = RT::Ticket->new($session{'CurrentUser'});
@@ -59,7 +61,8 @@ $m->callback( CallbackName => 'ExtraShowHistoryArguments', Ticket => $TicketObj,
 </%INIT>
 <& /Elements/ShowHistory,
     Object => $TicketObj,
-    ShowHeaders => $ARGS{'ShowHeaders'},
+    ShowHeaders => $ShowHeaders,
+    ReverseTransactionOrder => $ReverseTransactionOrder,
     Attachments => $attachments,
     AttachmentContent => $attachment_content,
     %extra_args,
diff --git a/share/html/Helpers/TicketHistoryPage b/share/html/Helpers/TicketHistoryPage
index 41b0a70cb5..6e4e48a36b 100644
--- a/share/html/Helpers/TicketHistoryPage
+++ b/share/html/Helpers/TicketHistoryPage
@@ -91,6 +91,7 @@ if ($focusTransactionId) { # make sure we load enough if we need to focus a tran
 <& /Elements/ShowHistoryPage,
     Object => $TicketObj,
     ShowHeaders => $ARGS{'ShowHeaders'},
+    ReverseTransactionOrder => $ARGS{'ReverseTransactionOrder'},
     Transactions => $transactions,
     %extra_args,
     &>
diff --git a/share/html/Ticket/Display.html b/share/html/Ticket/Display.html
index a51fcb6823..c31ec07551 100644
--- a/share/html/Ticket/Display.html
+++ b/share/html/Ticket/Display.html
@@ -93,23 +93,27 @@ my $titleright = qq{
 % if ($ShowHistory eq "scroll") {
     <& /Ticket/Elements/ScrollShowHistory,
         Ticket => $TicketObj,
-        ShowHeaders => $ARGS{'ShowHeaders'},
+        ShowHeaders => $ShowHeaders,
+        ReverseTransactionOrder => $ReverseTransactionOrder,
     &>
 % } elsif ($ShowHistory eq "delay") {
     <& /Ticket/Elements/DelayShowHistory,
         Ticket => $TicketObj,
-        ShowHeaders => $ARGS{'ShowHeaders'},
+        ShowHeaders => $ShowHeaders,
+        ReverseTransactionOrder => $ReverseTransactionOrder,
     &>
 % } elsif (not $ForceShowHistory and $ShowHistory eq "click") {
     <& /Ticket/Elements/ClickToShowHistory,
         Ticket => $TicketObj,
-        ShowHeaders => $ARGS{'ShowHeaders'},
+        ShowHeaders => $ShowHeaders,
+        ReverseTransactionOrder => $ReverseTransactionOrder,
     &>
 % } else {
     <& /Elements/ShowHistory ,
           Object => $TicketObj,
           Transactions => $transactions,
-          ShowHeaders => $ARGS{'ShowHeaders'},
+          ReverseTransactionOrder => $ReverseTransactionOrder,
+          ShowHeaders => $ShowHeaders,
           Attachments => $attachments,
           AttachmentContent => $attachment_content
     &>
@@ -125,6 +129,7 @@ my $titleright = qq{
 <%ARGS>
 $TicketObj => undef
 $ShowHeaders => 0
+$ReverseTransactionOrder => 0
 $HideUnsetFields => RT->Config->Get('HideUnsetFieldsOnDisplay', $session{CurrentUser})
 $ForceShowHistory => 0
 </%ARGS>
@@ -266,7 +271,7 @@ MaybeRedirectForResults(
     Arguments => { id => $TicketObj->id },
 );
 
-my $transactions = $TicketObj->SortedTransactions;
+my $transactions = $TicketObj->SortedTransactions( $ReverseTransactionOrder );
 my $attachments = $TicketObj->Attachments;
 my $attachment_content = $TicketObj->TextAttachments;
 
diff --git a/share/html/Ticket/Elements/ScrollShowHistory b/share/html/Ticket/Elements/ScrollShowHistory
index d2aca08a85..24eac46744 100644
--- a/share/html/Ticket/Elements/ScrollShowHistory
+++ b/share/html/Ticket/Elements/ScrollShowHistory
@@ -47,6 +47,8 @@
 %# END BPS TAGGED BLOCK }}}
 <%ARGS>
 $Ticket
+$ShowHeaders => 0
+$ReverseTransactionOrder => 0
 </%ARGS>
 
 <%INIT>
@@ -57,12 +59,13 @@ my $url = RT->Config->Get('WebPath') . "/Helpers/TicketHistoryPage?" .
         $m->comp('/Elements/QueryString', %params, id => $Ticket->id );
 
 my %extra_args = map { $_ => $ARGS{$_} // 1 } qw/ShowDisplayModes ShowTitle ScrollShowHistory/;
-$extra_args{ShowHeaders} = $ARGS{ShowHeaders};
+$extra_args{ShowHeaders} = $ShowHeaders;
+$extra_args{ReverseTransactionOrder} = $ReverseTransactionOrder;
 
 $m->callback( CallbackName => 'ExtraShowHistoryArguments', Ticket => $Ticket, ExtraArgs => \%extra_args );
 
-
-my $oldestTransactionsFirst = RT->Config->Get("OldestTransactionsFirst", $session{CurrentUser});
+# parens on the right side are required because 'xor' has a lower priority than '='
+my $oldestTransactionsFirst = ( RT->Config->Get("OldestTransactionsFirst", $session{CurrentUser}) xor $ReverseTransactionOrder);
 </%INIT>
 
 <& /Elements/ShowHistoryHeader,

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


More information about the rt-commit mailing list