aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller/Contact.pm
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2011-05-13 16:36:13 +0100
committerStruan Donald <struan@exo.org.uk>2011-05-13 16:36:13 +0100
commitfbb8d5ca4e3bfecf5c276f4a8dd43fb5fc4002d9 (patch)
treee0d50673d0f564bce7c5a937a193ac1afedbd01f /perllib/FixMyStreet/App/Controller/Contact.pm
parent84053fd846af39f03c8e6087e9f1df41dffe62ff (diff)
contact form validation and post submission page
Diffstat (limited to 'perllib/FixMyStreet/App/Controller/Contact.pm')
-rw-r--r--perllib/FixMyStreet/App/Controller/Contact.pm66
1 files changed, 62 insertions, 4 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Contact.pm b/perllib/FixMyStreet/App/Controller/Contact.pm
index 6a243576d..daa1c1e98 100644
--- a/perllib/FixMyStreet/App/Controller/Contact.pm
+++ b/perllib/FixMyStreet/App/Controller/Contact.pm
@@ -23,10 +23,9 @@ Contact us page
sub index : Path : Args(0) {
my ( $self, $c ) = @_;
- $c->stash->{contact_email} = $c->cobrand->contact_email;
- $c->stash->{contact_email} =~ s/\@/&#64;/;
-
- $c->forward('determine_contact_type');
+ return unless
+ $c->forward('setup_request')
+ && $c->forward('determine_contact_type');
# my ($q, $errors, $field_errors) = @_;
# my @errors = @$errors;
@@ -70,6 +69,14 @@ sub index : Path : Args(0) {
# return $out;
}
+sub submit : Path('submit') : Args(0) {
+ my ( $self, $c ) = @_;
+
+ return unless
+ $c->forward('setup_request')
+ && $c->forward('validate');
+}
+
sub determine_contact_type : Private {
my ( $self, $c ) = @_;
@@ -106,6 +113,57 @@ sub determine_contact_type : Private {
$c->stash->{problem} = $problem;
}
}
+
+ return 1;
+}
+
+sub validate : Private {
+ my ( $self, $c ) = @_;
+
+ my ( %field_errors, @errors );
+ my %required = (
+ name => _('Please give your name'),
+ em => _('Please give your email'),
+ subject => _('Please give a subject'),
+ message => _('Please write a message')
+ );
+
+ foreach my $field ( keys %required ) {
+ $field_errors{$field} = $required{$field}
+ unless $c->req->param($field) =~ /\S/;
+ }
+
+ unless ( $field_errors{em} ) {
+ $field_errors{em} = _('Please give a valid email address')
+ if !mySociety::EmailUtil::is_valid_email( $c->req->param('em') );
+ }
+
+ push @errors, _('Illegal ID')
+ if $c->req->param('id') && $c->req->param('id') !~ /^[1-9]\d*$/
+ or $c->req->param('update_id')
+ && $c->req->param('update_id') !~ /^[1-9]\d*$/;
+
+ if ( @errors or scalar keys %field_errors ) {
+ $c->stash->{errors} = \@errors;
+ $c->stash->{field_errors} = \%field_errors;
+ $c->go('index');
+ }
+}
+
+sub setup_request : Private {
+ my ( $self, $c ) = @_;
+
+ $c->stash->{contact_email} = $c->cobrand->contact_email;
+ $c->stash->{contact_email} =~ s/\@/&#64;/;
+
+ for my $param (qw/em subject message/) {
+ $c->stash->{$param} = $c->req->param($param);
+ }
+
+ # name is already used in the stash for the app class name
+ $c->stash->{form_name} = $c->req->param('name');
+
+ return 1;
}
=head1 AUTHOR