diff options
Diffstat (limited to 'perllib/FixMyStreet/DB/ResultSet/Questionnaire.pm')
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/Questionnaire.pm | 108 |
1 files changed, 2 insertions, 106 deletions
diff --git a/perllib/FixMyStreet/DB/ResultSet/Questionnaire.pm b/perllib/FixMyStreet/DB/ResultSet/Questionnaire.pm index aca330960..6a1ce0d78 100644 --- a/perllib/FixMyStreet/DB/ResultSet/Questionnaire.pm +++ b/perllib/FixMyStreet/DB/ResultSet/Questionnaire.pm @@ -3,115 +3,11 @@ use base 'DBIx::Class::ResultSet'; use strict; use warnings; -use Encode; -use Utils; - -use FixMyStreet::Email; -use FixMyStreet::Cobrand; sub send_questionnaires { my ( $rs, $params ) = @_; - $rs->send_questionnaires_period( '4 weeks', $params ); - $rs->send_questionnaires_period( '26 weeks', $params ) - if $params->{site} eq 'emptyhomes'; -} - -sub send_questionnaires_period { - my ( $rs, $period, $params ) = @_; - - # Select all problems that need a questionnaire email sending - my $q_params = { - state => [ FixMyStreet::DB::Result::Problem::visible_states() ], - whensent => [ - '-and', - { '!=', undef }, - { '<', \"current_timestamp - '$period'::interval" }, - ], - send_questionnaire => 1, - }; - # FIXME Do these a bit better... - if ($params->{site} eq 'emptyhomes' && $period eq '4 weeks') { - $q_params->{'(select max(whensent) from questionnaire where me.id=problem_id)'} = undef; - } elsif ($params->{site} eq 'emptyhomes' && $period eq '26 weeks') { - $q_params->{'(select max(whensent) from questionnaire where me.id=problem_id)'} = { '!=', undef }; - } else { - $q_params->{'-or'} = [ - '(select max(whensent) from questionnaire where me.id=problem_id)' => undef, - '(select max(whenanswered) from questionnaire where me.id=problem_id)' => { '<', \"current_timestamp - '$period'::interval" } - ]; - } - - my $unsent = $rs->result_source->schema->resultset('Problem')->search( $q_params, { - order_by => { -desc => 'confirmed' } - } ); - - while (my $row = $unsent->next) { - - my $cobrand = FixMyStreet::Cobrand->get_class_for_moniker($row->cobrand)->new(); - $cobrand->set_lang_and_domain($row->lang, 1); - - # Not all cobrands send questionnaires - next unless $cobrand->send_questionnaires; - next if $row->is_from_abuser; - - # Cobranded and non-cobranded messages can share a database. In this case, the conf file - # should specify a vhost to send the reports for each cobrand, so that they don't get sent - # more than once if there are multiple vhosts running off the same database. The email_host - # call checks if this is the host that sends mail for this cobrand. - next unless $cobrand->email_host; - - my $template; - if ($params->{site} eq 'emptyhomes') { - ($template = $period) =~ s/ //; - $template = Utils::read_file( FixMyStreet->path_to( "templates/email/emptyhomes/" . $row->lang . "/questionnaire-$template.txt" )->stringify ); - } else { - $template = FixMyStreet->get_email_template($cobrand->moniker, $row->lang, 'questionnaire.txt'); - } - - my %h = map { $_ => $row->$_ } qw/name title detail category/; - $h{created} = Utils::prettify_duration( time() - $row->confirmed->epoch, 'week' ); - - my $questionnaire = $rs->create( { - problem_id => $row->id, - whensent => \'current_timestamp', - } ); - - # We won't send another questionnaire unless they ask for it (or it was - # the first EHA questionnaire. - $row->send_questionnaire( 0 ) - if $params->{site} ne 'emptyhomes' || $period eq '26 weeks'; - - my $token = $rs->result_source->schema->resultset("Token")->new_result( { - scope => 'questionnaire', - data => $questionnaire->id, - } ); - $h{url} = $cobrand->base_url($row->cobrand_data) . '/Q/' . $token->token; - - print "Sending questionnaire " . $questionnaire->id . ", problem " - . $row->id . ", token " . $token->token . " to " - . $row->user->email . "\n" - if $params->{verbose}; - - my $result = FixMyStreet::Email::send_cron( - $rs->result_source->schema, - { - _template_ => $template, - _parameters_ => \%h, - To => [ [ $row->user->email, $row->name ] ], - }, - undef, - $params->{nomail}, - $cobrand - ); - unless ($result) { - print " ...success\n" if $params->{verbose}; - $row->update(); - $token->insert(); - } else { - print " ...failed\n" if $params->{verbose}; - $questionnaire->delete; - } - } + require FixMyStreet::Script::Questionnaires; + FixMyStreet::Script::Questionnaires::send($params); } sub timeline { |