#!/perl/bin
################################################################################################################
# MODULE: g1.pl
# AUTHOR: ULRICH WISSER, AM ROEMERKASTELL 22, D-53111 BONN, GERMANY
# DATE:   06-JUL-1996
#
# COPYRIGHT 1996 BY ULRICH WISSER
# ALL RIGHTS RESERVED
# USAGE ONLY WITH WRITTEN PERMISSION OF AUTHOR
#
# AUTOR: ULRICH WISSER, AM ROEMERKASTELL 22, D-53111 BONN
# ALLE URHEBERRECHTE VORBEHALTEN. BENUTZUNG NUR MIT SCHRIFTLICHEM EINVERSTAENDNISS DES AUTORS.
################################################################################################################
#
# BESCHREIBUNG: ANLEITUNG: Dieser Script prueft ob schon Eintraege in die FORM gemacht wurden, die Seite also schon einmal
#               aufgerufen war. Wenn nicht, wird einfach eine leere FORM angezeigt. Andernfalls wird der Eintrag
#               ueberprueft und abhaengig davon ob der Benutzer Testen oder Abschicken gewaehlt hat wird entweder
#               die FORM nochmal angezeigt mit vorstehendem Testeintrag oder es wird ein die Datei $file geschrieben.
#               Das Gaestebuch muss dann nur diese Datei mit <!--#include file=$file--> mit ausgeben.
#
# INSTALLATION: gaeste2.shtml     ist eine Beispieldatei fuer das Gaestebuch. 
#               briefe.html       ist die Datei mit den Eintraegen des Gaestebuches, sie muss im gleichen Verzeichniss
#                                 wie gaeste2.html liegen. Diese Datei muss schreibbar sein, insbesondere fuer den Server,
#                                 mit dessen ID das Scipt laeuft.
#               g1.pl             dieses Script, einfach in das cgi-bin Verzeichnis.
#
#               Dieses Script muss dann an mehreren Stellen angepaßt werden:
#               a. Wie leider unter UNIX notwendig muss in der ersten Zeile der richtige Pfad zum Perl-Interpreter 
#                  eingetragen werden.
#               b. Die Variable $file muss auf den absoluten Pfad zu briefe.html zeigen.
#               c. In $uri sollte der Unified Resource Locator des aufrufenden Dokuments enthalten sein. Also wenn
#                  g1.pl zum ersten mal von gaeste2.shtml aus aufgerufen wird, sollte $uri etwa 
#                  "http://meine.domain.de/gaeste2.shtml" enthalten. Auf diese Weise kann man die Artikel / Seiten
#                  mit Leserbriefen verknuepfen.
#                  WICHTIG! Sollte $uri nicht vorhanden sein, wird der entsprechende Eintrag nicht erzeugt. Also
#                           Vielleicht erstmal ohne testen.
#               d. URL des Gaestebuches. UNBEDINGT angeben.
################################################################################################################
#
# DIESE VARIABLEN ANPASSEN
#
$filename   = "D:\\kundenwww\\textur.com\\textur.com\\briefe.htm";
$uri        = $ENV{"http://www.textur.com/gaeste2.stm"};
$gaestebuch = "/gaeste2.stm";
$debug      = "";
################################################################################################################
print "Content-type: text/html\n\n";
print "<HTML>";
print "<HEAD><TITLE>textur - Magazin f&uuml;r experimentelle Literatur: G&auml;stebuch-Formular</TITLE></HEAD>";
print "<BODY BACKGROUND=\"/gifs/hinterpr.gif\">";
read(STDIN, $eingaben, $ENV{'CONTENT_LENGTH'});
@eingabeliste = split(/&/, $eingaben);
foreach $item (@eingabeliste) {
    ($name, $value) = split(/=/, $item);
    # Un-Webify plus signs and %-encoding
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/<[\d\w\s]*>//gi;
    $value =~ s/<//gi;
    $value =~ s/>//gi;
    # $value =~ s/~!/ ~!/g; 
    $eingabe{$name} = $value;
    #print "$name   =   $value <BR>\n";
}
print "<TABLE>";
print "<TR>";
print "<TD COLSTART=\"1\" WIDTH=\"250\">";
print "<A HREF=\"http://www.textur.com/default.htm\">";
print "<IMG ALIGN=\"BOTTOM\" SRC=\"/gifs/zurueck.gif\" ALT=\"Zur&uuml;ck zur &Uuml;bersicht\" BORDER=\"0\"></A>";
print "</TD>";
print "<TD COLSTART=\"2\"><IMG SRC=\"/gifs/gastgr.gif\" ALIGN=\"BOTTOM\"></TD>";
print "</TR>";
print "</TABLE>";
print "<FORM method=POST ACTION=\"http://www.textur.com/cgi-gst/g1.pl\">";
print "<TABLE>";
if ($eingabe{GastXref}) {
  print "<INPUT TYPE=HIDDEN NAME=GastXref VALUE=\"$eingabe{GastXref}\">";
} else {
  print "<INPUT TYPE=HIDDEN NAME=GastXref VALUE=\"$uri\">";
}
if ($eingabe{GastSubmit}) {
  &EntryPreview("So w&uuml;rde Ihr Eintrag aussehen:<P>");
  &EntryCheck(1);
}
if ($eingabe{GastInsert}) {
  if (&EntryCheck(0)) {
    &EntryWrite();
    print "<TR><TD COLSTART=1><IMG ALIGN=BOTTOM SRC=\"/gifs/platz.gif\" WIDTH=250></TD><TD COLSTART=2><HR>Ihr Eintrag:</TD></TR>";
    &EntryPreview();
    print "<TR><TD COLSTART=1><IMG ALIGN=BOTTOM SRC=\"/gifs/platz.gif\" WIDTH=250></TD><TD COLSTART=2>Sie finden Ihren Eintrag jetzt im ";
    print "<a href=\"$gaestebuch\">G&auml;stebuch</a></TD></TR>";
    &writeEnd();
    exit;
  } else {
    print "<TR><TD COLSTART=1></TD><TD COLSTART=2>";
    print "Bitte machen Sie die fehlenden Eingaben und versuchen Sie erneut Ihre Nachricht abzuschicken.";
    print "</TD></TR>";
    &EntryCheck(1);
  }
}
print "<TR>";
print "<TD COLSTART=\"1\" WIDTH=\"250\">";
print "<P ALIGN=\"LEFT\">";
print "<EM>Beachten Sie, da&szlig; alle <B>FETT</B> formatierten Felder ausgef&uuml;llt<BR>";
print "werden m&uuml;ssen, sonst wird Ihr<BR> Beitrag nicht aufgenommen.</EM>";
print "</P>";
print "</TD>";
print "<TD ALIGN=\"LEFT\" COLSTART=\"2\"><H2 ALIGN=\"LEFT\"><EM>Tragen Sie Ihren Leserbrief hier ein</EM></H2></TD>";
print "</TR>";
print "<TR><TD VALIGN=MIDDLE COLSTART=1><EM><B>Ihr Vorname</B></EM></TD>";
print "    <TD VALIGN=MIDDLE COLSTART=2><INPUT type=text NAME=\"GastName\" SIZE=40 VALUE=\"$eingabe{GastName}\"></TD>";
print "</TR>";
print "<TR><TD VALIGN=MIDDLE COLSTART=1><EM><B>Ihr Nachname</B></EM></TD>";
print "    <TD VALIGN=MIDDLE COLSTART=2><INPUT type=text NAME=\"GastNachname\" SIZE=40 VALUE=\"$eingabe{GastNachname}\"></TD>";
print "</TR>";
print "<TR><TD VALIGN=MIDDLE COLSTART=1><EM><B>Ihre E-Mail Adresse</B></EM></TD>";
print "    <TD VALIGN=MIDDLE COLSTART=2><INPUT type=text NAME=\"GastEmail\" SIZE=40 VALUE=\"$eingabe{GastEmail}\"></TD>";
print "</TR>";
print "<TR><TD VALIGN=MIDDLE COLSTART=1><EM><B>Betreff</B></EM></TD>";
print "    <TD VALIGN=MIDDLE COLSTART=2><INPUT type=text NAME=\"GastBetreff\" SIZE=40 Value=\"$eingabe{GastBetreff}\"></TD>";
print "</TR>";
#<!-----Hier XREF eintragen--->
print "<TR>";
print "<TD COLSTART=1><EM>";
print "Zum Eintrag selbst:<BR>";
print "Hier k&ouml;nnen Sie Ihren Leserbrief<BR>";
print "eintragen. Wenn Sie fertig sind<BR>";
print "mit der Eingabe, klicken Sie<BR>";
print "zuerst auf  &quot;Jetzt testen&quot;,<BR>";
print "damit Sie sehen k&ouml;nnen,<BR>";
print " wie Ihr Beitrag aussehen<BR>";
print "wird, bevor Sie ihn endg&uuml;ltig<BR>";
print "abschicken. Nach dem<BR>";
print "Abschicken wird Ihr Beitrag<BR>";
print "automatisch unten in die Liste<BR>";
print "der Beitr&auml;ge aufgenommen.";
print "</EM></P></TD>";
print "<TD COLSTART=2 WIDTH=350><TEXTAREA NAME=\"GastBrief\" ROWS=15 COLS=50 Value=\"\">$eingabe{GastBrief}</TEXTAREA></TD>";
print "</TR>";
print "<TR><TD COLSTART=1></TD><TD COLSTART=2><H3><EM>VielenDank f&uuml;r Ihr Engagement!!</EM></H3></TD></TR>";
print "<TR><TD COLSTART=1><IMG ALIGN=BOTTOM SRC=\"/gifs/platz.gif\" WIDTH=250></TD>";
print "<TD COLSTART=2><INPUT TYPE=SUBMIT NAME=\"GastSubmit\" VALUE=\"Jetzt testen\" ALIGN=TOP>";
print "               <INPUT TYPE=SUBMIT NAME=\"GastInsert\" VALUE=\"Beitrag senden\">";
print "               <INPUT TYPE=RESET                      VALUE=\"Zur&uuml;cksetzen\">";
print "</TD></TR>";
&writeEnd();
exit;

# ------------------------------------------------------------
# subroutine EntryPreview
sub EntryPreview
{
  print "<TR>";
  print "<TD COLSTART=1></TD><TD COLSTART=2>";
  if ($_[0]) {
    print "$_[0]";
  }
  print "<HR>$eingabe{GastName} $eingabe{GastNachname} ";
  if ($eingabe{GastEmail}) {
    print "(<a href=\"mailto:$eingabe{GastEmail}\">$eingabe{GastEmail}</a>) ";
  }
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  printf "schrieb am %d.%02d.%02d um %02d:%02d:%02d ", $mday, $mon+1, $year, $hour, $min, $sec;
  if ($eingabe{GastXref}) {
    print "zu Artikel / zur Seite <a href=\"$eingabe{GastXref}\">$eingabe{GastXref}</a>";
  }
  print "folgendes:<P>";
  print "Betreff: $eingabe{GastBetreff}<P>";
  print "$eingabe{GastBrief}<HR>";
  print "<TD></TR>";
}

sub EntryCheck
{
  local($ok);
  $ok = $eingabe{GastName} && $eingabe{GastNachname} && $eingabe{GastEmail} && $eingabe{GastBetreff} && $eingabe{GastBrief};
  if (!$ok && $_[0]) {
    print "<TR>";
    print "<TD COLSTART=1></TD><TD COLSTART=2>";
    print "<BLINK><B>Fehler!</B></BLINK><BR>";
    if (!$eingabe{GastName}) {
      print "Sie m&uuml;ssen Ihren Namen angeben.<BR>";
    }
    if (!$eingabe{GastNachname}) {
      print "Sie m&uuml;ssen Ihren Nachnamen angeben.<BR>";
    }
    if (!$eingabe{GastEmail}) {
      print "Sie m&uuml;ssen Ihre Email-Adresse angeben.<BR>";
    }
    if (!$eingabe{GastBetreff}) {
      print "Soll Ihre Nachricht keinen Betreff haben?<BR>";
    }
    if (!$eingabe{GastBrief}) {
      print "<B>Ihre Nachricht ist leer</B><BR>";
    }
    print "<HR><TD></TR>";
  }
  $ok;
}

sub EntryWrite
{
  if (-e $filename) {
    if (-w $filename) {
      if (open(BRIEFE, ">>$filename"))
      {
      } else {
        &printError("KONNTE $filename nicht oeffnen.");
      }      
    } else {
      &printError("KEIN SCHREIBRECHT AUF DATEI.");
    } 
  } else {
    if (open(BRIEFE, ">$filename")) {
    } else {
      &printError("KEIN SCHREIBRECHT IM VERZEICHNIS. $filename");
    }
  }
  print BRIEFE "<TR>";
  print BRIEFE "<TD COLSTART=1></TD><TD COLSTART=2>$eingabe{GastName} $eingabe{GastNachname} ";
  if ($eingabe{GastEmail}) {
    print BRIEFE "(<a href=\"mailto:$eingabe{GastEmail}\">$eingabe{GastEmail}</a>) ";
  }
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  printf BRIEFE "schrieb am %d.%02d.%02d um %02d:%02d:%02d ", $mday, $mon+1, $year, $hour, $min, $sec;
  if ($eingabe{GastXref}) {
    print BRIEFE "zu Artikel / zur Seite $eingabe{GastXref} ";
  }
  print BRIEFE "folgendes:<P>";
  print BRIEFE "Betreff: $eingabe{GastBetreff}<P>";
  print BRIEFE "$eingabe{GastBrief}<HR>";
  print BRIEFE "<TD></TR>\r\n";
  close(BRIEFE);
}

sub writeEnd
{
print "</TABLE>";
print "</FORM>";
print "</BODY></HTML>";
}

sub printError
{
  if ($debug) {
    print "<BR>$_[0]<BR>";
  }
}









