aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/SendReport/Open311.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/SendReport/Open311.pm')
-rw-r--r--perllib/FixMyStreet/SendReport/Open311.pm84
1 files changed, 14 insertions, 70 deletions
diff --git a/perllib/FixMyStreet/SendReport/Open311.pm b/perllib/FixMyStreet/SendReport/Open311.pm
index 9c55683ed..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,6 +41,8 @@ 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) {
@@ -92,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);
@@ -112,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) {