#################################################################################
#
# File: $RCSfile: MAPSDB.pm,v $
-# Revision: $Revision: 1.1 $
+# Revision: $Revision: 1.1 $
# Description: MAPS Database routines
# Author: Andrew@DeFaria.com
# Created: Fri Nov 29 14:17:21 2002
while (my @row = $sth->fetchrow_array) {
last if !@row;
- my $hit_count = pop (@row);
- my $sequence = pop (@row);
- my $comment = pop (@row);
- my $domain = pop (@row);
- my $pattern = pop (@row);
+ my $hit_count = pop (@row);
+ my $sequence = pop (@row);
+ my $comment = pop (@row);
+ my $domain = pop (@row);
+ my $pattern = pop (@row);
my $email_on_file;
unless ($domain) {
$email_on_file = $pattern;
} else {
unless ($pattern) {
- $email_on_file = '@' . $domain;
+ $email_on_file = '@' . $domain;
} else {
$email_on_file = $pattern . '@' . $domain;
} # if
while (my @row = $sth->fetchrow_array) {
last if !@row;
- my $hit_count = pop (@row);
- my $sequence = pop (@row);
- my $listtype = pop (@row);
+ my $hit_count = pop (@row);
+ my $sequence = pop (@row);
+ my $listtype = pop (@row);
if ($hit_count == 0) {
$count++;
$statement = "delete from list where userid='$userid' and type='$listtype' and sequence=$sequence";
$DB->do ($statement)
- or DBError 'CleanList: Unable to execute statement', $statement;
+ or DBError 'CleanList: Unable to execute statement', $statement;
} else {
# Age entry: Sometimes entries are initially very popular and
# the $hit_count gets very high quickly. Then the domain is
# $hit_count's too quickly, therefore once their numbers drop to
# < 30 we revert to the old method of subtracting 1.
if ($hit_count < 30) {
- $hit_count--;
+ $hit_count--;
} else {
- $hit_count = $hit_count / 2;
+ $hit_count = $hit_count / 2;
} # if
$statement = "update list set hit_count=$hit_count where userid='$userid' and type='$listtype' and sequence=$sequence;";
$DB->do ($statement)
- or DBError 'CleanList: Unable to execute statement', $statement;
+ or DBError 'CleanList: Unable to execute statement', $statement;
} # if
} # while
sub CountMsg ($) {
my ($sender) = @_;
-
+
return count ('email', "userid = '$userid' and sender like '%$sender%'");
} # CountMsg
my @list;
if (@list = $sth->fetchrow_array) {
- my $last_hit = pop @list;
- my $hit_count = pop @list;
- my $sequence = pop @list;
- my $comment = pop @list;
- my $domain = pop @list;
- my $pattern = pop @list;
- my $type = pop @list;
- my $userid = pop @list;
+ my $last_hit = pop @list;
+ my $hit_count = pop @list;
+ my $sequence = pop @list;
+ my $comment = pop @list;
+ my $domain = pop @list;
+ my $pattern = pop @list;
+ my $type = pop @list;
+ my $userid = pop @list;
return $userid, $type, $pattern, $domain, $comment, $sequence, $hit_count, $last_hit;
} else {
return undef;
my @user;
if (@user = $sth->fetchrow_array) {
- my $password = pop @user;
- my $email = pop @user;
- my $name = pop @user;
- my $userid = pop @user;
+ my $password = pop @user;
+ my $email = pop @user;
+ my $name = pop @user;
+ my $userid = pop @user;
return ($userid, $name, $email, $password);
} else {
return undef;
%useropts = ();
while (@useropts = $sth->fetchrow_array) {
- my $value = pop @useropts;
- my $name = pop @useropts;
+ my $value = pop @useropts;
+ my $name = pop @useropts;
pop @useropts;
$useropts{$name} = $value;
} # while
if ($old_sequence != $sequence) {
my $update_statement = "update list set sequence = $sequence " .
- "where userid = '$userid' and " .
- "type = '$type' and sequence = $old_sequence";
+ "where userid = '$userid' and " .
+ "type = '$type' and sequence = $old_sequence";
$DB->do ($update_statement)
- or DBError 'ResequenceList: Unable to do statement', $statement;
+ or DBError 'ResequenceList: Unable to do statement', $statement;
} # if
$sequence++;
my $date = pop @row;
if ($earliestDate) {
- my $earliestDateShort = substr $earliestDate, 0, 10;
+ my $earliestDateShort = substr $earliestDate, 0, 10;
my $dateShort = substr $date, 0, 10;
if ($earliestDateShort eq $dateShort and
- $earliestDate > $date) {
+ $earliestDate > $date) {
$earliestDate = $date
- if $earliestDateShort eq $dateShort;
+ if $earliestDateShort eq $dateShort;
} # if
} else {
$earliestDate = $date;
push @emails, [$earliestDate, [$sender, @messages]];
} else {
push @emails, [$earliestDate, [$sender, @messages]]
- if @messages > 0;
+ if @messages > 0;
} # unless
} # while
my $statement;
if ($start_at) {
- $statement = "select * from list where userid = '$userid' " .
- "and type = '$type' order by sequence " .
- "limit $start_at, $lines";
+ $statement = "select * from list where userid = '$userid' " .
+ "and type = '$type' order by sequence " .
+ "limit $start_at, $lines";
} else {
- $statement = "select * from list where userid = '$userid' " .
+ $statement = "select * from list where userid = '$userid' " .
"and type = '$type' order by sequence";
} # if
my %list;
- $list {last_hit} = pop @row;
- $list {hit_count} = pop @row;
- $list {sequence} = pop @row;
- $list {comment} = pop @row;
- $list {domain} = pop @row;
- $list {pattern} = pop @row;
- $list {type} = pop @row;
- $list {userid} = pop @row;
+ $list {last_hit} = pop @row;
+ $list {hit_count} = pop @row;
+ $list {sequence} = pop @row;
+ $list {comment} = pop @row;
+ $list {domain} = pop @row;
+ $list {pattern} = pop @row;
+ $list {type} = pop @row;
+ $list {userid} = pop @row;
push @list, \%list;
} # for
sub ReturnListEntry ($$) {
my ($type, $sequence) = @_;
- my $statement = "select * from list where userid = '$userid' " .
+ my $statement = "select * from list where userid = '$userid' " .
"and type = '$type' and sequence = '$sequence'";
my $sth = $DB->prepare ($statement)
return %list;
} # ReturnListEntry
-sub UpdateList ($$$$$$) {
- my ($userid, $type, $pattern, $domain, $comment, $sequence) = @_;
+sub UpdateList ($$$$$$$) {
+ my ($userid, $type, $pattern, $domain, $comment, $hit_count, $sequence) = @_;
if (!$pattern || $pattern eq '') {
$pattern = 'NULL';
} else {
$comment = "'" . quotemeta ($comment) . "'";
} # if
+
+ if (!$hit_count || $hit_count eq '') {
+ $hit_count = 0;
+ #} else {
+ # TODO: Check if numeric
+ } # fi
my $statement =
'update list set ' .
- "pattern = $pattern, domain = $domain, comment = $comment " .
+ "pattern = $pattern, domain = $domain, comment = $comment, hit_count = $hit_count " .
"where userid = '$userid' and type = '$type' and sequence = $sequence";
$DB->do ($statement)
sub Space ($) {
my ($userid) = @_;
- my $total_space = 0;
+ my $total_space = 0;
my %msg_space;
my $statement = "select * from email where userid = '$userid'";
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');
$count += DeleteList $type, $_;
} # foreach
- if ($count eq 0) {
+ if ($count == 0) {
DisplayError 'Nothing to delete!';
} else {
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");
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 = param "hit_count$email_nbr";
} # 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
# 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;
%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
# Now the input line(s)
- if (@selected eq 0) {
+ if (@selected == 0) {
PrintInputLine $nextseq, undef, 'tablebottomleft', 'tablebottomdata',
'tablebottomright';
} else {
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 {
# 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;
$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 ' ' for undefined 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'}, $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;
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 {