Alex Pavlovic

NAME

        HTML::Template::Associate::FormValidator - HTML::Template::Associate Data::FormValidator plugin 

SYNOPSIS

        This class is not intended to be used directly but rather through a 
        HTML::Template::Associate. It provides concrete class functionality, it
        will take Data::FormValidator::Results object and reconstruct data structure
        to one appropriate for use by the HTML::Template. 
        
        use CGI qw/:standard/;
        use Data::FormValidator;
        use HTML::Template;
        use HTML::Template::Associate;
        
        my $cgi = CGI->new;
        #for testing purposes we can add some input to our cgi object
        $cgi->param( 'fullname', 'John Doe' );
        $cgi->param( 'phone', 6041112222 );
        $cgi->param( 'email', 'invalid@email' );
        
        my $input_profile = {
                optional => [ qw( company fax country ) ],
                required => [ qw( fullname phone email address city state zipcode ) ],
                constraints  => {
                        email => 'email',
                        fax => 'american_phone',
                        phone => 'american_phone',
                        zipcode => '/^\s*\d{5}(?:[-]\d{4})?\s*$/',
                        state => "state",
                },
                defaults => { country => "Canada" },
                msgs => {
                        prefix=> 'error_',
                        missing => 'Not Here!',
                        invalid => 'Problematic!',
                        invalid_seperator => ' <br /> ',
                        format => 'ERROR: %s',
                        any_errors => 'some_errors',
                }
        };
        
        my $validator = Data::FormValidator->new;
        my $results = $validator->check ( scalar $cgi->Vars, $input_profile ); 
        
        my $associate = HTML::Template::Associate->new( {
                target => 'FormValidator', 
                results => $results,
                extra_arguments => [ $validator ] #not needed but just illustrated
        } ); 
        
        my $template = HTML::Template->new(
                filename => 'test.tmpl', 
                associate => [ $cgi, $associate ] 
        );
        
        print $template->output;
        
        #and in our test.tmpl file we could have
        
        Valid Fields:<br>
        <TMPL_LOOP NAME=VALID_FIELDS>
        Field Name: <TMPL_VAR NAME=FIELD_NAME><br>
        Field Value: <TMPL_VAR NAME=FIELD_VALUE><br> 
        </TMPL_LOOP>
        
        Missing Fields:<br>
        <TMPL_LOOP NAME=MISSING_FIELDS>
        Field Name: <TMPL_VAR NAME=FIELD_NAME><br>
        Field Value: <TMPL_VAR NAME=FIELD_VALUE><br> 
        </TMPL_LOOP>
        
        <TMPL_IF NAME=INVALID_phone>
        Phone: <TMPL_VAR NAME="phone"> you supplied is invalid.         
        </TMPL_IF>
        
        <TMPL_IF NAME=MISSING_city> 
        City name is missing, please fix this.
        </TMPL_IF>
        
        <!-- We can also access our normal field names 
        since $cgi object was passed as associate as well -->
        
        I think <TMPL_VAR NAME=country> is very big country. 
        
        <!-- Optional use of Data::FormValidator::Results msgs interface -->
        
        Message Fields:
        
        <TMPL_LOOP NAME=MSGS_FIELDS>
        Field Name: <TMPL_VAR NAME=FIELD_NAME><br>
        Field Value: <TMPL_VAR NAME=FIELD_VALUE><br>
        </TMPL_LOOP>
        
        <TMPL_IF NAME=MSGS_error_city>
        Our default error message set in the profiling code is: 
                <TMPL_VAR NAME=MSGS_error_city> 
        </TMPL_IF>

        The following will become available to your associate object/template:
        
        Key            /                    Perl                /           Template
        
        Arrays / Loops
        
        VALID_FIELDS     / $associate->param(q{VALID_FIELDS});     / <TMPL_LOOP NAME=VALID_FIELDS>
        MISSING_FIELDS   / $associate->param(q{MISSING_FIELDS});   / <TMPL_LOOP NAME=MISSING_FIELDS>   
        INVALID_FIELDS   / $associate->param(q{INVALID_FIELDS});   / <TMPL_LOOP NAME=INVALID_FIELDS>
        UNKNOWN_FIELDS   / $associate->param(q{UNKNOWN_FIELDS});   / <TMPL_LOOP NAME=UNKNOWN_FIELDS>
        MSGS_FIELDS      / $associate->param(q{MSGS_FIELDS});      / <TMPL_LOOP NAME=MSGS_FIELDS>
        
        Variables  
        
        VALID_ParamA       / $associate->param(q{VALID_ParamA});       / <TMPL_VAR NAME=VALID_ParamA>
        MISSING_ParamB     / $associate->param(q{MISSING_ParamB});     / <TMPL_VAR NAME=MISSING_ParamB>
        INVALID_ParamC     / $associate->param(q{INVALID_ParamC});     / <TMPL_VAR NAME=INVALID_ParamC>
        UNKNOWN_ParamD     / $associate->param(q{UNKNOWN_ParamD});     / <TMPL_VAR NAME=UNKNOWN_ParamD>
        MSGS_prefix_ParamE / $associate->param(q{MSGS_prefix_ParamE}); / <TMPL_VAR NAME=MSGS_prefix_ParamE> 
        
        Inside Array / Loops we have the following structure:
        
        Perl
        
        VALID_FIELDS => [ { FIELD_NAME => X }, FIELD_VALUE => Y }, ... ]
        
        Template
        
        <TMPL_LOOP NAME=VALID_FIELDS>
        <TMPL_VAR NAME=FIELD_NAME> 
        <TMPL_VAR NAME=FIELD_VALUE>     
        </TMPL_LOOP>   
        
        For further explanation on what the VALID,MISSING,INVALID,UNKNOWN AND MSGS are
        please refer to Data::FormValidator::Results. Please note that MSGS 
        works somewhat diffrently then others and corresponds to $results->msgs([$config])
        interface.  

DESCRIPTION

        Map Data::FormValidator::Results object into a form suitable for use by HTML::Template

USAGE

        See above.

BUGS

        If you find any please report to author.

SUPPORT

        See License.

AUTHOR

        Alex Pavlovic
        alex.pavlovic@taskforce-1.com
        http://www.taskforce-1.com

COPYRIGHT

        This program is free software; you can redistribute
        it and/or modify it under the same terms as Perl itself.
        
        The full text of the license can be found in the
        LICENSE file included with this module.

SEE ALSO

        HTML::Template::Associate HTML::Template::Associate::DBI perl(1).

init

        Usage     : $associate->init ( $results, $extra_arguments );
        Purpose   : Initiliazes the object
        Returns   : concrete object instance
        Argument  : Data::FormValidator::Results instance and extra hash of arguments passed to factory 
        Comments  : Factory class will call this method automatically during concrete object construction
                : Error is thrown depending whether the passed in results object is of correct type

        See Also   : HTML::Template::Associate Data::FormValidator::Results  

runloop

        Usage     : used internally to assign various prefixes/names to variables and loops  



Hosting generously
sponsored by Bytemark