import rt 3.8.11
[freeside.git] / rt / html / SelfService / Create.html
index 7bbc88a..9a64b5f 100644 (file)
@@ -1,8 +1,14 @@
-%# BEGIN LICENSE BLOCK
+%# BEGIN BPS TAGGED BLOCK {{{
 %# 
-%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+%# COPYRIGHT:
+%#  
+%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC 
+%#                                          <jesse@bestpractical.com>
 %# 
-%# (Except where explictly superceded by other copyright notices)
+%# (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
 %# 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.
+%# 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 LICENSE BLOCK
+%# END BPS TAGGED BLOCK }}}
 <& Elements/Header, Title => loc("Create a ticket") &>
 
-<FORM ACTION="Display.html" METHOD="POST" ENCTYPE="multipart/form-data">
-<INPUT TYPE=HIDDEN Name="id" VALUE="new">
-
-<TABLE>
-<TR>
-<TD>
-<&|/l&>Queue</&>:
-</TD>
-<TD>
-<& /Elements/SelectNewTicketQueue, Verbose => 'True' &>
-</TD>
-</TR>
-<TR>
-<TD>
-<&|/l&>Requestors</&>:
-</TD>
-<TD>
-<INPUT Name="Requestors" Value="<%$session{CurrentUser}->EmailAddress%>" SIZE=20>
-</TD>
-</TR>
-<TR>
-<TD>
-<&|/l&>Cc</&>:
-</TD>
-<TD>
- <INPUT NAME="Cc" SIZE=20>
-</TD>
-</TR>
-<TR>
-<TD>
-<&|/l&>Subject</&>:
-</TD>
-<TD>
-<INPUT Name="Subject" SIZE=60 MAXSIZE=100 value="">
-</TD>
-</TR>
-<TR>
-<TD>
-<&|/l&>Attach file</&>:
-</TD>
-<TD>
-<INPUT Name="Attach" type=file>
-</TD>
-</TR>
-<TR>
-<TD COLSPAN=2>
-<&|/l&>Describe the issue below</&>:<br>
+<& /Elements/ListActions, actions => \@results &>
+
+<form action="<% $RT::WebPath %>/SelfService/Create.html" method="post" enctype="multipart/form-data" name="TicketCreate">
+<input type="hidden" class="hidden" name="id" value="new" />
+
+<table>
+<tr>
+<td class="label"><&|/l&>Queue</&>:</td>
+<td class="value">
+    <input type="hidden" class="hidden" name="Queue" value="<% $queue_obj->id %>" />
+    <strong><% $queue_obj->Name %></strong> (<%$queue_obj->Description || ''%>)
+</td>
+</tr>
+<tr>
+<td class="label"><&|/l&>Requestors</&>:</td>
+<td class="value">
+<input name="Requestors" value="<% $ARGS{'Requestors'} || $session{CurrentUser}->EmailAddress %>" size="20" />
+</td>
+</tr>
+<tr>
+<td class="label"><&|/l&>Cc</&>:</td>
+<td class="value">
+<input name="Cc" size="20" value="<% $ARGS{'Cc'} || '' %>" />
+</td>
+</tr>
+<tr>
+<td class="label"><&|/l&>Subject</&>:</td>
+<td class="value">
+<input name="Subject" size="60" maxsize="200" value="<% $ARGS{'Subject'} || '' %>" />
+</td>
+</tr>
+<tr>
+    <td colspan="2">
+        <& /Ticket/Elements/EditCustomFields, QueueObj => $queue_obj &>
+    </td>
+</tr>
+<tr>
+<td class="label"><&|/l&>Attach file</&>:</td>
+<td class="value">
+<input name="Attach" type="file" />
+</td>
+</tr>
+<tr>
+<td colspan="2">
+<&|/l&>Describe the issue below</&>:<br />
+% if (exists $ARGS{Content}) {
+<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &>
+% } else {
 <& /Elements/MessageBox &>
-</TD>
-</TR>
-</TABLE>
+% }
+</td>
+</tr>
+</table>
 <& /Elements/Submit, Label => loc("Create ticket")&>
 
 
-</FORM>
+</form>
+<%args>
+$Queue => undef
+</%args>
+<%init>
+my $queue_obj = RT::Queue->new($session{'CurrentUser'});
+$queue_obj->Load($Queue) || Abort(loc("Queue could not be loaded."));
+$queue_obj->Disabled && Abort(loc("Cannot create tickets in a disabled queue."));
+
+my ($checks_failure, $skip_create, @results) = (0, 0, ());
+$skip_create = 1 unless ($ARGS{'id'}||'') eq 'new';
+
+$m->comp('/Elements/Callback',
+    QueueObj => $queue_obj, ARGSRef => \%ARGS,
+    skip_create => \$skip_create, checks_failure => \$checks_failure,
+    results => \@results
+);
+
+$skip_create = 1 if exists $ARGS{'AddMoreAttach'};
+
+# deal with deleting uploaded attachments
+foreach my $key (keys %ARGS) {
+    if ($key =~ m/^DeleteAttach-(.+)$/) {
+       delete $session{'Attachments'}{$1};
+    }
+    $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
+}
+
+# store the uploaded attachment in session
+if ( $ARGS{'Attach'} ) { # attachment?
+    $session{'Attachments'} = {} unless defined $session{'Attachments'};
+
+    my $subject = "$ARGS{'Attach'}";
+
+    # strip leading directories
+    $subject =~ s#^.*[\\/]##;
+
+    my $attachment = MakeMIMEEntity(
+        Subject             => $subject,
+        Body                => "",
+        AttachmentFieldName => 'Attach'
+    );
+
+    $session{'Attachments'} = { %{$session{'Attachments'} || {}},
+                               $ARGS{'Attach'} => $attachment };
+}
+
+unless (keys %{$session{'Attachments'}} and $ARGS{'id'} eq 'new') {
+    delete $session{'Attachments'};
+}
+
+my $CFs = $queue_obj->TicketCustomFields;
+my $ValidCFs = $m->comp(
+    '/Elements/ValidateCustomFields',
+    CustomFields => $CFs,
+    ARGSRef => \%ARGS
+);
+unless ( $ValidCFs ) {
+    $checks_failure = 1;
+    while ( my $CF = $CFs->Next ) {
+        my $msg = $m->notes('InvalidField-' . $CF->Id) or next;
+        push @results, $CF->Name . ': ' . $msg
+            if ($ARGS{'id'}||'') eq 'new';
+    }
+}
+
+if ( !$checks_failure && !$skip_create ) {
+    $m->comp('Display.html', %ARGS);
+    $RT::Logger->crit("After display call; error is $@");
+    $m->abort();
+}
+</%init>