#!/usr/local/bin/perl # Home Improvement Application use strict; use warnings; use File::Basename; use File::Copy; use CGI qw(:standard); use CGI::Carp qw ( fatalsToBrowser ); require "settings.pl"; use vars qw( $problem $writeType $bytes $addendumDir $tempdir ); umask(000); &load; my $cgi = new CGI; my $max_size = 250; $CGI::POST_MAX = 1024 * 1500; # Limit to 1500kb posts... if (defined(param('files'))) { my $associate = param('associate'); my @files = param('files'); my @captions = param('caption'); my $fullpath = join("|",@files); my $desc = join("|",@captions); uploadMultiple($associate,$fullpath,$desc); } elsif (!defined(param('files'))) { my $image = param('uniquecode'); uploadMulti($image); } else { print $cgi->header; print "Accessing this script illegally!"; } sub uploadMulti { my ($tempError,$error,$name); if (scalar(@_) == '1') { $name = shift; $error = " "; } else { ($tempError,$name) = @_; if ($tempError eq "Bad File Extension") { $error = &badExt; } else { $error = &fileToBig; } } my @images = ("one","two","three","four"); my $uploaded = '1'; my $multi; for (my $rows = $uploaded; $rows < scalar((@images) + $uploaded); $rows++) { $multi .= qq(
Caption for graphic:  

); } print $cgi->header(); print <

$error

$multi
    
FORM ; exit(0); } sub uploadMultiple { my ($associate,$filenames,$descriptions) = @_; # Associate default name with multiple graphics my $counter = '0'; my ($fullname,$filename,@addendums,@matches,@fileArray,$add,$ext); my @tempNames = split(/\|/,$filenames); my @tempDesc = split(/\|/,$descriptions); # Check addendum.txt for existing graphics related to this unique code. open (ADDENDUM,"$addendumDir") || die ("Error opening $addendumDir for reading:$!"); @addendums = ; close (ADDENDUM); if (scalar(@addendums) == '0') { $add = '000'; } else { # Search through records for matches for this unique code. for (@addendums) { my ($primary,$linked) = split(/\t/, $_); if ($primary == $associate) { push @matches, $linked; } } $add = (scalar(@matches) + 1); if (($add >= '1') && ($add < '10')) { $add = '00' . $add; } elsif (($add >= '10') && ($add < '99')) { $add = '0' . $add; } } my (@fullnames,@names,@capts); OUTER: foreach $fullname (@tempNames) { my $rec = {}; INNER: if ($fullname eq "") { last OUTER; $counter++; } else { ($ext,$associate) = getFileName($fullname,$associate); $filename = $associate . "-" . $add . $ext; $rec->{filename} = $filename; $rec->{fullname} = $fullname; $rec->{description} = $tempDesc[$counter]; push @fileArray, $rec; push @fullnames, $fullname; push @names, $filename; push @capts, $tempDesc[$counter]; } $counter++; $add++; } my $full = join("|",@fullnames); my $name = join("|",@names); my $capt = join("|",@capts); uploadMultiFiles($full,$name,$capt,$associate); } sub uploadMultiFiles { my ($paths,$newnames,$capts,$associate) = @_; my @filehandles = split(/\|/,$paths); my @filenames = split(/\|/,$newnames); my @descriptions = split(/\|/,$capts); for (my $i = 0; $i < scalar(@filehandles); $i++) { my $data; my $uploadInfo = $tempdir . "/" . $filenames[$i]; open(STORAGE, ">$uploadInfo") || die ("Error: $uploadInfo: $!\n"); binmode $filenames[$i]; # Not need for Unix machines because Unix handles linefeeds properly, necessary on Windows machines binmode(STORAGE); my $size = '0'; while( read($filehandles[$i],$data,1024) ) { print STORAGE $data; $size += 1024; # if ($size > ($max_size * 1024)) { # close STORAGE; # unlink($uploadInfo); # $problem = "Image too Large"; # $writeType = "Error Log"; # writeLog($writeType,$problem); # uploadMultiple($problem,$associate); # exit(0); # } } close STORAGE; my $bytes_read = ($size/1024) . "Kb"; } # multiLog($filename,$bytes); # outputRecord($filehandle,$filename,$uploadInfo); } sub multiLog { my ($file,$bytes) = @_; open(LOGS, ">>$addendumDir") || die ("Error opening $addendumDir for writing: $!"); print LOGS ("$file\t$bytes\n"); close(LOGS); } sub getFileName { if($ENV{HTTP_USER_AGENT} =~ /win/i) { fileparse_set_fstype("MSDOS"); } elsif ($ENV{HTTP_USER_AGENT} =~ /mac/i) { fileparse_set_fstype("MacOS"); } my ($fullname,$name) = @_; my $fullname = basename($fullname); my $ext = substr($fullname,-4); my @good_extensions = (".jpg",".jpeg",".jpe",".gif",".png"); # acceptable file extensions for uploading my $e; my $extension; my $test; OUTER: for (@good_extensions) { INNER: if ($ext eq $_) { $test = "passed"; $extension = $_; last OUTER; } } if ($test eq "failed") { $writeType = "Error Log"; $problem = "Bad File Extension"; # writeLog($writeType,$problem); uploadMulti($problem,$name); exit(0); } else { return ($extension,$name); } } sub outputRecord { print $cgi->header(); for (@_) { print $_; print "
"; } }