+$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();
+}