#!/usr/bin/perl
#
# Copyright 2008 Daniel Eschbach Webentwicklung
# isyCMS
use CGI ;
use DBI ;
use Image::Magick ;
$cgi = new CGI ;
%FM = &parseform() ;
%CO = &getCookies() ;
use CGI::Carp qw(fatalsToBrowser);
$data="" ;
$tmpl="" ;
$dbh="" ;
my @wt=("So","Mo","Di","Mi","Do","Fr","Sa");
my $err="" ;
$dbh=DBI->connect('DBI:mysql:db52956_2:mysql5.urbanbytes.de', 'db52956_2','hebadb123') or die $DBI::errstr ;
my $passwort="jnszfwl" ;
$domain="http://heba.urbanbytes.de" ;
$root="/kunden/webdesign-webentwicklung.de/webseiten/heba" ;
$tmpldir="$root/html/tmpl" ;
$cgipath="$domain" ;
$imgdir="$root/html/gfx/db/" ;
my $copy=qq~©2008 Daniel Eschbach Webentwicklung ~;
$tmpimgdir=$imgdir."tmp/" ;
$login=0 ;
my $editmenu=qq~
~;
my $menu=qq~
Home
Unser Team
Programm
Termine
Kontakt ~;
my $editfeld="";
my $neufeld="";
my $delfeld="";
#######################################################################
if($CO{EditPass} eq $passwort) {
$login=1 ;
$editfeld=qq~~;
$edittfeld=qq~~;
$neufeld=qq~~;
$delfeld=qq~~;
}
if($FM{a} eq "kontakt") {
my $e="h.fuertsch\@web.de" ;
#unless($ENV{HTTP_REFERER} =~ /^$domain\/kontakt\.html/) {
# ¨eiten("/") ;
# exit() ;
#}
$FM{text}=~s/\n/ /g ;
my $datum=&mkdatum() ;
$tmpl=qq~Diese Anfrage kam am $datum von $ENV{REMOTE_ADDR}:Name $FM{name} Email $FM{email} Mitteilung: $FM{text}
~ ;
open(FH,">>$root/html/mails/index.htm") ;
print FH $tmpl." -------------------------------------------------------- " ;
close(FH) ;
&sendmail("$FM{email} <$FM{email}>",$FM{email},$e,"Anfrage über Kontaktformular",$tmpl) ;
¨eiten("/kontakt_ok.html") ;
} elsif($FM{a} eq "del" && $login==1) {
$dbh->do("DELETE FROM content WHERE id='$FM{id}'") ;
¨eiten("/termine.html") ;
} elsif($FM{a} eq "save" && $login==1) {
$c=&txt2html($FM{text}) ;
$c=$dbh->quote("$c") ;
$dbh->do("UPDATE content SET inhalt=$c WHERE id='$FM{i}'") ;
my $tmpl=qq~
~ ;
&print_tmpl($tmpl) ;
} elsif($FM{a} eq "savet" && $login==1) {
$c=&txt2html($FM{text}) ;
$h=&txt2html($FM{hl}) ;
$c=$dbh->quote("$c") ;
$h=$dbh->quote("$h") ;
($FM{datum}."~".$FM{zeit})=~m/(\d*)\.(\d*)\.(\d*)\~(\d*\:\d*)/ ;
$d="$3-$2-$1 $4:00" ;
$dbh->do("UPDATE content SET inhalt=$c,datum='$d',hl=$h,parent_id='$FM{typ}' WHERE id='$FM{i}'") ;
my $tmpl=qq~
~ ;
&print_tmpl($tmpl) ;
} elsif($FM{a} eq "neuesavet" && $login==1) {
my @mt=split(/\,/,$FM{datum}) ;
foreach $dat (@mt) {
$c=&txt2html($FM{text}) ;
$h=&txt2html($FM{hl}) ;
$c=$dbh->quote("$c") ;
$h=$dbh->quote("$h") ;
($dat."~".$FM{zeit})=~m/(\d*)\.(\d*)\.(\d*)\~(\d*\:\d*)/ ;
$d="$3-$2-$1 $4:00" ;
$dbh->do("INSERT INTO content (inhalt,datum,hl,parent_id,typ) VALUES ($c,'$d',$h,'$FM{typ}','te')") ;
}
my $tmpl=qq~
~ ;
&print_tmpl($tmpl) ;
} elsif($FM{a} eq "editt" && $login==1) {
($i,$d,$c,$h,$pi)=&fetchdb("SELECT id,datum,inhalt,hl,parent_id FROM content WHERE id='$FM{i}'") ;
$c=&html2txt($c) ;
$h=&html2txt($h) ;
$d=~m/(\d*)\-(\d*)\-(\d*) (\d*)\:(\d*)/ ;
$d="$3.$2.$1" ;
$z="$4:$5" ;
$tmpl=&loadfile("$tmpldir/cms_editt.htm") ;
$tmpl=~s/{hl}/$h/ig ;
$tmpl=~s/{c}/$c/ig ;
$tmpl=~s/{datum}/$d/ig ;
$tmpl=~s/{zeit}/$z/ig ;
$tmpl=~s/{id}/$i/ig ;
$tmpl=~s/{filter:$pi}/selected/ig ;
&print_tmpl($tmpl) ;
} elsif($FM{a} eq "edit" && $login==1) {
($c)=&fetchdb("SELECT inhalt FROM content WHERE id='$FM{i}'") ;
$c=&html2txt($c) ;
my $tmpl=&loadfile("$tmpldir/cms_edit.htm") ;
$tmpl=~s/{id}/$FM{i}/ig ;
$tmpl=~s/{c}/$c/ig ;
&print_tmpl($tmpl) ;
} elsif($FM{a} eq "neut" && $login==1) {
$c=&html2txt($c) ;
$tmpl=&loadfile("$tmpldir/cms_editt.htm") ;
$tmpl=~s/{\w*}//ig ;
$d=&mkd() ;
$tmpl=~s/savet/neuesavet/ig ;
$tmpl=~s/speichern/anlegen/ig ;
$tmpl=~s/{filter:$FM{t}}/selected/ig ;
&print_tmpl($tmpl) ;
} elsif($FM{a} eq "login") {
setCookie("EditPass",$FM{p}) ;
¨eiten2("/index.html") ;
} elsif($FM{a} eq "logout" && $login==1) {
setCookie("EditPass","") ;
¨eiten2("/index.html") ;
} else {
## Virtuelle Seiten ------------------------------------------------------------------------------------
if($FM{f} eq "kontakt_ok.html") {
$tmpl=&loadfile("$tmpldir/kontakt.html") ;
my $t=qq~
Vielen Dank für Ihre Mitteilung! ~ ;
$tmpl=~s/.*/$t/sg ;
} else {
$tmpl=&loadfile("$tmpldir/$FM{f}") ;
}
if($FM{f} eq "termine.html") {
$filter=qq~
Alle Termine
Geburtsvorbereitung
Hebammeninfoabend
Bewegung in der Schwangerschaft
Rückbildungsgymnastik (offene Gruppe)
Rückbildungsgymnastik (feste Gruppe)
Beckenbodentraining
Babymassage nach Leboyer
Harmonische Babymassage
Babypflege
~;
$tmpl=~s/{filter}/$filter/ ;
$tmpl=~s/{filter:$FM{t}}/selected/ ;
my $list=" {cms:$FM{t}} " if($FM{t}) ;
$list.=" " ;
my $where="TO_DAYS(datum)>=TO_DAYS(CURDATE()) AND typ='te'" ;
$where.=" AND parent_id='$FM{t}'" if($FM{t}) ;
$data=$dbh->prepare("SELECT id,inhalt,hl,DATE_FORMAT(datum,'%k:%i Uhr'),DATE_FORMAT(datum,'%d.%m.%Y'),DATE_FORMAT(datum,'%w') FROM content WHERE $where ORDER BY datum ") ;
$data->execute() ;
#if($data->rows()==0) {
#$list.="leider momentan keine Termine " ;
#}
while(my ($i,$c,$h,$z,$d,$w)=$data->fetchrow()) {
$list.=qq~
$edittfeld $delfeld$d ($wt[$w]) - $h - Beginn $z ~ ;
$list=~s/\[id\]/$i/g ;
$list.="
$c
" if($c) ;
$list.="
" ;
}
$data->finish() ;
$list.=" $neufeld" ;
$tmpl=~s/{termine}/$list/ ;
}
$tmpl=~s/{editmenu}/$editmenu/ if($login) ;
$tmpl=~s/{menu}/$menu/ ;
$tmpl=~s/{copy}/$copy/ ;
## Tags finden und laden ------------------------------------------------------------------------------------
$where="" ;
while($tmpl=~s/\{cms\:(\d{1,5})\}/\{$1\}/) {
$where.=" id='$1' OR" ;
}
chop($where) ; chop($where) ;
$data=$dbh->prepare("SELECT id,inhalt FROM content WHERE $where") ;
$data->execute() ;
while(my ($i,$c)=$data->fetchrow()) {
$c=$editfeld.&txt2html($c) ;
$c=~s/\[id\]/$i/ ;
$tmpl=~s/\{$i\}/$c/ ;
}
$data->finish() ;
## löschen aller Platzhalter und Ausgabe ------------------------------------------------------------------------------------
$tmpl=~s/{.*}//g ;
&print_tmpl($tmpl) ;
}
#######################################################################
sub loadtmpl {
my $file = shift ;
$file="/$file" if ($file !~ /^\//) ;
local ($/) ;
open(FILE, "< $tmpldir$file") || die "Kann Template $file nicht oeffnen: $!\n";
undef $/ ;
my $text = ;
close(FILE);
return ($text) ;
}
sub loadfile {
my $file = shift ;
local ($/) ;
open(FILE, "< $file") || die "Kann Template -$file- nicht oeffnen: $!\n";
undef $/ ;
my $text = ;
close(FILE);
return ($text) ;
}
sub umleiten {
my $link=shift ;
$link =~ s/\s/\%20/g ;
print "Content-Type: text/html\n\n " ;
}
sub umleiten2 {
my $link=shift ;
print " " ;
}
sub enchash {
my $v="" ;
foreach (keys(%FM)){
$v .= "$_\=$FM{$_}\&" ;
}
$v =~ s/ /\%20/ig ;
return ($v) ;
}
sub parseform {
my %FM ;
foreach ($cgi->param) {
$FM{$_} = $cgi->param($_) ;
}
foreach ($cgi->url_param) {
$FM{$_} = $cgi->url_param($_) ;
}
return(%FM) ;
}
sub mkdatum {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $datum = sprintf "%02d.%02d.%04d %02d:%02d" , $mday , $mon+=1 , $year+=1900 , $hour , $min ;
return ($datum) ;
}
sub mkd {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $datum = sprintf "%04d-%02d-%02d %02d:%02d:%02d" , $year+=1900, $mon+=1, $mday, $hour , $min, $sec ;
return ($datum) ;
}
sub sendmail { # &sendmail($from, $reply, $to, $subject, $message );
my ($fromaddr, $replyaddr, $to, $subject, $message) = @_;
my $SEND_MAIL="/usr/sbin/sendmail -t";
$to =~ s/[ \t]+/, /g; # pack spaces and add comma
#$fromaddr =~ s/.*<([^\s]*?)>/$1/; # get from email address
$replyaddr =~ s/.*<([^\s]*?)>/$1/; # get reply email address
$replyaddr =~ s/^([^\s]+).*/$1/; # use first address
$message =~ s/^\./\.\./gm; # handle . as first character
#$message =~ s/\r\n/\n/g; # handle line ending
#$message =~ s/\n/ /g;
if (!$to)
{
return(-8);
}
open (MAIL,"| $SEND_MAIL");
print MAIL "To: $to\n";
print MAIL "From: $fromaddr\n";
print MAIL "Reply-to: $replyaddr\n" if $replyaddr;
print MAIL "X-Mailer: grafipress.de Mailer\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/html; charset=\"ISO-8859-1\"" ;
print MAIL "Content-Transfer-Encoding: quoted-printable\n\n" ;
print MAIL "$message";
print MAIL "\n.\n";
close(MAIL);
return(1);
}
sub sendmail_txt { # &sendmail($from, $reply, $to, $subject, $message );
use MIME::QuotedPrint;
my ($fromaddr, $replyaddr, $to, $subject, $message) = @_;
my $SEND_MAIL="/usr/sbin/sendmail -t";
$to =~ s/[ \t]+/, /g; # pack spaces and add comma
$replyaddr =~ s/.*<([^\s]*?)>/$1/; # get reply email address
$replyaddr =~ s/^([^\s]+).*/$1/; # use first address
$message =~ s/^\./\.\./gm; # handle . as first character
#$message= encode_qp($message) ;
if (!$to)
{
return(-8);
}
open (MAIL,"| $SEND_MAIL");
print MAIL "To: $to\n";
print MAIL "From: $fromaddr\n";
print MAIL "Reply-to: $replyaddr\n" if $replyaddr;
print MAIL "X-Mailer: grafipress.de Mailer\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/plain; charset=\"iso-8859-1\"" ;
print MAIL "Content-Transfer-Encoding: quoted-printable\n\n" ;
print MAIL "$message";
print MAIL "\n.\n";
close(MAIL);
return(1);
}
sub setCookie {
my($name, $value) = @_;
my $cookie = $cgi->cookie( -name=>"$name", -value=>"$value", -expires=>"");
print $cgi->header( -cookie=>$cookie );
}
sub getCookies {
my(@rawCookies) = split (/\;\ /,$ENV{'HTTP_COOKIE'});
my %cookies ;
foreach(@rawCookies){
my ($key, $val) = split (/=/,$_);
$val =~ s/%([\dA-Fa-f]{2})/pack("C", hex($1))/eg;
$cookies{$key} = $val;
}
return %cookies;
}
sub fetchdb {
my $q=shift() ;
my $datadd=$dbh->prepare($q) ;
$datadd->execute() ;
my @a=$datadd->fetchrow() ;
$datadd->finish();
return(@a) ;
}
sub print_tmpl {
my $t=shift() ;
print "Content-Type: text/html\n\n$t" ;
}
sub mk_news {
my $list="" ;
$data=$dbh->prepare("SELECT id,DATE_FORMAT(datum,'%e.%m.%Y - %k:%i Uhr') AS dat,inhalt,hl FROM content WHERE typ='ne' ORDER BY datum") ;
$data->execute() ;
while(my $set=$data->fetchrow_hashref()) {
$set->{inhalt}=~s/\n/ /g ;
$list.=qq~
$set->{hl}
$delfeld$editnfeld$set->{dat}
$set->{inhalt}
~ ;
$list=~s/\[id\]/$set->{id}/ig ;
}
$data->finish() ;
return($list.$neufeld) ;
}
sub txt2html {
my $x=shift() ;
$x=~s/ü/ü/g ;
$x=~s/ö/ö/g ;
$x=~s/ä/ä/g ;
$x=~s/Ü/Ü/g ;
$x=~s/Ö/Ö/g ;
$x=~s/Ä/Ä/g ;
$x=~s/ß/ß/g ;
$x=~s/\n/ /g ;
return($x) ;
}
sub html2txt {
my $x=shift() ;
$x=~s/ü/ü/g ;
$x=~s/ö/ö/g ;
$x=~s/ä/ä/g ;
$x=~s/Ü/Ü/g ;
$x=~s/Ö/Ö/g ;
$x=~s/Ä/Ä/g ;
$x=~s/ß/ß/g ;
$x=~s/ /\n/g ;
return($x) ;
}