%# 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 }}}
<& /Admin/Elements/Header, Title => loc("Create a page layout") &>
<& /Elements/Tabs &>
<& /Elements/ListActions &>

<form action="<%RT->Config->Get('WebPath')%>/Admin/PageLayouts/Create.html" name="CreatePageLayout" method="POST" enctype="multipart/form-data" class="mx-auto max-width-lg pagelayout-create">
  <&| /Widgets/TitleBox, class => 'pagelayout-info-basics', content_class => 'mx-auto width-sm' &>
    <&| /Elements/LabeledValue, Label => loc('Name') &>
      <input required type="text" name="Name" value="<% $Name %>" class="form-control" />
    </&>

    <&| /Elements/LabeledValue, Label => loc('Type') &>
      <select name="Class" class="form-select selectpicker">
%     for my $type (qw/Ticket Asset/) {
        <option value="RT::<% $type %>" <% "RT::$type" eq $Class ? "selected=selected" : "" %>><% loc($type) %></option>
%     }
      </select>
    </&>

    <&| /Elements/LabeledValue, Label => loc('Page') &>
      <select name="Page" class="form-select selectpicker">
%     for my $page (sort keys %{$page_layouts->{$Class}}) {
        <option value="<% $page %>" <% $page eq $Page ? "selected=selected" : "" %>><% loc($page) %></option>
%     }
      </select>
    </&>

    <&| /Elements/LabeledValue, Label => loc('Clone Page Layout') &>
      <ul class="list-group list-group-compact">
        <li class="list-group-item">
          <div class="form-check">
            <input type="radio" class="form-check-input" id="Clone-None" name="Clone" value="" <% ($Clone//'') eq '' ? "checked=checked" : "" %> />
            <label class="form-check-label" for="Clone-None">(<&|/l&>none</&>)</label><br />
          </div>
        </li>

%   for my $class ( sort keys %$page_layouts ) {
%     for my $page ( sort keys %{$page_layouts->{$class}} ) {
%         for my $name ( sort keys %{$page_layouts->{$class}{$page}} ) {
        <li class="list-group-item clone <% $class eq $Class && $page eq $Page ? '' : 'hidden' %>" data-class="<% $class %>" data-page="<% $page %>">
          <div class="form-check">
            <input type="radio" class="form-check-input" id="Clone-<% $class %>-<% $page %>-<%$name%>" name="Clone" value="<% $name %>" <% ($Clone//'') eq $name ? "checked=checked" : "" %> />
            <label class="form-check-label" for="Clone-<% $class %>-<% $page %>-<%$name%>"><% $name %></label>
          </div>
        </li>
%         }
%     }
%   }
      </ul>
    </&>
    <& /Elements/Submit, Name => 'Create', Label => loc('Create'), FullWidth => 1 &>
  </&>
</form>

<%INIT>
my @results;
my $page_layouts = RT->Config->Get('PageLayouts');
if ($Create) {
    Abort( loc("Permission Denied") )
        unless $session{CurrentUser}->HasRight( Right => 'SuperUser', Object => RT->System );

    $Name =~ s!^\s+!!;
    $Name =~ s!\s+$!!;
    my ( $ret, $msg );
    if ( length $Name ) {
        if ( $page_layouts->{$Class}{$Page}{$Name} ) {
            push @results, loc( 'Page Layout [_1] already exists', $Name );
        }
        else {
            $page_layouts->{$Class}{$Page}{$Name}
                = $Clone
                ? Clone::clone( $page_layouts->{$Class}{$Page}{$Clone} )
                : [ { Layout => 'col-12', Elements => [ [] ] } ];

            my $setting = RT::Configuration->new( $session{CurrentUser} );
            $setting->LoadByCols( Name => 'PageLayouts', Disabled => 0 );
            if ( $setting->Id ) {
                ( $ret, $msg ) = $setting->SetContent($page_layouts);
            }
            else {
                ( $ret, $msg ) = $setting->Create(
                    Name    => 'PageLayouts',
                    Content => $page_layouts,
                );
                push @results, $msg if $msg;
            }
        }
    }
    else {
        push @results, loc('Invalid Name');
    }

    if ($ret) {
        MaybeRedirectForResults(
            Actions   => [ loc('Page Layout created') ],
            Path      => '/Admin/PageLayouts/Modify.html',
            Arguments => { Class => $Class, Page => $Page, Name => $Name },
        );
    }
    else {
        MaybeRedirectForResults(
            Actions   => \@results,
            Path      => '/Admin/PageLayouts/Create.html',
            Arguments => { Class => $Class, Page => $Page, Name => $Name },
        );
    }
}
</%INIT>
<%ARGS>
$Class => 'RT::Ticket'
$Page => 'Display'
$Name => ''
$Create => undef
$Clone => undef
</%ARGS>
