#!/usr/bin/perl
##############################################
#
# EveryAuction
# von Matt Hahnfeld, EverySoft
#
# Ins Deutsche übersetzt von Dan Sepeur
# URL: http://www.tag4tag.com
# Mail: dan@tentacle.de
#
# Die erste FreewareAuktion von den Machern
# von EveryChat(tm).
#
# Version 1.01 (5/10/98)
#
# Sie dürfen dieses Script für persönliche
# Zwecke und den Einsatz in Firmen, aber nicht
# für den Verkauf ohne die schriftliche Genehmigung
# des Autors verändern und modifizieren.
# Weiterhin übernimmt der Autor keine Garantie
# für die beim Einsatz dieses Scriptes entstandenen
# Schaden an Hard und Software.
#
# DER WIEDERVERKAUF IN JEGLICHER FORM IST STRIKT
# VERBOTEN!
#
# (c) 1998 EverySoft
#
# http://www.everysoft.com/auction/
#
##############################################
##############################################
# Der Input-String hat folgende Form:
# auction.cgi?[category]&[number]&[r|n|u|c|v]
#
# Wenn dieser nicht gegeben ist, zeigt das
# Script beim Aufruf eine Übersicht der
# Kategorien.
#
# Wenn ein Kategorieverzeichnis angegeben ist
# zeigt das Script die Einträge in dieser
# Kategorie.
#
# Wenn das Kategorieverzeichnis und die
# Eintragsnnummer angegeben wird, zeigt
# das Script den Eintrag.
#
# Wenn das Kategorieverzeichnis, die
# Eintragsnummer und der Buchstabe "r"
# angegeben wird, dann wird der Eintrag
# aus der Datenbank gelöscht.
#
# Wenn das Kategorieverzeichnis, die
# Eintragsnummer und der Buchstabe "n"
# angegeben wird, dann wird ein neuer Eintrag
# generiert. Die Eintragsnummer wird dann
# ignoriert.
#
# Wenn das Kategorieverzeichnis, die
# Eintragsnummer und der Buchstabe "u"
# angegeben wird, kann man einen neuen
# User registrieren. Die Eintragsnummer
# wird auch in diesem Falle ignoriert.
#
# Wenn das Kategorieverzeichnis, die
# Eintragsnummer und der Buchstabe "c"
# angegeben wird, dann kann der User seine
# Registrierdaten ändern. Hierbei wird
# wiederum die Eintragsnummer ignoriert.
#
# Wenn das Kategorieverzeichnis, die
# Eintragsnummer und der Buchstabe "v"
# angegeben wird, dann kann der User
# seinen persönlichen Status einsehen.
# Dieser zeigt ihm, an welchen Auktionen
# er aktiv teilgenommen hat und was er
# schon alles ersteigert hat. Die
# Eintragnsummer wird auch hier ignoriert.
#
#
##############################################
# Konfigurationssektion
# Editieren Sie diese Variablen
# Das Basisverzeichnis. Wir brauchen den
# absoluten Pfad für das Basisverzeichnis.
# Achten Sie auf den abschliessenden Slash (/).
# ER MUSS GESETZT SEIN, SONST LÄUFT DIE
# AUKTION NICHT!
$basepath = '/home/www/doc/gemaelde_boersede//auktion/index.html';
# Verzeichnis für geschlossene Auktionen
# Hier werden die Informationen über abgelaufene
# Auktionen gespeichert. Wenn Sie diese Infos
# nicht speichern wollen, so lassen Sie die
# Variable einfach frei. Dies würde Ihnen ein
# wenig Speicherplatz sparen ('').
# Ansonsten müssen Sie es anlegen.
$closedir = 'closed';
# Userregistrierungsverzeichnis.
# In diesem Verzeichnis werden die Userregistrierungen
# gespeichert. Wenn Sie nicht möchten, daß eine
# Registrierung erforderlich ist, lassen Sie die
# Variable einfach frei. Dies spart Ihnen ein wenig
# Speicherplatz. Ansonsten muss das Verzeichnis
# angelegt werden.
$regdir = 'reg';
# Listen Sie hier die Verzeichnisse und die
# damit verbundenen Kategorienamen.
# Die Verzeichnisse müssen Unterverzeichnisse
# Ihres Basisverzeichnisses sein.
%category = (
g_zeitg => 'Modern & Contemporary Art',
g_20_jh => 'Paintings of the 20th Century',
g_19_jh => 'Paintings of the 19th Century',
g_17_jh => 'Old Master Paintings',
h_aqua => 'Watercolor, Works on Paper',
m_print => 'Engravings, Prints',
p_cont => 'Contemporary Art Photography',
p_hist => 'Historical Art Photography',
v_antique => 'Antique Sculptures',
v_varia => 'Contemporary Sculptures',
w_erotic => 'Erotic Art',
);
# Dies ist das Kennwort um Auktionen zu löschen.
# Lassen Sie diesen Eintrag frei um jedem die
# Möglichkeit zu geben, Einträge zu löschen.
$adminpass = 'w7wolf';
# Hier wird es etwas schwieriger.
# Der Autor schreibt, man solle hier die
# IP-ADRESSE des Mailservers angeben, den
# man zum versenden der Mails an den Bieter
# oder den Verkäufer benutzen möchte. Da wir
# aber alle mehr oder weniger Sendmail einsetzen
# habe ich (Dan Sepeur) diese Angabe so umgestellt,
# dass man nur noch den Pfad zu Sendmail angeben
# muss. Es wurde weiter unterhalb auch eine
# entsprechende Routine eingebunden. Also:
# Bitte Pfad zu Sendmail angeben.
$mailserver = "sendmail";
# Diese Zeile gibt die URL zu Ihrem Server
# wieder. Sie wird benutzt zum senden von
# eMails mit der "Überboten-Nachricht".
# Das Script erkennt das Ende der URL
# automatisch. Man braucht keinen abschliessenden
# Slash (/) zu setzen. Wenn Sie keine
# "Sie sind überboten worden" - eMail senden
# wollen, dann lassen Sie dieses Feld bitte leer.
$scripturl = "www.gemaelde-boerse.de";
# Hier können Sie die Farben für die Tabellen
# und mehr angeben, die generiert werden sollen.
# Die voreingestellte Kombination macht schon
# einen sehr professionellen Eindruck.
# Werte müssen im HEX-Format angegeben sein.
$colorbg = '#000000';
$colortext = '#000000';
$colorlink = '#FFCC00';
$colorvlink = '#FFCC00';
$coloralink = '#FF0000';
$colortablehead = '#FFCC00';
$colortablebody = '#666666';
# Der Seitenname (Wird in den Kopf jeder Seite gestellt)
$sitename = 'Fine Art Stock Market - Fine Art Auctions';
# Hier kann festgelegt werden, ob die Auktion
# eine bestimmte Zeit nach dem Höchstgebot geschlossen
# werden soll oder ob sie regulär, auch wenn das
# Höchstgebot schon eingegangen ist, den vordefinierten
# Zeitraum ablaufen soll.
# Die Angabe steht für Minuten.
# Setzen Sie eine 0, so wird die Auktion ganz
# normal ablaufen, setzen Sie eine 5, dann wird
# die Auktion 5 Minuten nach dem Eingang des
# Höchstgebotes geschlossen.
$aftermin = 0;
# File locking aktivieren? 1 (ja)
# für die meisten Systeme aber setzen Sie es auf
# 0 (nein) wenn Sie Flock-Fehler oder Script-
# Zusammenbrüche reportiert haben möchten.
$flock = 1;
# Darf der User posten? 1=ja 0=nein
$newokay = 1;
##############################################
# HAUPTPROGRAMM
# AB HIER BRAUCHEN SIE NICHTS MEHR ZU VERÄNDERN
##############################################
# Den Seitenheader ausgeben
#
print "Content-type: text/html\n\n";
print <<"EOF";
Fine Art Stock Market - Fine Art Auctions
EOF
print "";
# Advertising Banners
# 
|
print <<"EOF";
EOF
#print "";
#print " [Register] ";
#print " [Post Item] " if ($newokay);
#print " [Categories] ";
#print " [All Items] ";
#print " [Change Registration] " if ($regdir);
#print " [Forgot Password] ";
#print " [Closed Auctions] | " if ($regdir) && ($closedir);
#print " | \n";
# print <<"EOF";
print "";
print "";
print " | | ";
#
##############################################
&get_form_data; # parse arguments from post
@ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'});
$ARGV[0] =~ s/\W//g;
#$ARGV[1] =~ s/\D//g;
if ($form{'action'} eq 'bid') { &procbid; }
elsif ($form{'action'} eq 'new') { &procnew; }
elsif ($form{'action'} eq 'reg') { &procreg; }
elsif ($form{'action'} eq 'creg') { &proccreg; }
elsif ($form{'action'} eq 'citm') { &changeitem; }
elsif ($form{'action'} eq 'repost') { &newitem; }
elsif ($form{'action'} eq 'closeditems1') { &viewclosed1; }
elsif ($form{'action'} eq 'closeditems2') { &viewclosed2; }
elsif ($form{'searchstring'}) { &procsearch; }
###########
elsif ($ARGV[0] eq $adminpass) { &admin; }
elsif (($ARGV[0] eq 'admin_auct_edit') && ($ARGV[2] eq $adminpass)) { &admin_auct_edit; }
elsif (($ARGV[0] eq 'admin_auct_rem') && ($ARGV[2] eq $adminpass)) { &admin_auct_rem; }
elsif (($ARGV[0] eq 'admin_user_edit') && ($ARGV[2] eq $adminpass)) { &admin_user_edit; }
elsif (($ARGV[0] eq 'admin_user_proc') && ($ARGV[2] eq $adminpass)) { &admin_user_proc; }
elsif (($ARGV[0] eq 'admin_user_rem') && ($ARGV[2] eq $adminpass)) { &admin_user_rem; }
elsif (($ARGV[0] eq 'moveuser') && ($ARGV[2] eq $adminpass)) { print "ERROR MOVING FILE" unless &movefile("$basepath$regdir/$ARGV[3]", "$basepath$oldreg/$ARGV[3]"); }
# # MailTo Add-on ##############################
elsif ($form{'action'} eq 'mailto') { &mailtosend; }
elsif ($ARGV[0] eq 'mailto') { &mailto; }
# # End Add-on #################################
elsif ($form{'action'} eq 'password1') { &password2; }
elsif ($ARGV[2] eq 'password') { &password; }
elsif ($ARGV[0] eq 'allnp') { &allcategorynp; }
elsif ($ARGV[0] eq 'all') { &allcategory; }
elsif ($ARGV[0] eq 'close') { &autoclose; }
elsif ($ARGV[2] eq 'u') { &newreg; }
elsif ($ARGV[2] eq 'c') { &changereg; }
elsif ($ARGV[2] eq 'v') { &viewclosed; }
elsif ($ARGV[2] eq 'n') { &newitem; }
elsif (($regdir ne "") && ($ARGV[0] eq $regdir)) { &dispmain; } # be sure nobody is trying to hack the user dir
elsif (!(($ARGV[0]) && (-d "$basepath$ARGV[0]"))) { &dispmain; }
elsif ($ARGV[2] eq 'r') { &remitem; }
elsif ($ARGV[2] eq 'e') { &editem; }
elsif (!(($ARGV[1]) && (-f "$basepath$ARGV[0]/$ARGV[1].dat"))) { &displist; }
else { &dispitem; }
##############################################
# Seitenfuss ausgeben
#
print <<"EOF";
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
| | |
EOF
#
##############################################
##############################################
# Sub: Anzeigen der Kategorieliste
#
sub dispcat {
print "\n";
foreach $key (sort keys %category) {
opendir THEDIR, "$basepath$key" || die "Unable to open directory: $!";
@allfiles = grep -T, map "$basepath$key/$_", readdir THEDIR;
closedir THEDIR;
$numfiles = @allfiles;
umask(000); # UNIX file permission junk
mkdir("$basepath$key", 0777) unless (-d "$basepath$key");
print "$category{$key} ($numfiles)
";
}
print "
\n";
}
##############################################
##############################################
# Sub: Anzeigen der Hauptseite
#
sub dispmain {
print <<"EOF";
The Fine Art Stock Market Auction is an online auction selling high quality Fine Art like Paintings, Fine Art Photography, Sculptures and Fine Art Prints.

E.H. Compton
South Bavarian Countryside with Farmhouse
EOF
}
##############################################
# Sub: Anzeigen der Liste von Einträgen
#
sub displist {
print "";
print "$category{$ARGV[0]} |
";
print "\n";
print "Item | Picture | Closing | Num Bids | High Bid |
\n";
opendir THEDIR, "$basepath$ARGV[0]" || die "Unable to open directory: $!";
@allfiles = readdir THEDIR;
closedir THEDIR;
foreach $file (sort { int($a) <=> int($b) } @allfiles) {
if (-T "$basepath$ARGV[0]/$file") {
open THEFILE, "$basepath$ARGV[0]/$file";
($title, $reserve, $inc, $desc, $image, @bids) = ;
close THEFILE;
chomp($title, $reserve, $inc, $desc, $image, @bids);
@lastbid = split(/\[\]/,$bids[$#bids]);
$file =~ s/\.dat//;
@closetime = localtime($file);
$closetime[4]++;
$camera="(none)";
# $camera = " [Mit Bild]" if (/gemaelde_boerse_cgi/image/index.jpg);
$camera = "
" if (/gemaelde_boerse_cgi/image/index.jpg);
print "$title | $camera | $closetime[4]/$closetime[3] | $#bids | US\$ $lastbid[2] |
\n";
}
}
print "
\n";
}
##############################################
# Sub: Eintrag anzeigen
# Hier wird die Kartei für einen einzelnen
# Eintrag angezeigt und alle seine Statistiken.
sub dispitem {
open THEFILE, "$basepath$ARGV[0]/$ARGV[1].dat";
($title, $reserve, $inc, $desc, $image, @bids) = ;
close THEFILE;
chomp($title, $reserve, $inc, $desc, $image, @bids);
@firstbid = split(/\[\]/,$bids[0]);
@lastbid = split(/\[\]/,$bids[$#bids]);
$nowtime = localtime(time);
$closetime = localtime($ARGV[1]);
$image = " | " if (/gemaelde_boerse_cgi/image/index.jpg);
print "";
$reservemet = "";
$reservemet = "(reserve price not yet met)" if ($lastbid[2] < $reserve);
$reservemet = "(reserve price met)" if (($lastbid[2] >= $reserve) && ($reserve > 0));
print "\n";
print "";
print "$desc";
print "";
print "START: ";
foreach $bid (@bids) {
@thebid = split(/\[\]/,$bid);
$bidtime = localtime($thebid[3]);
print "$thebid[0] \($bidtime\) - US\$ $thebid[2]
";
}
if ((time > $ARGV[1]) && (time > (60 * $aftermin + $thebid[3]))) {
print "BIDDING IS NOW CLOSED
";
&closeit;
}
else {
&placebid;
}
}
##############################################
# Sub: Setzen eines Gebots
#
sub placebid {
$lowbid = &parsebid($lastbid[2] + $inc);
print <<"EOF";