#!/usr/bin/env perl # zurich-overdue-alert: # Send email alerts to administrators for overdue admin activities. # # Copyright (c) 2012 UK Citizens Online Democracy. All rights reserved. # Email: matthew@mysociety.org. WWW: http://www.mysociety.org use strict; use warnings; require 5.8.0; use DateTime; use CronFns; use FixMyStreet::App; my ($verbose, $nomail) = CronFns::options(); # Only run on working days my $now = DateTime->now(); exit if FixMyStreet::Cobrand::Zurich::is_public_holiday($now) or FixMyStreet::Cobrand::Zurich::is_weekend($now); my $cobrand = FixMyStreet::Cobrand->get_class_for_moniker('zurich')->new(); my %bodies = map { $_->id => $_ } FixMyStreet::App->model("DB::Body")->all; loop_through( 'alert-moderation-overdue.txt', 0, 1, [ 'unconfirmed' ] ); loop_through( 'alert-overdue.txt', 1, 6, 'in progress' ); loop_through( 'alert-overdue.txt', 0, 6, ['confirmed', 'planned'] ); sub loop_through { my ( $template, $include_parent, $days, $states ) = @_; my $dtf = FixMyStreet::App->model("DB")->storage->datetime_parser; my $date_threshold = $dtf->format_datetime(FixMyStreet::Cobrand::Zurich::sub_days( $now, $days )); my $reports = FixMyStreet::App->model("DB::Problem")->search( { state => $states, created => { '<', $date_threshold }, bodies_str => { '!=', undef }, } ); my %to_send = (); while (my $row = $reports->next) { $to_send{$row->bodies_str} .= '* ' . $row->id . ": '" . $row->title . "'\n\n"; } my $template_path = FixMyStreet->path_to( "templates", "email", "zurich", $template )->stringify; $template = Utils::read_file( $template_path ); foreach my $body_id (keys %to_send) { send_alert( $template, $body_id, $to_send{$body_id}, $include_parent ); } } sub send_alert { my ( $template, $body_id, $data, $include_parent ) = @_; my $body = $bodies{$body_id}; my $body_email = $body->endpoint; my $h = { data => $data, admin_url => $cobrand->admin_base_url, }; my $to = [ [ $body_email, $body->name ] ]; if ( $include_parent ) { my $parent = $body->parent; my $parent_email = $parent->endpoint; push @$to, [ $parent_email, $parent->name ]; } FixMyStreet::App->send_email_cron( { _template_ => $template, _parameters_ => $h, To => $to, From => [ FixMyStreet->config('CONTACT_EMAIL'), FixMyStreet->config('CONTACT_NAME') ], }, FixMyStreet->config('CONTACT_EMAIL'), $nomail ); }