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
|
package FixMyStreet::Script::Inactive;
use v5.14;
use warnings;
use Moo;
use CronFns;
use FixMyStreet;
use FixMyStreet::Cobrand;
use FixMyStreet::DB;
use FixMyStreet::Email;
has anonymize => ( is => 'ro' );
has email => ( is => 'ro' );
has verbose => ( is => 'ro' );
has dry_run => ( is => 'ro' );
sub BUILDARGS {
my ($cls, %args) = @_;
$args{dry_run} = delete $args{'dry-run'};
return \%args;
}
has cobrand => (
is => 'lazy',
default => sub {
my $base_url = FixMyStreet->config('BASE_URL');
my $site = CronFns::site($base_url);
my $cobrand = FixMyStreet::Cobrand->get_class_for_moniker($site)->new;
$cobrand->set_lang_and_domain(undef, 1);
$cobrand;
},
);
sub users {
my $self = shift;
say "DRY RUN" if $self->dry_run;
$self->anonymize_users;
$self->email_inactive_users if $self->email;
}
sub anonymize_users {
my $self = shift;
my $users = FixMyStreet::DB->resultset("User")->search({
last_active => { '<', interval($self->anonymize) },
});
while (my $user = $users->next) {
say "Anonymizing user #" . $user->id if $self->verbose;
next if $self->dry_run;
$user->anonymize_account;
}
}
sub email_inactive_users {
my $self = shift;
my $users = FixMyStreet::DB->resultset("User")->search({
last_active => [ -and => { '<', interval($self->email) },
{ '>=', interval($self->anonymize) } ],
});
while (my $user = $users->next) {
next if $user->get_extra_metadata('inactive_email_sent');
say "Emailing user #" . $user->id if $self->verbose;
next if $self->dry_run;
FixMyStreet::Email::send_cron(
$user->result_source->schema,
'inactive-account.txt',
{
email_from => $self->email,
anonymize_from => $self->anonymize,
user => $user,
url => $self->cobrand->base_url_with_lang . '/my',
},
{ To => [ $user->email, $user->name ] },
undef, 0, $self->cobrand,
);
$user->set_extra_metadata('inactive_email_sent', 1);
$user->update;
}
}
sub interval {
my $interval = shift;
my $s = "current_timestamp - '$interval months'::interval";
return \$s;
}
1;
|