#!/usr/bin/perl

use CGI::Carp qw(fatalsToBrowser);

use strict;

my $gNoLogDb = "nolog.db";

my %FORM;
ParseFormData(\%FORM);

my $language = TextToHtml($FORM{'language'});
my $winsize = TextToHtml($FORM{'winsize'});
my $userAgent = TextToHtml($FORM{'userAgent'});
my $referrer = TextToHtml($FORM{'referrer'});

my $result = 'SUCCESS';

if (! -f $gNoLogDb)
{
	if (open(DB, ">>$gNoLogDb"))
	{
		close(DB);
	}
	else
	{
		$result = "Error creating $gNoLogDb";
	}
}

if (open(NOLOG_DB, "$gNoLogDb"))
{
	my @Lines = <NOLOG_DB>;
	close(NOLOG_DB);

	my @LinesNew = ();
	my $LineNew = "$language|$winsize|$userAgent|$referrer\n";
	for my $Line (@Lines)
	{
		if($Line ne $LineNew)
		{
			push @LinesNew, $Line;
		}
	}
	push @LinesNew, $LineNew;

	if (open(NOLOG_DB, ">$gNoLogDb"))
	{
		print NOLOG_DB @LinesNew;
		close(NOLOG_DB);
	}
	else
	{
		$result = "Error opening $gNoLogDb for writing";
	}
}
else
{
	$result = "Error opening $gNoLogDb for reading";
}

print "Content-type: text/html; charset=utf-8\n\n$result";

exit 0;

##############
# Funktionen #
##############

#
# Überträgt die mittels "POST" an das Formular übergebenen Daten
# in den Hash, dessen Referenz der Funktion übergeben wird. Der
# Zugriff auf die Daten erfolgt dann mit $Hashname{'Feldname'}.
#
sub ParseFormData
{
	my $FormHashRef = shift;

	my $formdata;

	read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'});

	my @pairs = split(/&/, $formdata);

	for my $pair (@pairs)
	{
		my ($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/meg;
		${$FormHashRef}{$name} = $value;
	}
}

#
# Hilfsfunktion zum Maskieren aller HTML-(&, ", <, >) und DB-(Satztrenner, Feldtrenner)
# eigenen Zeichen, damit diese nicht vom Browser bzw. vom Script "interpretiert" werden,
# sondern als diese Zeichen dargestellt werden. Mit dieser Funktion sollten alle
# Textstrings, die in die DB geschrieben werden, zuvor in HTML konvertiert werden.
# Später nach dem Laden aus der DB können die Strings dann unmittelbar auf einer
# HTML-Seite angezeigt werden, ohne daß sie zuvor erneut konvertiert werden müssen.
#
sub TextToHtml
{
	my $text = shift;

	$text =~ s/\&/&amp;/g;
	$text =~ s/\"/&quot;/g;
	$text =~ s/\</&lt;/g;
	$text =~ s/\>/&gt;/g;

	$text =~ s/\r\n/<br>/g;
	$text =~ s/\r/<br>/g;
	$text =~ s/\n/<br>/g;

	$text =~ s/\|/&#124;/g;		# Feldtrenner für DB-Dateien

	$text;
}

