%PERL>
# Oeris::HideWidgets
my $oeris_hide_widget_dates = $session{'CurrentUser'}->HasRight(Object => $Ticket, Right => 'OerisHideWidgetDates');
my $oeris_hide_widget_basics = $session{'CurrentUser'}->HasRight(Object => $Ticket, Right => 'OerisHideWidgetBasics');
%PERL>
<& /SelfService/Elements/Header, Title => loc('#[_1]: [_2]', $Ticket->id, $Ticket->Subject) &>
% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket );
<& /Elements/ListActions, actions => \@results &>
%# Oeris::HideWidgets - Basics
% $RT::Logger->debug("Oeris::HideWidgets - Basics : Current User Has Right ? ".$oeris_hide_widget_basics);
% if ( !$oeris_hide_widget_basics ) {
<&| /Widgets/TitleBox, title => loc('The Basics'),
($LinkBasicsTitle ? (title_href => $title_box_link) : ()),
title_class=> 'inverse',
color => "#993333" &>
<& /Ticket/Elements/ShowBasics, Ticket => $Ticket &>
<& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket &>
&>
|
% }
%# Oeris::HideWidgets - Dates
% $RT::Logger->debug("Oeris::HideWidgets - Dates : Current User Has Right ? ".$oeris_hide_widget_dates);
% if ( !$oeris_hide_widget_dates ) {
<&| /Widgets/TitleBox, title => loc("Dates"),
title_class=> 'inverse',
color => "#663366" &>
<& /Ticket/Elements/ShowDates, Ticket => $Ticket, UpdatedLink => 0 &>
&>
|
% }
<& /Ticket/Elements/ShowHistory,
Ticket => $Ticket,
URIFile => "Display.html",
ShowHeaders => $ARGS{'ShowHeaders'},
DownloadableHeaders => 0,
AttachPath => "Attachment",
Attachments => $attachments,
UpdatePath => "Update.html"
&>
<%INIT>
my ( $field, @results );
$m->callback( ARGSRef => \%ARGS, CallbackName => 'Initial' );
# 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 = RT::Ticket->new( $session{'CurrentUser'} );
# store the uploaded attachment in session
if ( defined $ARGS{'Attach'} && length $ARGS{'Attach'} ) { # attachment?
$session{'Attachments'} = {} unless defined $session{'Attachments'};
my $attachment = MakeMIMEEntity(
AttachmentFieldName => 'Attach'
);
my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
$session{'Attachments'} = {
%{ $session{'Attachments'} || {} },
$file_path => $attachment,
};
}
if ( defined ($id[0]) && $id[0] eq 'new' ) {
# {{{ Create a new ticket
my $Queue = RT::Queue->new( $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;
}
( $Ticket, @results ) =
CreateTicket( Attachments => $session{'Attachments'}, %ARGS );
unless ( $Ticket->id ) {
$m->comp( 'Error.html', Why => join( "\n", @results ));
$m->abort();
}
# 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();
}
my ( $code, $msg );
if (
$session{'Attachments'}
|| ( defined $ARGS{'UpdateContent'}
&& $ARGS{'UpdateContent'} ne ''
&& $ARGS{'UpdateContent'} ne "-- \n"
. $session{'CurrentUser'}->UserObj->Signature )
)
{
$ARGS{UpdateAttachments} = $session{'Attachments'};
}
push @results, ProcessUpdateMessage(
ARGSRef => \%ARGS,
TicketObj => $Ticket
);
delete $session{'Attachments'};
# delete temporary storage entry to make WebUI clean
unless ( keys %{ $session{'Attachments'} } and $ARGS{'UpdateAttach'} ) {
delete $session{'Attachments'};
}
my @cfupdates = ProcessObjectCustomFieldUpdates(Object => $Ticket, ARGSRef => \%ARGS);
push (@results, @cfupdates);
#Update the status
if ( ( defined $ARGS{'Status'} )
and $ARGS{'Status'}
and ( $ARGS{'Status'} ne $Ticket->Status ) )
{
( $code, $msg ) = $Ticket->SetStatus( $ARGS{'Status'} );
push @results, "$msg";
}
}
# This code does automatic redirection if any updates happen.
unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
$m->comp( 'Error.html',
Why => loc("No permission to display that ticket") );
# XXX: Why abort? then we loose footer //ruz
$m->abort();
}
if (@results) {
# We've done something, so we need to clear the decks to avoid
# resubmission on refresh.
# But we need to store Actions somewhere too, so we don't lose them.
my $key = Digest::MD5::md5_hex(rand(1024));
push @{ $session{"Actions"}->{$key} ||= [] }, @results;
$session{'i'}++;
RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."SelfService/Display.html?id=". $Ticket->id."&results=".$key);
}
my $Transactions = $Ticket->Transactions;
my $attachments =
$m->comp( '/Ticket/Elements/FindAttachments', Ticket => $Ticket );
my $LinkBasicsTitle = $Ticket->CurrentUserHasRight('ModifyTicket')
|| $Ticket->CurrentUserHasRight('ReplyToTicket');
my $title_box_link = RT->Config->Get('WebPath')."/SelfService/Update.html?id=".$Ticket->Id;
$m->callback(CallbackName => 'BeforeDisplay', Ticket => \$Ticket, ARGSRef => \%ARGS, title_box_link => \$title_box_link);
%INIT>
<%ARGS>
$id => undef
%ARGS>