Large MAPS update
[clearscm.git] / maps / bin / processaction.cgi
index d294bc8..c9f0f58 100755 (executable)
@@ -18,7 +18,7 @@ use warnings;
 use FindBin;
 $0 = $FindBin::Script;
 
-use lib $FindBin::Bin;
+use lib "$FindBin::Bin/../lib";
 
 use MAPS;
 use MAPSWeb;
@@ -26,13 +26,13 @@ use MAPSWeb;
 use CGI qw (:standard *table start_Tr end_Tr);
 use CGI::Carp 'fatalsToBrowser';
 
-my $type       = param 'type';
-my $action     = param 'action';
-my $next       = param 'next';
-my $userid     = cookie 'MAPSUser';
+my $type   = param 'type';
+my $action = param 'action';
+my $next   = param 'next';
+my $userid = cookie 'MAPSUser';
 my $lines;
 my $total;
-my $table_name = 'list';
+my $table_name = 'list';
 
 my @scripts = ('ListActions.js');
 
@@ -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
@@ -61,15 +57,15 @@ sub DeleteEntries {
   my $count;
 
   foreach (@sequence_nbrs) {
-    $count += DeleteList $type, $_;
+    $count += DeleteList($type, $_);
   } # foreach
 
-  if ($count eq 0) {
-    DisplayError 'Nothing to delete!';
+  if ($count == 0) {
+    DisplayError('Nothing to delete!');
   } else {
-    ResequenceList $userid, $type;
+    ResequenceList($userid, $type);
 
-    if ($count eq 1) {
+    if ($count == 1) {
       print redirect ("/maps/php/list.php?type=$type&next=$next&message=Deleted entry");
     } else {
       print redirect ("/maps/php/list.php?type=$type&next=$next&message=Deleted $count entries");
@@ -82,58 +78,71 @@ sub DeleteEntries {
 sub PrintInputLine ($$$$$) {
   my ($nextseq, $email_nbr, $leftclass, $dataclass, $rightclass) = @_;
 
-  my $email    = '';
-  my $pattern  = '';
-  my $domain   = '';
+  my $email     = '';
+  my $pattern   = '';
+  my $domain    = '';
+  my $hit_count = 0;
 
   if (defined $email_nbr && $email_nbr ne '') {
     $email = param "email$email_nbr";
     if ($email && $email ne '') {
       ($pattern, $domain) = split /\@/, $email;
     } # if
+
+    $hit_count = CountMsg($email);
   } # if
 
   print Tr [
-    td {-class                 => $leftclass,
-       -align                  => 'center'}, "$nextseq",
-    td {-class                 => $dataclass,
-       -align                  => 'right'},
-      (textfield {-class       => 'inputfield',
-                 -style        => 'width:100%',
-                 -align        => 'right',
-                 -size         => 25,
-                 -maxlength    => '255',
-                 -name         => "pattern$nextseq",
-                 -value        => $pattern}),
-    td {-class                 => $dataclass,
-       -align                  => 'center'}, '@',
-    td {-class                 => $dataclass},
-      (textfield {-class       => 'inputfield',
-                 -style        => 'width:100%',
-                 -align        => 'left',
-                 -size         => 25,
-                 -maxlength    => '255',
-                 -name         => "domain$nextseq",
-                 -value        => $domain}),
-    td {-class                 => $rightclass},
-      (textfield {-class       => 'inputfield',
-                 -style        => 'width:100%',
-                 -align        => 'left',
-                 -size         => 25,
-                 -maxlength    => '255',
-                 -name         => "comment$nextseq",
-                 -value        => ''}),
+    td {-class      => $leftclass,
+        -align      => 'center'}, "$nextseq",
+    td {-class      => $dataclass,
+        -align      => 'right'},
+      (textfield {-class     => 'inputfield',
+                  -style     => 'width:100%',
+                  -align     => 'right',
+                  -size      => 25,
+                  -maxlength => '255',
+                  -name      => "pattern$nextseq",
+                  -value     => $pattern}),
+    td {-class      => $dataclass,
+        -align      => 'center'}, '@',
+    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',
+                  -style     => 'width:100%',
+                  -align     => 'left',
+                  -size      => 25,
+                  -maxlength => '255',
+                  -name      => "comment$nextseq",
+                  -value     => ''}),
+    td {-class      => $rightclass},
+      (textfield {-class     => 'inputfield',
+                  -style     => 'width:100%',
+                  -align     => 'left',
+                  -size      => 25,
+                  -maxlength => '255',
+                  -name      => "hit_count$nextseq",
+                  -value     => $hit_count}),
   ];
+
+  return;
 } # PrintInputLine
 
 sub AddNewEntry {
-  my ($type, @selected)        = @_;
+  my ($type, @selected)  = @_;
 
   # First display the last page and add the appropriate number of
   # 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, $type);
   my $next = ($nextseq - $lines) + $selected - 1;
 
   $next = 0
@@ -141,7 +150,7 @@ sub AddNewEntry {
 
   my $Type = ucfirst $type;
 
-  Heading (
+  Heading(
     'getcookie',
     '',
     "Add to $Type List",
@@ -151,83 +160,89 @@ sub AddNewEntry {
     @scripts
   );
 
-  NavigationBar $userid;
+  NavigationBar($userid);
 
   # Now display table and new entry
   print start_form {
-    -method    => 'post',
-    -action    => 'add2' . $type . 'list.cgi',
-    -name      => 'list'
+    -method => 'post',
+    -action => 'add2' . $type . 'list.cgi',
+    -name   => 'list'
   };
 
-  print start_table {-align            => 'center',
-                    -id                => $table_name,
-                    -border            => 0,
-                    -cellspacing       => 0,
-                    -cellpadding       => 4,
-                    -width             => '100%'};
+  print start_table {-align       => 'center',
+                     -id          => $table_name,
+                     -border      => 0,
+                     -cellspacing => 0,
+                     -cellpadding => 4,
+                     -width       => '100%'};
   print Tr [
-    th {-class => 'tableleftend'},     'Seq',
-    th {-class => 'tableheader'},      'Username',
-    th {-class => 'tableheader'},      '@',
-    th {-class => 'tableheader'},      'Domain',
-    th {-class => 'tablerightend'},    'Comments'
+    th {-class => 'tableleftend'},  'Seq',
+    th {-class => 'tableheader'},   'Username',
+    th {-class => 'tableheader'},   '@',
+    th {-class => 'tableheader'},   'Domain',
+    th {-class => 'tableheader'},   'Comments',
+    th {-class => 'tablerightend'}, 'Hit Count'
   ];
 
-  my @list = ReturnList $type, $next, $lines;
+  my @list = ReturnList($type, $next, $lines);
   my %record;
   my $i = 1;
 
-  foreach (@list) {
+  for (@list) {
     $i++;
 
     %record = %{$_};
 
     # Normalize fields
-    my $sequence = $record{sequence};
-    my $pattern  = $record{pattern} ? $record{pattern} : ' ';
-    my $domain   = $record{domain}  ? $record{domain}  : ' ';
-    my $comment  = $record{comment} ? $record{comment} : ' ';
+    my $sequence  = $record{sequence};
+    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} : ' ';
 
     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       => 'tablerightdata',
-         -align        => 'left'}, $comment
+      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,
     ];
-  } # foreach
+  } # for
 
   # Now the input line(s)
-  if (@selected eq 0) {
-    PrintInputLine $nextseq, undef, 'tablebottomleft', 'tablebottomdata',
-                                    'tablebottomright';
+  if (@selected == 0) {
+    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;
   print br,
     '<center>',
-      submit ({-name   => 'update',
-              -value   => 'Update',
-              -onClick => 'return CheckEntry (document.list);'}),
-      submit ({-name   => 'Reset',
-              -value   => 'Reset',
-              -onClick => 'history.back(); return false'}),
+      submit ({-name    => 'update',
+               -value   => 'Update',
+               -onClick => 'return CheckEntry (document.list);'}),
+      submit ({-name    => 'Reset',
+               -value   => 'Reset',
+               -onClick => 'history.back(); return false'}),
     '</center>';
   print end_form;
+
+  return;
 } # AddNewEntry
 
 sub ModifyEntries {
@@ -237,7 +252,7 @@ sub ModifyEntries {
 
   my $Type = ucfirst $type;
 
-  Heading (
+  Heading(
     'getcookie',
     '',
     "Modify $Type List",
@@ -247,156 +262,176 @@ sub ModifyEntries {
     @scripts
   );
 
-  NavigationBar $userid;
+  NavigationBar($userid);
 
   # Redisplay the page but open up the lines that are getting modified
   print start_form {
-    -method    => 'post',
-    -action    => 'modifyentries.cgi',
-    -name      => 'list'
+    -method  => 'post',
+    -action  => 'modifyentries.cgi',
+    -name    => 'list'
   };
 
   # Print some hidden fields to pass along
   print
-    hidden ({-name     => 'type',
-            -default   => $type}),
-    hidden ({-name     => 'next',
-            -default   => $next});
-
-  print start_table {-align            => 'center',
-                    -id                => $table_name,
-                    -border            => 0,
-                    -cellspacing       => 0,
-                    -cellpadding       => 4,
-                    -width             => '100%'};
+    hidden ({-name    => 'type',
+             -default => $type}),
+    hidden ({-name    => 'next',
+             -default => $next});
+
+  print start_table {-align       => 'center',
+                     -id          => $table_name,
+                     -border      => 0,
+                     -cellspacing => 0,
+                     -cellpadding => 4,
+                     -width       => '100%'};
   print Tr [
-    th {-class => 'tableleftend'},     'Seq',
-    th {-class => 'tableheader'},      'Username',
-    th {-class => 'tableheader'},      '@',
-    th {-class => 'tableheader'},      'Domain',
-    th {-class => 'tablerightend'},    'Comments'
+    th {-class => 'tableleftend'},  'Seq',
+    th {-class => 'tableheader'},   'Username',
+    th {-class => 'tableheader'},   '@',
+    th {-class => 'tableheader'},   'Domain',
+    th {-class => 'tableheader'},   'Comments',
+    th {-class => 'tablerightend'}, 'Hit Count',
   ];
 
-  my @list = ReturnList $type, $next, $lines;
+  # Corner case: If on the first page (i.e. $next=0) then being zero based, we
+  # will actually get 21 entries in @list (i.e. $next=0, $lines=20 - 21 $entries
+  # are retrieved). So in that case, and that case only, we will change $lines
+  # to $lines - 1.
+  --$lines if $next == 0;
+
+  my @list = ReturnList($type, $next, $lines);
   my %record;
   my $s = 0;
   my $i = 1;
 
-  foreach (@list) {
+  for (@list) {
     %record = %{$_};
 
     my $sequence = $record{sequence};
-    my $leftclass  = ($i eq $lines || $sequence eq $total) ?
+    my $leftclass  = ($i == @list || $sequence eq $total) ?
       'tablebottomleft'  : 'tableleftdata';
-    my $dataclass  = ($i eq $lines || $sequence eq $total) ?
+    my $dataclass  = ($i == @list || $sequence eq $total) ?
       'tablebottomdata'  : 'tabledata';
-    my $rightclass = ($i eq $lines || $sequence eq $total) ?
+    my $rightclass = ($i == @list || $sequence eq $total) ?
       'tablebottomright' : 'tablerightdata';
 
     $i++;
 
     print start_Tr,
-      td {-class       => $leftclass,
-         -align        => 'center'}, $record{sequence};
+      td {-class  => $leftclass,
+          -align  => 'center'}, $record{sequence};
 
     if ($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 $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} : '';
 
       print
-        td {-class                     => $dataclass,
-           -align                      => 'right'},
-          (textfield {-class           => 'inputfield',
-                     -style            => 'width:100%',
-                     -align            => 'right',
-                     -size             => 25,
-                     -maxlength        => '255',
-                     -name             => "pattern$sequence",
-                     -value            => $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                     => $rightclass},
-           (textfield {-class          => 'inputfield',
-                      -style           => 'width:100%',
-                      -align           => 'left',
-                      -size            => 25,
-                      -maxlength       => '255',
-                      -name            => "comment$sequence",
-                      -value           => $comment});
+        td {-class               => $dataclass,
+            -align               => 'right'},
+          (textfield {-class     => 'inputfield',
+                      -style     => 'width:100%',
+                      -align     => 'right',
+                      -size      => 25,
+                      -maxlength => '255',
+                      -name      => "pattern$sequence",
+                      -value     => $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});
     } else {
       # 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 $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;';
 
       print
         td {-class => $dataclass,
-           -align => 'right'}, $pattern,
+            -align => 'right'}, $pattern,
+        td {-class => $dataclass,
+            -align => 'center'}, '@',
         td {-class => $dataclass,
-           -align => 'center'}, '@',
+            -align => 'left'}, $domain,
         td {-class => $dataclass,
-           -align => 'left'}, $domain,
+            -align => 'left'}, $comment,
         td {-class => $rightclass,
-           -align => 'left'}, $comment;
+            -align => 'left'}, $hit_count;
     } # if
 
     print end_Tr;
-  } # foreach
+  } # for
 
   print end_table;
   print br,
     '<center>',
-      submit ({-name   => 'update',
-              -value   => 'Update',
-              -onClick => 'return CheckEntry (document.list);'}),
-      submit ({-name   => 'Reset',
-              -value   => 'Reset',
-              -onClick => 'history.back(); return false'}),
+      submit ({-name    => 'update',
+               -value   => 'Update',
+               -onClick => 'return CheckEntry (document.list);'}),
+      submit ({-name    => 'Reset',
+               -value   => 'Reset',
+               -onClick => 'history.back(); return false'}),
     '</center>';
   print end_form;
+
+  return;
 } # ModifyEntries
 
 sub WhitelistMarked {
-  AddNewEntry 'white', ReturnSequenceNbrs;
+  AddNewEntry('white', ReturnSequenceNbrs);
 } # WhitelistMarked
 
 sub BlacklistMarked {
-  AddNewEntry 'black', ReturnSequenceNbrs;
+  AddNewEntry('black', ReturnSequenceNbrs);
 } # BlacklistMarked
 
 sub NulllistMarked {
-  AddNewEntry 'null', ReturnSequenceNbrs;
+  AddNewEntry('null', ReturnSequenceNbrs);
 } # 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;
+$total = count('list', "userid = \"$userid\" and type = \"$type\"") if $type;
 
 if ($action eq 'Add New Entry') {
-  AddNewEntry $type;
+  AddNewEntry($type);
 } elsif ($action eq 'Delete Marked') {
-  DeleteEntries $type;
+  DeleteEntries($type);
 } elsif ($action eq 'Modify Marked') {
-  ModifyEntries $type;
+  ModifyEntries($type);
 } elsif ($action eq 'Whitelist Marked') {
   WhitelistMarked;
 } elsif ($action eq 'Blacklist Marked') {
@@ -404,17 +439,17 @@ if ($action eq 'Add New Entry') {
 } elsif ($action eq 'Nulllist Marked') {
   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;