#!/usr/bin/perl @people_fields = ("lastname", "firstname", "email", "title", "company", "addr", "addr2", "city", "state", "country", "postal", "phone", "fax", "type", "source", "interests", "newsletter"); @democd_fields = ("email", "fullfilled", "fullfilldate"); @questionaire_fields = ("email", "industry", "budget", "mediatype", "howusing", "timeline", "current", "deploying", "augment"); use DBI; $database="maillist"; $hostname="localhost"; $user="guest"; $password="guest"; $options=""; $tab = "\t"; if($query = $ENV{QUERY_STRING}) { $driver = "mysql"; $dsn = "DBI:$driver:database=$database;$options"; $dbh = DBI->connect($dsn, $user, $password) || die "Can't connect"; @form = &parseform($ENV{QUERY_STRING}); @showfields=(); $show_democd=0; $show_questionaire=0; @filters=(); @orderfields=(); $csv=0; $tsv=0; while(@form) { my $key = shift @form; my $value = shift @form; if($key eq "show") { @showfields=(@showfields, $value) if $value; } elsif($key eq "democd") { $show_democd=1; } elsif($key eq "questionaire") { $show_questionaire=1; } elsif($key eq "order") { @orderfields=(@orderfields, $value) if $value; } elsif($key eq "format") { $csv=1 if ($value eq "CSV"); $tsv=1 if ($value eq "TSV"); } elsif($key eq "filter") { if($value) { $field=$value; shift @form; my $type = shift @form; shift @form; my $value = shift @form; if($type !~ m|NULL|) { $value = "\"$value\"" unless $value =~ m|^\".*\"$|; @filters = (@filters, "$field $type $value"); } else { @filters = (@filters, "$field $type"); } } else { shift @form; shift @form; shift @form; shift @form; } } } $sql = "SELECT " . join(",",@showfields) . " FROM people" . (@filters ? (" WHERE " . join(" AND ", @filters)) : "") . (@orderfields ? (" ORDER BY " . join(",", @orderfields)) : "") . ";"; $lensql = "SELECT MAX(CHAR_LENGTH(" . join(")),MAX(CHAR_LENGTH(",@showfields) . ")) FROM people" . (@filters ? (" WHERE " . join(" AND ", @filters)) : "") . ";"; print "Content-type: text/plain\n\n"; $people = $dbh->prepare($sql); $people->execute; if(!$csv && !$tsv) { my($lens,$len); $lens = $dbh->prepare($lensql); $lens->execute; @lens = $lens->fetchrow_array(); $lens->finish; if($show_democd) { @lens = (@lens, 7, 10, 12); } if($show_questionaire) { for($i=0; $i<@questionaire_fields; $i++) { @lens=(@lens, 24); } } } $numRows = $people->rows; my $names = $people->{'NAME'}; my $numFields = $people->{'NUM_OF_FIELDS'}; @fields=(); for (my $i = 0; $i < $numFields; $i++) { @fields = (@fields, $$names[$i]); $lens[$i] = length($fields[$i]) if(length($fields[$i]) > $lens[$i]); } @allfields=@fields; if($show_democd) { @allfields = (@allfields, "ordered", @democd_fields[1..$#democd_fields]); } if($show_questionaire) { @allfields = (@allfields, @questionaire_fields[1..$#questionaire_fields]); } $numFields = @allfields; if($csv) { print "\"", join('","', @allfields), "\"\n"; } elsif($tsv) { print "\"", join("\"$tab\"", @allfields), "\"\n"; } else { my($line)=""; for($i=0; $i<$numFields; $i++) { $line .= " | " if $line; $line .= sprintf("%-".$lens[$i].".".$lens[$i]."s", "".$allfields[$i]); } print "$line\n"; } $num=0; $democd=$dbh->prepare("SELECT ".join(",",@democd_fields[1..$#democd_fields])." FROM democd WHERE email=?;"); $questionaire=$dbh->prepare("SELECT ".join(",",@questionaire_fields[1..$#questionaire_fields])." FROM questionaire WHERE email=?;"); $QNA=$dbh->prepare("SELECT answer from QandA WHERE question=? AND answernum=?;"); while($ref=$people->fetchrow_hashref()) { $num++; my(%h) = %$ref; my(@v) = &mapfield($ref, @fields); if($show_democd) { $democd->execute($h{email}); if($democd->rows>0) { my(@vv) = $democd->fetchrow_array(); @v = (@v, "yes",@vv); } else { @v = (@v, "no"); for($i=1; $i<@democd_fields; $i++) { @v = (@v, ""); } } } if($show_questionaire) { $questionaire->execute($h{email}); if($questionaire->rows>0) { my(@vv) = $questionaire->fetchrow_array(); for($i=1; $i<@questionaire_fields; $i++) { $QNA->execute($questionaire_fields[$i], @vv[$i-1]); my(@vvv) = $QNA->fetchrow_array(); @v = (@v, @vvv[0]); } } else { for($i=1; $i<@questionaire_fields; $i++) { @v = (@v, ""); } } } if($csv) { print "\"", join('","', @v), "\"\n"; } elsif($tsv) { print "\"", join("\"$tab\"", @v), "\"\n"; } else { my($line)=""; for($i=0; $i<$numFields; $i++) { $line .= " | " if $line; $line .= sprintf("%-".$lens[$i].".".$lens[$i]."s", "".$v[$i]); } print "$line\n"; } } $people->finish; } else { print "Content-type: text/html\n\n"; print << "EOF";