#! /usr/bin/perl -w

use strict;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);

use Date::Pcalc qw
(
  check_date
  Date_to_Days
  Date_to_Text_Long
  Date_to_Text
  Day_of_Week
  Language
);
Language(3);       # deutsch


my $prog = "http://www.lenz-online.de/blog/cgi-bin/blog.pl";
my $page = "../001-FinnJob";

my @mname = ("X","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
my @tname = ("X","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
my @jlist;            # alle Jahre
my @mlist;            # Monate des lfd. Jahres
my @tlist;            # Tage des lfd. Monats
my @files;
my $mj = 0;           # höchstes Jahr
my $mm = 0;           # höchster Monat
my $lj = 0;           # laufendes Jahr
my $lm = 0;           # laufender Monat
my $max;              # Anzahl Einträge
my $j;
my $m;
my $t;
my $i;
my $ad = "";          # Admin-Mode
my $z = -1;

opendir(DIR,"$page");
@files = readdir(DIR);
closedir(DIR);

@files = sort(@files);
while (substr($files[0], 0, 1) lt "2") {shift(@files);}          # . löschen
while (substr($files[@files-1], 0, 1) gt "2") {pop(@files);}     # A löschen
$max = @files;

my $heute;                                                  # soll gelesen werden
my $cookie = 1;                                             # Programm wurde schon benutzt

if (my @Feldnamen = $cgi->param())
{
  if ($cgi->param('muu')) {aendern()}                       # Eintrag ändern
  $i = $cgi->param('link');
  if ($i)
  {
    if ($i eq "ja")   {$ad = "&link=ja"}                    # Admin-Mode eingeschaltet
    if ($i eq "dir")  {uebersicht()}                        # Übersicht ausgeben
    if ($i eq "such") {suchen()}                            # Stichwort suchen
  }
  $heute = $cgi->param('h');                                # Vorgabe
  if ($heute && $heute =~ /[0-9]{6}/)
  {}
  else
  {
    if ($heute =~ /(http|www)/) {spammer(1)} else {spammer(2)}
  }
}
else                                                        # keine Vorgabe:
{
#  $cookie = GetCookie("BlogLetzt");
#  if ($cookie)
#  {
#    $heute = $cookie;
#    $cookie = 2;                                            # Cookie auswerten
#  }
#  else
#  {
    $cookie = 0;                                            # Programm wurde noch nie benutzt
    $i = $files[0];                                         # Anfang
    $heute = substr($i, 0, 8);
#  }
}
$lj = substr($heute, 0, 4);
$lm = substr($heute, 4, 2);

$i = 0;

foreach (@files)
{
  $j = substr($_, 0, 4);
  $m = substr($_, 4, 2);
  $t = substr($_, 6, 2);

  if (substr($_, 0, 4) . "0000" eq $heute)                  # Monat 00 --> dito
  {
    $heute = $j . $m . $t;
    $lm = $m;
  }
  if (substr($_, 0, 6) . "00" eq $heute)                    # Tag 00 --> ersten vorh. Tag suchen
  {
    $heute = $j . $m . $t;
  }

  if ($j gt $mj && $j * 1.0 > 1.0)
  {
    $mj = $j;
    push(@jlist, $j);                                       # neues Jahr
  }
  if ($j eq $lj && $m gt $mm)
  {
    $mm = $m;
    push(@mlist, $m);                                       # neuer Monat für laufendes Jahr
  }
  if ($j eq $lj && $m eq $lm)
  {
    push(@tlist, $t);                                       # alles passt: neuer Tag
  }

  if (substr($_, 0, 8) eq $heute) {$z = $i}                 # aktueller Zähler
  $i++;
}

print $cgi->header();

print "<HTML>\n<HEAD>\n";
print "<META HTTP-EQUIV=\"content-type\"  CONTENT=\"text/html; charset=utf-8\">\n";
print "<meta charset=\"utf-8\"/>\n";
print "<TITLE>Paul's Finnland-Job-Blog</TITLE>\n</HEAD>\n";
print "<BODY>\n";
print "<FONT FACE=\"arial\">\n";
print "<TABLE CELLPADDING=5 CELLSPACING=0 WIDTH=100% BORDER=0>\n";
print "<TR BGCOLOR=#E7BB00><TD><FONT SIZE=+3><B>Mein Job in Finnland: &nbsp;";

if ($cookie > 1)
{
  $z++;                                                     # nächster ungelesener Tag
  $i = @files - 1;                                          # höchstes Datum
  if ($z > $i) {$z = $i}
  $heute = substr($files[$z], 0, 8);
}

#$i = GetCookie("BlogLetzt");
#if ($i)
#{
#  if ($heute gt $i) {SetCookie("BlogLetzt", $heute)}
#}
#else
#{
#  SetCookie("BlogLetzt", $heute);
#}

foreach(@jlist)
{
  if (substr($heute, 0, 4) eq $_)
  {
    print "<FONT COLOR=#00AA00>" . $_ . "</FONT> &nbsp;"
  }
  else
  {
    print "<A HREF=\"$prog?h=" . $_ . "0000$ad\">$_</A> &nbsp;";
  }
}

print "</TD><TD ALIGN=\"right\">\n";
print " &nbsp; <A HREF=\"$prog?link=dir\"><B>&Uuml;bersicht</B></A>\n";
print " &nbsp; <a href=\"..\">alle Blogs </a>&uarr;\n";
print " &nbsp; <A HREF=\"http://www.lenz-online.de\">Home</A></TD></TR>\n";

print "<TR BGCOLOR=#EFC300><TD COLSPAN=2><FONT SIZE=+2><B>$lj: &nbsp; ";

foreach(@mlist)
{
  $t = substr($mname[$_], 0, 3);
  if ($mname[$_] =~ /rz/) {$t = "M&auml;r"}
  if (substr($heute, 4, 2) eq $_)
  {
    print "<FONT COLOR=#00AA00>" . $t . "</FONT> &nbsp;"
  }
  else
  {
    print "<A HREF=\"$prog?h=" . substr($heute, 0, 4) . $_ . "00$ad\">";
    print $t . "</A> &nbsp;";
  }
}
print "</TD></TR>\n";

print "<TR BGCOLOR=#F7CB00><TD COLSPAN=2><FONT SIZE=+1><B>" . $mname[$lm] . ": &nbsp;";
foreach(@tlist)
{
  if (substr($heute, 6, 2) eq $_)
  {
    if ($ad gt "")
    {
      print "<A HREF=\"$prog?muu=" . substr($heute, 0, 6) . $_ . "$ad\">Edit $_</A> &nbsp;";
    }
    else
    {
      print "<FONT COLOR=#00AA00>$_</FONT> &nbsp;";
    }
  }
  else
  {
    print "<A HREF=\"$prog?h=" . substr($heute, 0, 6) . $_ . "$ad\">$_</A> &nbsp;";
  }
}
print "</TD></TR>\n";

if ($z < 0)
{
  print "</TABLE><H1>Fehleingabe!</H1></BODY></HTML>\n";
  exit();
}

#if ($cookie < 1)
#{
#  print "<TR BGCOLOR=#FFFFFF><TD COLSPAN=2 ALIGN=\"center\">";
#  print "<B>Willkommen bei meinem Blog!</B><BR>";
#  print "Dieses Programm speichert den letzten von Dir angeschauten Tag und startet bei Deinem ";
#  print "nächsten Besuch automatisch bei dem darauffolgenden Tag. Man kann vorwärts oder zurück ";
#  print "blättern oder oben im \"Kalender\" einzelne Tage auswählen. Eine Liste aller Einträge ";
#  print "mit Datum und Überschrift findet man rechts oben unter \"Übersicht\", dort gibt es auch ";
#  print "eine einfache Suchmaschine, mit der man nach Stichwörtern suchen kann.<BR><BR>";
#  print "Dieser Hinweis erscheint nur bei Deinem ersten Besuch.<BR><BR>";
#  print "Viel Spaß beim Lesen wünscht Paul</TD></TR>\n";
#}

print "<TR BGCOLOR=#FFDD00><TD COLSPAN=2 ALIGN=\"center\">";
print "<TABLE CELLPADDING=0 CELLSPACING=0><TR>";
print "<TD WIDTH=100 ALIGN=\"left\">";
if ($z > 0) {print "<A HREF=\"$prog?h=" . substr($files[0], 0, 8) . "$ad\">Anfang</A>"} else {print "&nbsp; "}
print "</TD>";
print "<TD WIDTH=100 ALIGN=\"left\">";
if ($z > 0) {print "<A HREF=\"$prog?h=" . substr($files[$z - 1], 0, 8) . "$ad\">zur&uuml;ck</A>"} else {print "&nbsp; "}
print "</TD>";
$j = substr($heute, 0, 4);
$m = substr($heute, 4, 2);
$t = substr($heute, 6, 2);
$t = $tname[Day_of_Week($j, $m, $t)] . ", " . $t;
$m = $mname[$m];
print "<TD WIDTH=300 ALIGN=\"center\"><B> $t. $m $j </B></TD>";
print "<TD WIDTH=100 ALIGN=\"right\">";
if ($z < $max - 1) {print "<A HREF=\"$prog?h=" . substr($files[$z + 1], 0, 8) . "$ad\">weiter</A>"} else {print " &nbsp;"}
print "</TD>";
print "<TD WIDTH=100 ALIGN=\"right\">";
if ($z < $max - 1) {print "<A HREF=\"$prog?h=" . substr($files[$max - 1], 0, 8) . "$ad\">Ende</A>"} else {print " &nbsp;"}
print "</TD></TR></TABLE></TD>\n";

print "<TR BGCOLOR=#FFDD00><TD COLSPAN=2>\n";
open(DAT, "<$page/$heute.htm") || die "Datei $page $heute nicht gefunden";
my @Zeilen = <DAT>;
close(DAT);
$z = shift(@Zeilen);                                        # Überschrift
print "<HR><CENTER><H2>$z</H2></CENTER>\n";
print "<P ALIGN=\"justify\">\n";
foreach(@Zeilen) {
  $z = $_;
  $z =~s/\/blog\//\/001-FinnJob\//ig;
  print $z;
}
print "\n</TD></TR></TABLE>\n";

print "</BODY>\n";
print "</HTML>\n";


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

sub aendern
{
  my $fname = $cgi->param('muu');
  my $file;
  my @text;
  my $wort;

  print $cgi->header();

  print "<HTML>\n<HEAD>\n";
  print "<META HTTP-EQUIV=\"content-type\"  CONTENT=\"text/html; charset=ISO-8859-1\">\n";
  print "<TITLE>Paul's Finnland-Job-Blog</TITLE>\n</HEAD>\n";
  if ($fname eq "save")
  {
    print "<META HTTP-EQUIV=\"refresh\" CONTENT=\"1; URL=$prog?h=" . $cgi->param('Date') . "&link=ja\">";
    print "</HEAD>\n";
    print "<BODY>\n";
  }
  else
  {
    print "<script type=\"text/javascript\">\n";
    print "function Focus() {\n";
    print "  document.Blog.Text.focus();\n";
    print "  }\n";
    print "function Bild(lr) {\n";
    print "  var ta = document.Blog.Text.value;\n";
    print "  var bi = \"\\\\\";\n";
    print "  var fn = document.Blog.Myfile.value;\n";
    print "  fn = fn.substr(fn.lastIndexOf(bi) + 1);\n";
    print "  bi = \"<TABLE CELLSPACING=0 CELLPADDING=0 ALIGN=\\\"\";\n";
    print "  if (lr < \"2\") {\n";
    print "    bi = bi + \"left\\\"  VSPACE=5><TR>\\n<TD><IMG SRC=\\\"../blog/pics/\" + fn + \"\\\"></TD><TD WIDTH=10> </TD>\"}\n";
    print "  else {\n";
    print "    bi = bi + \"right\\\" VSPACE=5><TR>\\n<TD WIDTH=10> </TD><TD><IMG SRC=\\\"../blog/pics/\" + fn + \"\\\"></TD>\"}\n";
    print "    bi = bi + \"</TR></TABLE>\\n\";\n";
    print "  document.Blog.Text.value = ta + bi;\n";
    print "  Focus();\n";
    print "  }\n";
    print "</script>\n";
  
    print "</HEAD>\n";
    print "<BODY onload=\"Focus()\">\n";
  }
  print "<FONT FACE=\"arial\">\n";

  if ($fname eq "save")
  {
    $wort  = $cgi->param('Text');
    $fname = $cgi->param('Date');
    open(DAT, ">$page/$fname.htm") || die "$! - Datei $fname nicht gefunden";
    print DAT $wort;
    close(DAT);
    chmod(0777, "$page/$fname.htm");

    $file = $cgi->param("Myfile");
    if (length($file) > 2)
    {
      my $pname = $file;
      $pname =~ s/.*(\/|\\)//;                                     # ohne Pfadangaben
      $pname = lc($pname);
      open DAT,'>'."$page/pics/$pname" || die $!, ' - Error beim Hochladen von ',$fname;
      binmode $pname;                                              # Dateien in den Binär-Modus schalten
      binmode DAT;
      my $data;
      while(read $file, $data, 1024) {print DAT $data}
      close DAT;
      print "Datei mit ";
      print -s $pname;
      print " Bytes auf $page/pics/$pname hochgeladen.<BR>\n";
      chmod(0777, "$page/pics/$pname");
   }

    print "fertig: <A HREF=\"$prog?h=$fname\">anschauen</A>\n";
    print "</BODY>\n";
    print "</HTML>\n";
  }
  else
  {
    if (-e "$page/$fname.htm")
    {
      open(DAT, "<$page/$fname.htm") || die "Datei $heute nicht gefunden";
      @text = <DAT>;
      close(DAT);
    }
    else
    {
      @text = ("","");
    }
    print "<H2>$fname</H2>\n";
    print "<FORM ACTION=\"$prog\" METHOD=\"post\" NAME=\"Blog\" ENCTYPE=\"multipart/form-data\">\n";
    print "<INPUT NAME=\"Date\" TYPE=\"hidden\" VALUE=\"$fname\">\n";
    print "<INPUT NAME=\"muu\"  TYPE=\"hidden\" VALUE=\"save\">\n";
    print "<TEXTAREA NAME=\"Text\" COLS=\"110\" ROWS=\"25\">";
    print @text;
    print "</TEXTAREA><BR>\n";
    print "Datei: <INPUT TYPE=\"file\" NAME=\"Myfile\" SIZE=30> &nbsp; \n";
    print "<INPUT TYPE=\"button\" VALUE=\" Bild links \"  ONCLICK=\"Bild(1)\"> &nbsp; \n";
    print "<INPUT TYPE=\"button\" VALUE=\" Bild rechts \" ONCLICK=\"Bild(2)\"> &nbsp; \n";
    print "<INPUT TYPE=\"submit\" VALUE=\" absenden \">\n";
    print "</FORM>\n";
    print "</BODY>\n";
    print "</HTML>\n";
  }
  exit();
}



sub uebersicht
{
  my $jhr = 0;
  my $mon = 0;
  my $j;
  my $m;
  my $d;
  my $n;

  print $cgi->header();

  print "<HTML>\n<HEAD>\n";
  print "<META HTTP-EQUIV=\"content-type\"  CONTENT=\"text/html; charset=ISO-8859-1\">\n";
  print "<TITLE>Paul's Finnland-Job-Blog</TITLE>\n</HEAD>\n";
  print "<BODY>\n";
  print "<FONT FACE=\"arial\">\n";
  print "<TABLE CELLPADDING=2 CELLSPACING=0 BGCOLOR=#FFDD00 WIDTH=100% BORDER=0>\n";
  print "<TR BGCOLOR=#E7BB00><TD COLSPAN=5><FORM ACTION=\"$prog\" METHOD=\"post\">\n";
  print "<FONT SIZE=+3><B>Mein Job in Finnland - &Uuml;bersicht</B></FONT> ";
  print "&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ";
  print "<INPUT NAME=\"link\" TYPE=\"hidden\" VALUE=\"such\">\n";
  print "<INPUT NAME=\"such\" TYPE=\"text\" TEXTWIDTH=20 MAXLENGTH=20>\n";
  print "<INPUT TYPE=\"submit\" VALUE=\" suchen \">\n";
  print "</FORM></TD></TR>\n";

  opendir(DIR,"$page");
  @files = readdir(DIR);
  closedir(DIR);
  @files = sort(@files);
  while (substr($files[0], 0, 1) lt "2") {shift(@files);}          # . löschen
  while (substr($files[@files-1], 0, 1) gt "2") {pop(@files);}     # A löschen

  foreach (@files)
  {
    $j = substr($_, 0, 4);
    $m = substr($_, 4, 2);
    $t = substr($_, 6, 2);
    if ($j > $jhr)
    {
      print "<TR><TD WIDTH=50> $j </TD>\n";
      $mon = 0;
      $jhr = $j;
    }
    else
    {
      print "<TR><TD WIDTH=50> &nbsp; </TD>\n";
    }
    if ($m > $mon)
    {
      $n = $mname[$m];
      if ($n =~ /rz/) {$n = "M&auml;rz"}
      print "<TD WIDTH=100> $n </TD>\n";
      $mon = $m;
    }
    else
    {
      print "<TD WIDTH=100> &nbsp; </TD>\n";
    }
    $m = $tname[Day_of_Week($j, $m, $t)];
    print "<TD WIDTH=100> $m </TD>\n";
    print "<TD WIDTH=50> $t. </TD>\n";

    open(DAT, "<$page/$_") || die "Datei $page $_ nicht gefunden";
    my @Zeilen = <DAT>;
    close(DAT);
    $t = substr($_, 0, 8);
    $m = shift(@Zeilen);                                        # Überschrift
    print "<TD> <A HREF=\"$prog?h=$t\">$m</A> </TD></TR>\n";
  }
  print "</TABLE>\n";
  exit();
}



sub suchen
{
  my $gef;
  my $fname;
  my @Zeilen;
  my $Zeilen;
  my $anf;
  my $such = $cgi->param('such');
  my $result = 0;

  print $cgi->header();

  print "<HTML>\n<HEAD>\n";
  print "<META HTTP-EQUIV=\"content-type\"  CONTENT=\"text/html; charset=ISO-8859-1\">\n";
  print "<TITLE>Paul's Finnland-Job-Blog</TITLE>\n</HEAD>\n";
  print "<BODY>\n";
  print "<FONT FACE=\"arial\">\n";
  print "<TABLE CELLPADDING=2 CELLSPACING=0 BGCOLOR=#FFDD00 WIDTH=100% BORDER=0>\n";
  print "<TR BGCOLOR=#E7BB00><TD COLSPAN=2><FONT SIZE=+3><B>Mein Job in Finnland - Suchergebnisse:</B></FONT></TD></TR>\n";

  opendir(DIR,"$page");
  @files = readdir(DIR);
  closedir(DIR);
  @files = sort(@files);
  while (substr($files[0], 0, 1) lt "2") {shift(@files);}          # . löschen
  while (substr($files[@files-1], 0, 1) gt "2") {pop(@files);}     # A löschen

  foreach (@files)
  {
    $fname = substr($_, 0, 8);
    open(DAT, "<$page/$_") || die "Datei $page $_ nicht gefunden";
    @Zeilen = <DAT>;
    close(DAT);
    foreach (@Zeilen) {$_ =~ s/[\n\r]//g;}
    $Zeilen = join(" ", @Zeilen);
    $Zeilen =~ s/<.*?>//g;
    $gef = 0;
    do
    {
      $gef = index($Zeilen, $such, $gef);
      if ($gef > -1)
      {
        $anf = $gef - 50;
        if ($anf < 0) {$anf = 0}
        print "<TR><TD><A HREF=\"http://www.lenz-online.de/cgi-bin/blog.pl?h=$fname\">";
        print substr($fname, 6) . "." . substr($fname, 4, 2) . "." . substr($fname, 0, 4);
        print "</TD><TD>";
        $result = substr($Zeilen, $anf, 100);
        $result =~ s/$such/<B>$such<\/B>/g;
        print "$result</TD></TR>\n";
        $result = 1;
        $gef = $gef + 40;
      }
    } until ($gef < 0);
  }
  print "<TR><TD COLSPAN=2> &nbsp; </TD></TR>\n";
  if ($result < 1) {print "<TR><TD COLSPAN=2>Das Suchwort <B>$such</B> wurde leider nicht gefunden.</TD></TR>\n"}
  print "<TR><TD COLSPAN=2>Zur&uuml;ck zur <A HREF=\"\">&Uuml;bersicht</A></TD></TR>\n";
  print "</TABLE>\n";

  print "</BODY></HTML>\n";
  exit();
}



################### Subroutinen #############################


sub SetCookie
{
  my $CookieDauer = 365;                                    # Tage
  my $CookieName  = $_[0];
  my $CookieWert  = $_[1];
  my $Verfall = time() + $CookieDauer * 60 * 60 * 24;
  $Verfall = localtime($Verfall);
  print "Set-Cookie: " . $CookieName . "=" . $CookieWert . ";";
  print " expires=$Verfall;";
  print " path=/;";
  print " domain=www.lenz-online.de;";
  print "\n";
}



sub GetCookie
{
  my %AlleCookies;
  my @RohCookies;
  my ($N_cookie, $W_cookie);
  # Rohcookies trennen
  $N_cookie = $ENV{'HTTP_COOKIE'};
  if ($N_cookie)
  {
    @RohCookies = split (/; /,$ENV{'HTTP_COOKIE'});
    # Name / Wert Paare trennen
    foreach (@RohCookies)
    {
      ($N_cookie, $W_cookie) = split (/=/,$_);
      $AlleCookies{$N_cookie} = $W_cookie;
    }
    return $AlleCookies{$_[0]};
  }
  else
  {return ""}
}



sub spammer
{
  my $spam = shift;
  if ($spam > 1) 
  {$spam = "Manual input does not work here, sorry.<br>Manuellen Eingaben laufen hier nicht."}
  else
  {$spam = "Piss off you little stupid fucking spammer!"}
  print $cgi->header();

  print "<HTML>\n<HEAD><TITLE>Piss off!!!</TITLE>\n</HEAD>\n";
  print "<BODY><FONT FACE=\"arial\">\n";
  print "<H1>$spam</H1></BODY></HTML>\n";
  exit();
}

