%# BEGIN LICENSE BLOCK
%# 
%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
%# 
%# (Except where explictly superceded by other copyright notices)
%# 
%# 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.
%# 
%# Unless otherwise specified, all modifications, corrections or
%# extensions to this work which alter its source code become the
%# property of Best Practical Solutions, LLC when submitted for
%# inclusion in the work.
%# 
%# 
%# END LICENSE BLOCK
<& /SelfService/Elements/Header, Title => loc('#[_1]: [_2]', $Ticket->id, $Ticket->Subject) &>

<& /Elements/ListActions, actions => \@results &>

  <TABLE WIDTH="100%" class="ticketsummary" >
      <TR>
        <TD VALIGN=TOP WIDTH="50%">
          <& /Elements/TitleBoxStart, title => loc('The Basics'), 
                title_class=> 'inverse',  
                color => "#993333" &>
                <& /Ticket/Elements/ShowBasics, Ticket => $Ticket &>
          <& /Elements/TitleBoxEnd &>
</TD>
        <TD VALIGN=TOP WIDTH="50%">
          <& /Elements/TitleBoxStart, title => loc("Dates"),
                title_class=> 'inverse',
                 color => "#663366" &>
          <& /Ticket/Elements/ShowDates, Ticket => $Ticket, UpdatedLink => 0 &>
          <& /Elements/TitleBoxEnd &>
</TD>
</TR>
</TABLE>



%#!!pape: selfservice_find_attachments.patch {{
<& /Ticket/Elements/ShowHistory, Ticket => $Ticket, AttachPath => "Attachment", Attachments => $attachments, UpdatePath => "Update.html" &>
%#!!pape: selfservice_find_attachments.patch }}



<%INIT>

my ( $field, @results );

# {{{ Load the ticket
#If we get handed two ids, mason will make them an array. bleck.
# We want teh first one. Just because there's no other sensible way
# to deal
my @id = ( ref $id eq 'ARRAY' ) ? @{$id} : ($id);

my $Ticket = new RT::Ticket( $session{'CurrentUser'} );
if ( $id[0] eq 'new' ) {

    # {{{ Create a new ticket

    my $Queue = new RT::Queue( $session{'CurrentUser'} );
    unless ( $Queue->Load( $ARGS{'Queue'} ) ) {
        $m->comp( 'Error.html', Why => loc('Queue not found') );
        $m->abort;
    }

    unless ( $Queue->CurrentUserHasRight('CreateTicket') ) {
        $m->comp( 'Error.html',
             Why =>
               loc('You have no permission to create tickets in that queue.') );
        $m->abort;
    }

    my @Requestors = split ( /\s*,\s*/, $ARGS{'Requestors'} );
    my @Cc         = split ( /\s*,\s*/, $ARGS{'Cc'} );

    my $MIMEObj = MakeMIMEEntity( Subject             => $ARGS{'Subject'},
                                  From                => $ARGS{'From'},
                                  Cc                  => $ARGS{'Cc'},
                                  Body                => $ARGS{'Content'},
                                  AttachmentFieldName => 'Attach' );

    #TODO in Create_Details.html: priorities and due-date
    my ( $id, $Trans, $ErrMsg ) = $Ticket->Create( Queue     => $ARGS{Queue},
                                                   Requestor => \@Requestors,
                                                   Cc        => \@Cc,
                                                   Subject   => $ARGS{Subject},
                                                   MIMEObj   => $MIMEObj );
    unless ( $id && $Trans ) {
        $m->comp( 'Error.html', Why => $ErrMsg );
        $m->abort();
    }

    push ( @results, $ErrMsg );

    # }}}

# delete temporary storage entry to make WebUI clean
unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
    delete $session{'Attachments'};
}
# }}}
}
else {
    unless ( $Ticket->Load( $id[0] ) ) {
        $m->comp( 'Error.html',
                  Why => loc( "Couldn't load ticket '[_1]'", $id ) );
        $m->abort();
    }
}

# }}}

unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
    $m->comp( 'Error.html',
              Why => loc("No permission to display that ticket") );
    $m->abort();
}

my ( $code, $msg );

#Update the status
if (     ( defined $ARGS{'Status'} )
     and ( $ARGS{'Status'} ne $Ticket->Status ) ) {
    ( $code, $msg ) = $Ticket->SetStatus( $ARGS{'Status'} );
    push @results, "$msg";
}

# {{{ store the uploaded attachment in session
if ($ARGS{'Attach'}) {			# attachment?
    $session{'Attachments'} = {} unless defined $session{'Attachments'};

    my $subject = "$ARGS{'Attach'}";
    # since CGI.pm deutf8izes the magic field, we need to add it back.
    Encode::_utf8_on($subject);
    # strip leading directories
    $subject =~ s#^.*[\\/]##;

    my $attachment = MakeMIMEEntity(
        Subject             => $subject,
        Body                => "",
        AttachmentFieldName => 'Attach'
    );

    $session{'Attachments'} = { %{$session{'Attachments'} || {}},
				$ARGS{'Attach'} => $attachment };
}
# }}}

if ( $session{'Attachments'} || 
     (   $ARGS{'UpdateContent'} ne ''
	 && $ARGS{'UpdateContent'} ne "-- \n"
	 . $session{'CurrentUser'}->UserObj->Signature )) {
    $ARGS{UpdateAttachments} = $session{'Attachments'};
}
ProcessUpdateMessage( ARGSRef   => \%ARGS,
                      Actions   => \@results,
                      TicketObj => $Ticket );

# delete temporary storage entry to make WebUI clean
unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
    delete $session{'Attachments'};
}
# }}}

my $Transactions = $Ticket->Transactions;

#!!pape: selfservice_find_attachments.patch {{
my $attachments = $m->comp('/Ticket/Elements/FindAttachments', Ticket => $Ticket);
#!!pape: selfservice_find_attachments.patch }}

</%INIT>


<%ARGS>
$id => undef
</%ARGS>
