diff options
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 4 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/Contact.pm | 11 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/Problem.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/Script/Reports.pm | 21 | ||||
-rw-r--r-- | perllib/FixMyStreet/SendReport/Open311.pm | 74 |
5 files changed, 61 insertions, 51 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index 6934c6d79..cfb572d83 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -615,7 +615,7 @@ sub setup_categories_and_bodies : Private { unless ( $seen{$contact->category} ) { push @category_options, $contact->category; - my $metas = $contact->get_extra_fields; + my $metas = $contact->get_metadata_for_input; if (scalar @$metas) { foreach (@$metas) { if (ref $_->{values} eq 'HASH') { @@ -861,7 +861,7 @@ sub process_report : Private { my @extra; foreach my $contact (@contacts) { - my $metas = $contact->get_extra_fields; + my $metas = $contact->get_metadata_for_input; foreach my $field ( @$metas ) { if ( lc( $field->{required} ) eq 'true' ) { unless ( $c->get_param($field->{code}) ) { diff --git a/perllib/FixMyStreet/DB/Result/Contact.pm b/perllib/FixMyStreet/DB/Result/Contact.pm index dab5432c6..58d8e58de 100644 --- a/perllib/FixMyStreet/DB/Result/Contact.pm +++ b/perllib/FixMyStreet/DB/Result/Contact.pm @@ -68,4 +68,15 @@ use namespace::clean -except => [ 'meta' ]; with 'FixMyStreet::Roles::Extra'; +sub get_metadata_for_input { + my $self = shift; + my $id_field = $self->id_field; + return [ grep { $_->{code} !~ /^(easting|northing|$id_field)$/ } @{$self->get_extra_fields} ]; +} + +sub id_field { + my $self = shift; + return $self->get_extra_metadata('id_field') || 'fixmystreet_id'; +} + 1; diff --git a/perllib/FixMyStreet/DB/ResultSet/Problem.pm b/perllib/FixMyStreet/DB/ResultSet/Problem.pm index 488030928..9ce7da1c0 100644 --- a/perllib/FixMyStreet/DB/ResultSet/Problem.pm +++ b/perllib/FixMyStreet/DB/ResultSet/Problem.pm @@ -235,7 +235,7 @@ sub categories_summary { sub send_reports { my ( $rs, $site_override ) = @_; require FixMyStreet::Script::Reports; - FixMyStreet::Script::Reports::send($site_override); + return FixMyStreet::Script::Reports::send($site_override); } 1; diff --git a/perllib/FixMyStreet/Script/Reports.pm b/perllib/FixMyStreet/Script/Reports.pm index 311d8fec4..a51923456 100644 --- a/perllib/FixMyStreet/Script/Reports.pm +++ b/perllib/FixMyStreet/Script/Reports.pm @@ -23,6 +23,7 @@ sub send(;$) { # Set up site, language etc. my ($verbose, $nomail, $debug_mode) = CronFns::options(); + my $test_data; my $base_url = FixMyStreet->config('BASE_URL'); my $site = $site_override || CronFns::site($base_url); @@ -205,18 +206,18 @@ sub send(;$) { for my $sender ( keys %reporters ) { debug_print("sending using " . $sender, $row->id) if $debug_mode; - $result *= $reporters{ $sender }->send( $row, \%h ); - if ( $reporters{ $sender }->unconfirmed_counts) { - foreach my $e (keys %{ $reporters{ $sender }->unconfirmed_counts } ) { - foreach my $c (keys %{ $reporters{ $sender }->unconfirmed_counts->{$e} }) { - $notgot{$e}{$c} += $reporters{ $sender }->unconfirmed_counts->{$e}{$c}; + $sender = $reporters{$sender}; + $result *= $sender->send( $row, \%h ); + if ( $sender->unconfirmed_counts) { + foreach my $e (keys %{ $sender->unconfirmed_counts } ) { + foreach my $c (keys %{ $sender->unconfirmed_counts->{$e} }) { + $notgot{$e}{$c} += $sender->unconfirmed_counts->{$e}{$c}; } } - %note = ( - %note, - %{ $reporters{ $sender }->unconfirmed_notes } - ); + %note = (%note, %{ $sender->unconfirmed_notes }); } + $test_data->{test_req_used} = $sender->open311_test_req_used + if FixMyStreet->test_mode && $sender->can('open311_test_req_used'); } unless ($result) { @@ -272,6 +273,8 @@ sub send(;$) { print "The following reports had problems sending:\n$sending_errors"; } } + + return $test_data; } sub _send_report_sent_email { diff --git a/perllib/FixMyStreet/SendReport/Open311.pm b/perllib/FixMyStreet/SendReport/Open311.pm index bf5ed3e30..ee40f371a 100644 --- a/perllib/FixMyStreet/SendReport/Open311.pm +++ b/perllib/FixMyStreet/SendReport/Open311.pm @@ -12,6 +12,11 @@ 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', +); sub send { my $self = shift; @@ -28,21 +33,11 @@ sub send { my $extended_desc = 1; - # To rollback temporary changes made by this function - my $revert = 0; + my $extra = $row->get_extra_fields(); # Extra bromley fields - if ( $row->bodies_str eq '2482' ) { - - $revert = 1; - - my $extra = $row->get_extra_fields(); - if ( $row->used_map || ( !$row->used_map && !$row->postcode ) ) { - push @$extra, { name => 'northing', value => $h->{northing} }; - push @$extra, { name => 'easting', value => $h->{easting} }; - } + if ( $row->bodies_str eq $COUNCIL_ID_BROMLEY ) { push @$extra, { name => 'report_url', value => $h->{url} }; - push @$extra, { name => 'service_request_id_ext', value => $row->id }; 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 @@ -54,41 +49,47 @@ sub send { my ( $firstname, $lastname ) = ( $row->name =~ /(\w+)\.?\s+(.+)/ ); push @$extra, { name => 'last_name', value => $lastname }; } - $row->set_extra_fields( @$extra ); - $always_send_latlong = 0; $send_notpinpointed = 1; - $use_service_as_deviceid = 0; $extended_desc = 0; - } - - # extra Oxfordshire fields: send nearest street, postcode, northing and easting, and the FMS id - if ( $row->bodies_str =~ /\b(?:$COUNCIL_ID_OXFORDSHIRE|$COUNCIL_ID_WARWICKSHIRE)\b/ ) { - - my $extra = $row->get_extra_fields; + } 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} }; } - $row->set_extra_fields( @$extra ); - - if ($row->bodies_str =~ /$COUNCIL_ID_OXFORDSHIRE/) { - $extended_desc = 'oxfordshire'; - } - elsif ($row->bodies_str =~ /$COUNCIL_ID_WARWICKSHIRE/) { - $extended_desc = 'warwickshire'; - } + } 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 }; } - # FIXME: we've already looked this up before + # Try and fill in some ones that we've been asked for, but not asked the user for + my $contact = $row->result_source->schema->resultset("Contact")->find( { deleted => 0, body_id => $body->id, category => $row->category } ); + 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} =~ /^(easting|northing)$/) { + if ( $row->used_map || ( !$row->used_map && !$row->postcode ) ) { + push @$extra, { name => $_->{code}, value => $h->{$_->{code}} }; + } + } + } + + $row->set_extra_fields( @$extra ) if @$extra; + my %open311_params = ( jurisdiction => $conf->jurisdiction, endpoint => $conf->endpoint, @@ -117,25 +118,20 @@ sub send { # 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' } ); - $revert = 1; } # required to get round issues with CRM constraints if ( $row->bodies_str =~ /2218/ ) { $row->user->name( $row->user->id . ' ' . $row->user->name ); - $revert = 1; - } - - if ($row->bodies_str =~ /$COUNCIL_ID_GREENWICH/) { - # Greenwich endpoint expects external_id as an attribute - $row->set_extra_fields( { 'name' => 'external_id', 'value' => $row->id } ); - $revert = 1; } my $resp = $open311->send_service_request( $row, $h, $contact->email ); + if (FixMyStreet->test_mode) { + $self->open311_test_req_used($open311->test_req_used); + } # make sure we don't save user changes from above - $row->discard_changes() if $revert; + $row->discard_changes(); if ( $resp ) { $row->external_id( $resp ); |