Provided by: libcgi-formbuilder-perl_3.09-3_all bug

NAME

       CGI::FormBuilder::Source::File - Initialize FormBuilder from external file

SYNOPSIS

           # use the main module
           use CGI::FormBuilder;

           my $form = CGI::FormBuilder->new(source => 'form.conf');

           my $lname = $form->field('lname');  # like normal

DESCRIPTION

       This parses a file that contains FormBuilder configuration options, and returns a hash
       suitable for creating a new $form object.  Usually, you should not use this directly, but
       instead pass a $filename into "CGI::FormBuilder", which calls this module.

       The configuration format steals from Python (ack!) which is sensitive to indentation and
       newlines. This saves you work in the long run. Here's a complete form:

           # form basics
           method: POST
           header: 1
           title:  Account Information

           # define fields
           fields:
               fname:
                   label:   First Name
                   size:    40

               minit:
                   label:   Middle Initial
                   size:    1

               lname:
                   label:   Last Name
                   size:    60

               email:
                   size:    80

               phone:
                   label:    Home Phone
                   comment:  (optional)
                   required: 0

               sex:
                   label:   Gender
                   options: M=Male, F=Female
                   jsclick: javascript:alert('Change your mind??')

               # custom options and sorting sub
               state:
                   options:  \&getstates
                   sortopts: \&sortstates

               datafile:
                   label:   Upload Survey Data
                   type:    file
                   growable:   1

           # validate our above fields
           validate:
               email:  EMAIL
               phone:  /^1?-?\d{3}-?\d{3}-?\d{4}$/

           required: ALL

           # create two submit buttons, and skip validation on "Cancel"
           submit:  Update, Cancel
           jsfunc:  <<EOJS
         // skip validation
         if (this._submit.value == 'Cancel') return true;
       EOJS

           # CSS
           styleclass: acctInfoForm
           stylesheet: /style/acct.css

       Any option that FormBuilder accepts is supported by this configuration file. Basically,
       any time that you would place a new bracket to create a nested data structure in
       FormBuilder, you put a newline and indent instead.

       Multiple options MUST be separated by commas. All whitespace is preserved intact, so don't
       be confused and do something like this:

           fields:
               send_me_emails:
                   options: Yes No

       Which will result in a single "Yes No" option. You want:

           fields:
               send_me_emails:
                   options: Yes, No

       Or even better:

           fields:
               send_me_emails:
                   options: 1=Yes, 0=No

       Or perhaps best of all:

           fields:
               send_me_emails:
                   options: 1=Yes Please, 0=No Thanks

       If you're confused, please join the mailing list:

           fbusers-subscribe@formbuilder.org

       We'll be able to help you out.

METHODS

   new()
       This creates a new "CGI::FormBuilder::Source::File" object.

           my $source = CGI::FormBuilder::Source::File->new;

       Any arguments specified are taken as defaults, which the file then overrides. For example,
       to always turn off "javascript" (so you don't have to in all your config files), use:

           my $source = CGI::FormBuilder::Source::File->new(
                             javascript => 0
                        );

       Then, every file parsed by $source will have "javascript => 0" in it, unless that file has
       a "javascript:" setting itself.

   parse($source)
       This parses the specified source, which is either a $file, "\$string", or "\@array", and
       returns a hash which can be passed directly into "CGI::FormBuilder":

           my %conf = $source->parse('myform.conf');
           my $form = CGI::FormBuilder->new(%conf);

   write_module($modname)
       This will actually write a module in the current directory which you can then use in
       subsequent scripts to get the same form:

           $source->parse('myform.conf');
           $source->write_module('MyForm');    # write MyForm.pm

           # then in your Perl code
           use MyForm;
           my $form = MyForm->new;

       You can also override settings from "MyForm" the same as you would in FormBuilder:

           my $form = MyForm->new(
                           header => 1,
                           submit => ['Save Changes', 'Abort']
                      );

       This will speed things up, since you don't have to re-parse the file every time. Nice idea
       Peter.

NOTES

       This module was completely inspired by Peter Eichman's "Text::FormBuilder", though the
       syntax is different.

       Remember that to get a new level in a hashref, you need to add a newline and indent. So to
       get something like this:

           table => {cellpadding => 1, cellspacing => 4},
           td    => {align => 'center', bgcolor => 'gray'},
           font  => {face => 'arial,helvetica', size => '+1'},

       You need to say:

           table:
               cellpadding: 1
               cellspacing: 4

           td:
               align: center
               bgcolor: gray

           font:
               face: arial,helvetica
               size: +1

       You get the idea...

SEE ALSO

       CGI::FormBuilder, Text::FormBuilder

REVISION

       $Id: File.pm 100 2007-03-02 18:13:13Z nwiger $

AUTHOR

       Copyright (c) Nate Wiger <http://nateware.com>. All Rights Reserved.

       This module is free software; you may copy this under the terms of the GNU General Public
       License, or the Artistic License, copies of which should have accompanied your Perl kit.