Removed /usr/local from CDPATH
[clearscm.git] / maps / bin / processaction.cgi
index 493020b..229a2c3 100755 (executable)
@@ -16,9 +16,9 @@ use strict;
 use warnings;
 
 use FindBin;
-$0 = $FindBin::Script;
 
-use lib $FindBin::Bin;
+use lib "$FindBin::Bin/../lib";
+use lib "$FindBin::Bin/../../lib";
 
 use MAPS;
 use MAPSWeb;
@@ -40,15 +40,11 @@ sub ReturnSequenceNbrs {
   my @names = param;
   my @sequence_nbrs;
 
-  Debug "Entered ReturnSequenceNbrs";
-
-  foreach (@names) {
+  for (@names) {
     if (/action(\d+)/) {
       push @sequence_nbrs, $1;
     } # if
-  } # foreach
-
-  Debug "Returning sequence nbrs " . join ' ', @sequence_nbrs;
+  } # for
 
   return @sequence_nbrs;
 } # ReturnSequenceNbrs
@@ -60,14 +56,26 @@ sub DeleteEntries {
 
   my $count;
 
-  foreach (@sequence_nbrs) {
-    $count += DeleteList $type, $_;
-  } # foreach
+  for (@sequence_nbrs) {
+    my ($err, $msg) = DeleteList(
+      userid   => $userid,
+      type     => $type,
+      sequence => $_, 
+    );
+
+    # How to best handle error?
+    croak $msg if $err < 0;
+
+    $count += $err;
+  } # for
 
   if ($count == 0) {
-    DisplayError 'Nothing to delete!';
+    DisplayError('Nothing to delete!');
   } else {
-    ResequenceList $userid, $type;
+    ResequenceList(
+      userid => $userid,
+      type   => $type
+    );
 
     if ($count == 1) {
       print redirect ("/maps/php/list.php?type=$type&next=$next&message=Deleted entry");
@@ -85,7 +93,8 @@ sub PrintInputLine ($$$$$) {
   my $email     = '';
   my $pattern   = '';
   my $domain    = '';
-  my $hit_count = 0;
+  my $retention = '';
+  my $hit_count = '';
 
   if (defined $email_nbr && $email_nbr ne '') {
     $email = param "email$email_nbr";
@@ -93,7 +102,10 @@ sub PrintInputLine ($$$$$) {
       ($pattern, $domain) = split /\@/, $email;
     } # if
 
-    $hit_count = CountMsg $email;
+    $hit_count = CountEmail(
+      userid => $userid,
+      additional => "sender like '%$email%'",
+    );
   } # if
 
   print Tr [
@@ -101,9 +113,8 @@ sub PrintInputLine ($$$$$) {
         -align      => 'center'}, "$nextseq",
     td {-class      => $dataclass,
         -align      => 'right'},
-      (textfield {-class     => 'inputfield',
+      (textfield {-class     => 'inputfieldright',
                   -style     => 'width:100%',
-                  -align     => 'right',
                   -size      => 25,
                   -maxlength => '255',
                   -name      => "pattern$nextseq",
@@ -113,27 +124,31 @@ sub PrintInputLine ($$$$$) {
     td {-class      => $dataclass},
       (textfield {-class      => 'inputfield',
                   -style      => 'width:100%',
-                  -align      => 'left',
                   -size       => 25,
                   -maxlength  => '255',
                   -name       => "domain$nextseq",
                   -value      => $domain}),
     td {-class      => $dataclass},
-      (textfield {-class     => 'inputfield',
+      (textfield {-class     => 'inputfieldright',
                   -style     => 'width:100%',
-                  -align     => 'left',
                   -size      => 25,
                   -maxlength => '255',
-                  -name      => "comment$nextseq",
-                  -value     => ''}),
+                  -name      => "hit_count$nextseq",
+                  -value     => $hit_count}),
+    td {-class      => $dataclass},
+      (textfield {-class      => 'inputfieldright',
+                  -style      => 'width:100%',
+                  -size       => 20,
+                  -maxlength  => '40',
+                  -name       => "retention$nextseq",
+                  -value      => $retention}),
     td {-class      => $rightclass},
       (textfield {-class     => 'inputfield',
                   -style     => 'width:100%',
-                  -align     => 'left',
                   -size      => 25,
                   -maxlength => '255',
-                  -name      => "hit_count$nextseq",
-                  -value     => $hit_count}),
+                  -name      => "comment$nextseq",
+                  -value     => ''}),
   ];
 
   return;
@@ -146,15 +161,18 @@ sub AddNewEntry {
   # empty, editable entries (possibly filled in) for the user to add
   # the new entry
   my $selected = @selected;
-  my $nextseq = MAPSDB::GetNextSequenceNo $userid, $type;
+  my $nextseq = GetNextSequenceNo(
+    userid => $userid,
+    type   => $type,
+  );
+
   my $next = ($nextseq - $lines) + $selected - 1;
 
-  $next = 0
-    if $next < 0;
+  $next = 0 if $next < 0;
 
   my $Type = ucfirst $type;
 
-  Heading (
+  Heading(
     'getcookie',
     '',
     "Add to $Type List",
@@ -164,12 +182,12 @@ sub AddNewEntry {
     @scripts
   );
 
-  NavigationBar $userid;
+  NavigationBar($userid);
 
   # Now display table and new entry
   print start_form {
     -method => 'post',
-    -action => 'add2' . $type . 'list.cgi',
+    -action => "add2${type}list.cgi",
     -name   => 'list'
   };
 
@@ -184,54 +202,53 @@ sub AddNewEntry {
     th {-class => 'tableheader'},   'Username',
     th {-class => 'tableheader'},   '@',
     th {-class => 'tableheader'},   'Domain',
-    th {-class => 'tableheader'},   'Comments',
-    th {-class => 'tablerightend'}, 'Hit Count'
+    th {-class => 'tableheader'},   'Hit Count',
+    th {-class => 'tableheader'},   'Retention',
+    th {-class => 'tablerightend'}, 'Comments',
   ];
 
-  my @list = ReturnList $type, $next, $lines;
-  my %record;
+  my $list = ReturnList(
+    userid   => $userid,
+    type     => $type,
+    start_at => $next,
+    lines    => $lines,
+  );
+
   my $i = 1;
 
-  foreach (@list) {
+  for my $record (@$list) {
     $i++;
 
-    %record = %{$_};
-
     # Normalize fields
-    my $sequence  = $record{sequence};
-    my $pattern   = $record{pattern}   ? $record{pattern}   : '&nbsp;';
-    my $domain    = $record{domain}    ? $record{domain}    : '&nbsp;';
-    my $comment   = $record{comment}   ? $record{comment}   : '&nbsp;';
-    my $hit_count = $record{hit_count} ? $record{hit_count} : '&nbsp;';
+    $record->{pattern}   //= '&nbsp;';
+    $record->{domain}    //= '&nbsp;';
+    $record->{comment}   //= '&nbsp;';
+    $record->{hit_count} //= '&nbsp;';
+    $record->{retention} //= '&nbsp;';
 
     print Tr [
-      td {-class  => 'tableleftdata',
-          -align  => 'center'}, $sequence,
-      td {-class  => 'tabledata',
-          -align  => 'right'}, $pattern,
-      td {-class  => 'tabledata',
-          -align  => 'center'}, '@',
-      td {-class  => 'tabledata',
-          -align  => 'left'}, $domain,
-      td {-class  => 'tabledata',
-          -align  => 'left'}, $comment,
-      td {-class  => 'tablerightdata',
-          -align  => 'right'}, $hit_count,
+      td {-class  => 'tableleftdata',  -align  => 'center'}, $record->{sequence},
+      td {-class  => 'tabledata',      -align  => 'right'},  $record->{pattern},
+      td {-class  => 'tabledata',      -align  => 'center'}, '@',
+      td {-class  => 'tabledata',      -align  => 'left'},   $record->{domain},
+      td {-class  => 'tabledata',      -align  => 'right'},  $record->{hit_count},
+      td {-class  => 'tabledata',      -align  => 'right'},  $record->{retention},
+      td {-class  => 'tablerightdata', -align  => 'left'},   $record->{comment},
     ];
-  } # foreach
+  } # for
 
   # Now the input line(s)
   if (@selected == 0) {
-    PrintInputLine $nextseq, undef, 'tablebottomleft', 'tablebottomdata',
-                                    'tablebottomright';
+    PrintInputLine($nextseq, undef, 'tablebottomleft', 'tablebottomdata',
+                                    'tablebottomright');
   } else {
-    foreach (@selected) {
+    for (@selected) {
       my $leftclass  = $i == $lines ? 'tablebottomleft'  : 'tableleftdata';
       my $dataclass  = $i == $lines ? 'tablebottomdata'  : 'tabledata';
       my $rightclass = $i == $lines ? 'tablebottomright' : 'tablerightdata';
       $i++;
-      PrintInputLine $nextseq++, $_, $leftclass, $dataclass, $rightclass;
-    } # foreach
+      PrintInputLine($nextseq++, $_, $leftclass, $dataclass, $rightclass);
+    } # for
   } # for
 
   print end_table;
@@ -256,7 +273,7 @@ sub ModifyEntries {
 
   my $Type = ucfirst $type;
 
-  Heading (
+  Heading(
     'getcookie',
     '',
     "Modify $Type List",
@@ -266,7 +283,7 @@ sub ModifyEntries {
     @scripts
   );
 
-  NavigationBar $userid;
+  NavigationBar($userid);
 
   # Redisplay the page but open up the lines that are getting modified
   print start_form {
@@ -276,11 +293,8 @@ sub ModifyEntries {
   };
 
   # Print some hidden fields to pass along
-  print
-    hidden ({-name    => 'type',
-             -default => $type}),
-    hidden ({-name    => 'next',
-             -default => $next});
+  print hidden ({-name    => 'type', -default => $type}),
+        hidden ({-name    => 'next', -default => $next});
 
   print start_table {-align       => 'center',
                      -id          => $table_name,
@@ -293,98 +307,114 @@ sub ModifyEntries {
     th {-class => 'tableheader'},   'Username',
     th {-class => 'tableheader'},   '@',
     th {-class => 'tableheader'},   'Domain',
-    th {-class => 'tableheader'},   'Comments',
-    th {-class => 'tablerightend'}, 'Hit Count',
+    th {-class => 'tableheader'},   'Hit Count',
+    th {-class => 'tableheader'},   'Retention',
+    th {-class => 'tablerightend'}, 'Comments',
   ];
 
-  my @list = ReturnList $type, $next, $lines;
-  my %record;
+  my $list = ReturnList(
+    userid   => $userid,
+    type     => $type,
+    start_at => $next,
+    lines    => $lines,
+  );
+
   my $s = 0;
   my $i = 1;
 
-  foreach (@list) {
-    %record = %{$_};
-
-    my $sequence = $record{sequence};
-    my $leftclass  = ($i eq $lines || $sequence eq $total) ?
+  for my $record (@$list) {
+    my $leftclass  = ($i == @$list || $record->{sequence} eq $total) ?
       'tablebottomleft'  : 'tableleftdata';
-    my $dataclass  = ($i eq $lines || $sequence eq $total) ?
+    my $dataclass  = ($i == @$list || $record->{sequence} eq $total) ?
       'tablebottomdata'  : 'tabledata';
-    my $rightclass = ($i eq $lines || $sequence eq $total) ?
+    my $rightclass = ($i == @$list || $record->{sequence} eq $total) ?
       'tablebottomright' : 'tablerightdata';
 
     $i++;
 
     print start_Tr,
       td {-class  => $leftclass,
-          -align  => 'center'}, $record{sequence};
+          -align  => 'center'}, $record->{sequence};
 
-    if ($record{sequence} eq $selected[$s]) {
+    if ($selected[$s] and $record->{sequence} eq $selected[$s]) {
       $s++;
       # Normalize fields
-      my $pattern   = $record{pattern}   ? $record{pattern}   : '';
-      my $domain    = $record{domain}    ? $record{domain}    : '';
-      my $comment   = $record{comment}   ? $record{comment}   : '';
-      my $hit_count = $record{hit_count} ? $record{hit_count} : '';
+      $record->{pattern}   //= '';
+      $record->{domain}    //= '';
+      $record->{comment}   //= '';
+      $record->{hit_count} //= '';
+      $record->{retention} //= '';
 
       print
-        td {-class      => $dataclass,
-            -align      => 'right'},
-          (textfield {-class     => 'inputfield',
+        td {-class               => $dataclass,
+            -align               => 'right'},
+          (textfield {-class     => 'inputfieldright',
                       -style     => 'width:100%',
                       -align     => 'right',
                       -size      => 25,
                       -maxlength => '255',
-                      -name      => "pattern$sequence",
-                      -value     => $pattern}),
-        td {-class      => $dataclass,
-            -align      => 'center'}, '@',
-        td {-class      => $dataclass},
+                      -name      => "pattern$record->{sequence}",
+                      -value     => $record->{pattern}}),
+        td {-class               => $dataclass,
+            -align               => 'center'}, '@',
+        td {-class               => $dataclass},
           (textfield {-class     => 'inputfield',
                       -style     => 'width:100%',
                       -align     => 'left',
                       -size      => 25,
                       -maxlength => '255',
-                      -name      => "domain$sequence",
-                      -value     => $domain}),
-        td {-class      => $dataclass},
-           (textfield {-class     => 'inputfield',
-                       -style     => 'width:100%',
-                       -align     => 'left',
-                       -size      => 25,
-                       -maxlength => '255',
-                       -name      => "comment$sequence",
-                       -value     => $comment}),
-        td {-class      => $rightclass},
-           (textfield {-class     => 'inputfield',
-                       -style     => 'width:100%',
-                       -align     => 'left',
-                       -size      => 25,
-                       -maxlength => '255',
-                       -name      => "hit_count$sequence",
-                       -value     => $hit_count});
+                      -name      => "domain$record->{sequence}",
+                      -value     => $record->{domain}}),
+        td {-class               => $dataclass},
+          (textfield {-class     => 'inputfieldright',
+                      -style     => 'width:100%',
+                      -align     => 'left',
+                      -size      => 25,
+                      -maxlength => '255',
+                      -name      => "hit_count$record->{sequence}",
+                      -value     => $record->{hit_count}}),
+        td {-class               => $dataclass},
+          (textfield {-class     => 'inputfieldright',
+                      -style     => 'width:100%',
+                      -align     => 'left',
+                      -size      => 25,
+                      -maxlength => '40',
+                      -name      => "retention$record->{sequence}",
+                      -value     => $record->{retention}}),
+        td {-class               => $rightclass},
+          (textfield {-class     => 'inputfield',
+                      -style     => 'width:100%',
+                      -align     => 'left',
+                      -size      => 25,
+                      -maxlength => '255',
+                      -name      => "comment$record->{sequence}",
+                      -value     => $record->{comment}});
     } else {
+      # Normalize fields
       # Put in '&nbsp;' for undefined fields
-      my $pattern   = $record{pattern}   ? $record{pattern}   : '&nbsp;';
-      my $domain    = $record{domain}    ? $record{domain}    : '&nbsp;';
-      my $comment   = $record{comment}   ? $record{comment}   : '&nbsp;';
-      my $hit_count = $record{hit_count} ? $record{hit_count} : '&nbsp;';
+      $record->{pattern}   //= '&nbsp;';
+      $record->{domain}    //= '&nbsp;';
+      $record->{comment}   //= '&nbsp;';
+      $record->{hit_count} //= '&nbsp;';
+      $record->{retention} //= '&nbsp;';
 
       print
         td {-class => $dataclass,
-            -align => 'right'}, $pattern,
+            -align => 'right'}, $record->{pattern},
         td {-class => $dataclass,
             -align => 'center'}, '@',
         td {-class => $dataclass,
-            -align => 'left'}, $domain,
+            -align => 'left'}, $record->{domain},
         td {-class => $dataclass,
-            -align => 'left'}, $comment,
+            -align => 'right'}, $record->{hit_count},
+        td {-class => $dataclass,
+            -align => 'right'}, $record->{retention},
         td {-class => $rightclass,
-            -align => 'left'}, $hit_count;
+            -align => 'left'}, $record->{comment};
     } # if
 
     print end_Tr;
-  } # foreach
+  } # for
 
   print end_table;
   print br,
@@ -402,53 +432,61 @@ sub ModifyEntries {
 } # ModifyEntries
 
 sub WhitelistMarked {
-  AddNewEntry 'white', ReturnSequenceNbrs;
+  AddNewEntry('white', ReturnSequenceNbrs);
+
+  return;
 } # WhitelistMarked
 
 sub BlacklistMarked {
-  AddNewEntry 'black', ReturnSequenceNbrs;
+  AddNewEntry('black', ReturnSequenceNbrs);
+
+  return;
 } # BlacklistMarked
 
 sub NulllistMarked {
-  AddNewEntry 'null', ReturnSequenceNbrs;
+  AddNewEntry('null', ReturnSequenceNbrs);
+
+  return;
 } # NulllistMarked
 
 # Main
 $userid ||= $ENV{USER};
 
-SetContext $userid;
+SetContext($userid);
 
-my %options = GetUserOptions $userid;
+my %options = GetUserOptions($userid);
 
 $lines = $options{'Page'};
 
-$total = MAPSDB::count 'list', "userid = \"$userid\" and type = \"$type\""
-  if $type;
-
-if ($action eq 'Add New Entry') {
-  AddNewEntry $type;
-} elsif ($action eq 'Delete Marked') {
-  DeleteEntries $type;
-} elsif ($action eq 'Modify Marked') {
-  ModifyEntries $type;
-} elsif ($action eq 'Whitelist Marked') {
+$total = CountList(
+  userid => $userid,
+  type   => $type,
+) if $type;
+
+if ($action eq 'Add') {
+  AddNewEntry($type);
+} elsif ($action eq 'Delete') {
+  DeleteEntries($type);
+} elsif ($action eq 'Modify') {
+  ModifyEntries($type);
+} elsif ($action eq 'Whitelist') {
   WhitelistMarked;
-} elsif ($action eq 'Blacklist Marked') {
+} elsif ($action eq 'Blacklist') {
   BlacklistMarked;
-} elsif ($action eq 'Nulllist Marked') {
+} elsif ($action eq 'Nulllist') {
   NulllistMarked;
 } else {
-  Heading (
+  Heading(
     'getcookie',
     '',
     "Unknown action ($action)",
     "Unknown action ($action)"
   );
 
-  NavigationBar $userid;
-  DisplayError "Unknown action encountered ($action)";
+  NavigationBar($userid);
+  DisplayError("Unknown action encountered ($action)");
 } # if
 
-Footing $table_name;
+Footing($table_name);
 
 exit;