#!/usr/bin/perl
# Autosubmit version 3.3
# Last updated: 2002-05-07 22:25 (GMT -0600)
# Copyright, 2000 - present, Matthew Musgrove, muskrat@mindless.com
use strict;
use warnings;
use File::Copy;
use CGI;
use Text::ParseWords;
my $online;
$online = 1 if (defined $ENV{"REMOTE_ADDR"}); # assumes tha
+t the REMOTE_ADDR environment variable isn't set unless run as a CGI
our $q = new CGI; # so I'm lazy...
my $datapath = "."; # data path
my $filename = "data.txt"; # filenam
+e of data file
my $datafile = "$datapath/$filename"; # full file path
+of data file
my $backup = "$datafile.bak"; # full file path of b
+ackup file
my $header = "header.html"; # header file
my $footer = "footer.html"; # footer file
#my $action = "http://servername/path/to/cfm/enter_action.cfm"; # w
+here to submit the form, in this case a cold fusion app
my $action = "test.cgi"; # where to submit the form, in this case a
+ test script that spits out what you submit
my $FLock = 0; # use file loc
+king?
my $timeout = 10000; # time (sec*1000) before s
+tarting next submission
my $delimit = '\|'; # datafile delimiter, in th
+is case the pipe symbol
copy($datafile, $backup) if (! -e $backup);
my @data = ReadFile($datafile, $FLock); # Read the data
+ from the file and return it sorted
my $size = @data; # Size of the array?
my $line; # One line from the array
if ($size > 0) { # At least one line in array
@data = RemoveBlanks(@data); # Return the non-blank
+ lines
($line, @data) = GetLine(@data); # Get the last line an
+d the shorter array
UpdateFile($datafile, $FLock, @data); # Update the
+datafile with the new data array
CreateForm($header, $footer, $line, $delimit, $timeout, $action);
+# create the frameset and turn it loose!
exec("perl $0"); # execute myself! using perl f
+or those systems that don't know what to do with the file
} else { # Cleanup
unlink $header; # delete the header file, n
+o error checking because it's not critical
unlink $footer; # delete the footer file, d
+itto
if ($online) {
print $q->header,
$q->start_html('Job Finished'),
$q->p,
"Back to the ",
$q->a({-href=>'index.html'}, 'index'),
".",
$q->end_html();
} else {
print "Job Finished.\n";
unlink $datafile; # delete the original (no
+w empty)
move($backup, $datafile); # Restore the origina
+l
}
}
sub ReadFile{
my ($datafile, $FLock) = @_;
open(DATA, "<$datafile") or die "Couldn't open $datafile for readi
+ng: $!\n";
flock (DATA, 2) if ($FLock);
my @data = <DATA>;
close(DATA);
return sort @data;
}
sub RemoveBlanks{
my @data;
foreach (@_){
push(@data, $_) unless /^\s+$/;
}
return @data;
}
sub GetLine{
my (@data) = @_;
my $line = pop(@data);
return $line, @data;
}
sub UpdateFile{
my ($datafile, $FLock, @data) = @_;
open(DATA, ">$datafile") || die "Unable to update the datafile, st
+opped $!";
flock(DATA, 2) if ($FLock);
print DATA @data;
close(DATA);
}
sub CreateForm{
# Create the header and footer files, then the frameset to contain the
+m.
my ($header, $footer, $line, $delimit, $timeout, $action) = @_;
CreateHeader($header, $line, $timeout);
CreateFooter($footer, $line, $delimit, $action);
print $q->header(-expires=>"now"),
"<html><head><meta name='pragma' content='no-cache' /><title>A
+utosubmit</title></head>",
$q->frameset({-rows=>"20%,80%"},
$q->frame({-name=>"header", -src=>"$header"}),
$q->frame({-name=>"footer", -src=>"$footer"})
),
"</html>" if ($online);
}
sub CreateHeader{
# Create the header file. It uses javascript to restart this web app.
my ($header, $line, $timeout) = @_;
if ($online) {
open(HTML, ">$header");
print HTML $q->start_html(
-script=>{-language=>'JavaScript',
-code=>'function DoIt(){ document.
+auto.submit(); }'},
-title=>'AutoSubmit',
-head=>$q->meta({-name => 'pragma',
-content => 'no-cache'}),
-onLoad=>"setTimeout('DoIt()', $timeout)"
+, ),
$q->start_form({-action=>"autosubmit.cgi",
-method=>"post",
-name=>"auto",
-target=>"_parent"}),
$q->endform(),
$q->p("Line to process: $line"),
$q->p($q->big('Wait for the page that says "Job Finished."
+')),
$q->end_html();
close(HTML);
} else {
print "Line to process: $line\n";
}
}
sub CreateFooter {
# Create the footer. It uses javascript to autosubmit the form to the
+ cold fusion app.
my ($footer, $line, $delimit, $action) = @_;
my ($ID, $title, $cat, $desc) = parse_line($delimit, 0, $line); #
+ parses the line and puts the section into variables
if ($online) {
open(HTML, ">$footer");
print HTML $q->start_html(
-script=>{-language=>'JavaScript',
-code=>'function DoIt(){ document.
+EnterForm.submit(); }'},
-title=>'AutoSubmit',
-head=>$q->meta({-name => 'pragma',
-content => 'no-cache'}),
-onLoad=>"DoIt()", ),
$q->start_form({-action=>"$action",
-method=>"post",
-name=>"EnterForm"}),
$q->table(),
$q->Tr(
$q->td($q->b('File ID')),
$q->td($q->textfield(-name=>"file_id", -value=>$ID
+, -maxlength=>11)),
),
$q->Tr(
$q->td($q->b('Title')),
$q->td($q->textfield(-name=>"title", -value=>$titl
+e, -size=>50)),
),
$q->Tr(
$q->td($q->b('Category')),
$q->td($q->textfield(-name=>"category1", -value=>$
+cat, -size=>50)),
),
$q->Tr(
$q->td($q->b('Description')),
$q->td($q->textarea(-name=>"description", -cols=>"
+20", -rows=>"3", -default=>$desc)),
),
$q->Tr(
$q->td($q->b('Convert to')),
$q->td($q->radio_group(-name=>'Convert', -values=>
+['HTML','PDF','No'], -default=>'No', -linebreak=>'true')),
),
$q->Tr(
$q->td($q->b('Private')),
$q->td($q->checkbox(-name=>'chkPrivate', -label=>'
+Check here if this is a private item')),
),
$q->Tr(
$q->td($q->b('Site ID')),
$q->td($q->checkbox_group(-name=>'site_id', -value
+=>['Department', 'Practice Group', 'Office'], -linebreak=>'true')),
),
$q->submit,
$q->br,
$q->end_form(),
$q->end_table(),
$q->end_html();
close(HTML);
} else {
print "ID = $ID\nTitle = $title\nCategory = $cat\nDescription
+= $desc\n";
}
}
|