diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2018-10-09 11:57:06 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2018-10-09 11:57:06 +0100 |
commit | 0f7571bffcf898faf3a93c7aa595614ea5febc04 (patch) | |
tree | 31c4cd45cd5186a4098946742f0089c9cb81488f /bin/send-comments | |
parent | f738e18d1dc27aa1dbba0695a4d54d15ecd4cbf4 (diff) | |
parent | 097b57c516231b5c500ab521af5d52cf403ea88e (diff) |
Merge branch 'send-reopen-comment-option'
Diffstat (limited to 'bin/send-comments')
-rwxr-xr-x | bin/send-comments | 165 |
1 files changed, 5 insertions, 160 deletions
diff --git a/bin/send-comments b/bin/send-comments index 33da7379e..665f377bc 100755 --- a/bin/send-comments +++ b/bin/send-comments @@ -18,167 +18,12 @@ BEGIN { } use CronFns; - -use DateTime; use FixMyStreet; -use FixMyStreet::Cobrand; -use FixMyStreet::DB; -use Open311; - -# 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 Open311::PostServiceRequestUpdates; -use constant COUNCIL_ID_OXFORDSHIRE => 2237; -use constant COUNCIL_ID_BROMLEY => 2482; -use constant COUNCIL_ID_LEWISHAM => 2492; -use constant COUNCIL_ID_BUCKS => 2217; - -# Set up site, language etc. my ($verbose, $nomail) = CronFns::options(); -my $base_url = FixMyStreet->config('BASE_URL'); -my $site = ''; -$site = 'fixmystreet.com' if $base_url eq "https://www.fixmystreet.com"; - -my $bodies = FixMyStreet::DB->resultset('Body')->search( { - send_method => SEND_METHOD_OPEN311, - send_comments => 1, -} ); - -while ( my $body = $bodies->next ) { - - # XXX Cobrand specific - see also list in Problem->updates_sent_to_body - if ($site eq 'fixmystreet.com') { - # Lewisham does not yet accept updates - next if $body->areas->{+COUNCIL_ID_LEWISHAM}; - } - - my $use_extended = 0; - my $comments = FixMyStreet::DB->resultset('Comment')->search( { - 'me.whensent' => undef, - 'me.external_id' => undef, - 'me.state' => 'confirmed', - 'me.confirmed' => { '!=' => undef }, - 'problem.whensent' => { '!=' => undef }, - 'problem.external_id' => { '!=' => undef }, - 'problem.bodies_str' => { -like => '%' . $body->id . '%' }, - 'problem.send_method_used' => 'Open311', - }, - { - join => 'problem', - order_by => [ 'confirmed', 'id' ], - } - ); - - if ( $site eq 'fixmystreet.com' && $body->areas->{+COUNCIL_ID_BROMLEY} ) { - $use_extended = 1; - } - - my %open311_conf = ( - endpoint => $body->endpoint, - jurisdiction => $body->jurisdiction, - api_key => $body->api_key, - use_extended_updates => $use_extended, - ); - - if ( $body->areas->{+COUNCIL_ID_OXFORDSHIRE} ) { - $open311_conf{use_customer_reference} = 1, - } - - if ( $body->areas->{+COUNCIL_ID_BUCKS} ) { - $open311_conf{mark_reopen} = 1; - } - - if ( $body->send_extended_statuses ) { - $open311_conf{extended_statuses} = 1; - } - - my $o = Open311->new( %open311_conf ); - - if ( $site eq 'fixmystreet.com' && $body->areas->{+COUNCIL_ID_BROMLEY} ) { - my $endpoints = $o->endpoints; - $endpoints->{update} = 'update.xml'; - $endpoints->{service_request_updates} = 'update.xml'; - $o->endpoints( $endpoints ); - } - while ( my $comment = $comments->next ) { - my $cobrand = $body->get_cobrand_handler || - FixMyStreet::Cobrand->get_class_for_moniker($comment->cobrand)->new(); - - # Some cobrands (e.g. Buckinghamshire) don't want to receive updates - # from anyone except the original problem reporter. - if ($cobrand->call_hook(should_skip_sending_update => $comment)) { - unless (defined $comment->get_extra_metadata('cobrand_skipped_sending')) { - $comment->set_extra_metadata(cobrand_skipped_sending => 1); - $comment->update; - } - next; - } - - # Oxfordshire stores the external id of the problem as a customer reference - # in metadata - if ($body->areas->{+COUNCIL_ID_OXFORDSHIRE} && - !$comment->problem->get_extra_metadata('customer_reference') ) { - next; - } - - # 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 - ); - } - - next if !$verbose && $comment->send_fail_count && retry_timeout($comment); - - if ( $site eq 'fixmystreet.com' && $body->areas->{+COUNCIL_ID_BROMLEY} ) { - my $extra = $comment->extra; - if ( !$extra ) { - $extra = {}; - } - - unless ( $extra->{title} ) { - $extra->{title} = $comment->user->title; - $comment->extra( $extra ); - } - } - - my $id = $o->post_service_request_update( $comment ); - - if ( $id ) { - $comment->update( { - external_id => $id, - whensent => \'current_timestamp', - } ); - } else { - $comment->update( { - send_fail_count => $comment->send_fail_count + 1, - send_fail_timestamp => \'current_timestamp', - send_fail_reason => "Failed to post over Open311\n\n" . $o->error, - } ); - - if ( $verbose && $o->error ) { - warn $o->error; - } - } - } -} - -sub retry_timeout { - my $row = shift; - - my $tz = FixMyStreet->local_time_zone; - my $now = DateTime->now( time_zone => $tz ); - my $diff = $now - $row->send_fail_timestamp; - if ( $diff->in_units( 'minutes' ) < 30 ) { - return 1; - } - - return 0; -} +my $updates = Open311::PostServiceRequestUpdates->new( + verbose => $verbose, +); +$updates->send; |