#!/usr/bin/perl
############################################################################
#
#   (c) Markus Wolf, 2000
#
############################################################################
#
# fm_main.cgi
# COPYRIGHT NOTICE
# Copyright 2000 Markus Wolf
# All Rights Reserved.
# EMail: perl@perl-archiv.de
# URL  : http://www.perl-archiv.de
#
# fm.cgi darf von jedermann kostenlos benutzt und geändert werden, solange
# dieser Copyright-Verweis und die restlichen Kommentare erhalten bleiben. Mit
# dem Einsatz dieses Skripts akzeptieren Sie, daß Markus Wolf von jeglicher
# Haftung und Gewährleistung hinsichtlich des Einsatzes befreit ist.
#
# Der Verkauf dieses Skripts, auch in modifizierter Form, ist ohne vorherige
# Absprache ausdrücklich untersagt.
# (Mit anderen Worten: Bitte fragen Sie mich, bevor Sie versuchen, mit meinem
# Skript Geld zu verdienen.)
#
# Um dieses Skript über das Internet oder irgendein anderes Medium
# weiterzuverbreiten, benötigen Sie vorher meine Erlaubnis. In jeden Fall
# müssen der Copyright-Verweis und die restlichen Kommentare erhalten bleiben.
#
# Wer den Copyrighthinweis bei der Ausgabe nicht haben will, kann diesen gegen
# eine Lizenzgebühr von DM 58,- rausnehmen. Einfach ein Mail an
# perl@perl-archiv.de, dann gibt es eine Rechnung.
#
############################################################################
#
# In diesem Script muß normalerweise nicht geändert werden.
# Bis auf das Layout :-)) .
#
############################################################################
#
# Aufbau der Datendatei
#
#  0 id
#  1 rubrik
#  2 titel
#  3 com
#  4 username
#  5 tel
#  6 mail
#  7 datum
#  8 dauer
#  9 paßwort
# 10 url
#
############################################################################

############################################################################
# Anwendung starten
############################################################################

sub start_fm {


#Time-Modul
use Time::Local ;
use CGI::Carp qw(fatalsToBrowser) ;

#Parameter verarbeiten
@para = split(/&/ , $ENV{'QUERY_STRING'});

#Aktuelle Zeit
&datum_zeit() ;


if ($para[0] eq "read") {

        #Listen
        &htmlhead() ;
        &read() ;
        &htmlfoot() ;

} elsif ($para[0] eq "new") {

        #Neue Anzeige
        &new() ;
        &redir("$cgi_host$cgi_add/$cgi_nam?read&$FM{'rubrik'}") ;

} elsif ($para[0] eq "form") {

        #Form: neue Anzeige
        &htmlhead() ;
        &form() ;
        &htmlfoot2("$cgi_add/$cgi_nam") ;

} elsif ($para[0] eq "delform") {

        #Form: Anzeige löschen
        &htmlhead() ;
        &delform() ;
        &htmlfoot2("$cgi_add/$cgi_nam") ;

} elsif ($para[0] eq "delad") {

        #Anzeige löschen
        &htmlhead() ;
        &delad() ;
        &htmlfoot2("$cgi_add/$cgi_nam") ;

} elsif ($para[0] eq "update") {

        #Anzeige löschen
        &htmlhead() ;
        &update() ;
        &htmlfoot2("$cgi_add/$cgi_nam") ;

} elsif ($para[0] eq "search") {

        #Suche
        &htmlhead() ;
        &parse_form() ;
        &search() ;
        &htmlfoot2($url_start) ;

} elsif ($para[0] eq "redir") {

        #Umleiten
        &redir() ;

} else {

        #Startseite
        &htmlhead() ;
        &show() ;
        &htmlfoot2($url_start);
}


}



############################################################################
# Ausgabe der Übersichtsseite
############################################################################

sub show {


my %MARK ;
my %anzrub ;
my @lines ;
my @html_tmp ;
my $rubrik ;
my $link ;
my $new ;
my $html_out ;
my $back_stat=0 ;


open (HTML , "< $html_tmpl") || die "Kann Schablonendatei ($html_tmpl) nicht zum Lesen öffnen." ;
@html_tmp=<HTML>;
close(HTML) ;
$html_out = join (' ' , @html_tmp) ;


###
#Anzahl und Alter bestimmen

open (DAT , "<$dat_file") || die "Kann Datenfile ($dat_file) nicht zum Lesen öffnen." ;

while ($line=<DAT>) {

        @fm_set = split(/\|/ , $line) ;

        #Zeit checken
        next unless ($fm_set[7] =~ /^\d\d\.\d\d\.\d\d\d\d/) ;
        $back_stat=&check_date($fm_set[7]) ;

        if ($back_stat <= $fm_set[8]) {
                $anzrub{$fm_set[1]}++ ;
                $anzges++ ;
        }

        if ($back_stat < $alter) {
                $NEU_MARK{$fm_set[1]}++ ;
                $MARK{$fm_set[1]}=1 ;
        }
}

close (DAT) ;


###
#Ausgabe der Rubriken

foreach $rubrik (keys %rub) {

        if ($MARK{$rubrik}) {
                $new = "($anzrub{$rubrik} |<font face=\"$font\" color=\"#ff0000\" size=-1> $NEU_MARK{$rubrik} neu</font>)" ;
        } else {
                $anzrub{$rubrik}=0 if !$anzrub{$rubrik} ;
                $new = "($anzrub{$rubrik})" ;
        }

        if($anzrub{$rubrik}>0) {
                $link = "<a href=\"$cgi_add/$cgi_nam?read&$rubrik\"><img src=\"$pic_dir/demo.gif\" border=0></a><font face=\"$font\" size=-1><b>$rub{$rubrik}</b>&nbsp;&nbsp;$new";
        } else {
                $anzrub{$rubrik}=0;
                $link = "<img src=\"$pic_dir/demo1.gif\" border=0><font face=\"$font\" size=-1><b>$rub{$rubrik}</b>&nbsp;&nbsp;$new" ;
        }

        $html_out =~ s/<!--$rubrik-->/$link/i ;
}


print "$html_out<br>&nbsp;<br>" ;


}



############################################################################
# Auflistung der Anzeigen
############################################################################

sub read {


my @data_set ;
my @lines ;
my $i=0 ;
my $line ;
my @lines_tmp ;
$para[2]=1 if (!$para[2]) ;


###
#Verarbeitung der Datendatei

open (DAT , "< $dat_file") || die "Kann Datenfile ($dat_file) nicht zum Lesen öffnen." ;
@lines_tmp=<DAT> ;
close (DAT) ;


###
#Bearbeitung der Daten

foreach $line (@lines_tmp) {

        @data_set = split(/\|/,$line) ;
        next if ( ($data_set[7] !~ /^\d\d\.\d\d\.\d\d\d\d/) || (&check_date($data_set[7])) > $data_set[8] ) ;
        push (@lines, [ @data_set ] ) if ($para[1] eq $data_set[1]) ;
}

undef @lines_tmp ;
@lines=reverse @lines ;
unshift(@lines , " ") ;


###
#Variablen für Blättervorgang

my $anzeige_zurueck = $para[2]-$anzan ;
my $anzeige_weiter  = $para[2]+$anzan ;
my $anzeige_von     = $para[2] ;
my $anzeige_bis     = $para[2]+$anzan-1 ;
my $gesanz                        = $#lines ;
   $anzeige_bis     = $gesanz if ($anzeige_bis>$gesanz) ;


###
#Ausgabe der Einträge

print "<table border=0 cellspacing=0 cellpadding=5 width=100%>" ;

for $y ($anzeige_von .. $anzeige_bis) {

        if ($para[1] eq "$lines[$y][1]") {

                $lines[$y][3] = "&nbsp\;" if (!$lines[$y][3]) ;
                undef $name ;

                if ($lines[$y][4] && $lines[$y][6]) {
                        $name="<a href=\"mailto:$lines[$y][6]?subject=$lines[$y][2]\">$lines[$y][4]</a>" ;
                } elsif (!$lines[$y][4] && $lines[$y][6]) {
                        $name="<a href=\"mailto:$lines[$y][6]?subject=$lines[$y][2]\">$lines[$y][6]</a>" ;
                } elsif ($lines[$y][4] && !$lines[$y][6]) {
                        $name="$lines[$y][6]" ;
                }

                $tel = ( $lines[$y][5]  ? " | T. $lines[$y][5]" : "" ) ;
                $url = ( $lines[$y][10] =~ /http:\/\/.*\..*/ig ? " | <a href=\"$lines[$y][10]\" target=\"_blank\">$lines[$y][10]</a>" : "" ) ;

                print qq~
                <tr>
                <td valign=top bgcolor="#f9f9f9"><font face="$font" size=-1><b>$lines[$y][2]</b></td>
                <td valign=top bgcolor="#f9f9f9" align=right><font face="$font" color="#ff8000" size=-1>$lines[$y][7] (<a href="$cgi_add/$cgi_nam?delform&$lines[$y][0]"><font color="#ff8000">edit</font></a>)</td>
                </tr>
                <tr>
                <td bgcolor="#f9f9f9" colspan=2 valign=top><font face="$font" size=-1>$lines[$y][3]</td>
                </tr>
                <tr>
                <td valign=top bgcolor="#f9f9f9" colspan=2><font face="$font" size=-1><b>$name</b></a>$url$tel</font></td>
                </tr>
                <tr>
                <td colspan=2>&nbsp;<br></td>
                </tr>
                ~ ;

                $i++;
           }
}


print "<tr><td colspan=3><font face=\"$font\" size=-1>Keine Anzeigen in dieser Rubrik vorhanden.<br><br><br><br>&#160;</td></tr>" if ($i==0) ;

print <<"EOM" ;
</table>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<table border=0 cellpadding=0 cellspacing=0 width=100% bgcolor="#E6E6E6">
<tr>
<td valign=top><img src="$pic_dir/ecke1.gif" border=0><br></td>
<td colspan=3><img src="$pic_dir/trenner.gif" border=0 width=1 height=1><br></td>
<td valign=top align=right><img src="$pic_dir/ecke2.gif" border=0><br></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><font face="$font" color="#FFFFFF">
EOM


###
#zurück

if($anzeige_zurueck>=0) {
print <<"EOM" ;
<a href="$cgi_add/$cgi_nam?read&$para[1]&$anzeige_zurueck"  onmouseover="window.status='Zurück ...';return true;" onmouseout="window.status='';return true;"><img src="$pic_dir/zurueck.gif" border=0 alt="ZURÜCK"></a>
EOM
} else {
print <<"EOM" ;
&#160;
EOM
}


###
#Status

$anzeige_bis=$gesanz if ($anzeige_weiter>$gesanz) ;

print <<"EOM" ;
</td>
<td align=center><font face="$font" size=-1>$anzeige_von-$anzeige_bis ($gesanz Anzeigen) | <a href="$cgi_add/$cgi_nam?form&$para[1]">aufgeben</a> - <a href="$cgi_add/$cgi_nam?delform">bearbeiten/löschen</a></font></td>
<td align=right>
EOM


###
#weiter

if($anzeige_weiter<=$gesanz) {
print <<"EOM" ;
<a href="$cgi_add/$cgi_nam?read&$para[1]&$anzeige_weiter" onmouseover="window.status='Weiter ...';return true;" onmouseout="window.status='';return true;"><img src="$pic_dir/weiter.gif" border=0 alt="WEITER"></a>
EOM
} else {
print <<"EOM" ;
&#160;
EOM
}


}



############################################################################
# Durchsuchen der Anzeigen
############################################################################

sub search {


my @data_set ;
my @lines ;
my @sr ;
my $i=0 ;
my $line ;
$para[2]=1 if (!$para[2]) ;


###
#Suche in den Einträge

print "<table border=0 cellspacing=0 cellpadding=5 width=100%>" ;

open (DAT , "< $dat_file") || die "Kann Datenfile ($dat_file) nicht zum Lesen öffnen." ;
while($line=<DAT>) {
        push (@sr , $line) if ($line =~ /.*$FM{'sbeg'}.*\|.*\|.*\|$/ig) ;
}
close (DAT) ;


###
#Ausgabe der Einträge

foreach $line (reverse @sr) {

        @data_set = split(/\|/ , $line) ;
        $data_set[3] = "&nbsp\;" if (!$data_set[3]) ;
        undef $name ;

        if ($data_set[4] && $data_set[6]) {
                $name="<a href=\"mailto:$data_set[6]?subject=$data_set[2]\">$data_set[4]</a>" ;
        } elsif (!$data_set[4] && $data_set[6]) {
                $name="<a href=\"mailto:$data_set[6]?subject=$data_set[2]\">$data_set[6]</a>" ;
        } elsif ($data_set[4] && !$data_set[6]) {
                $name="$data_set[6]" ;
        }

        $tel = ( $data_set[5]  ? " | T. $data_set[5]" : "" ) ;
        $url = ( $data_set[10] =~ /http:\/\/.*\..*/ig ? " | <a href=\"$data_set[10]\" target=\"_blank\">$data_set[10]</a>" : "" ) ;

        print qq~
        <tr>
        <td valign=top bgcolor="#f9f9f9"><font face="$font" size=-2>$rub{$data_set[1]}</font><br><font face="$font" size=-1><b>$data_set[2]</b></td>
        <td bgcolor="#f9f9f9" valign=bottom align=right><font face="$font" color="#ff8000" size=-1>$data_set[7] (<a href="$cgi_add/$cgi_nam?delform&$data_set[0]"><font color="#ff8000">bearbeiten/löschen</font></a>)<br></td>
        </tr>
        <tr>
        <td bgcolor="#f9f9f9" colspan=2 valign=top><font face="$font" size=-1>$data_set[3]</td>
        </tr>
        <tr>
        <td valign=top bgcolor="#f9f9f9" colspan=2><font face="$font" size=-1><b>$name</b></a>$url$tel</font></td>
        </tr>
        <tr>
        <td colspan=2>&nbsp;<br></td>
        </tr>
        ~ ;

        $i++;
}


###
#Statuszeile

if ($i==0) {
        print "<tr><td colspan=3 align=center><font face=\"$font\" size=-1>Keine Anzeigen zu diesem Suchbegriff vorhanden.<br>&nbsp;<br></td></tr>" ;
} elsif ($i==1) {
        print "<tr><td colspan=3 align=center><font face=\"$font\" size=-1>Es wurde $i Anzeige gefunden.<br></td></tr>" ;
} else {
        print "<tr><td colspan=3 align=center><font face=\"$font\" size=-1>Es wurden $i Anzeigen gefunden.<br></td></tr>" ;
}


###
#Abschluß

print <<"EOM" ;
</table>
EOM


}



############################################################################
# Neue Anzeige aufgeben
############################################################################

sub new {


my $id ;


###
#ID holen

open (ID , "+<./id.txt" ) || die "Kann ID-File (id.txt) nicht zum Schreiben/Lesen öffnen." ;
  &LockFile(ID) ;
  $id=<ID> ;
  $id++ ;
  seek(ID,0,0);
  print ID $id ;
close (ID) ;


###
#Form auslesen

&parse_form() ;


###
#Schreiben

open (DAT , ">> $dat_file") || die "Kann Datenfile ($dat_file) nicht zum Anhängen des neuen Eintrags öffnen." ;
&LockFile(DAT);
print DAT "$id|$FM{'rubrik'}|$FM{'titel'}|$FM{'com'}|$FM{'username'}|$FM{'tel'}|$FM{'email'}|$ndate|$FM{'dauer'}|$FM{'pw'}|$FM{'url'}|\n" ;
close (DAT) ;


###
#Adminmail

&send_mail($id) ;


}



############################################################################
# Anzeige editieren
############################################################################

sub update {


my $id ;
my @lines ;
my $pwc ;
my $update=0 ;


###
#Form auslesen

&parse_form() ;


###
#Verarbeitung

if ($FM{'id'} > 0) {


        ###
        #Daten lesen

        open (DAT , "< $dat_file") || die "Kann Datenfile ($dat_file) nicht zum Lesen öffnen." ;
        @lines = <DAT> ;
        close (DAT) ;


        ###
        #Anzeige ändern

        open (DAT , "> $dat_file") || die "Kann Datenfile ($dat_file) nicht zum Editieren des intrags öffnen." ;
        &LockFile(DAT);

        foreach $line (@lines) {

                @rec_set=split(/\|/ , $line) ;

                if ($rec_set[0] eq $FM{'id'}) {

                        #PW verschlüsseln
                        $pwc=crypt($rec_set[9],$rec_set[9]) ;

                        if ( $pwc eq $FM{'pwc'} ) {
                                #Zeile neu schreiben
                                print DAT "$rec_set[0]|$FM{'rubrik'}|$FM{'titel'}|$FM{'com'}|$FM{'username'}|$FM{'tel'}|$FM{'email'}|$ndate|$FM{'dauer'}|$FM{'pw'}|$FM{'url'}|\n" ;
                                $update=1 ;
                        } else {
                                #Zeile wieder schreiben
                                print DAT $line ;
                        }

                } else {

                        #alte Zeile wieder schreiben
                        print DAT $line ;
                }
        }


        ###
        #Adminmail

        &send_mail($id) ;
}


###
#Ausgabe

if ($update==1) {

        #OK
        print qq~
        <center>
        <table border=0>
        <tr>
        <td><img src="$pic_dir/finger.gif" border=0></td>
        <td>&nbsp;&nbsp;&nbsp;</td>
        <td><font face="$font" size=+1 color="darkblue"><b>Kleinanzeige wurde editiert</b></font></td>
        </tr>
        </table>
        <br>&nbsp;<br>
        <font face="$font" size=-1>
        Die Kleinanzeige mit der ID <b>$FM{'id'}</b> wurde editiert.<br>
        <br>&nbsp;<br>
        <br>&nbsp;<br>
        <br>&nbsp;<br>
        ~ ;

} else {

        #Fehler
        print qq~
        <center>
        <table border=0>
        <tr>
        <td><img src="$pic_dir/finger.gif" border=0></td>
        <td>&nbsp;&nbsp;&nbsp;</td>
        <td><font face="$font" size=+1 color="darkblue"><b>Fehler: Kleinanzeige könnte nicht editiert werden</b></font></td>
        </tr>
        </table>
        <br>&nbsp;<br>
        <font face="$font" size=-1>
        Die Kleinanzeige mit der ID <b>$FM{'id'}</b> kann nicht editiert werden.<br>
        Das Paßwort oder die ID ist falsch oder existiert nicht.
        <br>&nbsp;<br>
        Versuchen Sie es bitte nocheinmal.
        <br>&nbsp;<br>
        <br>&nbsp;<br>
        ~ ;
}


}



############################################################################
# HTML-Kopf ausgeben
############################################################################

sub htmlhead {


my $rubrik ;


print "Content-Type: text/html\n\n" ;

print <<"EOM";

<HTML>
<HEAD>

<TITLE>Flohmarkt - Perl/CGI-Archiv</TITLE>

</head>

<center>

<body background="$pic_dir/hinter.jpg" text="#000000">

<br><center>

<table border=0 cellpadding=10 cellspacing=0 width=720 bgcolor="#FFFFFF">
<tr>
        <td valign=top><img src="$pic_dir/metal.gif" border=0></td>
        <td valign=top align=center><font face="Arial" size=+2><b>Kleinanzeigenmarkt - Bereich:  $bereich</b></font><br>&nbsp;<br></td>
        <td valign=top align=right><img src="$pic_dir/metal.gif" border=0></td>
</tr>
<tr>
        <td>&nbsp;</td>

        <td>

EOM


if ($para[0] eq "read" || $para[0] eq "search") {

        $rub{$para[1]}="Suchergebnis" if ($para[0] eq "search") ;

print <<"EOM" ;

<table border=0 width=100%>
<tr>
        <td colspan=2><img src="$pic_dir/finger.gif" border=0></td>

        <td>
                <font face="$font" color="darkblue" size=+1>
                <b>$rub{$para[1]}</b>
                <font>
        </td>

        <td align=right>

                <form method="POST" action="$cgi_add/$cgi_nam?redir"><font face="$font" color="#00000" size=-1>
                <SCRIPT LANGUAGE="JavaScript">
                <!--
                function jump (url) {
                window.open(url,'_self')
                }
                //-->
                </SCRIPT>

                <select name="links" size=1 OnChange="jump(this.options[this.selectedIndex].value)">
                <option value="$cgi_host$cgi_add/$cgi_nam" selected>zur Bereichsübersicht</option>
EOM


foreach $rubrik (keys %rub) {

        next if $para[1] eq $rubrik ;
        print "<option value=\"$cgi_host$cgi_add/$cgi_nam?read&$rubrik\">$rub{$rubrik}</option>" ;
}


print <<"EOM" ;

        </select></td><td align=right><input type=image src="$pic_dir/akt.gif" border=0>

        </td><td></form></td>
</tr>
</table>

<br>&nbsp;<br>

EOM

}


}



############################################################################
# HTML-Fuss für die Auflistung
############################################################################

sub htmlfoot {


print <<"EOM" ;

        </td>
        <td>&nbsp;</td>
</tr>

<tr>
        <td valign=bottom align=left><img src="$pic_dir/ecke3.gif" border=0><br></td>
        <td colspan=3><img src="$pic_dir/trenner.gif" border=0 width=1 height=1><br></td>
        <td valign=bottom align=right><img src="$pic_dir/ecke4.gif" border=0><br></td>
</tr>

</table>

        <br></td>
        <td>&nbsp;</td>
</tr>

<tr>
        <td><img src="$pic_dir/metal.gif" border=0></td>
        <td align=center><font face="Arial" size=-2>&copy; 2001 - <a href="http://www.perl-archiv.de" target="new"><font face="Arial" size=-2 color="#000000">Perl/CGI-Archiv</font></a></font></td>
        <td align=right><img src="$pic_dir/metal.gif" border=0></td>
</tr>

</table>

<br>
<br>
&#160;

</center>

</body>
</html>

EOM


}



############################################################################
# HTML-Fuß für alle Seiten ausser Auflistung
############################################################################

sub htmlfoot2 {


my $anz=keys %rub ;
my $anzahl=0 ;
my $back_link=$_[0] ;


if ($anzges) {
        $anzahl="$anzges Anzeigen in" ;
} else {
        $anzahl="" ;
}


print <<"EOM" ;

</td>

<td>&nbsp;</td>

</tr>

<tr>
        <td>&nbsp;</td>
        <td align=center>
        <form method="post" action="$cgi_add/$cgi_nam?search">
        <table border=0 bgcolor="#E6E6E6" cellspacing=0 cellpadding=0 width=100%>
        <tr>
                <td valign=top align=left><img src="$pic_dir/ecke1.gif" border=0><br></td>
                <td><img src="$pic_dir/trenner.gif" border=0 widht=1 height=1><br></td>
                <td valign=top align=right><img src="$pic_dir/ecke2.gif" border=0><br></td>
        </tr>
        <tr>
                <td>&nbsp;</td>
                <td align=center>
                &nbsp;&nbsp;<font face="$font" size=-1>$anzahl $anz Rubriken&nbsp;&nbsp;|&nbsp;&nbsp;<a href="$cgi_add/$cgi_nam?form">aufgeben</a>&nbsp;-&nbsp;<a href="$cgi_add/$cgi_nam?delform"><font face="$font" color="#000000" size=-1>bearbeiten/löschen</font></a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="$back_link"><b>Übersicht</b></a></font><br>
                <img src="$pic_dir/trenner.gif" border=0 alt="-" width=1 height=15><br>
                <table border=0 cellspacing=0 cellpadding=3>
                <td><input type=text size=20 name="sbeg"></td>
                <td><input type=submit value="suchen"></td>
                </tr>
                </table>
                </td>
                <td>&nbsp;</td>
        </tr>
        <tr>
                <td valign=bottom align=left><img src="$pic_dir/ecke3.gif" border=0><br></td>
                <td><img src="$pic_dir/trenner.gif" border=0 widht=1 height=1><br></td>
                <td valign=bottom align=right><img src="$pic_dir/ecke4.gif" border=0><br></td>
        </tr>
        </table>
        </form>
        </td>
        <td>&nbsp;</td>
</tr>

<tr>
        <td><img src="$pic_dir/metal.gif" border=0></td>
        <td align=center><font face="Arial" size=-2>&copy; 1998 - <a href="http://www.perl-archiv.de" target="new"><font face="Arial" size=-2 color="#000000">Perl/CGI-Archiv</font></a></font></td>
        <td align=right><img src="$pic_dir/metal.gif" border=0></td>
</tr>

</table>

<br>
<br>
&#160;

</center>

</body>
</html>

EOM


}



############################################################################
# Ausgabe des Formulars für einen neuen Eintrag ausgeben
############################################################################

sub form {


my @rec_set=@_ ;
my $rubrik ;
my %zeiten=("7","1 Woche","14","2 Wochen","21","3 Wochen","30","1 Monat","60","2 Monate","90","3 Monate","120","4 Monate","150","5 Monate");


#URL
$rec_set[10]="http://" if ($rec_set[10] !~ /http:/i) ;


print <<"EOM" ;

<script language="JavaScript">
<!--

function chkFM(form) {

if(!form.username.value) {
        alert("Geben Sie bitte Ihren Namen ein !");
        form.username.focus();
        return false;
}

if(!form.email.value) {
        alert("Geben Sie bitte Ihre E-Mail-Adresse ein !");
        form.email.focus();
        return false;
}

if(form.email.value.indexOf('\@') == -1) {
        alert("Das ist keine E-Mail-Adresse !");
        form.email.focus();
        return false;
}

if(!form.pw.value) {
        alert("Geben Sie ein Paßwort für das Löschen der Anzeige ein !");
        form.pw.focus();
        return false;
}

if(!form.titel.value) {
        alert("Geben Sie einen Titel für die Anzeige ein !");
        form.titel.focus();
        return false;
}

if(!form.com.value) {
        alert("Geben Sie bitte einen Anzeigentext ein !");
        form.com.focus();
        return false;
}

}

//-->
</script>

<center>

EOM


###
#Form: Admin/New

if ($FM{'admin'}) {
        $pwc=crypt($rec_set[9],$rec_set[9]) ;
         print qq(<form name="mail" method=POST action="$cgi_add/$cgi_nam?update" onSubmit="return chkFM(this)">\n<input type=hidden name="id" value="$rec_set[0]">\n<input type=hidden name="pwc" value="$pwc">\n) ;
         $id_out = qq( - ID $rec_set[0]) ;
} else {
        print qq(<form name="mail" method=POST action="$cgi_add/$cgi_nam?new" onSubmit="return chkFM(this)">) ;
}


###
#Ausgabe

print <<"EOM" ;

                <table border=0>
                <tr>
                <td colspan=2>
                        <table border=0>
                        <tr>
                        <td><img src="$pic_dir/finger.gif" border=0></td>
                        <td>&nbsp;&nbsp;&nbsp;</td>
                        <td><font face="$font" size=+1 color="darkblue">Kleinanzeige aufgeben/ändern$id_out</font></td>
                        </tr>
                        </table>
                        <br>&nbsp;<br>
                </td>
                </tr>
                <tr>
                <td><font face="$font" size=-1>Name:</font></td>
                <td><input type=text name="username" size=45 maxlength=140 value="$rec_set[4]"></td>
                </tr>
                <tr>
                <td><font face="$font" size=-1>E-Mail:</font></td>
                <td><input type=text name="email" size=45 maxlength=140 value="$rec_set[6]"></td>
                </tr>
                <tr>
                <td><font face="$font" size=-1>Telefon:</font></td>
                <td><input type=text name="tel" size=45 maxlength=140 value="$rec_set[5]"></td>
                </tr>
                <tr>
                <td><font face="$font" size=-1>Paßwort:</font></td>
                <td><input type=text name="pw" size=45 maxlength=140 value="$rec_set[9]"></td>
                </tr>
                <tr>
                <td><font face="$font" size=-1>Titel:</font></td>
                <td><input type=text name="titel" size=45 maxlength=140 value="$rec_set[2]"></td>
                </tr>
                <tr>
                <td><font face="$font" size=-1>URL:</font></td>
                <td><input type=text name="url" size=45 maxlength=140  value="$rec_set[10]"></td>
                </tr>
                <tr>
                <td><img src="$pic_dir/trenner.gif" border=0 width=90 height=1></td>
                <td><br><textarea name="com" rows=7 cols=43 wrap=virtual>$rec_set[3]</textarea>
                </td>
                </tr>
                <tr>
                <td valign=top><br><font face="$font" size=-1>Rubrik:</font></td>
                <td><br><select name="rubrik" size=1>

EOM


###
#Rubrik

foreach $rubrik (keys %rub) {

        if ($para[1] eq $rubrik) {
                print "<option value=\"$rubrik\" selected>$rub{$rubrik}</option>" ;
        } elsif ($rec_set[1] eq $rubrik) {
                print "<option value=\"$rubrik\" selected>$rub{$rubrik}</option>" ;
        } else {
                print "<option value=\"$rubrik\">$rub{$rubrik}</option>" ;
        }
}


print <<"EOM" ;

        </select>

        &nbsp;&nbsp;&nbsp;&nbsp;
        <select name="dauer" size=1>
EOM


foreach $key (sort {$a <=> $b} keys %zeiten) {

        if ($rec_set[8] eq $key) {
                print "<option value=\"$key\" selected>$zeiten{$key}</option>" ;
        } else {
                print "<option value=\"$key\">$zeiten{$key}</option>" ;
        }

}


print <<"EOM" ;

        </select>
        <br><br>
        <font color="FFFFFF" face="Verdana" size=-1><input type=submit value="Ver&ouml;ffentlichen ...">
        </td>
</tr>

</table>
</form>

EOM

}



############################################################################
# Ausgabe des Formulars für das Löschen einer Anzeige
############################################################################

sub delform {


print <<"EOM" ;

<script language="JavaScript">
<!--

function chkFM(form) {

if(!form.id.value) {
        alert("Geben Sie bitte die ID der Kleinanzeige ein !");
    form.id.focus();
    return false;
}

if(!form.pw.value) {
        alert("Geben Sie bitte das Paßwort für das Löschen der Kleinanzeige ein !");
    form.pw.focus();
        return false;
}

}

//-->
</script>

<center>

<table border=0>
<tr>
        <td><img src="$pic_dir/finger.gif" border=0></td>
        <td>&nbsp;&nbsp;&nbsp;</td>
        <td><font face="$font" size=+1 color="darkblue"><b>Kleinanzeige bearbeiten/löschen</b></font></td>
</tr>
</table>

<br>&nbsp;<br>

<form name="mail" method=POST action="$cgi_add/$cgi_nam?delad" onSubmit="return chkFM(this)">

<font face="$font"size=-1>ID der Kleinanzeige</font><br>
<input type=text name="id" size=35 maxlength=140 value="$para[1]">

<br>&nbsp;<br>

<font face="$font" size=-1>Paßwort:</font><br>
<input type=password name="pw" size=35 maxlength=140>

<br>&nbsp;<br>&nbsp;<br>
<input type=radio name="admin" value="admin" checked> <font face="$font" size=-1><b>Anzeige bearbeiten</b></font><br>
<input type=radio name="admin" value=""> <font face="$font" size=-1><b>Anzeige löschen</b></font>
<br>&nbsp;<br>&nbsp;<br>

<input type=submit value="Anzeige löschen/bearbeiten">

<br>&nbsp;<br>
<br>&nbsp;<br>

</form>

</center>

EOM


}



############################################################################
# Anzeige löschen
############################################################################

sub delad {


my @lines ;
my @rec_set ;
my $line ;
my $del=0 ;


#Form auslesen
&parse_form() ;


###
#Löschen/Admin

if ($FM{'admin'} eq "admin") {

        #Anzeige suchen
        open (DAT , "< $dat_file") || die "Kann Datenfile ($dat_file) nicht zum Lesen öffnen." ;
        while ($line=<DAT>) {
                @rec_set=split(/\|/ , $line) ;
                if ($rec_set[0] eq $FM{'id'} && ($rec_set[9] eq $FM{'pw'} || $master eq $FM{'pw'})) {
                        &form(@rec_set) ;
                        $del=1 ;
                        last  ;
                }
        }

        #Nicht korrekt
        unless ($del==1) {
        print qq~
        <center>
        <table border=0>
        <tr>
        <td><img src="$pic_dir/finger.gif" border=0></td>
        <td>&nbsp;&nbsp;&nbsp;</td>
        <td><font face="$font" size=+1 color="darkblue"><b>Fehler: Kleinanzeige kann nicht editiert werden</b></font></td>
        </tr>
        </table>
        <br>&nbsp;<br>
        <font face="$font" size=-1>
        Die Kleinanzeige mit der ID <b>$FM{'id'}</b> kann nicht editiert werden.<br>
        Das Paßwort oder die ID ist falsch oder existiert nicht.
        <br>&nbsp;<br>
        Versuchen Sie es bitte nocheinmal.
        <br>&nbsp;<br>
        <br>&nbsp;<br>
        ~ ;
        }


} else {

        ####
        #Hier ist ein kritischer Punkt
        #Wird während dieser Zeit eine neue Anzeige aufgegeben
        #fällt diese beim folgenden Löschvorgang wieder raus
        #aber ich habe hierfür keine Lösung
        ####

        open (DAT , "< $dat_file") || die "Kann Datenfile ($dat_file) nicht zum Lesen öffnen." ;
        @lines=<DAT> ;
        close(DAT) ;

        open (DAT , "> $dat_file") || die "Kann Datenfile ($dat_file) nicht zum Schreiben öffnen." ;
        &LockFile(DAT) ;

        foreach $line (@lines) {

                @rec_set=split(/\|/ , $line) ;

                if ($rec_set[0] eq $FM{'id'} && ($rec_set[9] eq $FM{'pw'} || $master eq $FM{'pw'})) {
                        $del=1 ;
                } else {
                        print DAT "$line" ;
                }
        }

        close (DAT) ;


        if ($del==1) {

                #Gelöscht
                print qq~
                <center>
                <table border=0>
                <tr>
                <td><img src="$pic_dir/finger.gif" border=0></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td><font face="$font" size=+1 color="darkblue"><b>Kleinanzeige gelöscht</b></font></td>
                </tr>
                </table>
                <br>&nbsp;<br>
                <font face="$font" size=-1>
                Die Kleinanzeige mit der ID <b>$FM{'id'}</b> wurde erfolgreich gelöscht.
                <br>&nbsp;<br>
                <br>&nbsp;<br>
                ~ ;

        } else {

                #Nicht gelöscht
                print qq~
                <center>
                <table border=0>
                <tr>
                <td><img src="$pic_dir/finger.gif" border=0></td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td><font face="$font" size=+1 color="darkblue"><b>Fehler: Kleinanzeige konnte nicht gelöscht werden</b></font></td>
                </tr>
                </table>
                <br>&nbsp;<br>
                <font face="$font" size=-1>
                Die Kleinanzeige mit der ID <b>$FM{'id'}</b> wurde nicht gelöscht.<br>
                Das Paßwort oder die ID ist falsch oder existiert nicht.
                <br>&nbsp;<br>
                Versuchen Sie es bitte nocheinmal.
                <br>&nbsp;<br>
                <br>&nbsp;<br>
                ~ ;
        }
}


}



############################################################################
# Formulardaten auslesen
############################################################################

sub parse_form {


my $buffer ;
my @paare ;
my $paar ;
my $val1 ;
my $val2 ;


read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@paare = split(/&/, $buffer);

foreach $paar (@paare){

                ($val1, $val2) = split(/=/, $paar);

                $val1 =~ tr/+/ /;
                $val1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                $val2 =~ tr/+/ /;
                $val2 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

                $val2 =~ s/<([^>]|\n)*>/ /g;

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

                $val2 =~ s/\cM\n/<BR>/g;
                $val2 =~ s/\n\cM/<BR>/g;
                $val2 =~ s/\cM/<BR>/g;
                $val2 =~ s/\n/<BR>/g;
                $val2 =~ s/<BR>\s\s\s+/<BR><BR>/g;
                $val2 =~ s/<BR>\t/<BR><BR>/g;
                $val2 =~ s/\s+/ /g;
                $val2 =~ s/<BR>\s/<BR>/g;
                $val2 =~ s/\s<BR>/<BR>/g;
                $val2 =~ s/<BR><BR>/<P>/g;
                $val2 =~ s/<P><BR>/<P>/g;
                $val2 =~ s/<P>>/<P>&gt;/g;
                $val2 =~ s/<BR>>/<BR>&gt;/g;

                $val2 =~ s/<BR>&gt;/<BRR>/g;
                $val2 =~ s/<BR>/ /g;
                $val2 =~ s/<BRR>/<BR>&gt;/g;

                $val2 =~ s/\s+/ /g;
                $val2 =~ s/^\s+//g;
                $val2 =~ s/\s+$//g;

                $FM{$val1} = $val2;
}


}



############################################################################
# File vor gemeinsamen Zugriff schützen
############################################################################

sub LockFile {


local(*DATEI=@_) ;
flock(DATEI,2) if ($lock==1) ;


}



############################################################################
# Mails verschicken
############################################################################

sub send_mail {


my $id=$_[0] ;


#Mail an Betreiber
&send_mail_away($webmaster,$FM{'email'},"mail_an_betreiber.txt",$id) ;


#Mail an Eintragenden
if ($FM{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || $FM{'email'} !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) {
        warn "Falsche E-Mail-Adresse: $FM{'email'}" ;
} else {
        &send_mail_away($FM{'email'},$webmaster,"mail_an_inserent.txt",$id) ;
}


}



############################################################################
# Eigentliche Mail
############################################################################

sub send_mail_away {


my $mailto=shift ;
my $mailfrom=shift ;
my $text=shift ;
my $id=shift ;


if($offline==1) {
  open(MAIL,"> ./$text") || die "Kann Mail1-File (mail1.txt) nicht zum Schreiben öffnen." ;
} else {
  open(MAIL,"|$mailprog -t") ;
}


print MAIL "To: $mailto\n";
print MAIL "From: $mailfrom\n";
print MAIL "Subject: neue Kleinanzeige (ID $id) - $cgi_host\n\n";
print MAIL "---------------------------------------------------------------------------\n";
print MAIL "Name:      $FM{'username'}\n";
print MAIL "Mail:      $FM{'email'}\n";
print MAIL "Telelfon:  $FM{'tel'}\n";
print MAIL "Datum:     $ndate\n";
print MAIL "---------------------------------------------------------------------------\n";
print MAIL "Rubrik:    $rub{$FM{'rubrik'}}\n";
print MAIL "Titel.     $FM{'titel'}\n";
print MAIL "Dauer:     $FM{'dauer'}\n";
print MAIL "Paßwort:   $FM{'pw'}\n";
print MAIL "\n$FM{'com'}\n";
print MAIL "\n---------------------------------------------------------------------------\n";

close (MAIL);


}



############################################################################
# Datum prüfen
############################################################################

sub check_date {


my $tocheck=$_[0] ;
my $tocheck2 ;
my $datcheck2 ;
my $back_stat ;
my $tag ;
my $monat ;
my $jahr ;


$tag   = substr($tocheck , 0,2) ;
$monat = substr($tocheck , 3,2) - 1 ;
$jahr  = substr($tocheck , 6,4) ;
$tocheck2  = timelocal(0, 0, 0, $tag, $monat, $jahr)   ;

$tag   = substr($datcheck , 6,2) ;
$monat = substr($datcheck , 4,2) - 1 ;
$jahr  = substr($datcheck , 0,4) ;
$datcheck2 = timelocal(0, 0, 0, $tag, $monat, $jahr)  ;


#Rückgabe
$back_stat=int(($datcheck2-$tocheck2)/86400) ;
return ($back_stat) ;


}



############################################################################
# aktuelle Datum und Zeit ermitteln
############################################################################

sub datum_zeit {


my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+($zeitverH*3600));


$mon = $mon+1;
$year = 1900+$year;

$min  = "0$min"   if ($min  < 10) ;
$hour = "0$hour"  if ($hour < 10) ;
$mon  = "0$mon"   if ($mon  < 10) ;
$mday = "0$mday"  if ($mday < 10) ;

$ndate = "$mday.$mon.$year - $hour:$min";
$datcheck = "$year$mon$mday" ;


}



############################################################################
# Umleitung
############################################################################


sub redir {


my %MAILFORM ;
my @paare ;
my $buffer ;
my $paar ;
my $feldname ;
my $wert ;


if ($ENV{'CONTENT_LENGTH'} && $para[0] eq "redir") {

        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}) ;
        @paare = split(/&/, $buffer);


        foreach $paar (@paare) {

                   ($feldname, $wert) = split(/=/, $paar);
            $feldname =~ tr/+/ /;
            $feldname =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                   $wert =~ tr/+/ /;
            $wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
            $MAILFORM{$feldname} = $wert;
        }
}


$MAILFORM{'links'}=$_[0] if (!$MAILFORM{'links'}) ;

print "Location: $MAILFORM{'links'}\n\r\n\r";
print "Content-Type: text/html\n\n" ;
print "<html><head><title>Seite wird geladen</title><meta http-equiv=\"refresh\" content=\"0; URL=$MAILFORM{'links'}\"></head><body>&nbsp;</body></html>" ;


}



############################################################################
# ENDE
############################################################################

1 ;