aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm4
-rw-r--r--perllib/FixMyStreet/DB/Result/Contact.pm11
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/Problem.pm2
-rw-r--r--perllib/FixMyStreet/Script/Reports.pm21
-rw-r--r--perllib/FixMyStreet/SendReport/Open311.pm74
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 );