#!/usr/bin/perl --
####################################################################
#
# eSurvey
# ©2002, PerlScriptsJavaScripts.com
#
# Requires: Perl5+
# Created: March 12, 2002
# Author: John Krinelos
# Contact: john@perlscriptsjavascripts.com
#
# This script / program is copyright material!
#
####################################################################
#
# There is no need to edit anything in this file
# Edit the _key.cgi file only
#
####################################################################
# used to concatenate admin and cfg file.
# Also makes up the first part of the data folder's name
my $ext = "cgi";
my $ScriptName = "esurvey";
my $publicURL = "$ScriptName\.$ext";
# Determine OS and set a seperator
$OS = $^O;
if($OS =~ /Darwin/i) { $isMac = 1; $isUNIX = 1;}
elsif($OS =~ /win/i) { $isWIN = 1; }
else {$isUNIX = 1;}
if($isWIN){ $S{S} = "\\\\"; }
else { $S{S} = "/";}
# get config file
if($isWIN){
$absPath = $ENV{PATH_TRANSLATED};
$relPath = $ENV{PATH_INFO};
$relPath =~ s/\//$S{S}/g;
$ENV{DOCUMENT_ROOT} = $absPath;
$ENV{DOCUMENT_ROOT} =~ s/$relPath//i;
$TransPath = $ENV{PATH_TRANSLATED};
$ConfigPath = $TransPath;
$ConfigPath =~ s/\.$ext/\_cfg\.$ext/;
$KeyPath = $TransPath;
$KeyPath =~ s/\.$ext/\_key\.$ext/;
} elsif($isMac){
$TransPath = $ENV{SCRIPT_FILENAME};
$ConfigPath = $TransPath;
$ConfigPath =~ s/\.$ext/\_cfg\.$ext/;
$KeyPath = $TransPath;
$KeyPath =~ s/\.$ext/\_key\.$ext/;
} else {
$ConfigPath = "$ScriptName\_cfg\.$ext";
$KeyPath = "$ScriptName\_key\.$ext";
}
require $ConfigPath;
require $KeyPath;
$DefaultData =~ s/(\/|\\)+$//g;
$SecureServer =~ s/(\/|\\)+$//g;
$ScriptURL = "http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}";
# Dynamically create URL.
if($SecureServer) { $ScriptURL = qq~$SecureServer/$publicURL~; }
$pieURL = $ScriptURL;
$pieURL =~ s/$ScriptName.$ext/charts\/$ScriptName\_pie.$ext/ig;
$barURL = $ScriptURL;
$barURL =~ s/$ScriptName.$ext/charts\/$ScriptName\_bar.$ext/ig;
$polarURL = $ScriptURL;
$polarURL =~ s/$ScriptName.$ext/charts\/$ScriptName\_polar.$ext/ig;
# Add the folder pass and create a data path
$ScriptName .= $FolderPass;
# get the path to data files
if($DefaultData){
$DefaultData =~ s/(\/|\\)$//g;
$Data = qq~$DefaultData$S{S}psjs_datalogs$S{S}$ScriptName~;
} else {
$Data = qq~$ENV{DOCUMENT_ROOT}$S{S}psjs_datalogs$S{S}$ScriptName~;
}
use CGI;
my $GET = new CGI;
my @VAL = $GET->param;
# must use either Get or Post fields [cant read both]
foreach(@VAL){
$FORM{$_} = $GET->param($_);
}
&Initialize($FORM{id});
&Date;
&GetCookies;
####################################################################
# Script Commands #
####################################################################
if($FORM{action} eq "viewSurvey"){
&viewSurvey($FORM{id});
} elsif($FORM{action} eq "previewSurvey"){
&previewSurvey($FORM{id});
} elsif($FORM{action} eq "processSurvey"){
&processSurvey($FORM{id});
} elsif($FORM{action} eq "listSurveys"){
&list($FORM{id});
} elsif($FORM{action} eq "viewResults"){
&res($FORM{id});
} else {
&error($FORM{id});
}
####################################################################
####################################################################
sub list {
my ( %VAR, @details, @divs, @ispub, @public );
$VAR{mid} = shift;
@details = getfile("$Data$S{S}data$S{S}details\.list");
foreach(@details){
@divs = split(/\|\|/, $_);
@ispub = getline('publicres', "$Data$S{S}$divs[0]$S{S}config\.ftf");
if($ispub[1] == 1){
push(@public, $_);
}
}
&PrintHead();
print qq~
$lang{PublicSurvSit} |
$lang{PublicSurvName} |
$lang{PublicSurvSubs} |
~;
$VAR{a} = 0;
foreach(@public){
@divs = split(/\|\|/, $_);
$VAR{bg} = $VAR{a} % 2 == 0 ? qq~$bg2~ : qq~$bg3~;
@res = getfile("$Data$S{S}$divs[0]$S{S}subs.list");
$VAR{res} = $res[0] ? $res[0] + 1 : 0;
print qq~
$divs[1] |
$divs[1] |
$VAR{res} |
~;
$VAR{a}++;
}
print qq~
~;
&PrintFoot;
}
####################################################################
####################################################################
sub res {
my ( %VAR, @divs, @questions, @surveys, @rows, @answers, %count, %perc );
my ( %units, @adivs, %text, @idivs, @subs, %divs, %total, @ispub, %done );
my ( @cats, %catQuests, %catScore, %catTotal );
$VAR{id} = shift;
&PrintHead();
@name = getline($VAR{id}, "$Data$S{S}data$S{S}details\.list");
$VAR{name} = $name[1];
@ispub = getline('publicres', "$Data$S{S}$name[0]$S{S}config\.ftf");
# get n sort cats
@cats = &getfile("$Data$S{S}$VAR{id}$S{S}cats.ftf");
foreach(@cats){
@divs = split(/\|\|/, $_);
push(@rows, $divs[2]);
# define cats
$catQuests{$divs[0]} = 0;
}
@cats = @cats[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
if($ispub[1] == 1){
@subs = getfile("$Data$S{S}$VAR{id}$S{S}subs\.list");
@questions = getfile("$Data$S{S}$VAR{id}$S{S}questions\.list");
undef @rows;
foreach(@questions){
@divs = split(/\|\|/, $_);
push(@rows, $divs[1]);
if($divs[9]){
$VAR{emailFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
if($divs[10]){
$VAR{fnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
if($divs[11]){
$VAR{lnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
# count num qs in each
$catQuests{$divs[15]}++;
}
#$VAR{fnameFLD} ||= $VAR{emailFLD};
@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
# get total units for each question and each answer
foreach(@subs){
%divs = split(/\|\|/, $_);
foreach(keys %divs){
if($_ =~ /Surv\_/){
if($_ =~ /Surv\_T/ || $_ =~ /Surv\_X/ || $_ =~ /Surv\_F/){
$divs{$_} =~ s/!LBCR!/
/ig;
if($_ eq $VAR{emailFLD}){
$text{$_} .= qq~$lang{ResultsEmail} $divs{$_}
~;
} elsif($_ =~ /Surv\_File/ && $divs{$_}){
$text{$_} .= qq~$divs{$_}
~;
} elsif($divs{$_}){
$text{$_} .= qq~$divs{$_}
~;
}
} elsif($divs{$_}){
# add answer id to distinguish from other answers
if($_ =~ /Surv\_Checkbox/){
# checkboxes already have the ID, strip it for groups
@divs = split(/\_/, $_);
$VAR{grouped} = qq~$divs[0]\_$divs[1]\_$divs[2]~;
$units{$_}++;
$total{$VAR{grouped}}++;
} else {
$units{"$_\_$divs{$_}"}++;
$total{$_}++;
}
}
}
}
}
# get graphs and percs
foreach(keys %units){
# grouped answers have no answer id
@divs = split(/\_/, $_);
$VAR{grouped} = qq~$divs[0]\_$divs[1]\_$divs[2]~;
if($units{$_} > 0 && $total{$VAR{grouped}} > 0){
$perc{$_} = $units{$_} * 100 / $total{$VAR{grouped}};
$perc{$_} = sprintf("%0.2f", $perc{$_});
1 while $perc{$_} =~ s/(.*\d)(\d\d\d)/$1,$2/g;
$graph{$_} = &getGraph($perc{$_});
$perc{$_} .= qq~%~;
} else {
$graph{$_} = &getGraph();
$perc{$_} = qq~0%~;
}
}
if($CONFIG{showtyped} == 1){
print qq~
~;
}
print qq~
$lang{ResultsQuestion} |
$lang{ResultsAnswer} |
$lang{ResultsUnits} |
$lang{ResultsPercentage} |
~;
$VAR{a} = 0;
foreach(@questions){
@divs = split(/\|\|/, $_);
unless($divs[9]){
if($divs[2] eq "Text" || $divs[2] eq "File" || $divs[2] eq "Textarea"){
print qq~
$divs[4] |
~;
if($CONFIG{showtyped} == 1){
print qq~
|
$lang{ResultsShowHide}
$VAR{txtAnswrs}
$text{"Surv_$divs[2]_$divs[0]"} $text{"Surv_X_$divs[0]"} |
|
~;
}
$VAR{a}++;
}
}
}
# get cat names
foreach(@cats){
@divs = split(/\|\|/, $_);
$divs[1] =~ s/<\*br\*>/ /ig;
$cat{$divs[0]} = $divs[1];
}
# now sort by cat, then defined order
undef @rows;
foreach(@questions){
@divs = split(/\|\|/, $_);
push(@rows, qq~$cat{$divs[15]}$divs[1]~);
}
@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
$VAR{c} = 0;
foreach(@questions){
@divs = split(/\|\|/, $_);
unless($divs[9]){
if($divs[2] eq "Radio" || $divs[2] eq "Checkbox" || $divs[2] eq "Select"){
unless($done{$divs[15]}){
@divs = split(/\|\|/, $_);
print qq~
$cat{$divs[15]} |
~;
$done{$divs[15]} = 1;
}
@answers = split(/!LBCR!/, $divs[5]);
undef @rows;
foreach(@answers){
@adivs = split(/\:\:/, $_);
push(@rows, $adivs[0]);
}
@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
print qq~
$divs[4] |
~;
$VAR{width} = 500;
$VAR{height} = 120;
$VAR{bg1} = $bg1; $VAR{bg1} =~ s/\#//ig;
$VAR{data} = qq~~;
$VAR{labels} = qq~~;
$VAR{rowspan} = 0;
foreach(@answers){
@adivs = split(/\:\:/, $_);
$VAR{data} .= qq~$perc{"Surv_$divs[2]_$divs[0]_$adivs[0]"},~;
$VAR{temp} = $adivs[1];
$VAR{temp} =~ s/\,/ /ig;
$VAR{temp} =~ s/\&/\+/ig;
$VAR{labels} .= qq~$VAR{temp},~;
$VAR{rowspan}++;
}
chop $VAR{data}; chop $VAR{labels};
$VAR{data} =~ s/\%//ig;
$VAR{b} = 0;
foreach(@answers){
@adivs = split(/\:\:/, $_);
$units{"Surv_$divs[2]_$divs[0]_$adivs[0]"} ||= qq~0~;
$perc{"Surv_$divs[2]_$divs[0]_$adivs[0]"} ||= qq~0%~;
print qq~
|
$adivs[1] |
$units{"Surv_$divs[2]_$divs[0]_$adivs[0]"} |
$perc{"Surv_$divs[2]_$divs[0]_$adivs[0]"} |
~;
if($GraphMod){
if($VAR{b} == 0){
if($CONFIG{usepie} == 1){
$VAR{params} = qq~data=$VAR{data}&labels=$VAR{labels}~;
print qq~
|
~;
} else {
$VAR{params} = qq~width=$VAR{width}&height=$VAR{height}&~;
$VAR{params} .= qq~bgmain=0x$VAR{bg1}&bgarea=0xffffff~;
$VAR{params} .= qq~&linewidth=2&data1Clr=0x00ee00~;
$VAR{params} .= qq~&brdClr=0x000000&plotLeft=52~;
$VAR{params} .= qq~&plotTop=10&plotWidth=428&plotHeight=88~;
$VAR{params} .= qq~&depth=5&data1BrdClr=0x00aa00&~;
$VAR{params} .= qq~&data1=$VAR{data}&labels=$VAR{labels}~;
print qq~
|
~;
}
}
} else {
print qq~$graph{"Surv_$divs[2]_$divs[0]_$adivs[0]"} | ~;
}
print qq~
~;
$VAR{b}++;
}
if($CONFIG{showtyped} == 1){
print qq~
|
$lang{ResultsShowHide}
$VAR{txtAnswrs}
$text{"Surv_$divs[2]_$divs[0]"} $text{"Surv_X_$divs[0]"} |
|
~;
}
$VAR{a}++;
}
}
}
print qq~
~;
if($CONFIG{showtyped} == 1){
print qq~
~;
}
#foreach(keys %units){
# print qq~$_ -> $units{$_}
# ~;
#}
#print qq~
BREAK
~;
#foreach(keys %total){
# print qq~$_ -> $total{$_}
# ~;
#}
} else {
print qq~
~;
}
&PrintFoot;
}
####################################################################
####################################################################
sub error {
my ( %VAR, @name );
$VAR{id} = shift;
$VAR{error} = shift;
&PrintHead($VAR{id});
#foreach(@VAL){
# $VAR{fu} = $GET->param($_);
# print qq~$_ -> $VAR{fu}
# ~;
#}
print qq~$VAR{error}~;
&PrintFoot($VAR{id});
}
####################################################################
####################################################################
sub viewSurvey {
my ( %VAR, @name, @questions, @answers, @divs, @adivs, @reqs, @match, @matched, @edivs );
$VAR{id} = shift;
$VAR{isEdit} = $FORM{isEdit};
@name = getline($VAR{id}, "$Data$S{S}data$S{S}details\.list");
if($CONFIG{unqSubs} == 1){
$CONFIG{policeby} ||= 3;
if($CONFIG{policeby} == 1){
if($ENV{REMOTE_ADDR} =~ /\w+/){
@edivs = &getline($ENV{REMOTE_ADDR}, "$Data$S{S}$VAR{id}$S{S}$VAR{id}\_ips.list");
if($edivs[0]){
$VAR{date} = &getDate($edivs[1]);
$lang{SettSubmittedIP} =~ s/%%%date%%%/$VAR{date}/ig;
$lang{SettSubmittedIP} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
$lang{SettSubmittedIP} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
$lang{SettSubmittedIP} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
$lang{SettSubmittedIP} =~ s/%%%day%%%/$CONFIG{startday}/ig;
$lang{SettSubmittedIP} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
&error($VAR{id}, $lang{SettSubmittedIP}); return;
}
}
} elsif($CONFIG{policeby} == 2){
if($COOKIE{"eSurv_$VAR{id}"}){
@edivs = split(/\|\|/, $COOKIE{"ePoll_$VAR{id}"});
$VAR{date} = &getDate($edivs[1]);
$lang{SettSubmittedCookie} =~ s/%%%date%%%/$VAR{date}/ig;
$lang{SettSubmittedCookie} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
$lang{SettSubmittedCookie} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
$lang{SettSubmittedCookie} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
$lang{SettSubmittedCookie} =~ s/%%%day%%%/$CONFIG{startday}/ig;
$lang{SettSubmittedCookie} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
&error($VAR{id}, $lang{SettSubmittedCookie}); return;
}
} else {
if($ENV{REMOTE_ADDR} =~ /\w+/){
@edivs = &getline($ENV{REMOTE_ADDR}, "$Data$S{S}$VAR{id}$S{S}$VAR{id}\_ips.list");
if($edivs[0]){
$VAR{date} = &getDate($edivs[1]);
$lang{SettSubmittedIP} =~ s/%%%date%%%/$VAR{date}/ig;
$lang{SettSubmittedIP} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
$lang{SettSubmittedIP} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
$lang{SettSubmittedIP} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
$lang{SettSubmittedIP} =~ s/%%%day%%%/$CONFIG{startday}/ig;
$lang{SettSubmittedIP} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
&error($VAR{id}, $lang{SettSubmittedIP}); return;
}
}
if($COOKIE{"eSurv_$VAR{id}"}){
@edivs = split(/\|\|/, $COOKIE{"ePoll_$VAR{id}"});
$VAR{date} = &getDate($edivs[1]);
$lang{SettSubmittedCookie} =~ s/%%%date%%%/$VAR{date}/ig;
$lang{SettSubmittedCookie} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
$lang{SettSubmittedCookie} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
$lang{SettSubmittedCookie} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
$lang{SettSubmittedCookie} =~ s/%%%day%%%/$CONFIG{startday}/ig;
$lang{SettSubmittedCookie} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
&error($VAR{id}, $lang{SettSubmittedCookie}); return;
}
}
}
if($CONFIG{startmonth} && $CONFIG{startday} && $CONFIG{startyear}){
$VAR{yettostart} = 0;
if($THISYEAR < $CONFIG{startyear}){
$VAR{yettostart} = 1;
}
if($MONTH < $CONFIG{startmonth} && $THISYEAR <= $CONFIG{startyear}){
$VAR{yettostart} = 1;
}
if($DAYOFMONTH < $CONFIG{startday} && $MONTH <= $CONFIG{startmonth} && $THISYEAR <= $CONFIG{startyear}){
$VAR{yettostart} = 1;
}
if($DAYOFMONTH == $CONFIG{startday} && $MONTH == $CONFIG{startmonth} && $THISYEAR == $CONFIG{startyear}){
if($hour < $CONFIG{starthour}){
$VAR{yettostart} = 1;
}
if($hour == $CONFIG{starthour} && $minute < $CONFIG{startmin}){
$VAR{yettostart} = 1;
}
}
if($VAR{yettostart}){
$lang{PublicYetToStart} =~ s/%%%date%%%/$month_name[$CONFIG{startmonth} - 1] $CONFIG{startday}, $CONFIG{startyear}/ig;
$lang{PublicYetToStart} =~ s/%%%time%%%/$CONFIG{starthour}:$CONFIG{startmin}/ig;
$lang{PublicYetToStart} =~ s/%%%month%%%/$CONFIG{startmonth}/ig;
$lang{PublicYetToStart} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
$lang{PublicYetToStart} =~ s/%%%day%%%/$CONFIG{startday}/ig;
$lang{PublicYetToStart} =~ s/%%%year%%%/$CONFIG{startyear}/ig;
&error($VAR{id}, $lang{PublicYetToStart}); return;
}
}
if($CONFIG{expmonth} && $CONFIG{expday} && $CONFIG{expyear}){
$VAR{expired} = 0;
if($THISYEAR > $CONFIG{expyear}){
$VAR{expired} = 1;
}
if($MONTH > $CONFIG{expmonth} && $THISYEAR >= $CONFIG{expyear}){
$VAR{expired} = 1;
}
if($DAYOFMONTH > $CONFIG{expday} && $MONTH >= $CONFIG{expmonth} && $THISYEAR >= $CONFIG{expyear}){
$VAR{expired} = 1;
}
if($DAYOFMONTH == $CONFIG{expday} && $MONTH == $CONFIG{expmonth} && $THISYEAR == $CONFIG{expyear}){
if($hour > $CONFIG{exphour}){
$VAR{expired} = 1;
}
if($hour == $CONFIG{exphour} && $minute >= $CONFIG{expmin}){
$VAR{expired} = 1;
}
}
if($VAR{expired}){
$lang{PublicExpired} =~ s/%%%date%%%/$month_name[$CONFIG{expmonth} - 1] $CONFIG{expday}, $CONFIG{expyear}/ig;
$lang{PublicExpired} =~ s/%%%time%%%/$CONFIG{exphour}:$CONFIG{expmin}/ig;
$lang{PublicExpired} =~ s/%%%month%%%/$CONFIG{expmonth}/ig;
$lang{PublicExpired} =~ s/%%%day%%%/$CONFIG{expday}/ig;
$lang{PublicExpired} =~ s/%%%year%%%/$CONFIG{expyear}/ig;
$lang{PublicExpired} =~ s/%%%monthname%%%/$month_name[$CONFIG{startmonth} - 1]/ig;
&error($VAR{id}, $lang{PublicExpired}); return;
}
}
@questions = getfile("$Data$S{S}$VAR{id}$S{S}questions\.list");
undef @rows;
foreach(@questions){
@divs = split(/\|\|/, $_);
push(@rows, $divs[1]);
}
@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
# get required fields after a sort
foreach(@questions){
@divs = split(/\|\|/, $_);
if($divs[7]){
push(@reqs, $_);
}
}
# generate javascript
if($reqs[0]){
$VAR{handler} = qq~onsubmit="return checkF(this);"~;
$VAR{script} = qq~
$js_check_email
~;
}
&PrintHead($VAR{id});
print qq~
~;
if($CONFIG{live} == 2){
print qq~$lang{PublicDiscont}~;
} else {
if($CONFIG{preview} == 1){
$VAR{action} = qq~previewSurvey~;
$VAR{button} = $lang{PublicSurveyPreview};
} else {
$VAR{action} = qq~processSurvey~;
$VAR{button} = $lang{PublicSurveySubmit};
}
print qq~
$VAR{script}
~;
}
print qq~
~;
&PrintFoot($VAR{id});
}
####################################################################
####################################################################
sub previewSurvey {
my ( $atts, @files, @success, $selected, @ar, @adm, %VAR, @name );
my ( %TMP, @todel, %hash, @UID, @questions, @divs, @answers, @match );
unless($FORM{id} =~ /\d+/){
&PrintHead();
print qq~
$lang{PublicNoID}
<input type="Hidden" name="id" value="1092834532">
|
~;
&PrintFoot();
exit;
}
if($CONFIG{live} == 2){
&PrintHead($FORM{id});
print qq~$lang{PublicDiscont}~;
&PrintFoot($FORM{id});
exit;
}
if($CONFIG{pass} ne $FORM{Surv_pass}){
&PrintHead($FORM{id});
print qq~
~;
&PrintFoot($FORM{id});
exit;
}
foreach(keys %FORM){
if($_ =~ /^Surv_File\_\d+$/ && $FORM{$_} =~ /\w/){
push(@files, $_);
} elsif($_ =~ /_HiddenFile$/ && $FORM{$_} =~ /\w/){
$VAR{_HiddenFile}++;
}
}
# upload any files entered for uploading
foreach (@files){
# upload each file, pass the form field NAME if it has a value
if($FORM{$_}){
# if the form field contains a file name &psjs_upload subroutine
# the file's name and path are passed to the subroutine
$VAR{returned} = &psjs_upload($FORM{$_},$FORM{destination});
if($VAR{returned} =~ /^$lang{UploadSuccess}/i){
# if the $VAR{returned} message begins with "Success" the upload was succssful
# remove the word "Success" and any spaces and we're left with the filename
$VAR{returned} =~ s/^$lang{UploadSuccess}\s+//;
push(@success, $VAR{returned});
} else {
# else if the word "success" is not returned, the message is the error encountered.
# add the error to the $VAR{failed} scalar
$VAR{failed} .= $VAR{returned};
}
$selected++; # increment num of files selected for uploading by user
}
}
unless($VAR{_HiddenFile}){
if($CONFIG{attach} == 1){
if(!$selected){
# no files were selected by user, so nothing is returned to either variable
$VAR{failed} .= qq~$lang{PublicNoFiles}~;
}
}
}
if($VAR{failed}){
&PrintHead($FORM{id});
$VAR{failed} = qq~
$lang{PublicUploadFailure}
$VAR{failed} |
~;
print qq~$VAR{failed}~;
&PrintFoot($FORM{id});
exit;
}
@name = getline($FORM{id}, "$Data$S{S}data$S{S}details\.list");
$VAR{name} = $name[1];
@questions = getfile("$Data$S{S}$FORM{id}$S{S}questions\.list");
undef @rows;
foreach(@questions){
@divs = split(/\|\|/, $_);
$quest{$divs[0]} = $divs[4];
push(@rows, $divs[1]);
if($divs[9]){
$VAR{emailFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
if($divs[10]){
$VAR{fnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
if($divs[11]){
$VAR{lnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
if($divs[16]){
$VAR{dupeFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
}
if($FORM{$VAR{dupeFLD}} && $VAR{dupeFLD}){
$FORM{$VAR{dupeFLD}} =~ s/\-//ig;
$FORM{$VAR{dupeFLD}} =~ s/\s+//ig;
# check for duplicate entries
@subs = getfile("$Data$S{S}$FORM{id}$S{S}subs\.list");
foreach(@subs){
%divs = split(/\|\|/, $_);
if($divs{$VAR{dupeFLD}} eq $FORM{$VAR{dupeFLD}}){
$VAR{exists} = 1;
last;
}
}
if($VAR{exists}){
&PrintHead($FORM{id});
print qq~
~;
&PrintFoot($FORM{id});
exit;
}
}
$VAR{fnameFLD} ||= $VAR{emailFLD};
@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
if($CONFIG{preview} == 1){
$VAR{action} = qq~previewSurvey~;
$VAR{button} = $lang{PublicSurveyPreview};
} else {
$VAR{action} = qq~processSurvey~;
$VAR{button} = $lang{PublicSurveySubmit};
}
&PrintHead($FORM{id});
print qq~
$lang{ViewSubQuestions} |
~;
foreach(@questions){
@divs = split(/\|\|/, $_);
print qq~
$divs[4] |
~;
if($divs[2] eq "Text" || $divs[2] eq "File" || $divs[2] eq "Textarea"){
if($divs[9]){
# set values
$VAR{fnameVAL} = $FORM{$VAR{fnameFLD}};
$VAR{fnameVAL} ||= $FORM{$VAR{emailFLD}};
print qq~
|
" class="green">$FORM{"Surv_$divs[2]_$divs[0]"} |
~;
} elsif($divs[2] eq "File"){
# get dir
@path = getline('def_url', "$Data$S{S}$FORM{id}$S{S}config\.ftf");
$FORM{"Surv_$divs[2]_$divs[0]"} ||= $FORM{"Surv_$divs[2]_$divs[0]_HiddenFile"};
$FORM{"Surv_$divs[2]_$divs[0]"} =~ s/^.*(\\|\/)//;
print qq~
|
$FORM{"Surv_$divs[2]_$divs[0]"} |
~;
} else {
$VAR{val} = $FORM{"Surv_$divs[2]_$divs[0]"};
$VAR{val} =~ s/\n/
/ig;
print qq~
|
$VAR{val} |
~;
}
if($divs[3]){
$VAR{val} = $FORM{"Surv_X_$divs[0]"};
print qq~
$divs[3] |
|
$VAR{val} |
~;
}
} else {
@answers = split(/!LBCR!/, $divs[5]);
undef @rows;
foreach(@answers){
@adivs = split(/\:\:/, $_);
push(@rows, $adivs[0]);
}
@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
# hide supp quest?
$VAR{showSupp} = 0;
$VAR{matchJS} = qq~~;
$divs[14] =~ s/\s+//ig;
@match = split(/\:\:/, $divs[14]);
foreach(@match){
$VAR{match} = $_;
$VAR{match} =~ s/\D+//ig;
if($VAR{match} =~ /\w+/){ $VAR{matchJS} .= qq~$VAR{match}::~; }
}
chop $VAR{matchJS}; chop $VAR{matchJS};
@match = split(/\:\:/, $VAR{matchJS});
$VAR{a} = 0;
foreach(@answers){
$VAR{bg} = $VAR{a} % 2 == 0 ? qq~$bg2~ : qq~$bg3~;
@adivs = split(/\:\:/, $_);
print qq~
~;
if($adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]"} || $adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]\_$adivs[0]"}){
print qq~
> |
$adivs[1] |
~;
foreach(@match){
if($adivs[0] eq $_){ $VAR{showSupp} = 1; }
}
} else {
print qq~
|
$adivs[1] |
~;
}
print qq~
~;
$VAR{a}++;
}
if($divs[3] && $VAR{showSupp}){
$VAR{val} = $FORM{"Surv_X_$divs[0]"};
print qq~
$divs[3] |
|
$VAR{val} |
~;
}
}
}
print qq~
~;
&PrintFoot($FORM{id});
}
####################################################################
####################################################################
sub processSurvey {
my ( $atts, @files, @success, $selected, @ar, @adm, %VAR, @thankstemplate, %TMP, @name );
my ( @todel, %hash, @UID, @questions, @divs, @answers, @adivs, %remarks, @rdivs, @remarks );
my ( @cats, %catQuests, %catScore, %catTotal, %cat );
unless($FORM{id} =~ /\d+/){
&PrintHead();
print qq~
$lang{PublicNoID}
<input type="Hidden" name="id" value="1092834532">
|
~;
&PrintFoot();
exit;
}
if($CONFIG{live} == 2){
&PrintHead($FORM{id});
print qq~$lang{PublicDiscont}~;
&PrintFoot($FORM{id});
exit;
}
if($CONFIG{pass} ne $FORM{Surv_pass}){
&PrintHead($FORM{id});
print qq~
~;
&PrintFoot($FORM{id});
exit;
}
@name = getline($FORM{id}, "$Data$S{S}data$S{S}details\.list");
@questions = getfile("$Data$S{S}$FORM{id}$S{S}questions\.list");
foreach(@questions){
@divs = split(/\|\|/, $_);
if($divs[9]){
$VAR{emailFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
if($divs[10]){
$VAR{fnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
if($divs[11]){
$VAR{lnameFLD} = qq~Surv_$divs[2]_$divs[0]~;
}
}
if($FORM{$VAR{emailFLD}}){
unless(check_email($FORM{$VAR{emailFLD}})){
&PrintHead($FORM{id});
print qq~
~;
&PrintFoot($FORM{id});
exit;
}
}
if($VAR{missing}){
$VAR{missing} = qq~$lang{PublicMissed}
$VAR{mfields}
~;
&PrintHead($FORM{id});
print qq~
~;
&PrintFoot($FORM{id});
exit;
}
unless($CONFIG{preview} == 1){
# files yet to be uploaded
foreach(keys %FORM){
if($_ =~ /^Surv_File\_\d+$/ && $FORM{$_} =~ /\w/){
push(@files, $_);
}
}
# upload any files entered for uploading
foreach (@files){
# upload each file, pass the form field NAME if it has a value
if($FORM{$_}){
# if the form field contains a file name &psjs_upload subroutine
# the file's name and path are passed to the subroutine
$VAR{returned} = &psjs_upload($FORM{$_},$FORM{destination});
if($VAR{returned} =~ /^$lang{UploadSuccess}/i){
# if the $VAR{returned} message begins with "Success" the upload was succssful
# remove the word "Success" and any spaces and we're left with the filename
$VAR{returned} =~ s/^$lang{UploadSuccess}\s+//;
push(@success, $VAR{returned});
} else {
# else if the word "success" is not returned, the message is the error encountered.
# add the error to the $VAR{failed} scalar
$VAR{failed} .= $VAR{returned};
}
$selected++; # increment num of files selected for uploading by user
}
}
if($CONFIG{attach} == 1){
if(!$selected){
# no files were selected by user, so nothing is returned to either variable
$VAR{failed} .= qq~$lang{PublicNoFiles}~;
}
}
if($VAR{failed}){
&PrintHead($FORM{id});
$VAR{failed} = qq~
$lang{PublicUploadFailure}
$VAR{failed} |
~;
print qq~$VAR{failed}~;
&PrintFoot($FORM{id});
exit;
}
}
if($success[0] || $CONFIG{attach} == 2 || $CONFIG{preview} == 2){
# upload was successful
@UID = getfile("$Data$S{S}$FORM{id}$S{S}uid\.list");
unless($UID[0]){
$UID[0] = $CONFIG{startuid};
}
$UID[0]++;
if(open(N, ">$Data$S{S}$FORM{id}$S{S}uid\.list")){
flock(N, 2);
print N qq~$UID[0]~;
close N;
}
# prepare special markers
foreach(@success){
$VAR{files} .= qq~$_\n~;
}
chop $VAR{files};
$FORM{Files} = $VAR{files};
$FORM{Date} = $offset;
$FORM{UID} = qq~$UID[0]~;
$FORM{IP} = $ENV{REMOTE_ADDR};
$FORM{Host} = &gethostname;
$FORM{Agent} = $ENV{HTTP_USER_AGENT};
$FORM{Referrer} = $ENV{HTTP_REFERER};
# prepare arg for attachments
if($success[0]){
$FORM{destination} ||= $CONFIG{def_dir};
$FORM{destination} =~ s/(\/|\\)$//ig;
foreach(@success){
$atts .= qq~$FORM{destination}$S{S}$_||~;
push(@todel, qq~$FORM{destination}$S{S}$_~);
}
}
$CONFIG{adminemail} =~ s/\s+//ig;
$CONFIG{adminemail} =~ s/\s+//ig;
@admemails = split(/\,/, $CONFIG{adminemail});
@admnames = split(/\,/, $CONFIG{adminname});
# email names and fields
$VAR{usrname} = $FORM{$VAR{fnameFLD}} =~ /\w+/ ? qq~$FORM{$VAR{fnameFLD}} $FORM{$VAR{lnameFLD}}~ : '';
$VAR{usremail} = $FORM{$VAR{emailFLD}} =~ /\w+/ ? $FORM{$VAR{emailFLD}} : $admemails[0];
$VAR{arsubject} = $CONFIG{arsubject};
$VAR{admsubject} = $CONFIG{admsubject};
# submission data, store after score has been computed
foreach(sort(keys %FORM)){
@divs = split(/\_/, $_);
unless($_ eq "destination" || $_ eq "id" || $_ eq "required" || $_ eq "isEdit" || $_ =~ /_HiddenFile$/){
$hash{$_} = $FORM{$_};
if($_ =~ /^Surv\_File/){
$hash{$_} =~ s/^.*(\\|\/)//;
}
}
}
# format date and contact fields after they have been stored
%TMP = %FORM;
$TMP{Date} = &getDate($FORM{Date});
$TMP{email} = $FORM{$VAR{emailFLD}};
$TMP{fname} = $FORM{$VAR{fnameFLD}};
$TMP{lname} = $FORM{$VAR{lnameFLD}};
# get n sort cats
@cats = &getfile("$Data$S{S}$FORM{id}$S{S}cats.ftf");
foreach(@cats){
@divs = split(/\|\|/, $_);
push(@rows, $divs[2]);
$divs[1] =~ s/<\*br\*>/ /ig;
$cat{$divs[0]} = $divs[1];
# define cats
$catQuests{$divs[0]} = 0;
}
@cats = @cats[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
$TMP{HTMLsnapshot} = qq~
$FONT$name[1] |
$CONFIG{qbreaker} |
~;
# create temp hash for thank you page/autoresponders
undef @rows;
foreach(@questions){
@divs = split(/\|\|/, $_);
$quest{$divs[0]} = $divs[4];
push(@rows, $divs[1]);
}
@questions = @questions[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
$VAR{maxScore} = 0;
$VAR{totalScore} = 0;
foreach(@questions){
@divs = split(/\|\|/, $_);
if($divs[2] eq "Radio" || $divs[2] eq "Checkbox" || $divs[2] eq "Select"){
# count num qs in each
$catQuests{$divs[15]}++;
}
if($divs[2] eq "File"){
@path = getline('def_url', "$Data$S{S}$FORM{id}$S{S}config\.ftf");
if($TMP{"Surv_$divs[2]_$divs[0]"}){
$TMP{"Surv_$divs[2]_$divs[0]"} =~ s/^.*(\\|\/)//;
$TMP{"Surv_$divs[2]_$divs[0]"} = qq~isFile$path[1]/$TMP{"Surv_$divs[2]_$divs[0]"}~;
} else {
$TMP{"Surv_$divs[2]_$divs[0]"} = qq~~;
}
} elsif($divs[2] eq "Radio"){
@answers = split(/!LBCR!/, $divs[5]);
undef @rows;
foreach(@answers){
@adivs = split(/\:\:/, $_);
push(@rows, $adivs[0]);
}
@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
$VAR{highScore} = 0;
foreach(@answers){
@adivs = split(/\:\:/, $_);
if($adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]"}){
$TMP{"Surv_$divs[2]_$divs[0]"} = $adivs[1];
$VAR{totalScore} += $adivs[2];
$catScore{$divs[15]} += $adivs[2];
}
$VAR{highScore} = $adivs[2] > $VAR{highScore} ? $adivs[2] : $VAR{highScore};
}
$VAR{maxScore} += $VAR{highScore};
$catTotal{$divs[15]} += $VAR{highScore};
} elsif($divs[2] eq "Select"){
@answers = split(/!LBCR!/, $divs[5]);
undef @rows;
foreach(@answers){
@adivs = split(/\:\:/, $_);
push(@rows, $adivs[0]);
}
@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
$VAR{highScore} = 0;
foreach(@answers){
@adivs = split(/\:\:/, $_);
if($adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]"}){
$TMP{"Surv_$divs[2]_$divs[0]"} = $adivs[1];
$VAR{totalScore} += $adivs[2];
$catScore{$divs[15]} += $adivs[2];
}
$VAR{highScore} = $adivs[2] > $VAR{highScore} ? $adivs[2] : $VAR{highScore};
}
$VAR{maxScore} += $VAR{highScore};
$catTotal{$divs[15]} += $VAR{highScore};
} elsif($divs[2] eq "Checkbox"){
@answers = split(/!LBCR!/, $divs[5]);
undef @rows;
foreach(@answers){
@adivs = split(/\:\:/, $_);
push(@rows, $adivs[0]);
}
@answers = @answers[ sort { $rows[$a] <=> $rows[$b] } 0 .. $#rows ];
foreach(@answers){
@adivs = split(/\:\:/, $_);
if($adivs[0] eq $FORM{"Surv_$divs[2]_$divs[0]\_$adivs[0]"} && $FORM{"Surv_$divs[2]_$divs[0]\_$adivs[0]"}){
$TMP{"Surv_$divs[2]_$divs[0]"} .= qq~$adivs[1]
~;
$VAR{totalScore} += $adivs[2];
$catScore{$divs[15]} += $adivs[2];
}
$VAR{maxScore} += $adivs[2];
$catTotal{$divs[15]} += $adivs[2];
}
chop $TMP{"Surv_$divs[2]_$divs[0]"}; chop $TMP{"Surv_$divs[2]_$divs[0]"};
chop $TMP{"Surv_$divs[2]_$divs[0]"}; chop $TMP{"Surv_$divs[2]_$divs[0]"};
if($CONFIG{mail_format} == 1){
#$TMP{"Surv_$divs[2]_$divs[0]"} =~ s/
/
\n/ig;
} else {
$TMP{"Surv_$divs[2]_$divs[0]"} =~ s/
/\n/ig;
}
}
$VAR{HTML} = $TMP{"Surv_$divs[2]_$divs[0]"};
$VAR{HTML} =~ s/\n/
/ig;
$VAR{HTML} =~ s/^isFile(.*)/$1<\/a>/ig;
$VAR{Text} = $TMP{"Surv_$divs[2]_$divs[0]"};
$VAR{Text} =~ s/\n/\n /ig;
$VAR{Text} =~ s/^isFile(.*)/$1/ig;
$TMP{HTMLsnapshot} .= qq~
$FONT$divs[4] |
|
$FONT $VAR{HTML} |
~;
if($divs[3]){
$TMP{HTMLsnapshot} .= qq~
$FONT $divs[3] |
|
$FONT $TMP{"Surv_X_$divs[0]"} |
~;
}
$TMP{HTMLsnapshot} .= qq~
$CONFIG{qbreaker} |
~;
$TMP{Textsnapshot} .= qq~$divs[4]\n $VAR{Text}\n\n~;
if($divs[3]){
$TMP{Textsnapshot} .= qq~ $divs[3]\n $TMP{"Surv_X_$divs[0]"}\n\n~;
}
}
# graph data
$VAR{data} = qq~~;
$VAR{labels} = qq~~;
foreach(@cats){
@divs = split(/\|\|/, $_);
# get labels for graph
$divs[1] =~ s/\&//ig;
$divs[1] =~ s/\,/ /ig;
# get percentage of score
if($catScore{$divs[0]} > 0 && $catTotal{$divs[0]} > 0){
$VAR{perc} = $catScore{$divs[0]} / $catTotal{$divs[0]} * 100;
} else {
$VAR{perc} = 0;
}
$VAR{data} .= qq~$VAR{perc},~;
$VAR{labels} .= qq~$divs[1]~;
if($CONFIG{datashow} == 1){
$VAR{labels} .= qq~<*br*>$catScore{$divs[0]} of $catTotal{$divs[0]} ($VAR{perc}%)~;
}
$VAR{labels} .= qq~,~;
#print qq~$_ -> $catQuests{$divs[0]} -> $catScore{$divs[0]} -> $catTotal{$divs[0]}
\n~;
}
chop $VAR{data};
chop $VAR{labels};
$VAR{labels} =~ s/\&/\+/ig;
$TMP{HTMLsnapshot} .= qq~
~;
if($VAR{totalScore} && $VAR{maxScore} == $VAR{totalScore}){
$VAR{perc} = qq~100~;
} elsif($VAR{totalScore} && $VAR{maxScore} == 0){
$VAR{perc} = qq~0~;
} elsif($VAR{totalScore} && $VAR{maxScore}){
$VAR{perc} = $VAR{totalScore} * 100 / $VAR{maxScore};
}
if($VAR{perc}){
@remarks = &getfile("$Data$S{S}$FORM{id}$S{S}remarkstemplate\.ftf");
unless($remarks[0] || $remarks[1] || $remarks[2]){ @remarks = &getRemarks; }
foreach(@remarks){
@rdivs = split(/\=/, $_);
$VAR{str} = qq~~;
for($a = 1; $a < @rdivs; $a++){
$VAR{str} .= qq~$rdivs[$a]\=~;
}
chop $VAR{str};
$remarks{$rdivs[0]} = $VAR{str};
}
$VAR{remark} = $remarks{int($VAR{perc})};
$VAR{perc} = sprintf("%5.2f", $VAR{perc});
$VAR{perc} .= qq~%~;
} else {
$VAR{perc} = qq~N/A~;
}
# store full results to submissions db
$hash{Entry_ID} = time;
$hash{Survey_ID} = $name[0];
$hash{Survey_Name} = $name[1];
$hash{Score} = $VAR{totalScore};
$hash{MaxScore} = $VAR{maxScore};
$hash{Percentage} = $VAR{perc};
$hash{Score} = sprintf("%5.2f", $hash{Score});
$hash{MaxScore} = sprintf("%5.2f", $hash{MaxScore});
$TMP{Score} = $hash{Score};
$TMP{MaxScore} = $hash{MaxScore};
$TMP{Percentage} = $hash{Percentage};
$TMP{Remark} = $VAR{remark};
&store_results(%hash);
$VAR{str} = qq~$ENV{REMOTE_ADDR}||$hash{Entry_ID}~;
if($ENV{REMOTE_ADDR} =~ /\w+/){
&fileadd("$Data$S{S}$FORM{id}$S{S}$FORM{id}\_ips.list", $VAR{str});
}
# store cookie also
&SetPermCookies("eSurv_$FORM{id}", $VAR{str});
# remove HTML from Plain Text mail
if($CONFIG{mail_format} == 1){
$TMP{snapshot} = $TMP{HTMLsnapshot};
$TMP{ResultsLink} = qq~View Results~;
$TMP{GroupGraphImage} = qq~~;
$TMP{GroupGraphLink} = qq~View Graph~;
} else {
$TMP{snapshot} = $TMP{Textsnapshot};
$TMP{ResultsLink} = qq~$ScriptURL?action=viewResults&id=$FORM{id}~;
$TMP{GroupGraphLink} = qq~$polarURL?labels=$VAR{labels}&data=$VAR{data}~;
}
# admin notif
if(check_email($admemails[0]) && $CONFIG{notify} == 1){
@adm = getfile("$Data$S{S}$FORM{id}$S{S}admtemplate.ftf");
foreach(@adm){ $VAR{adm} .= qq~$_\n~; }
foreach(keys %TMP){ $VAR{adm} =~ s/%%%$_%%%/$TMP{$_}/ig; }
$VAR{admmessage} = qq~$VAR{adm}~;
$VAR{admmessage} =~ s/%%%.*?%%%//ig;
# admin subject
foreach(keys %TMP){ $VAR{admsubject} =~ s/%%%$_%%%/$TMP{$_}/ig; }
$VAR{admsubject} =~ s/%%%.*?%%%//ig;
$VAR{admsubject} =~ s/\n//ig;
$VAR{admsubject} =~ s/\r//ig;
for($a = 0; $a < @admemails; $a++){
if(&send_mail($VAR{usremail}, $VAR{usrname}, $admemails[$a], $admnames[$a], $VAR{admsubject}, $VAR{admmessage}, "", "", $atts)){
$VAR{sent}++;
}
}
}
$VAR{arAtts} = $CONFIG{arfiles};
# start autoresponder
if($CONFIG{usear} == 1){
if(check_email($admemails[0]) && check_email($VAR{usremail})){
@ar = getfile("$Data$S{S}$FORM{id}$S{S}artemplate.ftf");
if(@ar){
foreach(@ar){ $VAR{ar} .= qq~$_\n~; }
foreach(keys %TMP){ $VAR{ar} =~ s/%%%$_%%%/$TMP{$_}/ig; }
$VAR{armessage} = qq~$VAR{ar}~;
$VAR{armessage} =~ s/%%%.*?%%%//ig;
# ar subject
foreach(keys %TMP){ $VAR{arsubject} =~ s/%%%$_%%%/$TMP{$_}/ig; }
$VAR{arsubject} =~ s/%%%.*?%%%//ig;
$VAR{arsubject} =~ s/\n//ig;
$VAR{arsubject} =~ s/\r//ig;
if(&send_mail($admemails[0], $admnames[0], $VAR{usremail}, $VAR{usrname}, $VAR{arsubject}, $VAR{armessage}, "", "", $VAR{arAtts})){
$VAR{sent}++;
}
}
}
}
}
if($CONFIG{delfile} == 1){ foreach(@todel){ unlink($_); } }
# redefine res link for thank you page
$TMP{ResultsLink} = qq~View Results~;
$TMP{GroupGraphLink} = qq~View Graph~;
$TMP{GroupGraphImage} = qq~~;
if($VAR{failed}){
&PrintHead($FORM{id});
print qq~$VAR{failed}~;
&PrintFoot($FORM{id});
} else {
if($FORM{redirect} =~ /^http/i){
# redirect user
print qq~Location: $FORM{redirect}\n\n~;
} elsif($CONFIG{redirect} =~ /^http/i){
# redirect user
print qq~Location: $CONFIG{redirect}\n\n~;
} else {
# print success page
&PrintHead($FORM{id});
@thankstemplate = getfile("$Data$S{S}$FORM{id}$S{S}thankstemplate.ftf");
# use HTML version for Thank You page
$TMP{snapshot} = $TMP{HTMLsnapshot};
foreach(@thankstemplate){
$VAR{thankstemplate} .= qq~$_\n~;
}
foreach(keys %TMP){
$VAR{thankstemplate} =~ s/%%%$_%%%/$TMP{$_}/ig;
}
$VAR{thankstemplate} =~ s/%%%.*?%%%//ig;
print qq~$VAR{thankstemplate}~;
&PrintFoot($FORM{id});
}
}
}