diff options
Diffstat (limited to 'rt/share/html/Elements/ShowHistory')
-rw-r--r-- | rt/share/html/Elements/ShowHistory | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/rt/share/html/Elements/ShowHistory b/rt/share/html/Elements/ShowHistory new file mode 100644 index 000000000..d585453af --- /dev/null +++ b/rt/share/html/Elements/ShowHistory @@ -0,0 +1,191 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +%# <sales@bestpractical.com> +%# +%# (Except where explicitly superseded by other copyright notices) +%# +%# +%# LICENSE: +%# +%# 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. +%# +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +%# 02110-1301 or visit their web page on the internet at +%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<div class="history <% lc $record_type %>" id="<% $histid %>"> +<%perl> +if ( $ShowDisplayModes or $ShowTitle ) { + my $title = $ShowTitle + ? loc('History') + : ' '; + + my $titleright = ''; + if ( $ShowDisplayModes ) { + if ( RT->Config->Get( 'QuoteFolding', $session{CurrentUser} ) ) { + my $open_all = $m->interp->apply_escapes( loc("Show all quoted text"), 'j' ); + my $open_html = $m->interp->apply_escapes( loc("Show all quoted text"), 'h' ); + my $close_all = $m->interp->apply_escapes( loc("Hide all quoted text"), 'j' ); + $titleright .= '<a href="#" data-direction="open" ' + . qq{onclick="return toggle_all_folds(this, $open_all, $close_all);"} + . ">$open_html</a> — "; + } + + if ($ShowHeaders) { + $titleright .= qq{<a href="?ForceShowHistory=1;id=} . + $Object->id.qq{#$histid">} . + loc("Show brief headers") . + qq{</a>}; + } else { + $titleright .= qq{<a href="?ForceShowHistory=1;ShowHeaders=1;id=} . + $Object->id.qq{#$histid">} . + loc("Show full headers") . + qq{</a>}; + } + } +</%perl> +<& /Widgets/TitleBoxStart, title => $title, titleright_raw => $titleright &> +% } + +<div class="history-container"> +<%perl> +$m->callback( %ARGS, Object => $Object, CallbackName => 'BeforeTransactions' ); +my $i = 1; +while ( my $Transaction = $Transactions->Next ) { + my $skip = 0; + + # Skip display of SetWatcher transactions for ticket Owner groups. Owner + # was a single member role group and denormalized into a column well before + # the generic role group handling and transactions came about. For + # tickets, we rely on rendering ownership changes using the Set-Owner + # transaction. For all other record types, or even potential ticket single + # role groups which aren't Owner, we use SetWatcher to render history and + # skip the Set transactions. This complication is necessary to avoid + # creating backdated transactions on upgrade which normalize to one type or + # another. + # + # These conditions assumes ticket Owner is a single-member denormalized + # role group, which is safe since that is unlikely to ever change in the + # future. + if ($Object->isa("RT::Ticket") and ($Transaction->Field || '') eq "Owner") { + $skip = 1 if $Transaction->Type eq "SetWatcher"; + } else { + $skip = 1 if $Transaction->Type eq "Set" + and $Transaction->Field + and $Object->DOES("RT::Record::Role::Roles") + and $Object->HasRole( $Transaction->Field ) + and $Object->RoleGroup( $Transaction->Field )->SingleMemberRoleGroupColumn; + } + + $m->callback( + %ARGS, + Transaction => $Transaction, + skip => \$skip, + CallbackName => 'SkipTransaction', + ); + next if $skip; + + # ARGS is first because we're clobbering the "Attachments" parameter + $m->comp( 'ShowTransaction', + %ARGS, + Object => $Object, + Transaction => $Transaction, + ShowHeaders => $ShowHeaders, + RowNum => $i, + Attachments => $trans_attachments->{$Transaction->id} || {}, + AttachmentContent => $trans_content, + HasTxnCFs => $HasTxnCFs, + ); + + # manually flush the content buffer after each txn, + # so the user sees some update + $m->flush_buffer; + + $i++; +} + +</%perl> +</div> +% if ($ShowDisplayModes or $ShowTitle) { +<& /Widgets/TitleBoxEnd &> +% } +</div> +<%INIT> +my $trans_content = {}; +my $trans_attachments = {}; + +for my $content (@{$AttachmentContent->ItemsArrayRef()}) { + $trans_content->{$content->TransactionId}->{$content->Id} = $content; +} + +for my $attachment (@{$Attachments->ItemsArrayRef()}) { + my $tmp = $trans_attachments->{ $attachment->TransactionId } ||= {}; + push @{ $tmp->{ $attachment->Parent || 0 } ||= [] }, $attachment; +} + +{ + my %tmp = ( + DisplayPath => 'Display.html', + AttachmentPath => 'Attachment', + UpdatePath => 'Update.html', + ForwardPath => 'Forward.html', + EmailRecordPath => 'ShowEmailRecord.html', + EncryptionPath => 'Crypt.html', + ); + + my $prefix = $ARGS{PathPrefix}||''; + while ( my ($arg, $path) = each %tmp ) { + next if defined $ARGS{ $arg }; + $ARGS{ $arg } = $prefix.$path; + } +} + +my $record_type = $Object->RecordType; +my $histid = "\L$record_type\E-" . $Object->id . "-history"; + +my $HasTxnCFs = ($Object->can("TransactionCustomFields") and $Object->TransactionCustomFields->Count); +</%INIT> +<%ARGS> +$Object +$Transactions => $Object->SortedTransactions +$Attachments => $Object->Attachments( WithHeaders => 1 ) +$AttachmentContent => $Object->TextAttachments + +$ShowHeaders => 0 +$ShowTitle => 1 +$ShowDisplayModes => 1 + +$PathPrefix => '' +</%ARGS> |