diff options
author | Dave Arter <davea@mysociety.org> | 2019-11-07 15:08:29 +0000 |
---|---|---|
committer | Dave Arter <davea@mysociety.org> | 2019-12-09 12:50:07 +0000 |
commit | ed6a1b7ce9cf30bbc9f26a1e3600b2a4059a97dc (patch) | |
tree | e91877172b0e9772ea3a912059701e8e75e04141 /perllib/FixMyStreet | |
parent | f4157d76048d14711883cc2bba75bef663696aae (diff) |
[TfL] Direct reports to email addresses on a per-borough basis
Adds a new cobrand feature that allows the destination email address
for a report to be determined on its MapIt area IDs, not just the
category it was made in.
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r-- | perllib/FixMyStreet/Cobrand/TfL.pm | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/Cobrand/TfL.pm b/perllib/FixMyStreet/Cobrand/TfL.pm index 92fbc1529..cab1e3ada 100644 --- a/perllib/FixMyStreet/Cobrand/TfL.pm +++ b/perllib/FixMyStreet/Cobrand/TfL.pm @@ -276,4 +276,61 @@ sub report_new_munge_before_insert { $report->set_extra_fields(@$extra); } +=head2 munge_sendreport_params + +TfL want reports made in certain categories sent to different email addresses +depending on what London Borough they were made in. To achieve this we have +some config in COBRAND_FEATURES that specifies what address to direct reports +to based on the MapIt area IDs it's in. + +Contacts that use this technique have a short code in their email field, +which is looked up in the `borough_email_addresses` hash. + +For example, if you wanted Pothole reports in Bromley and Barnet to be sent to +one email address, and Pothole reports in Hounslow to be sent to another, +create a contact with category = "Potholes" and email = "BOROUGHPOTHOLES" and +use the following config in general.yml: + +COBRAND_FEATURES: + borough_email_addresses: + tfl: + BOROUGHPOTHOLES: + - email: bromleybarnetpotholes@example.org + areas: + - 2482 # Bromley + - 2489 # Barnet + - email: hounslowpotholes@example.org + areas: + - 2483 # Hounslow + +=cut + +sub munge_sendreport_params { + my ($self, $row, $h, $params) = @_; + + my $addresses = $self->feature('borough_email_addresses'); + return unless $addresses; + + my @report_areas = grep { $_ } split ',', $row->areas; + + my $to = $params->{To}; + my @munged_to = (); + for my $recip ( @$to ) { + my ($email, $name) = @$recip; + if (my $teams = $addresses->{$email}) { + for my $team (@$teams) { + my %team_area_ids = map { $_ => 1 } @{ $team->{areas} }; + if ( grep { $team_area_ids{$_} } @report_areas ) { + $recip = [ + $team->{email}, + $name + ]; + } + } + } + push @munged_to, $recip; + } + $params->{To} = \@munged_to; +} + 1; |