#!/usr/bin/perl
#####################################################################
# gbook.cgi
#
# by Patrick Bernau, Version 0.1 (1999-09-13)
# Version 1.0 (2000-02-11)
# Version 1.1 (2000-04-26)
# supports foreign languages.
#
# usage: use in HTML form, can be GET or POST with use of
# gabe-lib.pl
#
# form fields:
# action show, sign or signform
# name text field -- name of signer
# location text field -- location of signer
# url text field -- homepage-url of signer
# email text field -- email address of signer
# body textarea -- body of message
# firstent text field -- first entry
#####################################################################
# name of data directory
$datadir = "gbook";
# name of this script
$scrnm = "gbook.cgi";
# templates
$before = `/bin/cat gbefore.ht`;
$after = `/bin/cat gafter.ht`;
$middle = `/bin/cat gmiddle.ht`;
$entries = `/bin/cat gentry.ht`;
$signform = `/bin/cat gform.html`;
# insert
's instead of newlines in body?
$insertbr = 1;
# replace <> by <> ?
$denyhtml = 1;
# make homepage urls and email addresses links?
$makelinkhp = 1;
$makelinkmail = 1;
# path to date command
$dt = "date";
# time zone relative to gmt
$timez = +0;
# entries per page
$entppg = 100;
# language
$language = "english"; # english or deutsch
$notgvn = "nicht gegeben";
$next = "";
$prev = "";
$sign = "";
$back = "";
$missing = "Etwas fehlt ...";
$name_message = "Name und Text sind unbeding noetig";
$please_go = "Bitte versuchen";
$again = "Sie es noch einmal.";
$empty = "Dieses Gaestebuch ist noch leer.";
if ($language eq "deutsch")
{
$notgvn = "
nicht angegeben";
$next = "weiter";
$prev = "zurück";
$sign = "Unterschreiben!";
$back = "zurück";
$missing = "Aber bitte vollständig ...";
$name_message = "Name und Eintrag hätte ich schon gerne.";
$please_go = "Bitte geh";
$again = "und probier's nochmal.";
$empty = "Keine Einträge vorhanden.";
}
#####################################################################
## code begins here
require "gabe-lib.pl";
&ParseForm();
$cntfile = "$datadir/gbk.cnt";
$action = $data{'action'};
$name = $data{'name'};
$location = $data{'location'};
$url = $data{'url'};
$email = $data{'email'};
$body = $data{'body'};
$firstent = $data{'firstent'};
print "Content-type: text/html\n\n";
# Get nr. of messages
if (-s $cntfile)
{
open (CNT, "<$cntfile");
$msgsnr=
;
close (CNT);
}
else
{
$msgsnr=0;
}
if ($action eq "signform")
{
print "$signform";
exit (1);
}
if ($action eq "sign")
{
if (!$body || !$name)
{
print "$before\n";
print "$missing\n";
print "
\n$name_message. $please_go ";
print "$back $again\n";
print "$after";
exit(1);
}
$msgsnr++;
# generating time string
$hour = `$dt -u +\"%k\"`;
$hour = $hour + $timez;
$date = `$dt -u +\"%y-%m-%d\"`;
$minute = `$dt -u +\".%M\"`;
chomp $date; chomp $minute;
$date .= " / " . $hour.$minute;
open (ENTRY, ">$datadir/$msgsnr.ent");
print ENTRY "$date\n";
print ENTRY "$name\n";
print ENTRY "$location\n";
print ENTRY "$url\n";
print ENTRY "$email\n";
print ENTRY "IP: $ENV{'REMOTE_ADDR'}\n";
print ENTRY "FwdFor: $ENV{'HTTP_X_FORWARDED_FOR'}\n";
print ENTRY "$body\n";
close (ENTRY);
open (CNT, ">$cntfile");
print CNT "$msgsnr\n";
close (ENTRY);
}
# get first number surely
$firstent = $msgsnr if (!$firstent);
# print header
print "$before\n";
print "
\n";
print "$sign\n";
print "$middle\n\n\n";
# print entries
$printed = 0;
for ($curnr = $firstent + 0; $curnr > 0 && $printed < $entppg; $curnr--)
{
if (-s "$datadir/$curnr.ent")
{
open (ENTRY, "<$datadir/$curnr.ent");
$date = ; $name = ; $location = ; $url = ;
$email = ; $ip = ; $fwd = ; @body = ;
close (ENTRY);
chomp $date; chomp $name; chomp $url; chomp $location; chomp $url; chomp $email;
$name =~ s/Ä/Ä/g; $name =~ s/ä/ä/g;
$name =~ s/Ö/Ü/g; $name =~ s/ö/ö/g;
$name =~ s/Ü/ö/g; $name =~ s/ü/ü/g;
$name =~ s/ß/ß/g;
$location =~ s/Ä/Ä/g; $location =~ s/ä/ä/g;
$location =~ s/Ö/Ü/g; $location =~ s/ö/ö/g;
$location =~ s/Ü/ö/g; $location =~ s/ü/ü/g;
$location =~ s/ß/ß/g;
foreach $substr (@body) {
$substr =~ s/Ä/Ä/g; $substr =~ s/ä/ä/g;
$substr =~ s/Ö/Ö/g; $substr =~ s/ö/ö/g;
$substr =~ s/Ü/Ü/g; $substr =~ s/ü/ü/g;
$substr =~ s/ß/ß/g;
}
if ($denyhtml)
{
$name =~ s/</g;
$name =~ s/>/>/g;
$location =~ s/</g;
$location =~ s/>/>/g;
foreach $substr (@body) {
$substr =~ s/</g;
$substr =~ s/>/>/g;
}
}
if ($insertbr)
{
foreach $substr (@body) {
$substr =~ s/\n/
\n/g;
$substr =~ s/\cM\n/
\n/g;
}
}
}
else
{
next;
}
$ent = $entries;
$ent =~ s/%%n/$name/g;
if ($location)
{
$ent =~ s/%%l/$location/g;
}
else
{
$ent =~ s/%%l/$notgvn/g;
}
$ent =~ s/%%d/$date/g;
if (($url) && ($url ne "http://"))
{
if ($makelinkhp)
{
$url2 = "$url";
}
else
{
$url2 = $url;
}
}
else
{
$url2 = $notgvn;
}
$ent =~ s/%%u/$url2/g;
if ($email)
{
if ($makelinkmail)
{
$email2 = "$email";
}
else
{
$email2 = $email;
}
}
else
{
$email2 = $notgvn;
}
$ent =~ s/%%m/$email2/g;
$ent =~ s/%%b/@body/g;
print ("$ent\n$middle\n\n");
$printed++;
}
print ("$empty
$middle\n\n") if (!$printed);
# print footer
print ("
\n");
if ($firstent < $msgsnr)
{
$firstentbk = $firstent + $entppg;
$firstentbk = $msgsnr if ($firstentbk > $msgsnr);
print ("$prev\n");
}
else
{
print ("$prev ");
}
print "- $sign -";
if ($curnr > 0)
{
print ("\n$next\n\n\n");
}
else
{
print (" $next\n\n\n");
}
print ("\n");
print ("$after\n");