X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=maps%2Flib%2FMAPS.pm;h=153c4bbd5d95221afe46024c1f5e035d3be075cf;hb=c8340526ed9b2d0f13a96015090c921ebad114ea;hp=c2069c1396153fcf0711633821bea90780eba200;hpb=983213261f42cfb514586f4a72f5f06bcf025409;p=clearscm.git diff --git a/maps/lib/MAPS.pm b/maps/lib/MAPS.pm index c2069c1..153c4bb 100644 --- a/maps/lib/MAPS.pm +++ b/maps/lib/MAPS.pm @@ -34,7 +34,7 @@ use base qw(Exporter); our $db; -our $Version = '2.0'; +our $VERSION = '2.0'; # Globals my $userid = $ENV{MAPS_USERNAME} ? $ENV{MAPS_USERNAME} : $ENV{USER}; @@ -57,6 +57,7 @@ our @EXPORT = qw( CountEmail CountList CountLog + CountLogDistinct Decrypt DeleteEmail DeleteList @@ -106,14 +107,14 @@ my $mapsbase = "$FindBin::Bin/.."; sub _cleanTables($$;$) { my ($table, $timestamp, $dryrun) = @_; - my $count = 0; - my $msg = 'Records deleted'; my $condition = "userid = '$userid' and timestamp < '$timestamp'"; if ($dryrun) { return $db->count($table, $condition); } else { - return $db->delete($table, $condition); + my ($count, $msg) = $db->delete($table, $condition); + + return $count; } # if } # _cleanTables @@ -154,6 +155,8 @@ sub OpenDB($$) { $db = MyDB->new($username, $password, $dbname, $dbserver); croak "Unable to instantiate MyDB ($username\@$dbserver:$dbname)" unless $db; + + return; } # OpenDB BEGIN { @@ -223,6 +226,7 @@ sub Add2Whitelist(%) { # Add to white list $params{sequence} = 0; + my ($err, $msg) = AddList(%params); return -$err, $msg if $err; @@ -247,7 +251,7 @@ sub Add2Whitelist(%) { while (my $rec = $db->getnext) { last unless $rec->{userid}; - $status = Whitelist($rec->{sender}, $rec->data); + $status = Whitelist($rec->{sender}, $rec->{data}); last if $status; @@ -291,7 +295,7 @@ sub AddList(%) { $rec{hit_count} //= $db->count( 'email', - "userid = '$rec{userid}' and sender like '$rec{sender}%'" + "userid = '$rec{userid}' and sender like '%$rec{sender}%'" ); ($rec{pattern}, $rec{domain}) = split /\@/, delete $rec{sender}; @@ -344,6 +348,7 @@ sub AddUserOptions(%) { } # for return ($err, $msg) if $err; + return; } # AddUserOptions sub Blacklist(%) { @@ -403,6 +408,8 @@ sub CheckEmail(;$$) { if ($username) { if ($username =~ /(.*)\@(.*)/) { return lc "$1\@$2"; + } else { + return lc "$username\@"; } # if } elsif ($domain) { if ($domain =~ /(.*)\@(.*)/) { @@ -458,7 +465,9 @@ sub CheckOnList ($$;$) { ? "$email_on_file\@" : $email_on_file; if ($sender and $sender =~ /$search_for/i) { - $rule = "Matching rule: ($listtype:$rec->{sequence}) \"$email_on_file\""; + my $comment = $rec->{comment} ? " - $rec->{comment}" : ''; + + $rule = "Matching rule: ($listtype:$rec->{sequence}) \"$email_on_file$comment\""; $rule .= " - $rec->{comment}" if $rec->{comment}; $status = 1; @@ -500,6 +509,7 @@ sub CleanList(%) { my $table = 'list'; my $condition = "userid='$params{userid}' and type='$params{type}'"; my $count = 0; + my $msg; # First let's go through the list to see if we have an domain level entry # (e.g. @spammer.com) and also individual entries (baddude@spammer.com) then @@ -536,11 +546,14 @@ sub CleanList(%) { } # for } # while - my $msg = 'Records deleted'; $condition = "userid='$params{userid}' and type='$params{type}' and retention is not null"; # First see if anything needs to be deleted - return (0, $msg) unless $db->count($table, $condition); + ($count, $msg) = $db->count($table, $condition); + + return 0 unless $count; + + $count = 0; my ($err, $errmsg) = $db->find($table, $condition); @@ -570,9 +583,9 @@ sub CleanList(%) { . "$rec->{pattern}\@$rec->{domain} $dryrunstr"); $params{log}->dbug("last hit = $rec->{last_hit} < agedDate = $agedDate"); } # if - - $count++; } # unless + + $count++; } else { $params{log}->dbug("$rec->{userid}:$params{type}:$rec->{sequence}: nodelete $dryrunstr " . "last hit = $rec->{last_hit} >= agedDate = $agedDate") @@ -583,9 +596,9 @@ sub CleanList(%) { ResequenceList( userid => $params{userid}, type => $params{type}, - ) if $count and !$params{dryrun}; + ) if $count && !$params{dryrun}; - return wantarray ? ($count, $msg) : $count; + return $count; } # CleanList sub CountEmail(%) { @@ -621,7 +634,20 @@ sub CountLog(%) { my $condition = "userid='$userid'"; $condition .= " and $additional_condition" if $additional_condition; - return $db->count_distinct('log', 'sender', $condition); + return $db->count('log', $condition); +} # CountLog + +sub CountLogDistinct(%) { + my (%params) = @_; + + CheckParms(['userid', 'column'], \%params); + + my ($additional_condition) = delete $params{additional} || ''; + + my $condition = "userid='$userid'"; + $condition .= " and $additional_condition" if $additional_condition; + + return $db->count_distinct('log', $params{column}, $condition); } # CountLog sub Decrypt ($$) { @@ -774,11 +800,7 @@ sub GetUser() { sub GetUserInfo($) { my ($userid) = @_; - my $userinfo = $db->getone('user', "userid='$userid'", ['name', 'email']); - return %{$db->getone('user', "userid='$userid'", ['name', 'email'])}; - - return %$userinfo; } # GetUserInfo sub GetUserOptions($) { @@ -1009,7 +1031,7 @@ sub ResequenceList(%) { $db->lock('write', $table); # Get all records for $userid and $type - my $listrecs = $db->get($table, $condition); + my $listrecs = $db->get($table, $condition,'*', 'order by hit_count desc'); # Delete all of the list entries for this $userid and $type my ($count, $msg) = $db->delete($table, $condition); @@ -1269,7 +1291,7 @@ sub SetContext($) { if (UserExists($to_user)) { $userid = $to_user; - return GetUserInfo $userid; + return GetUserOptions $userid; } else { return 0; } # if @@ -1304,11 +1326,11 @@ sub UpdateList(%) { my $table = 'list'; my $condition = "userid = '$rec{userid}' and type = '$rec{type}' and sequence = $rec{sequence}"; - if ($rec{pattern} =~ /\@/ and !$rec{domain}) { + if ($rec{pattern} =~ /\@/ && !$rec{domain}) { ($rec{pattern}, $rec{domain}) = split /\@/, $rec{pattern}; - } elsif (!$rec{pattern} and $rec{domain} =~ /\@/) { + } elsif (!$rec{pattern} && $rec{domain} =~ /\@/) { ($rec{pattern}, $rec{domain}) = split /\@/, $rec{domain}; - } elsif (!$rec{pattern} and !$rec{domain}) { + } elsif (!$rec{pattern} && !$rec{domain}) { return "Must specify either Username or Domain"; } # if