aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm13
-rw-r--r--t/app/controller/report_new.t25
-rw-r--r--templates/web/base/report/new/form_report.html1
3 files changed, 35 insertions, 4 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index 82787e9da..312268f65 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -875,6 +875,7 @@ sub process_report : Private {
'partial', #
'service', #
'non_public',
+ 'single_body_only'
);
# load the report
@@ -932,7 +933,7 @@ sub process_report : Private {
return 1;
}
- my $bodies = $c->forward('contacts_to_bodies', [ $report->category ]);
+ my $bodies = $c->forward('contacts_to_bodies', [ $report->category, $params{single_body_only} ]);
my $body_string = join(',', map { $_->id } @$bodies) || '-1';
$report->bodies_str($body_string);
@@ -982,10 +983,18 @@ sub process_report : Private {
}
sub contacts_to_bodies : Private {
- my ($self, $c, $category) = @_;
+ my ($self, $c, $category, $single_body_only) = @_;
my @contacts = grep { $_->category eq $category } @{$c->stash->{contacts}};
+ # check that we've not indicated we only want to sent to a single body
+ # and if we find a matching one then only send to that. e.g. if we clicked
+ # on a TfL road on the map.
+ if ($single_body_only) {
+ my @contacts_filtered = grep { $_->body->name eq $single_body_only } @contacts;
+ @contacts = @contacts_filtered if scalar @contacts_filtered;
+ }
+
if ($c->stash->{unresponsive}{$category} || $c->stash->{unresponsive}{ALL} || !@contacts) {
[];
} else {
diff --git a/t/app/controller/report_new.t b/t/app/controller/report_new.t
index f937acd19..0e7547a85 100644
--- a/t/app/controller/report_new.t
+++ b/t/app/controller/report_new.t
@@ -944,9 +944,29 @@ foreach my $test (
# XXX add test for category with multiple bodies
foreach my $test (
- { category => 'Street lighting', councils => [ 2226, 2326 ] },
+ {
+ desc => "test report creation for multiple bodies",
+ category => 'Street lighting',
+ councils => [ 2226, 2326 ],
+ extra_fields => {},
+ email_count => 2,
+ },
+ {
+ desc => "test single_body_only means only one report body",
+ category => 'Street lighting',
+ councils => [ 2326 ],
+ extra_fields => { single_body_only => 'Cheltenham Borough Council' },
+ email_count => 1,
+ },
+ {
+ desc => "test invalid single_body_only means multiple report bodies",
+ category => 'Street lighting',
+ councils => [ 2226, 2326 ],
+ extra_fields => { single_body_only => 'Invalid council' },
+ email_count => 1,
+ },
) {
- subtest "test report creation for multiple bodies" => sub {
+ subtest $test->{desc} => sub {
# check that the user does not exist
my $test_email = 'test-2@example.com';
@@ -1003,6 +1023,7 @@ foreach my $test (
may_show_name => '1',
phone => '07903 123 456',
category => $test->{category},
+ %{$test->{extra_fields}}
}
},
"submit good details"
diff --git a/templates/web/base/report/new/form_report.html b/templates/web/base/report/new/form_report.html
index 1d1a0e289..9fce25248 100644
--- a/templates/web/base/report/new/form_report.html
+++ b/templates/web/base/report/new/form_report.html
@@ -63,4 +63,5 @@
<input type="hidden" name="partial" value="[% partial_token.token %]">
[% END %]
+ <input type="hidden" id="single_body_only" name="single_body_only" value="">
<input type="hidden" name="submit_problem" value="1">