1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
package FixMyStreet::SendReport::Email;
use Moose;
BEGIN { extends 'FixMyStreet::SendReport'; }
use mySociety::EmailUtil;
sub build_recipient_list {
my $self = shift;
my $row = shift;
my %recips;
my $all_confirmed = 1;
foreach my $council ( keys %{ $self->councils } ) {
my $contact = FixMyStreet::App->model("DB::Contact")->find( {
deleted => 0,
area_id => $council,
category => $row->category
} );
my ($council_email, $confirmed, $note) = ( $contact->email, $contact->confirmed, $contact->note );
$council_email = essex_contact($row->latitude, $row->longitude) if $council == 2225;
$council_email = oxfordshire_contact($row->latitude, $row->longitude) if $council == 2237 && $council_email eq 'SPECIAL';
unless ($confirmed) {
$all_confirmed = 0;
#$note = 'Council ' . $row->council . ' deleted'
#unless $note;
$council_email = 'N/A' unless $council_email;
#$notgot{$council_email}{$row->category}++;
#$note{$council_email}{$row->category} = $note;
}
push @{ $self->to }, [ $council_email, $self->councils->{ $council } ];
$recips{$council_email} = 1;
}
return () unless $all_confirmed;
return keys %recips;
}
sub send {
my $self = shift;
my ( $row, $h, $to, $template, $recips, $nomail, $areas_info ) = @_;
my @recips;
@recips = $self->build_recipient_list( $row, $areas_info );
# on a staging server send emails to ourselves rather than the councils
if (mySociety::Config::get('STAGING_SITE')) {
@recips = ( mySociety::Config::get('CONTACT_EMAIL') );
}
return unless @recips;
my $result = FixMyStreet::App->send_email_cron(
{
_template_ => $template,
_parameters_ => $h,
To => $self->to,
From => [ $row->user->email, $row->name ],
},
mySociety::Config::get('CONTACT_EMAIL'),
\@recips,
$nomail
);
if ( $result == mySociety::EmailUtil::EMAIL_SUCCESS ) {
$self->success(1);
} else {
$self->error( 'Failed to send email' );
}
return $result;
}
# Essex has different contact addresses depending upon the district
# Might be easier if we start storing in the db all areas covered by a point
# Will do for now :)
sub essex_contact {
my $district = _get_district_for_contact(@_);
my $email;
$email = 'eastarea' if $district == 2315 || $district == 2312;
$email = 'midarea' if $district == 2317 || $district == 2314 || $district == 2316;
$email = 'southarea' if $district == 2319 || $district == 2320 || $district == 2310;
$email = 'westarea' if $district == 2309 || $district == 2311 || $district == 2318 || $district == 2313;
die "Returned district $district which is not in Essex!" unless $email;
return "highways.$email\@essexcc.gov.uk";
}
# Oxfordshire has different contact addresses depending upon the district
sub oxfordshire_contact {
my $district = _get_district_for_contact(@_);
my $email;
$email = 'northernarea' if $district == 2419 || $district == 2420 || $district == 2421;
$email = 'southernarea' if $district == 2417 || $district == 2418;
die "Returned district $district which is not in Oxfordshire!" unless $email;
return "$email\@oxfordshire.gov.uk";
}
sub _get_district_for_contact {
my ( $lat, $lon ) = @_;
my $district =
mySociety::MaPit::call( 'point', "4326/$lon,$lat", type => 'DIS' );
($district) = keys %$district;
return $district;
}
1;
|