aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Contact.pm22
-rw-r--r--t/app/controller/contact.t35
-rw-r--r--templates/web/fixmystreet.com/about/council.html10
3 files changed, 63 insertions, 4 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Contact.pm b/perllib/FixMyStreet/App/Controller/Contact.pm
index e1eb64ba3..f2c3be47c 100644
--- a/perllib/FixMyStreet/App/Controller/Contact.pm
+++ b/perllib/FixMyStreet/App/Controller/Contact.pm
@@ -54,7 +54,8 @@ sub submit : Path('submit') : Args(0) {
&& $c->forward('determine_contact_type')
&& $c->forward('validate')
&& $c->forward('prepare_params_for_email')
- && $c->forward('send_email');
+ && $c->forward('send_email')
+ && $c->forward('redirect_on_success');
}
=head2 determine_contact_type
@@ -99,7 +100,7 @@ sub determine_contact_type : Private {
=head2 validate
-Validate the form submission parameters. Sets error messages and redirect
+Validate the form submission parameters. Sets error messages and redirect
to index page if errors.
=cut
@@ -262,6 +263,23 @@ sub send_email : Private {
return 1;
}
+=head2 redirect_on_success
+
+Redirect to a custom URL if one was provided
+
+=cut
+
+sub redirect_on_success : Private {
+ my ( $self, $c ) = @_;
+
+ if (my $success_url = $c->get_param('success_url')) {
+ $c->res->redirect($success_url);
+ $c->detach;
+ }
+
+ return 1;
+}
+
=head1 AUTHOR
Struan Donald
diff --git a/t/app/controller/contact.t b/t/app/controller/contact.t
index 0e87eb4cc..c1039d15b 100644
--- a/t/app/controller/contact.t
+++ b/t/app/controller/contact.t
@@ -380,6 +380,41 @@ for my $test (
};
}
+for my $test (
+ {
+ fields => {
+ em => 'test@example.com',
+ name => 'A name',
+ subject => 'A subject',
+ message => 'A message',
+ dest => 'from_council',
+ success_url => '/faq',
+ },
+ url_should_be => 'http://localhost/faq',
+ },
+ {
+ fields => {
+ em => 'test@example.com',
+ name => 'A name',
+ subject => 'A subject',
+ message => 'A message',
+ dest => 'from_council',
+ success_url => 'http://www.example.com',
+ },
+ url_should_be => 'http://www.example.com',
+ },
+ )
+{
+ subtest 'check user can be redirected to a custom URL after contact form is submitted' => sub {
+ FixMyStreet::override_config {
+ ALLOWED_COBRANDS => [ 'fixmystreet' ],
+ }, sub {
+ $mech->post('/contact/submit', $test->{fields});
+ is $mech->uri->as_string, $test->{url_should_be};
+ }
+ };
+}
+
$problem_main->delete;
done_testing();
diff --git a/templates/web/fixmystreet.com/about/council.html b/templates/web/fixmystreet.com/about/council.html
index 93c2604d1..b6690a6d2 100644
--- a/templates/web/fixmystreet.com/about/council.html
+++ b/templates/web/fixmystreet.com/about/council.html
@@ -25,7 +25,7 @@
</div>
<div class="councils-hero__demo-access">
<h2>Try FixMyStreet Professional right now, on our demo site</h2>
- <form class="councils-hero__demo-access__form js-fms-pro-demo-form">
+ <form action="/contact/submit" method="post" class="councils-hero__demo-access__form js-fms-pro-demo-form">
<div class="form-group">
<label for="demo-name">Name</label>
<span class="required">required</span>
@@ -43,9 +43,15 @@
</div>
<div class="form-group">
<label for="demo-job">Job title</label>
- <input type="text" name="job" id="demo-job">
+ <input type="text" name="extra.job_title" id="demo-job">
</div>
<div class="form-group submit-group">
+ <input type="hidden" name="extra.referer" value="[% c.req.headers.referer | html %]">
+ <input type="hidden" name="subject" value="Demo site request">
+ <input type="hidden" name="message" value="This visitor was sent a link to demo.fixmystreet.com">
+ <input type="hidden" name="recipient" value="enquiries">
+ <input type="hidden" name="dest" value="from_council">
+ <input type="hidden" name="success_url" value="https://demo.fixmystreet.com">
<input type="submit" value="Let me in" class="btn">
</div>
</form>