diff options
author | Marius Halden <marius.h@lden.org> | 2017-05-28 21:31:42 +0200 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2017-05-28 21:31:42 +0200 |
commit | 987124b09a32248414faf4d0d6615d43b29ac6f6 (patch) | |
tree | a549db8af723c981d3b346e855f25d6fd5ff8aa7 /perllib/FixMyStreet/SendReport | |
parent | dbf56159e44c1560a413022451bf1a1c4cb22a52 (diff) | |
parent | a085b63ce09f87e83b75cda9b9cd08aadfe75d61 (diff) |
Merge tag 'v2.0.4' into fiksgatami-dev
Diffstat (limited to 'perllib/FixMyStreet/SendReport')
-rw-r--r-- | perllib/FixMyStreet/SendReport/Email.pm | 22 | ||||
-rw-r--r-- | perllib/FixMyStreet/SendReport/Open311.pm | 86 |
2 files changed, 23 insertions, 85 deletions
diff --git a/perllib/FixMyStreet/SendReport/Email.pm b/perllib/FixMyStreet/SendReport/Email.pm index 2eab1c754..28f3411d0 100644 --- a/perllib/FixMyStreet/SendReport/Email.pm +++ b/perllib/FixMyStreet/SendReport/Email.pm @@ -2,6 +2,7 @@ package FixMyStreet::SendReport::Email; use Moo; use FixMyStreet::Email; +use Utils::Email; BEGIN { extends 'FixMyStreet::SendReport'; } @@ -28,13 +29,6 @@ sub build_recipient_list { $self->unconfirmed_notes->{$body_email}{$row->category} = $note; } - my $body_name = $body->name; - # see something uses council areas but doesn't send to councils so just use a - # generic name here to minimise confusion - if ( $row->cobrand eq 'seesomething' ) { - $body_name = 'See Something, Say Something'; - } - my @emails; # allow multiple emails per contact if ( $body_email =~ /,/ ) { @@ -43,7 +37,7 @@ sub build_recipient_list { @emails = ( $body_email ); } for my $email ( @emails ) { - push @{ $self->to }, [ $email, $body_name ]; + push @{ $self->to }, [ $email, $body->name ]; } } @@ -67,7 +61,7 @@ sub send { my $recips = $self->build_recipient_list( $row, $h ); # on a staging server send emails to ourselves rather than the bodies - if (FixMyStreet->config('STAGING_SITE') && !FixMyStreet->config('SEND_REPORTS_ON_STAGING') && !FixMyStreet->test_mode) { + if (FixMyStreet->staging_flag('send_reports', 0) && !FixMyStreet->test_mode) { $recips = 1; @{$self->to} = [ $row->user->email, $self->to->[0][1] || $row->name ]; } @@ -84,16 +78,14 @@ sub send { From => $self->send_from( $row ), }; - $cobrand->munge_sendreport_params($row, $h, $params) if $cobrand->can('munge_sendreport_params'); + $cobrand->call_hook(munge_sendreport_params => $row, $h, $params); $params->{Bcc} = $self->bcc if @{$self->bcc}; - my $sender = sprintf('<fms-%s@%s>', - FixMyStreet::Email::generate_verp_token('report', $row->id), - FixMyStreet->config('EMAIL_DOMAIN') - ); + my $sender = FixMyStreet::Email::unique_verp_id('report', $row->id); - if (FixMyStreet::Email::test_dmarc($params->{From}[0])) { + if (FixMyStreet::Email::test_dmarc($params->{From}[0]) + || Utils::Email::same_domain($params->{From}, $params->{To})) { $params->{'Reply-To'} = [ $params->{From} ]; $params->{From} = [ $sender, $params->{From}[1] ]; } diff --git a/perllib/FixMyStreet/SendReport/Open311.pm b/perllib/FixMyStreet/SendReport/Open311.pm index ee40f371a..059690612 100644 --- a/perllib/FixMyStreet/SendReport/Open311.pm +++ b/perllib/FixMyStreet/SendReport/Open311.pm @@ -5,14 +5,7 @@ use namespace::autoclean; BEGIN { extends 'FixMyStreet::SendReport'; } -use DateTime::Format::W3CDTF; use Open311; -use Readonly; - -Readonly::Scalar my $COUNCIL_ID_OXFORDSHIRE => 2237; -Readonly::Scalar my $COUNCIL_ID_WARWICKSHIRE => 2243; -Readonly::Scalar my $COUNCIL_ID_GREENWICH => 2493; -Readonly::Scalar my $COUNCIL_ID_BROMLEY => 2482; has open311_test_req_used => ( is => 'rw', @@ -27,47 +20,18 @@ sub send { foreach my $body ( @{ $self->bodies } ) { my $conf = $self->body_config->{ $body->id }; - my $always_send_latlong = 1; - my $send_notpinpointed = 0; - my $use_service_as_deviceid = 0; - - my $extended_desc = 1; - - my $extra = $row->get_extra_fields(); + my %open311_params = ( + jurisdiction => $conf->jurisdiction, + endpoint => $conf->endpoint, + api_key => $conf->api_key, + always_send_latlong => 1, + send_notpinpointed => 0, + use_service_as_deviceid => 0, + extended_description => 1, + ); - # Extra bromley fields - if ( $row->bodies_str eq $COUNCIL_ID_BROMLEY ) { - push @$extra, { name => 'report_url', value => $h->{url} }; - push @$extra, { name => 'report_title', value => $row->title }; - push @$extra, { name => 'public_anonymity_required', value => $row->anonymous ? 'TRUE' : 'FALSE' }; - push @$extra, { name => 'email_alerts_requested', value => 'FALSE' }; # always false as can never request them - push @$extra, { name => 'requested_datetime', value => DateTime::Format::W3CDTF->format_datetime($row->confirmed->set_nanosecond(0)) }; - push @$extra, { name => 'email', value => $row->user->email }; - # make sure we have last_name attribute present in row's extra, so - # it is passed correctly to Bromley as attribute[] - if ( $row->cobrand ne 'bromley' ) { - my ( $firstname, $lastname ) = ( $row->name =~ /(\w+)\.?\s+(.+)/ ); - push @$extra, { name => 'last_name', value => $lastname }; - } - $always_send_latlong = 0; - $send_notpinpointed = 1; - $extended_desc = 0; - } elsif ( $row->bodies_str =~ /\b$COUNCIL_ID_OXFORDSHIRE\b/ ) { - # Oxfordshire doesn't have category metadata to fill these - $extended_desc = 'oxfordshire'; - push @$extra, { name => 'external_id', value => $row->id }; - push @$extra, { name => 'closest_address', value => $h->{closest_address} } if $h->{closest_address}; - if ( $row->used_map || ( !$row->used_map && !$row->postcode ) ) { - push @$extra, { name => 'northing', value => $h->{northing} }; - push @$extra, { name => 'easting', value => $h->{easting} }; - } - } elsif ( $row->bodies_str =~ /\b$COUNCIL_ID_WARWICKSHIRE\b/ ) { - $extended_desc = 'warwickshire'; - push @$extra, { name => 'closest_address', value => $h->{closest_address} } if $h->{closest_address}; - } elsif ( $row->bodies_str == $COUNCIL_ID_GREENWICH ) { - # Greenwich doesn't have category metadata to fill this - push @$extra, { name => 'external_id', value => $row->id }; - } + my $cobrand = $body->get_cobrand_handler || $row->get_cobrand_logged; + $cobrand->call_hook(open311_config => $row, $h, \%open311_params); # Try and fill in some ones that we've been asked for, but not asked the user for @@ -77,10 +41,14 @@ sub send { category => $row->category } ); + my $extra = $row->get_extra_fields(); + my $id_field = $contact->id_field; foreach (@{$contact->get_extra_fields}) { if ($_->{code} eq $id_field) { push @$extra, { name => $id_field, value => $row->id }; + } elsif ($_->{code} eq 'closest_address' && $h->{closest_address}) { + push @$extra, { name => $_->{code}, value => $h->{$_->{code}} }; } elsif ($_->{code} =~ /^(easting|northing)$/) { if ( $row->used_map || ( !$row->used_map && !$row->postcode ) ) { push @$extra, { name => $_->{code}, value => $h->{$_->{code}} }; @@ -90,15 +58,6 @@ sub send { $row->set_extra_fields( @$extra ) if @$extra; - my %open311_params = ( - jurisdiction => $conf->jurisdiction, - endpoint => $conf->endpoint, - api_key => $conf->api_key, - always_send_latlong => $always_send_latlong, - send_notpinpointed => $send_notpinpointed, - use_service_as_deviceid => $use_service_as_deviceid, - extended_description => $extended_desc, - ); if (FixMyStreet->test_mode) { my $test_res = HTTP::Response->new(); $test_res->code(200); @@ -110,20 +69,7 @@ sub send { my $open311 = Open311->new( %open311_params ); - # non standard west berks end points - if ( $row->bodies_str =~ /2619/ ) { - $open311->endpoints( { services => 'Services', requests => 'Requests' } ); - } - - # non-standard Oxfordshire endpoint (because it's just a script, not a full Open311 service) - if ( $row->bodies_str =~ /$COUNCIL_ID_OXFORDSHIRE/ ) { - $open311->endpoints( { requests => 'open311_service_request.cgi' } ); - } - - # required to get round issues with CRM constraints - if ( $row->bodies_str =~ /2218/ ) { - $row->user->name( $row->user->id . ' ' . $row->user->name ); - } + $cobrand->call_hook(open311_pre_send => $row, $open311); my $resp = $open311->send_service_request( $row, $h, $contact->email ); if (FixMyStreet->test_mode) { |