#!/usr/bin/perl use strict; use warnings; use HTML::Template::Compiled; use CGI; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use PersonenDB; use utf8; # die benötigten Dateien my $input_tmpl='input.tmpl'; my $show_tmpl='show.tmpl'; my $db_file='test.dat'; # Die Objkete erzeugen. my $cgi = CGI->new(); my $db = PersonenDB->new($db_file); # Ausgabe beginnen print $cgi->header(-type=>"text/html", -charset=>"UTF-8"); # warungen in den Browser Ausgeben warningsToBrowser(1); # die gewünscht aktion bestimmen my $action=lc($cgi->param('action') || ''); # wenn es keine bekannte Aktion ist, dann soll es 'show' sein $action='show' unless(grep{$action eq $_}qw(show input send)); # Eingabemaske Zeigen if($action eq 'input') { zeige_maske($cgi,$db,$input_tmpl,{},''); } # Daten senden elsif($action eq 'send') { speicher_person($cgi,$db); } # Daten Anzeigen else { zeige_personen($cgi,$db,$show_tmpl); } # Eingabemaske generiegen und anzeigen sub zeige_maske { my $cgi=shift; my $db=shift; my $file=shift; my $user=shift || {}; my $message=shift || ''; my $tmpl = HTML::Template::Compiled->new( cache => 0, filename => $file, ); my %data; for my $key ($db->key_names()) { $data{$key}=$user->{$key} || ''; } my @tmp=$db->typen(); my @sel; for(1..@tmp) { my $v=shift(@tmp); push(@sel,{ VALUE => $_, TITLE => $v->[0], TEXT => $v->[1], }); } $tmpl->param( MESSAGE => $message, ACTION_SHOW => $cgi->script_name()."?action=show", ACTION_SEND => $cgi->script_name(), SELECT => \@sel, %data, ); print $tmpl->output(); return 1; } # Daten lesen und Person speichern sub speicher_person { my $cgi=shift; my $db=shift; my %nutzer; for my $key ($db->key_names()) { $nutzer{$key}=$cgi->param($key); } if($db->add(\%nutzer)) { zeige_personen($cgi,$db,$show_tmpl); } else { zeige_maske($cgi,$db,$input_tmpl,\%nutzer,$db->error()); } } # Liste Generieren und anzeigen sub zeige_personen { my $cgi=shift; my $db=shift; my $file=shift; my $tmpl = HTML::Template::Compiled->new( cache => 0, filename => $file, ); my @typen=$db->typen(); my $cnt=0; my @personen; for ($db->all()) { my $person={%$_}; $person->{ANKER}="anker$cnt"; $person->{KURZNAME}="$person->{vorname} $person->{nachname}"; if($person->{typ}<=0 || $person->{typ}>@typen) { $person->{typ}=''; } else { my $t=$typen[$person->{typ}-1]; $person->{typ}="$t->[1] ($t->[0])"; } push(@personen,$person); $cnt++; } $tmpl->param( ACTION_INPUT => $cgi->script_name()."?action=input", PERSON => \@personen, ); print $tmpl->output(); }