+#!/usr/bin/perl
+use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
+#use CGI;
+use warnings;
+use Data::Dumper;
+use File::Temp qw/ tempfile tempdir /;
+use utf8;
+use CGI qw(-utf8);
+
+my $cgi = new CGI();
+
+
+
+my @files = $cgi->param('attachments[]');
+my @io_handles=$cgi->upload('attachments[]');
+
+my $mainfile = $cgi->param('mainfile');
+my $main_handle = $cgi->upload('mainfile');
+
+
+my $dir = "/local/apachetmp/labtoolspdfmerge";
+system("mkdir -p $dir");
+my $workdir = tempdir( DIR => $dir, CLEANUP => 1 );
+
+my $error = "";
+
+unshift(@files,$mainfile);
+unshift(@io_handles,$main_handle);
+
+my @sanefiles;
+foreach my $upload(@files){
+ my $upload_file = shift @io_handles;
+ $upload =~ s/"//g;
+ $upload =~ s/\\//g;
+ $upload =~ s/\.\.//g;
+ $upload =~ s/;//g;
+ $upload =~ s%/%%g;
+ next if $upload eq '';
+ next unless $upload_file;
+
+ open (UPLOADFILE,">$workdir/$upload") or $error .= "File Open Error";
+ next unless UPLOADFILE;
+
+ binmode UPLOADFILE;
+ while (<$upload_file>) {
+ print UPLOADFILE;
+ }
+ close UPLOADFILE;
+
+ if($upload =~ /\.jpe?g$/i || $upload =~ /\.png$/i) {
+ $error .= `cd $workdir; convert $upload -auto-orient $upload.pdf 2>&1`;
+ $upload .= ".pdf";
+ }
+
+ push(@sanefiles,'"'.$upload.'"');
+ }
+
+my @fnparts;
+push(@fnparts, $cgi->param('lastname'));
+push(@fnparts, $cgi->param('firstname'));
+push(@fnparts, $cgi->param('date')) unless $cgi->param('date') eq '';
+push(@fnparts, $cgi->param('occassion')) unless $cgi->param('occassion') eq '';
+push(@fnparts, $cgi->param('destination'))unless $cgi->param('destination') eq '';
+push(@fnparts, "Antrag") if $cgi->param('doctype') eq 'Travel Request';
+push(@fnparts, "Abrechnung") if $cgi->param('doctype') eq 'Travel Reimbursement';
+push(@fnparts, "TEST_IGNORE") if $cgi->param('doctype') eq 'TEST';
+
+
+for(my $i=0;$i<scalar @fnparts;$i++) {
+ $fnparts[$i] =~ s/[^A-Za-z0-9\-_öäüÜÖÄß]//g;
+ }
+
+
+my $random = sprintf("%06X", rand(0xffffff));
+my $target = join('_',@fnparts);
+ $target .= "++ID-$random.pdf";
+
+
+my $cmd = "cd $workdir; pdfunite ".join(" ",@sanefiles)." $target 2>&1";
+$error .= `$cmd`;
+system("cd $workdir; cp $target /srv/uploads/");
+
+
+$error =~ s/Syntax Warning: Output intents differs, remove them all//g;
+$error =~ s/\n/<br>/g;
+#$error .= $cgi->param('lastname')." ".$fnparts[0];
+#$error .= Dumper @io_handles;
+#$error .= "----";
+#$error .= Dumper @files;
+print "Content-Type: text/html\n\n";
+print <<HTML;
+<html>
+<body>
+<p>File uploaded. Server response (if any, may contain useless warnings...):</p>
+<code>$error</code>
+HTML
+
+if(-e "uploads/$target") {
+print <<HTML;
+<script>
+window.onload = function() {
+ window.location.href = "uploads/$target";
+};
+</script>
+HTML
+}
+
+print("</body></html>");
+
+
+
+
+