diff options
Diffstat (limited to 'perllib/FixMyStreet/SendReport/Open311.pm')
-rw-r--r-- | perllib/FixMyStreet/SendReport/Open311.pm | 84 |
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) { |