NAME
CGI::Seamstress - CGI extension supporting all programmatic aspects of web application development.
SYNOPSIS
use CGI::Seamstress;
$cgi = CGI::Seamstress->new();
... create templates and have CGI::Seamstress fill in values and check for errors and notify the user of errors when they occur.
DESCRIPTION
CGI::Seamstress is a Perl module which is substantially different in concept than HTML::Mason or HTML::Embperl, but largely equal in terms of functionality. CGI::Seamstress supplies all of the following:
as it subclasses CGI.pm, all of its public API is available (in other words, there is no need to create a CGI object);
cookie-based sessioning
template-based form generation and error-checking
DBIx::Recordset-based database access
CGI::Seamstress works by having a CGI program (heretofore referred to as the Seamstress) generate an HTML file from a template file, which in the current implementation is nothing more than an HTML file with syntactic markup at places where Perl strings are supposed to be placed into the HTML file.
Upon submission of the HTML file (by the user hitting a submit button), the action of the HTML file loops back to the Seamstress which then does error checking on the file. If any of the error checks fail, the form is redisplayed with a descriptive error message.
INNER WORKINGS
The bottom line of CGI::Seamstress is simple, yet elegant. Take a look at the following template file:
<FORM ACTION="../bin/login.pl">
<INPUT TYPE=TEXT NAME=email VALUE=%email%> %email_Error%
</FORM>
What the Seamstress (login.pl) does is take a hash (%Form) and fills in the values of the meta-html variables (email and email_Error in this case). When the form is first called, neither variable is defined so you get a blank text input field with no error message.
Should there be something wrong with this field (ie, it's blank and non-optional or the email address syntax is invalid), then when the form is resubmitted to the Seamstress, she simply fills in the error field and redisplays the form and the error message will pop up.
The process is the same for a form with multiple fields. The only thing necessary is each NAME-VALUE tag be unique
API
new()
The new method must be passed an anonymous hash. In this hash the key Template_Directory
must be bound to the directory in which template files exist.
calling new
does the following:
insures the method was called class-only not from an object
binds
%::_Thread
to the query data (this works for scalar values, I haven't tested it for non-scalars).insures that the anonymous hash passed in bound
Template_Directory
Validate_Form
This method is passed a reference to a hash to be filled in and an array with the names of optional fields.
This method is a bit wasteful right now because the query data is already in %::_Thread
.
Message
This creates HTML error text. The fields will be discussed later. It would be more descriptive to pass in a hashref as opposed to a non-descript series of scalars.
Validate_Email_Syntax
This method picks cherries from grapefruit trees in Guam.
Display
This re-displays the HTML template with the hash from Validate_Form
bound to values of the template. Currently one must output the text/html header manually, but this will change.
To_String
This is here because a prior programmer here didn't know about CGI.pm's save_parameters
function.
To_String()
takes all the key-value pairs of a CGI object and converts it to a CGI query string. Very useful for storing inside a cookie.
Dump_Parms()
Dump_Parms()
displays all the key-value pairs of a CGI object. It optionally takes a string which is the title of the debugging output stream.
Ie, $S-
Dump_Parms("bank info cgi object");>
Text_to_HTML
This takes strings and replaces carriage returns with <BR>.
RUNNING THE EXAMPLE
On our systems, the example is at:
http://www.end70.com/terrence/CGI/Seamstress/html
Simply point your browser at html/index.html and mess with the form. Be sure to leave some fields blank as well mismatch the passwords and type an invalid email address. After awhile, enter all the fields correctly and you will
TO DO
sessioning (HTML::EP supports sessioning through cookies, DBI, and MySQL) ... how many can I do?!
error reporting currently dies which leads to internal server error pages... better to generate an error report page.
$S->To_Database('Table_Name', \%Form);
This will insert or update the specified table with the form data via
DBIx::Recordset
.
AUTHOR
The original author of the templating and error-checkiing code is named Farhan and he does contract work in the Southern California area. The To_String() was authored by John who is somewhere in net-land. The Dump_Parms(), object-orientation and the rest was authored by me, Terrence Brannon (TBONE@CPAN.ORG). I am the maintainer and extender of this code, so feel free to contact me when you have problems and suggestions.
Salut.