#!/usr/bin/perl

# mit POST abgeschickte Daten einlesen. Angenommen wird, dass die Daten von einem Formular
# kommen, das nur ein einziges Eingabefeld (das für den Suchbegriff) enthält.

#$datapath = "http://www.rechtliches.de";
$datapath = "/var/www/jurawelt/gesetze";

$suchstring = $ARGV[0];

# codierte Umlaute etc. wieder herstellen - geht eigentlich viel einfacher und eleganter,
# aber nun ist der Schrott nun mal in der Welt und tut, was er für diese Funktion tun muss.
# Vor der Übernahme in andere Programme sei gewarnt.

$suchstring =~ s/\%E4|\%C4/&auml\;/g; # "ä" wieder herstellen
$suchstring =~ s/\%F6|\%D6/&ouml\;/g; # "ö" wieder herstellen
$suchstring =~ s/\%FC|\%DC/&uuml\;/g; # "ü" wieder herstellen
$suchstring =~ s/\%DF/&szlig\;/g; # "ß" wieder herstellen
$suchstring =~ s/\+/ /g; # Leerzeichen wieder herstellen

# diverse beliebte Fehleingaben abfangen

$suchstring =~ s/\%A7[ _]*[0-9\,]+[a-z]*//g; # Paragraphenangaben entfernen
$suchstring =~ s/\%A7//g; # verwaiste Paragraphenzeichen entfernen (können aus Angaben à la "§§ 241f BGB" entstehen)
$suchstring =~ s/[Aa]rt.[ _]*[0-9\,]+[a-z]*//g; # Artikelangaben entfernen
$suchstring =~ s/[\w^][0-9]+[a-z]*//g; # verwaiste Zahlenfolgen, ggf. mit angehängten Buchstaben entfernen (§-Angaben ohne §-Zeichen)
$suchstring =~ s/^ +//g; # Leerzeichen am Stringanfang entfernen
$suchstring =~ s/ +$//g; # Leerzeichen am Stringende entfernen
$suchstring =~ s/  +/ /g; # mehrfache Leerzeichen auf eines reduzieren
$suchstring =~ s/\*$//g; # Sterne am String entfernen, Wildcards funktionieren nicht, und am Wortende ist damit sowieso nur gemeint, was die
                         # Suchfunktion automatisch macht
$suchstring ="\L$suchstring"; # ganzen Suchstring in Kleinbuchstaben verwandeln
$eingabe = $suchstring;

# Kopf der HTML-Datei ausgeben

print <<ENDE;
<p>Suchbegriff: <em>$suchstring</em></p>
ENDE

# Hier beginnt die eigentliche Suche.

if ($suchstring) {

$durchlauf = 0;
$bund_fund = 0;
$bund_entwurf_fund = 0;
$bund_verk_fund = 0;
$bawue_fund = 0;
$lsa_fund = 0;
$bereich_fund = 0;
while ((!$findus) && $durchlauf < 2) { # durchsucht das Bundesrecht

    open (INDEX, "$datapath/suche.txt");
    if ($durchlauf == 1 ) {
        print "<p>Nichts gefunden - suche nach Schreibvarianten</p>"
    }
    else { # sehr häufig eingegebene Suchfragen beantworten, zu denen es eigentlich nichts gibt
        if ("bgbl" =~ /$suchstring/ || "bundesgesetzblatt" =~ /$suchstring/) {
            print <<ENDE;
<p>Eine Online-Version des <a href="http://www.bundesanzeiger.de/index.php?main=5&amp;sub=2">Bundesgesetzblatts</a>
stellt der Bundesanzeiger Verlag bereit.</p>
ENDE
        }
        if (0 || "bundesangestelltentar" =~ /$suchstring/ || "bat" eq $suchstring) {
            print <<ENDE;
<p>Der <a href="http://www.uni-tuebingen.de/Personalrat/BAT-Uebersicht.htm">Bundesangestelltentarifvertrag West</a> wird von der
Universität T&uuml;bingen in einer Fassung von 2001 bereitgestellt. Die
<a href="http://www.uni-tuebingen.de/uni/qqp/Verg-BAT-Euro.html">Gehaltstabellen</a> dazu
sind auf dem Stand von 2003.</p>
<p>Den <a href="http://www.uni-leipzig.de/~prhsb/bat_o/bat.htm">Bundesangestelltentarifvertrag Ost</a>
stellt die Universit&auml;t Leipzig in seiner aktuellen Fassung einschlie&azlig;lich
Verg&uuml;tungstabellen und Zusatzvertr&auml;gen bereit. Allerdings fehlen einige
Bestimmungen, die f&uuml;r Universit&auml;ten nicht relevant sind</p>
ENDE
        }
    }
    while ($zeile = <INDEX>) {
        ($name, $abk, $stichwort) = split(/!/, $zeile);
        $zeile ="\L$zeile";
        if ($durchlauf == 1) {
            $zeile =~ s/gesetz//g;
            $zeile =~ s/recht//g;
            $zeile =~ s/verordnung//g;
            $zeile =~ s/ordnung//g;
            $zeile =~ s/zehntes/zehnte/g;
            $zeile =~ s/neuntes/neunte/g;
            $zeile =~ s/achtes/achte/g;
            $zeile =~ s/siebtes/siebte/g;
            $zeile =~ s/sechstes/sechste/g;
            $zeile =~ s/f\&uuml\;nftes/if\&uuml\;nfte/g;
            $zeile =~ s/viertes/vierte/g;
            $zeile =~ s/drittes/dritte/g;
            $zeile =~ s/zweites/zweite/g;
            $zeile =~ s/erstes/erste/g;
            $zeile =~ s/elftes/elfte/g;
            $zeile =~ s/ //g;
            $zeile =~ s/-//g;
        }
        if ($zeile =~ /$suchstring/) {
            if(!$bund_fund) {
               print "<h2>Bundesrecht</h2>\n";
               print "<ul>\n";
               $bund_fund = 1;
            }
            $urlname = &umlauteweg($abk);
            print "<li><a href=\"http://www.rechtliches.de/info_$urlname.html\">$name</a> - $abk</li>\n";
            ++$findus;
       }
    }
    close INDEX;
    if ($bund_fund) {
        print "</ul>\n";
    }

    open (INDEX, "$datapath/BaWue/suche.txt"); # durchsucht das Landesrecht von Baden-Württemberg
    while ($zeile = <INDEX>) {
        ($name, $abk, $stichwort) = split(/!/, $zeile);
        $zeile ="\L$zeile";
        if ($durchlauf == 1) {
            $zeile =~ s/gesetz//g;
            $zeile =~ s/recht//g;
            $zeile =~ s/verordnung//g;
            $zeile =~ s/ordnung//g;
            $zeile =~ s/zehntes/zehnte/g;
            $zeile =~ s/neuntes/neunte/g;
            $zeile =~ s/achtes/achte/g;
            $zeile =~ s/siebtes/siebte/g;
            $zeile =~ s/sechstes/sechste/g;
            $zeile =~ s/f\&uuml\;nftes/if\&uuml\;nfte/g;
            $zeile =~ s/viertes/vierte/g;
            $zeile =~ s/drittes/dritte/g;
            $zeile =~ s/zweites/zweite/g;
            $zeile =~ s/erstes/erste/g;
            $zeile =~ s/elftes/elfte/g;
            $zeile =~ s/ //g;
            $zeile =~ s/-//g;
        }
        if ($zeile =~ /$suchstring/) {
            if(!$bawue_fund) {
               print "<h2>Landesrecht Baden-W&uuml;rttemberg</h2>\n";
               print "<ul>\n";
               $bawue_fund = 1;
            }
            $urlname = &umlauteweg($abk);
            print "<li><a href=\"http://www.rechtliches.de/BaWue/info_$urlname.html\">$name</a> - $abk</li>\n";
            ++$findus;
       }
    }
    close INDEX;
    if ($bawue_fund) {
        print "</ul>\n";
    }

    open (INDEX, "$datapath/LSA/suche.txt");
    while ($zeile = <INDEX>) { # durchsucht das Landesrecht von Sachsen-Anhalt
        ($name, $abk, $stichwort) = split(/!/, $zeile);
        $zeile ="\L$zeile";
        if ($durchlauf == 1) {
            $zeile =~ s/gesetz//g;
            $zeile =~ s/recht//g;
            $zeile =~ s/verordnung//g;
            $zeile =~ s/ordnung//g;
            $zeile =~ s/zehntes/zehnte/g;
            $zeile =~ s/neuntes/neunte/g;
            $zeile =~ s/achtes/achte/g;
            $zeile =~ s/siebtes/siebte/g;
            $zeile =~ s/sechstes/sechste/g;
            $zeile =~ s/f\&uuml\;nftes/if\&uuml\;nfte/g;
            $zeile =~ s/viertes/vierte/g;
            $zeile =~ s/drittes/dritte/g;
            $zeile =~ s/zweites/zweite/g;
            $zeile =~ s/erstes/erste/g;
            $zeile =~ s/elftes/elfte/g;
            $zeile =~ s/ //g;
            $zeile =~ s/-//g;
        }
        if ($zeile =~ /$suchstring/) {
            if(!$lsa_fund) {
               print "<h2>Landesrecht Sachsen-Anhalt</h2>\n";
               print "<ul>\n";
               $lsa_fund = 1;
            }
            $urlname = &umlauteweg($abk);
            print "<li><a href=\"http://www.rechtliches.de/LSA/info_$urlname.html\">$name</a> - $abk</li>\n";
            ++$findus;
       }
    }
    close INDEX;
    if ($lsa_fund) {
        print "</ul>\n";
    }


    open (INDEX, "$datapath/rubriken.txt"); # durchsucht die Liste der Rechtsbereiche
    while ($zeile = <INDEX>) {
      ++$rubrik;
      $rubname = $zeile;
      chomp($rubname);
      $zeile = "\L$zeile";
        if ($durchlauf == 1) {
            $zeile =~ s/gesetz//g;
            $zeile =~ s/recht//g;
            $zeile =~ s/verordnung//g;
            $zeile =~ s/ordnung//g;
            $zeile =~ s/zehntes/zehnte/g;
            $zeile =~ s/neuntes/neunte/g;
            $zeile =~ s/achtes/achte/g;
            $zeile =~ s/siebtes/siebte/g;
            $zeile =~ s/sechstes/sechste/g;
            $zeile =~ s/f\&uuml\;nftes/if\&uuml\;nfte/g;
            $zeile =~ s/viertes/vierte/g;
            $zeile =~ s/drittes/dritte/g;
            $zeile =~ s/zweites/zweite/g;
            $zeile =~ s/erstes/erste/g;
            $zeile =~ s/elftes/elfte/g;
            $zeile =~ s/ //g;
            $zeile =~ s/-//g;
        }
      if ($zeile =~ /$suchstring/ ) {
            if(!$bereich_fund) {
               print "<h2>Rechtsbereiche (Bundesrecht)</h2>\n";
               print "<ul>\n";
               $bereich_fund = 1;
            }
        print "<li><a href=\"http://www.rechtliches.de/Gesetze_$rubrik.html\">$rubname</a></li>\n";
        ++$findus;
      }
    }
    close INDEX;
    if ($bereich_fund) {
        print "</ul>\n";
    }

    open (INDEX, "$datapath/suche2.txt"); # durchsucht die Gesetzentwürfe
    while ($zeile = <INDEX>) {
      $rubname = $zeile;
      chomp($rubname);
      ($name, $stichwort) = split(/!/, $zeile);
      $eile = "\L$zeile";
      if ($eile =~ /$suchstring/ ) {
        if ($durchlauf == 1) {
            $eile =~ s/gesetz//g;
            $eile =~ s/recht//g;
            $eile =~ s/verordnung//g;
            $eile =~ s/ordnung//g;
            $eile =~ s/zehntes/zehnte/g;
            $eile =~ s/neuntes/neunte/g;
            $eile =~ s/achtes/achte/g;
            $eile =~ s/siebtes/siebte/g;
            $eile =~ s/sechstes/sechste/g;
            $eile =~ s/f\&uuml\;nftes/if\&uuml\;nfte/g;
            $eile =~ s/viertes/vierte/g;
            $eile =~ s/drittes/dritte/g;
            $eile =~ s/zweites/zweite/g;
            $eile =~ s/erstes/erste/g;
            $eile =~ s/elftes/elfte/g;
            $eile =~ s/ //g;
            $eile =~ s/-//g;
        }
        if(!$bund_entwurf_fund) {
           print "<h2>Gesetzentw&uuml;rfe (Bundesrecht)</h2>\n";
           print "<ul>\n";
           $bund_entwurf_fund = 1;
        }
        $urlname = &umlauteweg($name);
        print "<li><a href=\"http://www.rechtliches.de/info_$urlname.html\">$name</a></li>\n";
        ++$findus;
      }
    }
    close INDEX;
        if ($bund_entwurf_fund) {
            print "</ul>\n";
    }

    open (INDEX, "$datapath/suche3.txt"); # durchsucht neuere Gesetze wie im BGBl. verkündet (auch reine Änderungsgesetze)
    while ($zeile = <INDEX>) {
      ++$rubrik;
      $rubname = $zeile;
      chomp($rubname);
      ($name, $stichwort) = split(/!/, $zeile);
      $eile = "\L$zeile";
        if ($durchlauf == 1) {
            $eile =~ s/gesetz//g;
            $eile =~ s/recht//g;
            $eile =~ s/verordnung//g;
            $eile =~ s/ordnung//g;
            $eile =~ s/zehntes/zehnte/g;
            $eile =~ s/neuntes/neunte/g;
            $eile =~ s/achtes/achte/g;
            $eile =~ s/siebtes/siebte/g;
            $eile =~ s/sechstes/sechste/g;
            $eile =~ s/f\&uuml\;nftes/if\&uuml\;nfte/g;
            $eile =~ s/viertes/vierte/g;
            $eile =~ s/drittes/dritte/g;
            $eile =~ s/zweites/zweite/g;
            $eile =~ s/erstes/erste/g;
            $eile =~ s/elftes/elfte/g;
            $eile =~ s/ //g;
            $eile =~ s/-//g;
        }
      if ($eile =~ /$suchstring/ ) {
        if(!$bund_verk_fund) {
           print "<h2>Neu verk&uuml;ndete Gesetze (Bundesrecht)</h2>\n";
           print "<p>Hier erscheinen auch reine &Auml;nderungsgesetze (Artikelgesetze).</p>\n";
           print "<ul>\n";
           $bund_verk_fund = 1;
        }
        $urlname = &umlauteweg($name);
        print "<li><a href=\"http://www.rechtliches.de/info_$urlname.html\">$name</a></li>\n";
        ++$findus;
      }
    }
    close INDEX;
    if ($bund_verk_fund) {
        print "</ul>\n";
    }


    ++$durchlauf;

    if ($durchlauf == 1) {
        $suchstring =~ s/gesetz//g;
        $suchstring =~ s/recht//g;
        $suchstring =~ s/verordnung//g;
        $suchstring =~ s/ordnung//g;
        $suchstring =~ s/10\./zehnte/g;
        $suchstring =~ s/11\./elfte/g;
        $suchstring =~ s/1\./erste/g;
        $suchstring =~ s/2\./zweite/g;
        $suchstring =~ s/3\./dritte/g;
        $suchstring =~ s/4\./vierte/g;
        $suchstring =~ s/5\./f\&uuml\;nfte/g;
        $suchstring =~ s/6\./sechste/g;
        $suchstring =~ s/7\./siebte/g;
        $suchstring =~ s/8\./achte/g;
        $suchstring =~ s/9\./neunte/g;
        $suchstring =~ s/ //g;
        $suchstring =~ s/\-//g;
    }
}

print "</ul>\n"
} # von if ($suchstring);

# HTML-Ausgabe, falls die Suche erfolglos war

if (!$findus) {
  print <<ENDE;
<p>Keine passenden Gesetze gefunden.</p>

Bitte verändern Sie Ihre Suchanfrage und versuchen Sie es erneut.

ENDE

# Suchanfrage in Logdatei schreiben

  open (ERROR, ">>$datapath/findnix.txt");
  print ERROR "$eingabe\n";
  close ERROR
}
else {
  open (NOERROR, ">>$datapath/findwas.txt");
  print NOERROR "$eingabe $findus\n";
  close NOERROR
}

# Ende der HTML-Datei schreiben

#
# ENDE DES HAUPTPROGRAMMS
#

# Umlaut-Entities und gewisse Sonderzeichen in einem String durch Unbedenkliches ersetzen

sub umlauteweg {

my $daten = $_[0];

$daten =~s/&Auml;/Ae/g; #Umlaute gehören nicht in Dateinamen
$daten =~s/&auml;/ae/g;
$daten =~s/&Ouml;/Oe/g;
$daten =~s/&ouml;/oe/g;
$daten =~s/&Uuml;/Ue/g;
$daten =~s/&uuml;/ue/g;
$daten =~s/&szlig;/ss/g;
$daten =~s/\//-/g; # Schrägstriche machen auch Probleme...
$daten =~s/ /_/g;  # ...ebenso wie Leerzeichen.
return ($daten);
} # von umlauteweg

