old-www/LDP/LGNET/bin/volunteer_notify

108 lines
3.0 KiB
Perl
Executable File

#!/usr/bin/perl -w
# Created by Ben Okopnik on Sat Jun 27 07:25:26 CDT 2009
use strict;
my $DEBUG = 1;
# {EVENT} text for deadline
my $d_text = "this month's deadline has just passed, and it's time for the proofing/editing team to revise the articles";
# {EVENT} text for end of month
my $e_text = "the publication date is approaching, and the opportunity for final revisions is coming to a close";
# Calculate last day of the month for leap years
my $eom = {
January => sub {31},
February => sub {28 + ($_ [0] % 400 ? 0 : 1) +
($_ [0] % 100 ? 0 : -1) +
($_ [0] % 4 ? 0 : 1)},
March => sub {31},
April => sub {30},
May => sub {31},
June => sub {30},
July => sub {31},
August => sub {31},
September => sub {30},
October => sub {31},
November => sub {30},
December => sub {31},
};
my %mon;
@mon{1..12} = qw/January February March April May June July August September October November December/;
my ($day, $month, $year) = (localtime)[3, 4, 5];
$month = $mon{$month+1};
$year += 1900;
my %deadline = (
January => 21,
February => 18,
March => 21,
April => 20,
May => 20,
June => 20,
July => 21,
August => 21,
September => 21,
October => 21,
November => 19,
December => 19,
);
# Adjust deadline for leap years
$deadline{February}++ if $month eq 'February' && $eom->{$month}->($year) == 29;
# Terminate unless it's one of the two important days - or DEBUG is on
unless ($day == $deadline{$month} || $day == $eom->{$month}->($year) || $DEBUG){
print "Today is $day $month $year; that's neither the deadline nor the EOM.\n";
exit;
}
### Get the data
my %vlist;
open V, '<', "$ENV{HOME}/volunteer_list" or die "~/volunteer_list: $!\n";
while (<V>){
chomp;
# Data stored as kinda-CSV
my ($name, $email, $job) = split /\s*,\s*/;
if ($job =~ /proof|editor/i){
$vlist{$email} = [ $name, $job ];
}
}
close V;
open R, '<', "$ENV{HOME}/reminder.txt" or die "~/reminder.txt: $!\n";
my $text = do { local $/; <R> };
close R;
if ($day == $deadline{$month} || $DEBUG == 1){
$text =~ s/{EVENT}/$d_text/;
for my $email (keys %vlist){
(my $t = $text) =~ s/{JOB}/$vlist{email}->[1]/gsm;
if ($DEBUG){
print qq{echo $t|/usr/bin/mutt -x -s "Linux Gazette: Monthly deadline" $email\n};
}
else {
qx#echo $t|/usr/bin/mutt -x -s "Linux Gazette: Monthly deadline" $email#;
# Don't slam the server with all these emails
sleep 1;
}
}
}
# I know it's the only option remaining, but I'm being extra careful here
elsif ($day == $eom->{$month}->($year) || $DEBUG == 2){
$text =~ s/{EVENT}/$e_text/;
for my $email (keys %vlist){
(my $t = $text) =~ s/{JOB}/$vlist{email}->[1]/gsm;
if ($DEBUG){
print qq{echo $t|/usr/bin/mutt -x -s "Linux Gazette: Publishing tomorrow" $email\n};
}
else {
qx#echo $t|/usr/bin/mutt -x -s "Linux Gazette: Publishing tomorrow" $email#;
# Don't slam the server with all these emails
sleep 1;
}
}
}