#!/usr/bin/perl

use HTML::Template;

my $template; my $buffer; my @pairs; my $pair; my $name; my $value; my %FORM;

 $template = HTML::Template->new(filename => 'liste.tmpl', die_on_bad_params => 0, loop_context_vars => 1);

############################################################

if ($ENV{"REQUEST_METHOD"} eq 'GET') { $buffer = $ENV{'QUERY_STRING'}; }
else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }

@pairs = split(/&/, $buffer);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$FORM{$name} = $value;
	}

##############>>>>>>MAIN


if ($FORM{add} == 1) { add(); show(); }
else { show(); }

print "Content-Type: text/html\n\n";
print $template->output;



################>>>>>SUBS

sub show {

#ausgabe teililiste

  my @loop_array;

  open (LISTE,'liste.dat') or error ('konnte teilnehmerliste nicht öffnen');
	
  while (<LISTE>) {	
    my %loop_hash;

    @pairs = split(/\|/);
    foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);
      $loop_hash{$name} = $value;
    }

    if ($loop_hash{BEZ} == 0) { $loop_hash{BEZ} = ''}

    push (@loop_array, \%loop_hash);

  }
	
  close (LISTE);
	
  $template->param(TEILI_LOOP => \@loop_array);

}




sub add {

my $error = '';

#eingaben überprüfen
#  if ( $FORM{VORNAME} eq '' ) { error ('Vorname ist ein Pflichtfeld und muss ausgefüllt werden.') }
#  if ( $FORM{NACHNAME} eq '' ) { error ('Nachname ist ein Pflichtfeld und muss ausgefüllt werden.') }
#  if ( $FORM{NICKNAME} eq '' ) { error ('Nickname ist ein Pflichtfeld und muss ausgefüllt werden.') }
#  if ( $FORM{MAIL} eq '' ) { error ('Mail ist ein Pflichtfeld und muss ausgefüllt werden.') }
#  if ( $FORM{MAIL} !~ /.*\@.*\..*/ ) { error ('Die Mailadresse scheint nicht gültig zu sein.') }
#  if ( $FORM{UIN} ne '') 
#	{
#	  if ( $FORM{UIN} !~ /^\d+$/ ) { error ('Die ICQ Nummer darf nur aus Zahlen bestehen.') }
#	}
#  if ( $FORM{PLZ} ne '') 
#	{
#	  if ( $FORM{PLZ} !~ /^\d{5}$/ ) { error ('Die PLZ muss eine 5-stellige Zahl sein.') }
#	}


  if ( $FORM{VORNAME} eq '' ) { $error = $error.'Vorname ist ein Pflichtfeld und muss ausgefüllt werden.<br>' }
  if ( $FORM{NACHNAME} eq '' ) { $error = $error.'Nachname ist ein Pflichtfeld und muss ausgefüllt werden.<br>' }
  if ( $FORM{NICKNAME} eq '' ) { $error = $error.'Nickname ist ein Pflichtfeld und muss ausgefüllt werden.<br>' }
  if ( $FORM{MAIL} eq '' ) { $error = $error.'Mail ist ein Pflichtfeld und muss ausgefüllt werden.<br>' }
  else {
	if ( $FORM{MAIL} !~ /.*\@.*\..*/ ) {$error =  $error.'Die Mailadresse scheint nicht gültig zu sein.<br>' }
       }
  if ( $FORM{UIN} ne '') 
	{
	  if ( $FORM{UIN} !~ /^\d+$/ ) { $error = $error.'Die ICQ Nummer darf nur aus Zahlen bestehen.<br>' }
	}
  if ( $FORM{PLZ} ne '') 
	{
	  if ( $FORM{PLZ} !~ /^\d{5}$/ ) { $error = $error.'Die PLZ muss eine 5-stellige Zahl sein.<br>' }
	}

if ($error ne '') { error ($error) }


#var erstellen
  my $id = 1; my @liste;

#liste einlesen
  open (LISTE, 'liste.dat') or error ('konnte teilnehmerliste nicht öffnen');
  @liste = <LISTE>;
  close (LISTE);

#id ermittelen
  if ($liste[$#liste] =~ /^ID=(\d+)\|/) { $id = $1 + 1 }

#sonderzeichen umwandeln
  $FORM{VORNAME} = html ( $FORM{VORNAME} );
  $FORM{NACHNAME} = html ( $FORM{NACHNAME} );
  $FORM{NICKNAME} = html ( $FORM{NICKNAME} );

#daten eintragen
  open (LISTE, '>>liste.dat') or error ('konnte teilnehmerliste nicht öffnen');
  print LISTE "ID=$id|VORNAME=$FORM{VORNAME}|NACHNAME=$FORM{NACHNAME}|NICKNAME=$FORM{NICKNAME}|MAIL=$FORM{MAIL}|PLZ=$FORM{PLZ}|UIN=$FORM{UIN}|BEZ=0\n";
  close (LISTE);

}



sub html {

  my($string) = @_;
  
  $string =~ s/>/&gt;/g;
  $string =~ s/</&lt;/g;
  $string =~ s/\|/&#124;/g;

  return $string;

}


sub error {

    my($msg) = @_;
    $template = HTML::Template->new(filename => 'error.tmpl', die_on_bad_params => 0);
    $template->param(MSG => $msg);
    print "Content-Type: text/html\n\n";
    print $template->output;

    exit;
}