%# BEGIN BPS TAGGED BLOCK {{{
%#
%# COPYRIGHT:
%#
%# This software is Copyright (c) 1996-2025 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 }}}
<& /Admin/Elements/Header, Title => $title &>
<& /Elements/Tabs &>
<& /Elements/ListActions, actions => \@results &>

<form action="Objects.html" method="post">
<input type="hidden" class="hidden" name="id" value="<% $id %>" />

% if ( $is_global ) {
<h2><&|/l&>Applies to all objects</&></h2>
<input type="checkbox" id="RemoveClass-<% $Class->id %>" name="RemoveClass-<% $Class->id %>" value="0" />
<label for="RemoveClass-<% $Class->id %>"><&|/l&>check this box to remove this Class globally and be able to choose specific Queues.</&></label>
% } else {
<h2><&|/l&>Apply globally</&></h2>

<input type="checkbox" id="AddClass-<% $Class->id %>" name="AddClass-<% $Class->id %>" value="0" />
<label for="AddClass-<% $Class->id %>"><&|/l&>check this box to apply this Class globally to all Queues.</&></label>

<h2><&|/l&>Selected Queues</&></h2>
<& /Elements/CollectionList,
    OrderBy => ['SortOrder','Name'],
    Order   => ['ASC', 'ASC'],
    %ARGS,
    Collection => $applied,
    Rows => 0,
    Page => 1,
    Format        => $format,
    DisplayFormat => "'__CheckBox.{RemoveClass-". $Class->id ."}__',". $format,
    AllowSorting => 0,
    ShowEmpty    => 0,
    PassArguments => [
        qw(id Format Rows Page Order OrderBy),
    ],
&>

<h2><&|/l&>Unselected Queues</&></h2>
<& /Elements/CollectionList,
    OrderBy => ['SortOrder','Name'],
    Order   => ['ASC', 'ASC'],
    %ARGS,
    Collection => $not_applied,
    Rows          => $rows,
    Format        => $format,
    DisplayFormat => "'__CheckBox.{AddClass-". $Class->id ."}__',". $format,
    AllowSorting  => 1,
    ShowEmpty     => 0,
    PassArguments => [
        qw(id Format Rows Page Order OrderBy),
    ],
&>

% }

<& /Elements/Submit, Name => 'UpdateObjs' &>
</form>

<%INIT>
my $Class = RT::Class->new($session{'CurrentUser'});
$Class->Load($id) or Abort(loc("Could not load Class [_1]"), $id);

my (@results);

if ( $UpdateObjs ) {
    if ( defined (my $del = $ARGS{'RemoveClass-'.$Class->id}) ) {
        foreach my $id ( ref $del? (@$del) : ($del) ) {
            my $object = RT::Queue->new( $session{'CurrentUser'} );
            if ( $id ) {
                $object->Load( $id );
                next unless $object->id;
            }

            my ($status, $msg) = $Class->RemoveFromObject( $object );
            push @results, $msg;
        }
    }
    if ( defined (my $add = $ARGS{'AddClass-'.$Class->id}) ) {
        foreach my $id ( ref $add? (@$add) : ($add) ) {
            my $object = RT::Queue->new( $session{'CurrentUser'} );
            if ( $id ) {
                $object->Load( $id );
                next unless $object->id;
            }

            my ($status, $msg) = $Class->AddToObject( $object );
            push @results, $msg;
        }
    }
}

my $is_global = $Class->IsApplied(0);

my $applied = $Class->AppliedTo;
my $not_applied = $Class->NotAppliedTo;

my $collection_class = ref($applied);
$collection_class =~ s/^RT:://;

my $format = RT->Config->Get('AdminSearchResultFormat')->{$collection_class}
    || '__id__,__Name__';
my $rows = RT->Config->Get('AdminSearchResultRows')->{$collection_class} || 50;

my $title = loc('Modify associated objects for [_1]', $Class->Name);

</%INIT>
<%ARGS>
$id => undef
$FindDisabledObjects => 0
$UpdateObjs => 0
</%ARGS>
