package HTML::FormHandlerX::Form::Contact;
use 5.006;
use strict;
use warnings;
=head1 NAME
HTML::FormHandlerX::Form::Contact - An HTML::FormHandler contact form.
=head1 VERSION
Version 0.04
=cut
our $VERSION = '0.04';
$VERSION = eval $VERSION;
=head1 SYNOPSIS
You know, that contact form you create day-in, day-out.
From a usability perspective in form design, it is advised to only ask for the minimal information you actually need, don't bombard a user with several fields if all you really need is one.
use HTML::FormHandlerX::Form::Contact;
my $form = HTML::FormHandlerX::Form::Contact->new( active => [ qw( name email subject message ) ] );
$form->process( params => { name => $name,
email => $email,
subject => $subject,
message => $message,
} );
if ( $form->validated )
{
# do something...
}
=cut
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
=head1 METHODS
=head2 Fields
All fields will be rendered with a wrapper div with an id of C<< field- >>.
If a field is activated, it will be a required field.
This supports the idea of keeping your forms as simple as possible, if you don't need it, don't ask for it.
=head3 name
$form->field('name');
=cut
has_field name => ( type => 'Text',
required => 1,
messages => { required => 'Your name is required.' },
tags => { no_errors => 1 },
wrapper_attr => { id => 'field-name' },
inactive => 1,
);
=head3 email
$form->field('email');
Validation performed as-per L.
=cut
has_field email => ( type => 'Email',
required => 1,
messages => { required => 'Your email is required.' },
tags => { no_errors => 1 },
wrapper_attr => { id => 'field-email' },
inactive => 1,
);
=head3 telephone
$form->field('telephone');
Validation ensures there's a number in this field, but nothing more complicated.
=cut
has_field telephone => ( type => 'Text',
required => 1,
messages => { required => 'Your telephone number is required.' },
tags => { no_errors => 1 },
wrapper_attr => { id => 'field-telephone' },
inactive => 1,
);
sub validate_telephone
{
my ( $self, $field ) = @_;
if ( $field->value !~ /\d/ )
{
$field->add_error( "Your telephone number doesn't contain any digits." );
}
}
=head3 subject
$form->field('subject');
=cut
has_field subject => ( type => 'Text',
required => 1,
messages => { required => 'The subject is required.' },
tags => { no_errors => 1 },
wrapper_attr => { id => 'field-subject' },
inactive => 1,
);
=head3 message
$form->field('message');
=cut
has_field message => ( type => 'TextArea',
required => 1,
messages => { required => 'The message is required.' },
tags => { no_errors => 1 },
wrapper_attr => { id => 'field-message' },
inactive => 1,
);
=head3 submit
$form->field('submit');
The value of the submit button will be 'Send Message' by default.
=cut
has_field submit => ( type => 'Submit',
value => 'Send Message',
wrapper_attr => { id => 'field-submit', },
);
=head2 Instance Methods
=head3 html_attributes
This method has been populated to ensure all fields in error have the C CSS class assigned to the labels.
See L for more details.
=cut
sub html_attributes
{
my ($self, $field, $type, $attr, $result) = @_;
if( $type eq 'label' && $result->has_errors )
{
push @{$attr->{class}}, 'error';
}
}
=head1 AUTHOR
Rob Brown, C<< >>
=head1 BUGS
Please report any bugs or feature requests to C, or through
the web interface at L. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc HTML::FormHandlerX::Form::Contact
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker (report bugs here)
L
=item * AnnoCPAN: Annotated CPAN documentation
L
=item * CPAN Ratings
L
=item * Search CPAN
L
=back
=head1 ACKNOWLEDGEMENTS
=head1 LICENSE AND COPYRIGHT
Copyright 2012 Rob Brown.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
=cut
1; # End of HTML::FormHandlerX::Form::Contact