CPAN-Testers-Data-Addresses
view release on metacpan or search on metacpan
lib/CPAN/Testers/Data/Addresses.pm view on Meta::CPAN
my %defaults = (
'address' => 'data/addresses.txt',
'mailrc' => 'data/01mailrc.txt',
'lastfile' => 'data/_lastid',
'month' => 199000,
'match' => 0,
'logclean' => 0
);
#----------------------------------------------------------------------------
# The Application Programming Interface
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
$self->_init_options(@_);
return $self;
}
sub DESTROY {
my $self = shift;
$self->{fh}->close if($self->{fh});
}
__PACKAGE__->mk_accessors(qw( lastfile logfile logclean dbh ));
sub process {
my $self = shift;
if($self->{options}{update}) {
$self->update();
} elsif($self->{options}{reindex}) {
$self->reindex();
} elsif($self->{options}{backup}) {
$self->backup();
} elsif($self->{options}{clean}) {
$self->clean();
} else {
$self->search();
}
}
sub search {
my $self = shift;
$self->_log("starting search");
$self->load_addresses();
$self->match_addresses();
$self->print_addresses();
$self->_log("stopping search");
}
sub update {
my $self = shift;
my ($new,$all,$add,$err) = (0,0,0,0);
$self->_log("starting update");
my $fh = IO::File->new($self->{options}{update}) or die "Cannot open mailrc file [$self->{options}{update}]: $!";
while(<$fh>) {
s/\s+$//;
next unless($_);
my ($reportid,$guid,$fulldate,$addressid,$testerid,$address,$name,$pause,$display,$match) = split(',');
unless($address && ($name || $display)) {
$self->_log("... bogus line: $_");
$err++;
next;
}
$addressid ||= 0;
$testerid ||= 0;
$name ||= $display;
$pause ||= '';
$all++;
if($testerid == 0) {
my @rows;
@rows = $self->dbh->get_query('hash',$phrasebook{'GetTesterByPause'},$pause) if($pause);
@rows = $self->dbh->get_query('hash',$phrasebook{'GetTesterByName'},$name) unless(@rows);
if(@rows) {
$testerid = $rows[0]->{testerid};
} else {
$testerid = $self->dbh->id_query($phrasebook{'InsertTester'},$name,$pause);
$new++;
}
}
if($addressid == 0) {
my @rows = $self->dbh->get_query('hash',$phrasebook{'GetAddressByText'},$address);
if(@rows) {
$addressid = $rows[0]->{addressid};
} else {
$addressid = $self->dbh->id_query($phrasebook{'InsertAddress'},$testerid,$address,_extract_email($address));
$add++;
}
}
$self->dbh->do_query($phrasebook{'LinkAddress'},$testerid,$addressid);
$self->_log("... profile => address: ($testerid,$name,$pause) => ($addressid,$address)");
next unless($reportid && $guid && $fulldate);
$self->dbh->do_query($phrasebook{'UpdateAddressIndex'},$reportid,$guid,$addressid,$fulldate);
}
$self->_printout("$all addresses mapped");
$self->_printout("$new new testers");
$self->_printout("$add addresses added");
$self->_printout("$err bogus lines");
$self->_log("$all addresses mapped, $new new addresses");
$self->_log("stopping update");
}
( run in 1.317 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )