2 #################################################################################
3 # File: $RCSfile: detail.cgi,v $
4 # Revision: $Revision: 1.1 $
5 # Description: Displays list of email addresses based on report type.
6 # Author: Andrew@DeFaria.com
7 # Created: Fri Nov 29 14:17:21 2002
8 # Modified: $Date: 2013/06/12 14:05:47 $
11 # (c) Copyright 2000-2006, Andrew@DeFaria.com, all rights reserved.
13 ################################################################################use strict;
16 use MIME::Words qw(:all);
18 $0 = $FindBin::Script;
20 use lib $FindBin::Bin;
26 use CGI qw (:standard *table start_td end_td start_Tr end_Tr start_div end_div);
27 use CGI::Carp 'fatalsToBrowser';
29 my $type = param ('type');
30 my $next = param ('next');
31 my $lines = param ('lines');
32 my $date = param ('date');
41 my $table_name = 'detail';
46 'The following blacklisted users attempted to email you'
50 'Delivered email from the following users'
54 'Discarded messages from the following users'
62 'Automatically detected mail loops from the following users'
66 'The following users have recently registered'
70 'Sent Register reply to the following users'
77 my $prev_button = $prev >= 0 ?
78 a ({-href => "detail.cgi?type=$type;date=$date;next=$prev",
80 }, '<img src=/maps/images/previous.gif border=0 alt=Previous align=middle>') : '';
81 my $next_button = ($next + $lines) < $total ?
82 a {-href => "detail.cgi?type=$type;date=$date;next=" . ($next + $lines),
84 }, '<img src=/maps/images/next.gif border=0 alt=Next align=middle>' : '';
86 my $buttons = $prev_button;
88 if ($type eq 'whitelist') {
90 submit ({-name => 'action',
91 -value => 'Blacklist Marked',
92 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
93 submit ({-name => 'action',
94 -value => 'Nulllist Marked',
95 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
96 submit ({-name => 'action',
97 -value => 'Reset Marks',
98 -onClick => 'return ClearAll (document.detail);'});
99 } elsif ($type eq 'blacklist') {
100 $buttons = $buttons .
101 submit ({-name => 'action',
102 -value => 'Whitelist Marked',
103 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
104 submit ({-name => 'action',
105 -value => 'Nulllist Marked',
106 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
107 submit ({-name => 'action',
108 -value => 'Reset Marks',
109 -onClick => 'return ClearAll (document.detail);'});
110 } elsif ($type eq 'nulllist') {
111 $buttons = $buttons .
112 submit ({-name => 'action',
113 -value => 'Whitelist Marked',
114 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
115 submit ({-name => 'action',
116 -value => 'Blacklist Marked',
117 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
118 submit ({-name => 'action',
119 -value => 'Reset Marks',
120 -onClick => 'return ClearAll (document.detail);'});
122 $buttons = $buttons .
123 submit ({-name => 'action',
124 -value => 'Whitelist Marked',
125 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
126 submit ({-name => 'action',
127 -value => 'Blacklist Marked',
128 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
129 submit ({-name => 'action',
130 -value => 'Nulllist Marked',
131 -onClick => 'return CheckAtLeast1Checked (document.detail);'}) .
132 submit ({-name => 'action',
133 -value => 'Reset Marks',
134 -onClick => 'return ClearAll (document.detail);'});
137 return $buttons . $next_button;
143 my $current = $next + 1;
145 print div {-align => 'center'}, b (
146 '(' . $current . '-' . $last . ' of ' . $total . ')');
149 -action => 'processaction.cgi',
152 print start_table ({-align => 'center',
157 -width => '100%'}) . "\n";
159 my $buttons = MakeButtons $type;
161 print start_div {-class => 'toolbar'};
164 td {-class => 'tablebordertopleft',
165 -valign => 'middle'},
166 td {-class => 'tablebordertopright',
168 -align => 'center'}, $buttons,
172 foreach my $sender (ReturnSenders $userid, $type, $next, $lines, $date) {
173 my @msgs = ReturnMessages $userid, $sender;
179 ($onlist, $rule) = OnNulllist $sender;
182 ($onlist, $rule) = OnBlacklist $sender;
185 ($onlist, $rule) = OnWhitelist $sender;
190 $rule =~ s/Matching rule: \(//;
193 if ($rule =~ /(\w+):(\d+)/) {
195 my $sequence = $2 - 1;
196 my $link = "<a href=\"/maps/php/list.php?type=$list&next=$sequence\">$list:$2</a>";
198 $rule =~ s/\w+:\d+/$link/;
204 start_Tr {-valign => 'middle'};
206 td {-class => 'tableborder'}, small ($next,
207 checkbox {-name => "action$next",
209 hidden ({-name => "email$next",
210 -default => $sender});
212 start_td {-align => 'left'};
214 start_table {-class => 'tablerightdata',
219 -bgcolor => '#d4d0c8'};
221 td {-class => 'tablelabel',
223 -width => '40'}, 'Sender:',
224 td {-class => 'sender',
227 a {-href => "mailto:$sender?subject=$msgs2[0][0]"}, $sender,
229 -valign => 'middle'},
237 my $msg_date = pop @{$_};
238 my $subject = pop @{$_};
240 if ($date eq substr ($msg_date, 0, 10)) {
241 $msg_date = b font {-color => 'green'}, SQLDatetime2UnixDatetime $msg_date;
243 $msg_date = SQLDatetime2UnixDatetime $msg_date;
246 $subject = $subject eq '' ? '<Unspecified>' : $subject;
247 $subject = decode_mimewords ($subject);
248 $subject =~ s/\>/>/g;
249 $subject =~ s/\</</g;
252 start_table {-class => 'tablerightdata',
257 my $msg_nbr = $messages;
260 td {-class => 'msgnbr',
263 -width => '2%'}, $messages++,
264 td {-class => 'tablelabel',
266 -width => '45'}, 'Subject:',
267 td {-class => 'subject',
269 -bgcolor => '#ffffff'},
270 a {-href => "display.cgi?sender=$sender;msg_nbr=$msg_nbr"}, $subject,
271 td {-class => 'date',
273 -valign => 'middle'}, $msg_date
281 print start_div {-class => 'toolbar'};
284 td {-class => 'tableborderbottomleft',
285 -valign => 'middle'},
286 td {-class => 'tableborderbottomright',
287 -valign => 'middle'},
296 my @scripts = ('ListActions.js');
298 my $heading_date =$date ne '' ? ' on ' . FormatDate ($date) : '';
303 (ucfirst ($type) . ' Report'),
305 $types {$type} [1] . $heading_date,
310 $userid ||= $ENV{USER};
313 NavigationBar $userid;
316 my %options = GetUserOptions $userid;
317 $lines = $options{'Page'};
321 $condition .= "userid = '$userid' and type = '$type'";
323 my $sod = $date . ' 00:00:00';
324 my $eod = $date . ' 23:59:59';
326 $condition .= "userid = '$userid' and type = '$type' "
327 . "and timestamp > '$sod' and timestamp < '$eod' ";
330 $total = MAPSDB::count_distinct ('log', 'sender', $condition);
334 $last = $next + $lines < $total ? $next + $lines : $total;
336 if (($next - $lines) > 0) {
337 $prev = $next - $lines;
339 $prev = $next eq 0 ? -1 : 0;