NAME
CGI::Formalware.pm - Convert an XML file into a suite of CGI forms.
SYNOPSIS
In your browser, type: localhost/cgi-bin/x.pl
where x.pl contains nothing more than:
#!perl -w
use integer;
use strict;
use lib 'C:/Perl';
use lib 'C:/Perl/Scripts/General'; # Ie $PERL5LIB.
use CGI::Formalware;
my($form) = CGI::Formalware -> new({'form2file' => 1, 'debug' => 1});
$form -> process();
exit(0);
Upon starting, CGI::Formalware.pm asks for the name of your XML file, which is assumed to be in cgi-bin/.
DESCRIPTION
To provide a type of repository for frequently used scripts, which can then be executed locally or remotely (via Net::Telnet), by just entering a password (for remote scripts), and clicking.
AUDIENCE
Webmasters.
SECURITY
None. Even worse, CGI::Formalware.pm is designed to circumvent a web server's concept of what Apache calls DocumentRoot.
CONSTRUCTOR new
new takes either no parameters, or an anonymous hash. See the example above. Keys and values recognized are:
-
'debug' => '1' means turn on debugging. At the moment this opens and closes the file CGI-Formalware.log, but does not write anything to it
-
'form2file' => '1' means output each form to a file, using the name given by the form's formFileName attribute. The forms are written to cgi-bin/. If the form has no such attribute, this option is ignored. See example below
-
'timeScripts' => '1' means report elapsed time at the end of each script's output
HIGHLIGHTS
Read an XML file, whose format is fixed, and generate a suite of CGI forms
A cascading style sheet can be specified for each form individually
A Table of Contents may appear on each form
Each form is more-or-less assumed to contain a list of scripts
Entities in the XML correspond to a few functions available in Lincoln Stein's CGI.pm. Eg: textField, radioGroup, horizontalRule. Over time, more functions will be added
A textField with the name 'password' is treated as a password field. Also, the entity 'script' defines a Unix- or DOS-type batch file
These entities produce on-screen fields, or, in the case of the scripts, a vertical array of radio buttons
So, to run a script you fill in whatever fields the script uses and then select that script
Macros in the scripts, eg %fileName% are expanded with the current value of the field whose name appears between the % signs
A script whose last line is 'ftp -n -v' is recognized and handled specially. Your form must contain textFields called 'host', 'username' and 'password' and 'fileName'. A binary 'get' is performed. This will be made more flexible one day
Scripts have an attribute 'type', which can be 'local' or 'remote'.
Remote scripts are passed to Net::Telnet, on the assumption that you know what you are doing. Your form must contain textFields called 'host', 'username' and 'password'
NAVIGATION
Forms are linked with 'Previous form', 'Next form' buttons.
Any previously-entered textFields, except those whose name is 'password', are remembered when you return to a form. This is very convenient.
The password values are zapped by CGI.pm, not by me. This is a security feature. It means you can walk away from your system and not have someone gain automatic access to a remote system.
FORM FORMAT
Very simple.
CASCADING STYLE SHEETS
Each form entity may have a 'css' attribute, giving the name of the CSS file for that form. These attribute values are like '/CGI-Formalware.css', which, under Apache, means this value is prefixed with DocumentRoot. That is, the path to the CSS is a URI, and will not be seen if in cgi-bin/.
The compulsory elements are: H1, H2 and TOC.
Herewith a sample:
H1
{
font-size: 20pt;
alignment: center;
color: teal;
}
H2
{
font-size: 16pt;
font-style: italic;
color: maroon;
}
P.TOC
{
font-size: 12pt;
color: white;
background-color: blue;
}
COMMAND LINE OPTIONS
None.
ENVIRONMENT VARIABLES
None.
INPUT DATA VALIDATION
These checks are performed:
Each forms entity may have a 'tocEntry' attribute. If present, and if the tocVisible attribute is 'true', then a Table of Contents is put on each form, headed by this text. The default is 'Contents'
Each forms entity may have a 'tocVisible' attribute. If its value is 'True', then a Table of Contents is put on each form, headed by the value of 'tocEntry'. The default is 'True'
Each form entity must have 'heading' and 'tocEntry' attributes
Each form entity must have a unique 'heading' attribute
Each form entity may have a unique 'formFileName' attribute. If present, then this file name is used to output the form to a file if the constructor option new({'form2file' => 1}) is used
Each textField entity must have 'name', 'prompt', and 'value' attributes
Each textField entity must have 'name', 'prompt', 'value' and 'size' attributes
Each scripts entity must have a 'heading' attribute
Each script entity must have 'heading', 'type' and 'line' attributes
Each script entity must have a unique 'heading' attribute
Each script entity's 'type' attribute must be 'local' or 'remote'
XML DTD
TBA.
XML FILE FORMAT
Herewith a sample:
<forms
tocEntry = 'Forms'
tocVisible = 'True'
>
<form
heading = 'Unix Command Menu'
tocEntry = 'Unix menu'
css = '/CGI-Formalware.css'
formFileName = '1.html'
>
<horizontalRule/>
<radioGroup
name = 'host'
prompt = 'Host: '
value = 'bigBox|littleBox'
/>
<paragraph/>
<textField
name = 'username'
prompt = 'Username: '
value = ''
size = '15'
override = '0'
/>
<textField
name = 'password'
prompt = ' Password: '
value = ''
size = '15'
override = '0'
/>
<horizontalRule/>
<scripts
heading = 'Unix Scripts'
numberScripts = 'Yes'
>
<script
heading = 'Files in home directory'
type = 'remote'
line1 = 'dir'
/>
<script
heading = 'Tags in repository'
type = 'remote'
line1 = 'cd $M'
line2 = 'getTags'
/>
</scripts>
</form>
<form
heading = 'DOS Command Menu'
tocEntry = 'DOS menu'
>
<horizontalRule/>
<radioGroup
name = 'host'
prompt = 'Host: '
value = 'bigBox|littleBox'
/>
<paragraph/>
<textField
name = 'username'
prompt = 'Username: '
value = ''
size = '15'
override = '0'
/>
<textField
name = 'password'
prompt = ' Password: '
value = ''
size = '15'
override = '0'
/>
<horizontalRule/>
<textField
name = 'fileName'
prompt = 'Filename: '
value = ''
size = '60'
override = '0'
/>
<horizontalRule/>
<scripts
heading = 'PC Scripts'
>
<script
heading = 'Files in root directory'
type = 'local'
line1 = 'cd \'
line2 = 'dir'
/>
<script
heading = 'FTP something somewhere'
type = 'local'
line1 = 'ftp -n -v'
/>
<script
heading = 'Untar a file'
type = 'local'
line1 = 'cd \'
line2 = 'tar mxvzf %fileName%'
/>
</scripts>
</form>
</forms>
NESTED FORMS
Nope, I don't recognize them. Maybe one day...
REQUIRED MODULES
CGI
Net::Telnet
4
XML::DOM
projectLib.pl (from my web site)
AUTHOR
CGI::Formalware.pm
was written by Ron Savage <rpsavage@ozemail.com.au> in 1999.
Copyright (c) 1999 Ron Savage.
LICENCE
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 1174:
Expected '=item *'