Added use lib for clearscm
[clearscm.git] / maps / bin / add2nulllist.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 use FindBin;
6
7 use lib "$FindBin::Bin/../lib";
8 use lib "$FindBin::Bin/../../lib";
9
10 use MAPS;
11 use MAPSLog;
12 use MAPSWeb;
13 use Display;
14
15 # Highly specialized!
16 my $userid = $ENV{USER};
17 my $Userid;
18 my $type = 'null';
19
20 die "TODO: Test this script";
21
22 sub GetItems($) {
23   my ($filename) = @_;
24
25   my @items;
26
27   open my $file, '<', $filename
28     or error "Unable to open $filename - $!", 1;
29
30   while (<$file>) {
31     my @fields = split;
32     my %item;
33
34     my @address = split /\@/, $fields[0];
35
36     $item{pattern}   = $address[0];
37     $item{domain}    = $address[1];
38     $item{comment}   = $fields[1] ? $fields[1] : '';
39     $item{hit_count} = $fields[2] ? $fields[2] : 0;
40     $item{retention} = $fields[3];
41
42     push @items, \%item;
43   } # while
44
45   close $file;
46
47   return @items;
48 } # GetItems
49
50 sub Add2List(@) {
51   my (@items) = @_;
52
53   my $item;
54
55   my $item->{sequence} = GetNextSequenceNo(
56     userid => $userid,
57     type   => $type,
58   );
59
60   $item->{userid} = $userid;
61   $item->{type}   = $type;
62
63   for $item (@items) {
64     display_nolf "Adding $item->{pattern}\@$item->{domain} ($item->{comment}) to null list ($item->{sequence})...";
65
66     last unless $item->{pattern} or $item->{domain};
67
68     $item->{sender} = CheckEmail $item->{pattern}, $item->{domain};
69
70     my ($status, $rule) = OnNulllist($item->{sender}, $userid);
71
72     if ($status == 0) {
73       display ' Already on list';
74     } else {
75       my ($message, $msg) = Add2Nulllist(%$item);
76
77       display ' done';
78
79       # Now remove this entry from the other lists (if present)
80       for my $otherlist ('white', 'black') {
81         FindList(
82           userid => $item->{userid},
83           type   => $otherlist,
84           sender => $item->{sender}
85         );
86
87         my $seq = GetList;
88
89         if ($seq->{sequence}) {
90           my $count = DeleteList(
91             userid   => $item->{userid}
92             type     => $otherlist,
93             sequence => $seq->{sequence}
94           );
95
96           display "Removed $item->{sender} from ${Userid}'s " . ucfirst $otherlist . ' list'
97             if $count > 0;
98
99           ResequenceList(
100             userid => $rec{userid},
101             type   => $otherlist,
102           );
103         } # if
104       } # for
105     } # if
106
107     $item->{sequence}++;
108   } # while
109
110   return;
111 } # Add2List
112
113 # Main
114 my $filename;
115
116 if ($ARGV[0]) {
117   $filename = $ARGV[0];
118 } else {
119   error "Must specify a filename of addresses to null list", 1;
120 } # if
121
122 SetContext($userid);
123
124 $Userid = ucfirst $userid;
125
126 Add2List(GetItems ($filename));
127
128 exit;