From e973904765e4efb242d09d3d41d7f9eb0a294424 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Tue, 10 Jan 2017 14:58:59 +0000 Subject: Move staging flags to their own config variable. --- perllib/FixMyStreet/Script/Reports.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'perllib/FixMyStreet/Script') diff --git a/perllib/FixMyStreet/Script/Reports.pm b/perllib/FixMyStreet/Script/Reports.pm index 7d614bc30..193c5fa41 100644 --- a/perllib/FixMyStreet/Script/Reports.pm +++ b/perllib/FixMyStreet/Script/Reports.pm @@ -211,7 +211,7 @@ sub send(;$) { . " ]\n\n"; } - if (FixMyStreet->config('STAGING_SITE') && !FixMyStreet->config('SEND_REPORTS_ON_STAGING')) { + if (FixMyStreet->staging_flag('send_reports', 0)) { # on a staging server send emails to ourselves rather than the bodies %reporters = map { $_ => $reporters{$_} } grep { /FixMyStreet::SendReport::Email/ } keys %reporters; unless (%reporters) { -- cgit v1.2.3 From 8e6f6a1818b4f998d48f157387d2314bb8c86f8a Mon Sep 17 00:00:00 2001 From: pezholio Date: Wed, 18 Jan 2017 17:05:10 +0000 Subject: [Oxfordshire] Old report archiving script This script can be used for the bulk closure of old reports that haven't been updated in a long time. Reports that haven't been updated in a *really* long time (since 2014, by default) are simply closed, and those that haven't been updated since 2015 (by default) are closed and an email explaining the closure is sent to the report creator. This script can be used for other cobrands, but they'll need an archive.{txt,html} template in order for the emails to be sent. For mysociety/fixmystreetforcouncils#51 --- perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm | 141 ++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm (limited to 'perllib/FixMyStreet/Script') diff --git a/perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm b/perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm new file mode 100644 index 000000000..5d1d45379 --- /dev/null +++ b/perllib/FixMyStreet/Script/ArchiveOldEnquiries.pm @@ -0,0 +1,141 @@ +package FixMyStreet::Script::ArchiveOldEnquiries; + +use strict; +use warnings; +require 5.8.0; + +use FixMyStreet; +use FixMyStreet::App; +use FixMyStreet::DB; +use FixMyStreet::Cobrand; +use FixMyStreet::Map; +use FixMyStreet::Email; + + +my $opts = { + commit => 0, + body => '2237', + cobrand => 'oxfordshire', + closure_cutoff => "2015-01-01 00:00:00", + email_cutoff => "2016-01-01 00:00:00", +}; + +sub query { + return { + bodies_str => { 'LIKE', "%".$opts->{body}."%"}, + -and => [ + lastupdate => { '<', $opts->{email_cutoff} }, + lastupdate => { '>', $opts->{closure_cutoff} }, + ], + state => [ FixMyStreet::DB::Result::Problem->open_states() ], + }; +} + +sub archive { + my $params = shift; + if ( $params ) { + $opts = { + %$opts, + %$params, + }; + } + + unless ( $opts->{commit} ) { + printf "Doing a dry run; emails won't be sent and reports won't be closed.\n"; + printf "Re-run with --commit to actually archive reports.\n\n"; + } + + my @user_ids = FixMyStreet::DB->resultset('Problem')->search(query(), + { + distinct => 1, + columns => ['user_id'], + rows => $opts->{limit}, + })->all; + + @user_ids = map { $_->user_id } @user_ids; + + my $users = FixMyStreet::DB->resultset('User')->search({ + id => \@user_ids + }); + + my $user_count = $users->count; + my $problem_count = FixMyStreet::DB->resultset('Problem')->search(query(), + { + columns => ['id'], + rows => $opts->{limit}, + })->count; + + printf("%d users will receive closure emails about %d reports which will be closed.\n", $user_count, $problem_count); + + if ( $opts->{commit} ) { + my $i = 0; + while ( my $user = $users->next ) { + printf("%d/%d: User ID %d\n", ++$i, $user_count, $user->id); + send_email_and_close($user); + } + } + + my $problems_to_close = FixMyStreet::DB->resultset('Problem')->search({ + bodies_str => { 'LIKE', "%".$opts->{body}."%"}, + lastupdate => { '<', $opts->{closure_cutoff} }, + state => [ FixMyStreet::DB::Result::Problem->open_states() ], + }, { + rows => $opts->{limit}, + }); + + printf("Closing %d old reports, without sending emails: ", $problems_to_close->count); + + if ( $opts->{commit} ) { + $problems_to_close->update({ state => 'closed', send_questionnaire => 0 }); + } + + printf("done.\n") +} + +sub send_email_and_close { + my ($user) = @_; + + my $problems = $user->problems->search(query(), { + order_by => { -desc => 'confirmed' }, + }); + + my @problems = $problems->all; + + return if scalar(@problems) == 0; + + my $cobrand = FixMyStreet::Cobrand->get_class_for_moniker($opts->{cobrand})->new(); + $cobrand->set_lang_and_domain($problems[0]->lang, 1); + FixMyStreet::Map::set_map_class($cobrand->map_type); + + my %h = ( + reports => [@problems], + report_count => scalar(@problems), + site_name => $cobrand->moniker, + user => $user, + cobrand => $cobrand, + ); + + # Send email + printf(" Sending email about %d reports: ", scalar(@problems)); + my $email_error = FixMyStreet::Email::send_cron( + $problems->result_source->schema, + 'archive.txt', + \%h, + { + To => [ [ $user->email, $user->name ] ], + }, + undef, + undef, + $cobrand, + $problems[0]->lang, + ); + + unless ( $email_error ) { + printf("done.\n Closing reports: "); + + $problems->update({ state => 'closed', send_questionnaire => 0 }); + printf("done.\n"); + } else { + printf("error! Not closing reports for this user.\n") + } +} -- cgit v1.2.3 From 34795d026faf45b0a1bfc103362eb118766c46d7 Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Thu, 22 Sep 2016 16:12:40 +0100 Subject: Add cobrand call_hook fn, calls a fn if defined. --- perllib/FixMyStreet/Script/Reports.pm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'perllib/FixMyStreet/Script') diff --git a/perllib/FixMyStreet/Script/Reports.pm b/perllib/FixMyStreet/Script/Reports.pm index 193c5fa41..a7f3cb84b 100644 --- a/perllib/FixMyStreet/Script/Reports.pm +++ b/perllib/FixMyStreet/Script/Reports.pm @@ -112,9 +112,7 @@ sub send(;$) { $h{user_details} .= sprintf(_('Email: %s'), $row->user->email) . "\n\n"; } - if ($cobrand->can('process_additional_metadata_for_email')) { - $cobrand->process_additional_metadata_for_email($row, \%h); - } + $cobrand->call_hook(process_additional_metadata_for_email => $row, \%h); my $bodies = FixMyStreet::DB->resultset('Body')->search( { id => $row->bodies_str_ids }, -- cgit v1.2.3 From 5df39f76b761d88dfa5ca86e8bf01a73115eba1c Mon Sep 17 00:00:00 2001 From: Dave Arter Date: Fri, 17 Feb 2017 15:50:46 +0000 Subject: Send open reports regardless of current state --- perllib/FixMyStreet/Script/Reports.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'perllib/FixMyStreet/Script') diff --git a/perllib/FixMyStreet/Script/Reports.pm b/perllib/FixMyStreet/Script/Reports.pm index a7f3cb84b..6057807de 100644 --- a/perllib/FixMyStreet/Script/Reports.pm +++ b/perllib/FixMyStreet/Script/Reports.pm @@ -28,7 +28,7 @@ sub send(;$) { my $base_url = FixMyStreet->config('BASE_URL'); my $site = $site_override || CronFns::site($base_url); - my $states = [ 'confirmed', 'fixed' ]; + my $states = [ FixMyStreet::DB::Result::Problem::open_states() ]; $states = [ 'unconfirmed', 'confirmed', 'in progress', 'planned', 'closed', 'investigating' ] if $site eq 'zurich'; my $unsent = $rs->search( { state => $states, @@ -274,7 +274,7 @@ sub send(;$) { } my $sending_errors = ''; my $unsent = $rs->search( { - state => [ 'confirmed', 'fixed' ], + state => [ FixMyStreet::DB::Result::Problem::open_states() ], whensent => undef, bodies_str => { '!=', undef }, send_fail_count => { '>', 0 } -- cgit v1.2.3 From 7361516252a4d98620f66318cabe75acb3291efb Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Thu, 9 Mar 2017 10:43:27 +0000 Subject: Remove duplicate <> around envelope senders. --- perllib/FixMyStreet/Script/Alerts.pm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'perllib/FixMyStreet/Script') diff --git a/perllib/FixMyStreet/Script/Alerts.pm b/perllib/FixMyStreet/Script/Alerts.pm index 65183c09c..1a760a0c1 100644 --- a/perllib/FixMyStreet/Script/Alerts.pm +++ b/perllib/FixMyStreet/Script/Alerts.pm @@ -283,11 +283,7 @@ sub _send_aggregated_alert_email(%) { } ); $data{unsubscribe_url} = $cobrand->base_url( $data{cobrand_data} ) . '/A/' . $token->token; - my $sender = sprintf('', - FixMyStreet::Email::generate_verp_token('alert', $data{alert_id}), - FixMyStreet->config('EMAIL_DOMAIN') - ); - + my $sender = FixMyStreet::Email::unique_verp_id('alert', $data{alert_id}); my $result = FixMyStreet::Email::send_cron( $data{schema}, "$data{template}.txt", -- cgit v1.2.3