aboutsummaryrefslogtreecommitdiffstats
path: root/perllib
diff options
context:
space:
mode:
Diffstat (limited to 'perllib')
-rw-r--r--perllib/FixMyStreet/Cobrand/Default.pm3
-rw-r--r--perllib/FixMyStreet/Cobrand/Hackney.pm62
-rw-r--r--perllib/FixMyStreet/Cobrand/UKCouncils.pm2
-rw-r--r--perllib/FixMyStreet/Cobrand/Zurich.pm2
-rw-r--r--perllib/FixMyStreet/Queue/Item/Report.pm2
-rwxr-xr-xperllib/Open311/PostServiceRequestUpdates.pm2
6 files changed, 67 insertions, 6 deletions
diff --git a/perllib/FixMyStreet/Cobrand/Default.pm b/perllib/FixMyStreet/Cobrand/Default.pm
index 73340338b..bd8b7e4b4 100644
--- a/perllib/FixMyStreet/Cobrand/Default.pm
+++ b/perllib/FixMyStreet/Cobrand/Default.pm
@@ -957,9 +957,10 @@ Get stats to display on the council reports page
sub get_report_stats { return 0; }
sub get_body_sender {
- my ( $self, $body, $category ) = @_;
+ my ( $self, $body, $problem ) = @_;
# look up via category
+ my $category = $problem->category;
my $contact = $body->contacts->search( { category => $category } )->first;
if ( $body->can_be_devolved && $contact && $contact->send_method ) {
return { method => $contact->send_method, config => $contact, contact => $contact };
diff --git a/perllib/FixMyStreet/Cobrand/Hackney.pm b/perllib/FixMyStreet/Cobrand/Hackney.pm
index f08cd0dd9..dbf070628 100644
--- a/perllib/FixMyStreet/Cobrand/Hackney.pm
+++ b/perllib/FixMyStreet/Cobrand/Hackney.pm
@@ -3,6 +3,7 @@ use parent 'FixMyStreet::Cobrand::Whitelabel';
use strict;
use warnings;
+use mySociety::EmailUtil qw(is_valid_email);
sub council_area_id { return 2508; }
sub council_area { return 'Hackney'; }
@@ -33,7 +34,7 @@ sub open311_config {
}
sub open311_extra_data {
- my ($self, $row, $h, $extra) = @_;
+ my ($self, $row, $h, $extra, $contact) = @_;
my $open311_only = [
{ name => 'report_url',
@@ -46,6 +47,13 @@ sub open311_extra_data {
value => $row->category },
];
+ # Make sure contact 'email' set correctly for Open311
+ if (my $sent_to = $row->get_extra_metadata('sent_to')) {
+ $row->unset_extra_metadata('sent_to');
+ my $code = $sent_to->{$contact->email};
+ $contact->email($code) if $code;
+ }
+
return $open311_only;
}
@@ -80,4 +88,56 @@ sub open311_filter_contacts_for_deletion {
});
}
+sub lookup_site_code_config {
+ my ($self, $type) = @_;
+ my $property_map = {
+ park => "greenspaces:hackney_park",
+ estate => "housing:lbh_estate",
+ };
+ {
+ buffer => 3, # metres
+ url => "https://map.hackney.gov.uk/geoserver/wfs",
+ srsname => "urn:ogc:def:crs:EPSG::27700",
+ typename => $property_map->{$type},
+ property => ( $type eq "park" ? "park_id" : "id" ),
+ accept_feature => sub { 1 },
+ accept_types => { Polygon => 1 },
+ outputformat => "json",
+ }
+}
+
+sub get_body_sender {
+ my ( $self, $body, $problem ) = @_;
+
+ my $contact = $body->contacts->search( { category => $problem->category } )->first;
+
+ my $parts = join '\s*', qw(^ park : (.*?) ; estate : (.*?) ; other : (.*?) $);
+ my $regex = qr/$parts/i;
+ if (my ($park, $estate, $other) = $contact->email =~ $regex) {
+ my $to = $other;
+ if (my $park_id = $self->lookup_site_code($problem, 'park')) {
+ $to = $park;
+ } elsif (my $estate_id = $self->lookup_site_code($problem, 'estate')) {
+ $to = $estate;
+ }
+ $problem->set_extra_metadata(sent_to => { $contact->email => $to });
+ if (is_valid_email($to)) {
+ return { method => 'Email', contact => $contact };
+ }
+ }
+ return $self->SUPER::get_body_sender($body, $problem);
+}
+
+# Translate email address to actual delivery address
+sub munge_sendreport_params {
+ my ($self, $row, $h, $params) = @_;
+
+ my $sent_to = $row->get_extra_metadata('sent_to') or return;
+ $row->unset_extra_metadata('sent_to');
+ for my $recip (@{$params->{To}}) {
+ my ($email, $name) = @$recip;
+ $recip->[0] = $sent_to->{$email} if $sent_to->{$email};
+ }
+}
+
1;
diff --git a/perllib/FixMyStreet/Cobrand/UKCouncils.pm b/perllib/FixMyStreet/Cobrand/UKCouncils.pm
index 21dd2d455..7456d9ddf 100644
--- a/perllib/FixMyStreet/Cobrand/UKCouncils.pm
+++ b/perllib/FixMyStreet/Cobrand/UKCouncils.pm
@@ -392,7 +392,7 @@ sub _fetch_features_url {
SRSNAME => $cfg->{srsname},
TYPENAME => $cfg->{typename},
VERSION => "1.1.0",
- outputformat => "geojson",
+ outputformat => $cfg->{outputformat} || "geojson",
$cfg->{filter} ? ( Filter => $cfg->{filter} ) : ( BBOX => $cfg->{bbox} ),
);
diff --git a/perllib/FixMyStreet/Cobrand/Zurich.pm b/perllib/FixMyStreet/Cobrand/Zurich.pm
index 3cf678f9c..42932ec41 100644
--- a/perllib/FixMyStreet/Cobrand/Zurich.pm
+++ b/perllib/FixMyStreet/Cobrand/Zurich.pm
@@ -217,7 +217,7 @@ sub allow_photo_display {
}
sub get_body_sender {
- my ( $self, $body, $category ) = @_;
+ my ( $self, $body, $problem ) = @_;
return { method => 'Zurich' };
}
diff --git a/perllib/FixMyStreet/Queue/Item/Report.pm b/perllib/FixMyStreet/Queue/Item/Report.pm
index e38987838..60e9ad3dc 100644
--- a/perllib/FixMyStreet/Queue/Item/Report.pm
+++ b/perllib/FixMyStreet/Queue/Item/Report.pm
@@ -172,7 +172,7 @@ sub _create_reporters {
my @dear;
my %reporters = ();
while (my $body = $bodies->next) {
- my $sender_info = $self->cobrand->get_body_sender( $body, $row->category );
+ my $sender_info = $self->cobrand_handler->get_body_sender( $body, $row );
my $sender = "FixMyStreet::SendReport::" . $sender_info->{method};
if ( ! exists $self->senders->{ $sender } ) {
diff --git a/perllib/Open311/PostServiceRequestUpdates.pm b/perllib/Open311/PostServiceRequestUpdates.pm
index d7345ea4d..a31bca8f7 100755
--- a/perllib/Open311/PostServiceRequestUpdates.pm
+++ b/perllib/Open311/PostServiceRequestUpdates.pm
@@ -50,7 +50,7 @@ sub open311_params {
my $conf = $body;
if ($comment) {
my $cobrand_logged = $comment->get_cobrand_logged;
- my $sender = $cobrand_logged->get_body_sender($body, $comment->problem->category);
+ my $sender = $cobrand_logged->get_body_sender($body, $comment->problem);
$conf = $sender->{config};
}