diff options
author | Matthew Somerville <matthew@mysociety.org> | 2020-01-14 15:47:06 +0000 |
---|---|---|
committer | Matthew Somerville <matthew@mysociety.org> | 2020-01-21 14:17:14 +0000 |
commit | e5161c960c9a42c5bbef2445281c8cd374dc9dc3 (patch) | |
tree | 5b506528dab64e27ccd925a64274ad3964f6a353 | |
parent | a453f19261ece91842972f7d11235050c6309049 (diff) |
Filter contacts before constructing options.
If we wait until after to filter the contacts and the constructed
options, then we can end up in the situation where e.g. we've filtered
out all the TfL contacts but the category option is still the TfL one
(with its associated group).
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/FixMyStreet.pm | 10 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/IsleOfWight.pm | 8 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/TfL.pm | 6 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/UKCouncils.pm | 6 |
5 files changed, 12 insertions, 20 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index cbbf8971a..ba37a25fa 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -691,6 +691,8 @@ sub setup_categories_and_bodies : Private { ->search( { 'me.body_id' => [ keys %bodies ] }, { prefetch => 'body' } ); my @contacts = $c->cobrand->categories_restriction($contacts)->all_sorted; + $c->cobrand->call_hook(munge_report_new_contacts => \@contacts); + # variables to populate my %bodies_to_list = (); # Bodies with categories assigned my @category_options = (); # categories to show diff --git a/perllib/FixMyStreet/Cobrand/FixMyStreet.pm b/perllib/FixMyStreet/Cobrand/FixMyStreet.pm index 6e0a0e2a5..fcbeebb48 100644 --- a/perllib/FixMyStreet/Cobrand/FixMyStreet.pm +++ b/perllib/FixMyStreet/Cobrand/FixMyStreet.pm @@ -83,8 +83,8 @@ sub munge_reports_categories_list { } } -sub munge_report_new_category_list { - my ($self, $options, $contacts, $extras) = @_; +sub munge_report_new_contacts { + my ($self, $contacts) = @_; my %bodies = map { $_->body->name => $_->body } @$contacts; @@ -92,20 +92,16 @@ sub munge_report_new_category_list { my $user = $self->{c}->user; if ( $user && ( $user->is_superuser || $user->belongs_to_body( $bodies{'Isle of Wight Council'}->id ) ) ) { @$contacts = grep { !$_->send_method || $_->send_method ne 'Triage' } @$contacts; - my $seen = { map { $_->category => 1 } @$contacts }; - @$options = grep { my $c = ($_->{category} || $_->category); $c =~ 'Pick a category' || $seen->{ $c } } @$options; return; } @$contacts = grep { $_->send_method && $_->send_method eq 'Triage' } @$contacts; - my $seen = { map { $_->category => 1 } @$contacts }; - @$options = grep { my $c = ($_->{category} || $_->category); $c =~ 'Pick a category' || $seen->{ $c } } @$options; } if ( $bodies{'TfL'} ) { # Presented categories vary if we're on/off a red route my $tfl = FixMyStreet::Cobrand->get_class_for_moniker( 'tfl' )->new({ c => $self->{c} }); - $tfl->munge_red_route_categories($options, $contacts); + $tfl->munge_red_route_categories($contacts); } } diff --git a/perllib/FixMyStreet/Cobrand/IsleOfWight.pm b/perllib/FixMyStreet/Cobrand/IsleOfWight.pm index ab79be832..a46b540ad 100644 --- a/perllib/FixMyStreet/Cobrand/IsleOfWight.pm +++ b/perllib/FixMyStreet/Cobrand/IsleOfWight.pm @@ -108,8 +108,8 @@ sub munge_reports_category_list { return @$categories; } -sub munge_report_new_category_list { - my ($self, $options, $contacts, $extras) = @_; +sub munge_report_new_contacts { + my ($self, $contacts) = @_; my $user = $self->{c}->user; my %bodies = map { $_->body->name => $_->body } @$contacts; @@ -117,14 +117,10 @@ sub munge_report_new_category_list { if ( $user && ( $user->is_superuser || $user->belongs_to_body( $b->id ) ) ) { @$contacts = grep { !$_->send_method || $_->send_method ne 'Triage' } @$contacts; - my $seen = { map { $_->category => 1 } @$contacts }; - @$options = grep { my $c = ($_->{category} || $_->category); $c =~ 'Pick a category' || $seen->{ $c } } @$options; return; } @$contacts = grep { $_->send_method && $_->send_method eq 'Triage' } @$contacts; - my $seen = { map { $_->category => 1 } @$contacts }; - @$options = grep { my $c = ($_->{category} || $_->category); $c =~ 'Pick a category' || $seen->{ $c } } @$options; } sub munge_around_category_where { diff --git a/perllib/FixMyStreet/Cobrand/TfL.pm b/perllib/FixMyStreet/Cobrand/TfL.pm index 5183e00c9..281243832 100644 --- a/perllib/FixMyStreet/Cobrand/TfL.pm +++ b/perllib/FixMyStreet/Cobrand/TfL.pm @@ -434,10 +434,10 @@ sub report_new_is_on_tlrn { return scalar @$features ? 1 : 0; } -sub munge_report_new_category_list { } +sub munge_report_new_contacts { } sub munge_red_route_categories { - my ($self, $options, $contacts) = @_; + my ($self, $contacts) = @_; if ( $self->report_new_is_on_tlrn ) { # We're on a red route - only send TfL categories (except the disabled # one that directs the user to borough for street cleaning) and borough @@ -455,8 +455,6 @@ sub munge_red_route_categories { $tlrn_cats{$self->_tfl_council_category} = 1; @$contacts = grep { !( $_->body->name eq 'TfL' && $tlrn_cats{$_->category } ) } @$contacts; } - my $seen = { map { $_->category => 1 } @$contacts }; - @$options = grep { my $c = ($_->{category} || $_->category); $c =~ 'Pick a category' || $seen->{ $c } } @$options; } # Reports in these categories can only be made on a red route diff --git a/perllib/FixMyStreet/Cobrand/UKCouncils.pm b/perllib/FixMyStreet/Cobrand/UKCouncils.pm index 97c8b6c81..7336e60ca 100644 --- a/perllib/FixMyStreet/Cobrand/UKCouncils.pm +++ b/perllib/FixMyStreet/Cobrand/UKCouncils.pm @@ -289,14 +289,14 @@ sub prefill_report_fields_for_inspector { 1 } sub social_auth_disabled { 1 } -sub munge_report_new_category_list { - my ($self, $options, $contacts, $extras) = @_; +sub munge_report_new_contacts { + my ($self, $contacts) = @_; my %bodies = map { $_->body->name => $_->body } @$contacts; if ( $bodies{'TfL'} ) { # Presented categories vary if we're on/off a red route my $tfl = FixMyStreet::Cobrand->get_class_for_moniker( 'tfl' )->new({ c => $self->{c} }); - $tfl->munge_red_route_categories($options, $contacts); + $tfl->munge_red_route_categories($contacts); } } |