Merge branch 'master' of git+ssh://github.com/adefaria/clearscm
[clearscm.git] / maps / bin / detail.cgi
index 622c148..1d39097 100755 (executable)
@@ -1,5 +1,6 @@
 #!/usr/bin/perl
-#################################################################################
+################################################################################
+#
 # File:         $RCSfile: detail.cgi,v $
 # Revision:     $Revision: 1.1 $
 # Description:  Displays list of email addresses based on report type.
 #
 # (c) Copyright 2000-2006, Andrew@DeFaria.com, all rights reserved.
 #
-################################################################################use strict;
+################################################################################
+use strict;
 use warnings;
 
 use MIME::Words qw(:all);
 use FindBin;
 $0 = $FindBin::Script;
 
-use lib $FindBin::Bin;
+use lib "$FindBin::Bin/../lib";
 
 use MAPS;
 use MAPSLog;
 use MAPSUtil;
 use MAPSWeb;
-use CGI qw (:standard *table start_td end_td start_Tr end_Tr start_div end_div);
+use CGI qw(:standard *table start_td end_td start_Tr end_Tr start_div end_div);
 use CGI::Carp 'fatalsToBrowser';
 
-my $type   = param ('type');
-my $next   = param ('next');
-my $lines  = param ('lines');
-my $date   = param ('date');
+my $type   = param('type');
+my $next   = param('next');
+my $lines  = param('lines');
+my $date   = param('date');
 
 $date ||= '';
 
@@ -72,7 +74,7 @@ my %types = (
 );
 
 sub MakeButtons {
-  my $type = shift;
+  my ($type) = @_;
 
   my $prev_button = $prev >= 0 ?
     a ({-href      => "detail.cgi?type=$type;date=$date;next=$prev",
@@ -149,12 +151,12 @@ sub PrintTable {
     -action => 'processaction.cgi',
     -name   => 'detail'
   };
-  print start_table ({-align        => 'center',
-                      -id           => $table_name,
-                      -border       => 0,
-                      -cellspacing  => 0,
-                      -cellpadding  => 0,
-                      -width        => '100%'}) . "\n";
+  print start_table({-align        => 'center',
+                     -id           => $table_name,
+                     -border       => 0,
+                     -cellspacing  => 0,
+                     -cellpadding  => 0,
+                     -width        => '100%'}) . "\n";
 
   my $buttons = MakeButtons $type;
 
@@ -169,23 +171,38 @@ sub PrintTable {
     ];
   print end_div;
 
-  foreach my $sender (ReturnSenders $userid, $type, $next, $lines, $date) {
-    my @msgs = ReturnMessages $userid, $sender;
+  for my $sender (ReturnSenders($userid, $type, $next, $lines, $date)) {
+    my @msgs  = ReturnMessages($userid, $sender);
     my @msgs2 = @msgs;
 
-    my ($onlist, $rule);
-    $rule = 'none';
+    my ($onlist, $seq);
+
+    my $rule      = 'none';
+    my $hit_count = 0;
 
-    ($onlist, $rule) = OnNulllist $sender;
+    ($onlist, $rule, $seq, $hit_count) = OnWhitelist($sender, $userid, 0);
 
     unless ($onlist) {
-      ($onlist, $rule) = OnBlacklist $sender;
+      ($onlist, $rule, $seq, $hit_count) = OnBlacklist($sender, 0);
 
       unless ($onlist) {
-        ($onlist, $rule) = OnWhitelist $sender;
+        ($onlist, $rule, $seq, $hit_count) = OnNulllist($sender, 0);
       } # unless
     } # unless
 
+    if ($rule) {
+      $rule =~ s/Matching rule: \(//;
+      $rule =~ s/\)//;
+
+      if ($rule =~ /(\w+):(\d+)/) {
+        my $list     = $1;
+        my $sequence = $2 - 1;
+        my $link     = "<a href=\"/maps/php/list.php?type=$list&next=$sequence\">$list:$2</a>/$hit_count";
+
+        $rule =~ s/\w+:\d+/$link/;
+      } # if
+    } # if
+
     $next++;
     print
       start_Tr {-valign => 'middle'};
@@ -204,14 +221,18 @@ sub PrintTable {
                    -border      => 0,
                    -width       => '100%',
                    -bgcolor     => '#d4d0c8'};
+
+    # Get subject line
+    my $heading = $msgs2[0][0] || '';
+    $heading = "?subject=$heading" if $heading;
     print
       td {-class   => 'tablelabel',
           -valign  => 'middle',
           -width   => '40'}, 'Sender:',
       td {-class   => 'sender',
           -valign  => 'middle',
-          -width   => '50%'},
-        a {-href   => "mailto:$sender?subject=$msgs2[0][0]"}, $sender,
+          -width   => '40%'},
+        a {-href   => "mailto:$sender$heading"}, $sender,
       td {
           -valign  => 'middle'},
           $rule;
@@ -220,7 +241,7 @@ sub PrintTable {
 
     my $messages = 1;
 
-    foreach (@msgs) {
+    for (@msgs) {
       my $msg_date = pop @{$_};
       my $subject  = pop @{$_};
 
@@ -260,10 +281,10 @@ sub PrintTable {
               -valign  => 'middle'}, $msg_date
         ];
       print end_table;
-    } # foreach
+    } # for
     print end_td;
     print end_Tr;
-  } # foreach
+  } # for
 
   print start_div {-class => 'toolbar'};
   print
@@ -277,14 +298,17 @@ sub PrintTable {
   print end_div;
   print end_table;
   print end_form;
+
+  return;
 } # PrintTable
 
 # Main
+my $condition;
 my @scripts = ('ListActions.js');
 
 my $heading_date =$date ne '' ? ' on ' . FormatDate ($date) : '';
 
-$userid = Heading (
+$userid = Heading(
   'getcookie',
   '',
   (ucfirst ($type) . ' Report'),
@@ -296,11 +320,11 @@ $userid = Heading (
 
 $userid ||= $ENV{USER};
 
-SetContext $userid;
-NavigationBar $userid;
+SetContext($userid);
+NavigationBar($userid);
 
 unless ($lines) {
-  my %options = GetUserOptions $userid;
+  my %options = GetUserOptions($userid);
   $lines = $options{'Page'};
 } # unless
 
@@ -314,7 +338,7 @@ if ($date eq '') {
               . "and timestamp > '$sod' and timestamp < '$eod' ";
 } # if
 
-$total = MAPSDB::count_distinct ('log', 'sender', $condition);
+$total = count_distinct('log', 'sender', $condition);
 
 $next ||= 0;
 
@@ -323,11 +347,11 @@ $last = $next + $lines < $total ? $next + $lines : $total;
 if (($next - $lines) > 0) {
   $prev = $next - $lines;
 } else {
-  $prev = $next eq 0 ? -1 : 0;
+  $prev = $next == 0 ? -1 : 0;
 } # if
 
-PrintTable $type;
+PrintTable($type);
 
-Footing $table_name;
+Footing($table_name);
 
 exit;