%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2026 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 }}}
<%ARGS>
$DisplayFormat => undef
$ObjectClass   => undef
$MaxItems      => undef
$InlineEdit    => undef
$MarkInactive  => undef
$LinkDeleteType => undef
$LinkDeleteMode => undef
$TreePrefix     => undef
$Depth          => undef

$i             => undef
$ObjectId      => undef
$Warning       => undef
</%ARGS>
<%INIT>
# Scrub the html of the format string to remove any potential nasties.
$DisplayFormat = $m->comp('/Elements/ScrubHTML', Content => $DisplayFormat);
my @Format = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $DisplayFormat);

$m->abort unless ( $ObjectClass // '' ) =~ /^RT::(?:Ticket|Asset)$/;

my $record = $ObjectClass->new($session{CurrentUser});
$record->Load($ObjectId);
$m->abort unless $record->id;

# In the Links portlet's edit mode the format carries a DeleteLinkCheckBox column that
# reads these notes; restore them so a reloaded row keeps its removal checkbox.
$m->notes( LinkDeleteType => $LinkDeleteType ) if defined $LinkDeleteType && length $LinkDeleteType;
$m->notes( LinkDeleteMode => $LinkDeleteMode ) if defined $LinkDeleteMode && length $LinkDeleteMode;

# Match CollectionList's inactive-status marking so a row reloaded after an inline
# edit (e.g. a status change) gains or loses the strike-through accordingly.
my $Classes = '';
if ( $MarkInactive && $record->can('LifecycleObj') ) {
    my $lifecycle = $record->LifecycleObj;
    $Classes = 'record-inactive' if $lifecycle && $lifecycle->IsInactive( $record->Status );
}

my $first_column_prefix = '';
my $row_attributes      = '';
# Rebuild the tree guide on reload. Gate on Depth, NOT TreePrefix: a depth-1 direct child is a
# flush-left root with an EMPTY prefix, so gating on TreePrefix would skip exactly those rows.
if ( defined $Depth && length $Depth ) {
    my $depth = int($Depth);
    $first_column_prefix = $m->scomp( '/Elements/LinkTreeGuide', Code => ( $TreePrefix // '' ) );

    my $safe_prefix = $m->interp->apply_escapes( $TreePrefix // '', 'h' );
    $row_attributes = qq{data-depth="$depth" data-tree-prefix="$safe_prefix" aria-level="$depth"};
}

# The guide rides the id column; a leading delete-checkbox column (present in edit mode, signalled
# by LinkDeleteType) shifts it to index 1.
my $first_column_prefix_index = ( defined $LinkDeleteType && length $LinkDeleteType ) ? 1 : 0;

$m->comp('/Elements/CollectionAsTable/Row',
    i          => $i,
    Format     => \@Format,
    record     => $record,
    maxitems   => $MaxItems,
    Class      => $record->ColumnMapClassName,
    Warning    => $Warning,
    Classes           => $Classes,
    InlineEdit => $InlineEdit,
    FirstColumnPrefix => $first_column_prefix,
    FirstColumnPrefixIndex => $first_column_prefix_index,
    RowAttributes     => $row_attributes,
);
$m->abort;
</%INIT>
