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