%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2024 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>
$Name
$Attr => undef
$GenericMap => {}
</%ARGS>
<%ONCE>
my $COLUMN_MAP = {
    Queue => {
        title     => 'Queue', # loc
        value     => sub {
            return $_[0]->loc('Global') if $_[0]->IsGlobal;
            return join(", ", map {$_->Name} @{$_[0]->AddedTo->ItemsArrayRef});
        },
    },
    QueueId => {
        title     => 'Queue', # loc
        value     => sub {
            return 0 if $_[0]->IsGlobal;
            return join(", ", map {$_->Id} @{$_[0]->AddedTo->ItemsArrayRef});
        },
    },
    From => {
        title     => 'Queue',
        value     => sub {
            my $request_path = $HTML::Mason::Commands::r->path_info;
            my $queue_id = $m->request_args->{'id'};
            if ( $request_path =~ m{/Admin/Queues/Scrips\.html} and $queue_id ) {
                return '&From=' . $queue_id;
            } elsif ( $request_path =~ m{/Admin/Global/Scrips\.html} ) {
                return '&From=Global';
            }
            else {
                return q{};
            }
        },
    },
    Condition => {
        title     => 'Condition', # loc
        value     => sub { return $_[0]->loc( $_[0]->ScripConditionObj->Name ) },
    },
    Action => {
        title     => 'Action', # loc
        value     => sub { return $_[0]->loc( $_[0]->ScripActionObj->Name ) },
    },
    Template => {
        title     => 'Template', # loc
        value     => sub { return $_[0]->loc( $_[0]->Template ) },
    },
    AutoDescription => {
        title     => 'Condition, Action and Template', # loc
        value     => sub { return $_[0]->loc( "[_1] [_2] with template [_3]",
            $_[0]->loc($_[0]->ConditionObj->Name),
            $_[0]->loc($_[0]->ActionObj->Name),
            $_[0]->loc($_[0]->Template),
        ) },
    },
    Description => {
        title     => 'Description', # loc
        attribute => 'Description',
        value     => sub { return $_[0]->Description() },
    },
    Disabled => {
        title     => 'Status', # loc
        attribute => 'Disabled',
        value     => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') },
    },
    RemoveCheckBox => {
        title => sub {
            my $name = 'RemoveScrip';
            my $checked = $m->request_args->{ $name .'All' }? 'checked="checked"': '';

            return \qq{
<div class="custom-control custom-checkbox">
  <input type="checkbox" name="${name}All" id="${name}All" value="1" class="checkbox custom-control-input" $checked onclick="setCheckbox(this, '$name')" />
  <label class="custom-control-label" for="${name}All"></label>
</div>};
        },
        value => sub {
            my $id = $_[0]->id;
            return '' if $_[0]->IsGlobal;

            my $name = 'RemoveScrip';
            my $arg = $m->request_args->{ $name };

            my $checked = '';
            if ( $arg && ref $arg ) {
                $checked = 'checked="checked"' if grep $_ == $id, @$arg;
            }
            elsif ( $arg ) {
                $checked = 'checked="checked"' if $arg == $id;
            }
            return \qq{
<div class="custom-control custom-checkbox">
  <input type="checkbox" name="$name" id="$name-$id" value="$id" class="checkbox custom-control-input" $checked />
  <label class="custom-control-label" for="$name-$id"></label>
</div>};
        },
    },
    Move => {
        title => 'Move',   # loc
        value => sub {
            my $id = $_[0]->id;

            my $context = $_[2] || 0;
            return '' unless $_[0]->IsAdded( $context );

            my $name = 'MoveScrip';
            my $args = $m->caller_args( 1 );
            my @pass = ref $args->{'PassArguments'}
                ? @{$args->{'PassArguments'}}
                : ($args->{'PassArguments'});
            my %pass = map { $_ => $args->{$_} } grep exists $args->{$_}, @pass;

            my $uri = RT->Config->Get('WebPath') . $m->request_path;

            my @res = (
                \'<a href="',
                $uri .'?'. $m->comp("/Elements/QueryString", %pass, MoveScripUp => $id ),
                \'">', loc('[Up]'), \'</a>',
                \' <a href="',
                $uri .'?'. $m->comp("/Elements/QueryString", %pass, MoveScripDown => $id ),
                \'">', loc('[Down]'), \'</a>'
            );

            return @res;
        },
    },
    Stage => {
        title => 'Stage', # loc
        value => sub {
            my $os = RT::ObjectScrip->new( $_[0]->CurrentUser );
            my $id = $_[0]->IsGlobal ? 0 : $_[-1];
            $os->LoadByCols( Scrip =>  $_[0]->id, ObjectId => $id );
            return $_[0]->loc( $os->FriendlyStage );
        },
    },
    HasLogs => {
        title => 'Log Output', # loc
        value => sub {
            my $logdir = RT->Config->Get('LogDir') || File::Spec->catdir( $RT::VarPath, 'log' );
            $logdir    = File::Spec->catdir( $logdir, 'scrips' );
            foreach my $stage ( qw( IsApplicable Prepare Commit ) ) {
                my $filename = File::Spec->catfile( $logdir, 'scrip-' . $_[0]->id . '-' .  $stage . '.log' );
                if ( -e $filename && -s $filename ) {
                    my $return = '<a class="scrip-log" href="' . RT->Config->Get('WebPath') . '/Admin/Scrips/Logging.html?id=' . $_[0]->id . '">' . $_[0]->loc('Has Log') . '</a>';
                    return \$return;
                }
            }
            return '';
        },
    },
};

</%ONCE>
<%INIT>
$m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
</%INIT>
