#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use strict;
use warnings;
use CGI;
use File::Find;
use HTML::Parser;
my $cgi = CGI->new();
print $cgi->header(-type => 'text/html');
my %params = $cgi->Vars();
my $string = '';
my $title = '';
my $basedir = '/home/netzgrafik/www.marktgemeinde-seibersdorf.at/';
my $base_url = 'http://www.marktgemeinde-seibersdorf.at/';
my $hp_title = 'Startseite';
# hier noch den Pfad zur Vorlage eintragen
my $template = '/home/netzgrafik/www.marktgemeinde-seibersdorf.at/vorlagen/vorlage_02.html';
# dateien die nicht durchsucht werden sollten
my @unwanted = qw(amadeus.htm);
my @files = ();
find(\&find_files,$basedir);
@files = grep{ my $i = $_; !grep{ $i =~ /\Q$_\E$/ }@unwanted }@files;
my ($includes) = search($params{terms},\@files,$basedir);
print_html($base_url,$template,$hp_title,$params{terms},$includes);
sub find_files{
push(@files,$File::Find::name) if(-f $File::Find::name && $_ =~ /\.htm$/);
push(@files,$File::Find::name) if(-f $File::Find::name && $_ =~ /\.html?$/);
}
sub print_html{
my ($base,$template,$title,$terms,$hashref) = @_;
my $content = '';
{
local $/;
open(my $fh,'<',$template) or die $!;
$content = <$fh>;
close $fh;
}
my $html = '
\n
Such Information:
\n- Suchbegriff: ~;
$html.= join(", ",split(/\s+/,$terms));
$html .= qq~
- $title\n
\n~;
#netzgrafik.com.\n~;
$content =~ s/\$Titel/$title/;
$content =~ s/\$Message/$html/;
print $content;
}
sub search{
my ($termsstring,$files,$basedir) = @_;
my @terms = split(/\s+/,$termsstring);
my $parser = HTML::Parser->new(
api_version => 3,
start_h => [\&start,"self,tagname,attr"],
text_h => [\&text,"self,dtext"],
end_h => [\&end,"self,tagname"]);
$parser->{divs} = 0;
my %include;
for my $html_file(@$files){
$string = '';
$title = '';
$parser->parse_file($html_file);
foreach my $term (@terms) {
$term = umlauts($term);
# hier wurde noch das "i" angef?gt f?r "ignore case" also
# matching ohne Ber?cksichtigung von Gro?- und Kleinschreibung
if ($string =~ /$term/i or $title =~ /$term/i) {
(my $local_file = $html_file) =~ s/\Q$basedir\E//;
$include{$local_file} = $title;
last;
}
}
}
return \%include;
}
sub start{
my ($self,$tag,$attr) = @_;
if($tag eq 'body'){
$self->{search} = 1;
}
# if($tag eq 'div' and $self->{search}){
# $self->{divs}++;
# }
if($tag eq 'title'){
$self->{title} = 1;
}
}
sub text{
my ($self,$dtext) = @_;
$string .= $dtext if($self->{search});
$title = $dtext if($self->{title});
}
sub end{
my ($self,$tag) = @_;
if($tag eq 'div' and $self->{search}){
$self->{divs}--;
}
if($tag eq 'title'){
$self->{title} = 0;
}
}
sub umlauts{
my ($term) = @_;
$term=~ s/”/?\;/g;
$term=~ s/x/?\;/g;
$term=~ s/–/?\;/g;
$term=~ s/\?/?\;/g;
$term=~ s/¸/?\;/g;
$term=~ s/\?/?\;/g;
$term=~ s/\?/?\;/g;
return $term;
}