diff options
Diffstat (limited to 'bin/send-comments')
-rwxr-xr-x | bin/send-comments | 56 |
1 files changed, 41 insertions, 15 deletions
diff --git a/bin/send-comments b/bin/send-comments index 4955cb2f3..3549113c9 100755 --- a/bin/send-comments +++ b/bin/send-comments @@ -1,7 +1,10 @@ #!/usr/bin/env perl -# send-reports: -# Send new problem reports to councils +# send-comments: +# Send comments/updates on reports to bodies +# In Open311 parlance these are 'service request updates' and are sent using +# mySociety's proposed extension to the Open311 Georeport v2 spec: +# https://github.com/mysociety/fixmystreet/wiki/Open311-FMS---Proposed-differences-to-Open311 # # Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved. # Email: matthew@mysociety.org. WWW: http://www.mysociety.org @@ -23,24 +26,28 @@ use mySociety::EmailUtil; use Open311; -# maximum number of webservice attempts to send before not trying any more (XXX may be better in config?) -use constant SEND_FAIL_RETRIES_CUTOFF => 3; - # send_method config values found in by-area config data, for selecting to appropriate method use constant SEND_METHOD_EMAIL => 'email'; use constant SEND_METHOD_OPEN311 => 'Open311'; +use constant COUNCIL_ID_OXFORDSHIRE => 2237; + # Set up site, language etc. my ($verbose, $nomail) = CronFns::options(); my $base_url = mySociety::Config::get('BASE_URL'); my $site = CronFns::site($base_url); -my $councils = FixMyStreet::App->model('DB::Open311Conf')->search( { +my $bodies = FixMyStreet::App->model('DB::Body')->search( { send_method => SEND_METHOD_OPEN311, send_comments => 1, } ); -while ( my $council = $councils->next ) { +while ( my $body = $bodies->next ) { + + # Oxfordshire (OCC) is special: + # we do *receive* service_request_updates (aka comments) for OCC, but we never *send* them, so skip this pass + next if $body->areas->{+COUNCIL_ID_OXFORDSHIRE}; + my $use_extended = 0; my $comments = FixMyStreet::App->model('DB::Comment')->search( { 'me.whensent' => undef, @@ -49,7 +56,7 @@ while ( my $council = $councils->next ) { 'me.confirmed' => { '!=' => undef }, 'problem.whensent' => { '!=' => undef }, 'problem.external_id' => { '!=' => undef }, - 'problem.council' => { -like => '%' . $council->area_id .'%' }, + 'problem.bodies_str' => { -like => '%' . $body->id . '%' }, 'problem.send_method_used' => 'Open311', }, { @@ -57,18 +64,25 @@ while ( my $council = $councils->next ) { } ); - if ( $council->area_id == 2482 ) { + if ( $body->areas->{2482} ) { $use_extended = 1; } - my $o = Open311->new( - endpoint => $council->endpoint, - jurisdiction => $council->jurisdiction, - api_key => $council->api_key, + my %open311_conf = ( + endpoint => $body->endpoint, + jurisdiction => $body->jurisdiction, + api_key => $body->api_key, use_extended_updates => $use_extended, ); - if ( $council->area_id =~ /2482/ ) { + + if ( $body->send_extended_statuses ) { + $open311_conf{extended_statuses} = 1; + } + + my $o = Open311->new( %open311_conf ); + + if ( $body->areas->{2482} ) { my $endpoints = $o->endpoints; $endpoints->{update} = 'update.xml'; $endpoints->{service_request_updates} = 'update.xml'; @@ -78,11 +92,23 @@ while ( my $council = $councils->next ) { while ( my $comment = $comments->next ) { my $cobrand = FixMyStreet::Cobrand->get_class_for_moniker($comment->cobrand)->new(); + # TODO actually this should be OK for any devolved endpoint if original Open311->can_be_devolved, presumably + if ( 0 ) { # Check can_be_devolved and do this properly if set + my $sender = $cobrand->get_body_sender( $body, $comment->problem->category ); + my $config = $sender->{config}; + $o = Open311->new( + endpoint => $config->endpoint, + jurisdiction => $config->jurisdiction, + api_key => $config->api_key, + use_extended_updates => 1, # FMB uses extended updates + ); + } + if ( $comment->send_fail_count ) { next if bromley_retry_timeout( $comment ); } - if ( $council->area_id == 2482 ) { + if ( $body->areas->{2482} ) { my $extra = $comment->extra; if ( !$extra ) { $extra = {}; |