#!/usr/bin/perl use strict; use warnings; use utf8; use autodie qw(open close); use DBI; binmode STDOUT, ":utf8"; binmode STDIN, ":utf8"; use Supporters; if (@ARGV < 2) { print STDERR "usage: $0 \n"; exit 1; } my($SUPPORTERS_SQLITE_DB_FILE, $CRITERION, $SEARCH_PARAMETER, $VERBOSE) = @ARGV; $VERBOSE = 0 if not defined $VERBOSE; my $dbh = DBI->connect("dbi:SQLite:dbname=$SUPPORTERS_SQLITE_DB_FILE", "", "", { RaiseError => 1, sqlite_unicode => 1 }) or die $DBI::errstr; my $sp = new Supporters($dbh, ['none']); my $found = 0; my(@supporterIds); die "Can only search on id, ledgerEntityId, emailAddress" unless $CRITERION =~ /^(ledgerEntityId|emailAddress|id)$/; @supporterIds = $sp->findDonor({$CRITERION => $SEARCH_PARAMETER }); my @requestTypes = $sp->getRequestType(); foreach my $id (@supporterIds) { $found = 1; my $rtTicket = $sp->_getDonorField('rt_ticket', $id); $rtTicket = "" if not defined $rtTicket; $rtTicket = "[sfconservancy.org #$rtTicket]" if $rtTicket ne ""; my $preferredEmail = $sp->getPreferredEmailAddress($id); my $preferredPostal = $sp->getPreferredPostalAddress($id); print "Found: BEGIN: $id, ", $sp->getLedgerEntityId($id), "\n"; print " RT: $rtTicket" if $rtTicket ne ""; print " Public Ack: "; if (not defined $sp->getPublicAck($id)) { print "unknown\n"; } elsif ($sp->getPublicAck($id)) { print "yes\n"; print " Display name for public ack: \"", $sp->getDisplayName($id), "\"\n"; } else { print "no\n"; } my(%addr) = $sp->getEmailAddresses($id); print " Email Addresses: "; my $cnt = 0; foreach my $email (keys %addr) { $cnt++; print $email; print "(preferred)" if (defined $preferredEmail) and $email eq $preferredEmail; print ", " unless $cnt == scalar keys %addr; } my(%postalAddresses) = $sp->getPostalAddresses($id); if (scalar keys %postalAddresses <= 0) { print "\n NO POSTAL ADDRESSES.\n"; } else { print "\n Postal Addresses:\n"; foreach my $address (keys %postalAddresses) { print " PREFERRED FOLLOWS:\n" if (defined $preferredPostal) and $address eq $preferredPostal; print " Encountered $postalAddresses{$address}{id} on $postalAddresses{$address}{date_encountered} via $postalAddresses{$address}{name}\n"; foreach my $addrLine (split("\n", $address)) { print " $addrLine\n"; } } } foreach my $requestType (@requestTypes) { my $req = $sp->getRequest({ donorId => $id, requestType => $requestType}); if (defined $req) { print " Request $req->{requestId} of $req->{requestType}"; print "($req->{requestConfiguration})" if defined $req->{requestConfiguration}; print " made on $req->{requestDate}"; if (not defined $req->{fulfillDate}) { print "\n"; } else { print "...\n fulfilled on $req->{fulfillDate}"; print "...\n by: $req->{fulfilledBy}" if defined $req->{fulfilledBy}; print "...\n via: $req->{fulfilledVia}" if defined $req->{fulfilledVia}; } if (not defined $req->{holdDate} ) { print "\n"; } else { print "...\n put on hold on $req->{holdDate} by $req->{holder}"; print "...\n release on: $req->{holdReleaseDate}" if defined $req->{holdReleaseDate}; print "...\n on hold because: $req->{heldBecause}\n" if defined $req->{heldBecause}; } } } print "END: $id, ", $sp->getLedgerEntityId($id); print " RT: $rtTicket" if $rtTicket ne ""; print "\n"; } print "No entries found\n" unless $found; ############################################################################### # # Local variables: # compile-command: "perl -c send-mass-email.plx" # End: