#!/usr/bin/perl
print "Content-type: text/html\n\n";

############################################################################
# © Copyright 2000 Duotone, grafische samenwerking,  Dordrecht #############
############################################################################
# Alle rechten voorbehouden. Niets van deze uitgave mag worden #############
# verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand, of ####
# openbaar gemaakt, in enige vorm of op enige wijze, hetzij elektronisch, ##
# mechanisch, door fotokopieen, opnamen, of enige andere manier, zonder ####
# voorafgaande toestemming van de maker ####################################
# Ondanks alle aan de samenstelling van deze uitgave bestede zorg kan ######
# de maker geen aansprakelijkheid aanvaarden voor schade die het gevolg is #
# van enige fout in deze uitgave ###########################################
############################################################################
# All Rights Reserved. No part of this publication may be reproduced or ####
# transmitted in any form or by any means, electronic or mechanic, #########
# including photocopy, recording or any information storage and retrieval ##
# system, without permission of the publisher ##############################
############################################################################
# info@duotone.nl ##########################################################
############################################################################
# serial number 8734gfu898 owned by Wageningen University ##################
############################################################################

#$basedir = "/home/impact/bestanden";
$basedir="E:/WebSites/impact/website/bestanden";
$baseurl = "http://www.rural-impact.net/bestanden";

$file = "*.html";

#$bases = "bases"; #### directory waarin zich de databases bevinden
$bases = "E:/websites/impact/website/cgi-bin/bases"; #### directory waarin zich de databases bevinden

$field_of_activitybd = "field_of_activity.db";
$countrybd = "country.db";
$regionbd = "region.db";
$bestandendb = "bestanden.db";
$list = "explore.list"; ##### basisbestand voor explorepagina in dir "bases" zetten
$betandlist = "lijst.list"; ##### basisbestand voor explorepagina in dir "bases" zetten

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

$command = "$ENV{'QUERY_STRING'}";

if ($command eq "start") {
&bouw_inhoud;
} elsif ($command eq "soort") {
&soort;
} else {
if ($command eq "definitions") {
&parse_form;
&definitions;
} elsif ($command eq "vrij") {
&parse_form;
&vrij;
}
}

##################### opbouwen van de inhoudspagina
####sub bouw_inhoud
sub bouw_inhoud {

@database = ();
open (DB , "$bases/$field_of_activitybd");
@database = <DB>;
close(DB);
@fields = ();
@database = sort @database;####
foreach $base (@database) {
$base =~ s/\n//g;
($waarde,$bestanden) = split /\?\?/,$base;
$waarde =  "<option value=\"$waarde\">$waarde<\/OPTION>\n";
push @fields, "$waarde";
}

@database = ();
open (DB , "$bases/$countrybd");
@database = <DB>;
close(DB);

@country = ();
@database = sort @database;####
foreach $base (@database) {
$base =~ s/\n//g;
($waarde,$bestanden) = split /\?\?/,$base;
$waarde =  "<option value=\"$waarde\">$waarde<\/OPTION>\n";
push @country, "$waarde";
}

@database = ();
open (DB , "$bases/$regionbd");
@database = <DB>;
close(DB);

@region = ();
@database = sort @database;####
foreach $base (@database) {
$base =~ s/\n//g;
($waarde,$bestanden) = split /\?\?/,$base;
$waarde =  "<option value=\"$waarde\">$waarde<\/OPTION>\n";
push @region, "$waarde";
}

@bestand = ();
open (BESTAND , "$bases/$list");
@bestand = <BESTAND>;
close(BESTAND);

foreach $regel (@bestand) {
$regel =~ s/\%\%fields\%\%/@fields/g;
$regel =~ s/\%\%country\%\%/@country/g;
$regel =~ s/\%\%region\%\%/@region/g;
print "$regel\n";
}
exit;
} ####### einde sub bouw_pagina

########## start sub soort
sub soort {
@database = ();
open (DB , "$bases/$bestandendb");
@database = <DB>;
close(DB);

@cases = ();

foreach $base (@database) {#############a
$base =~ s/\n//g;
($html,$titel,$illus,$samen,$soort) = split /\:\:/,$base;
if ($soort eq "Short description field of activity") {#############c
$regel = "<B><A HREF=\"$baseurl\/$html\">$titel<\/A></B>";
if ($samenvat eq "yes") {
$regel = "$regel<BR>$samen<P>\n";
} else {
$regel = "$regel<P>\n";
}
push @cases, $regel;
}############c
}#############a

$term = "Short description field of activity<BR>\n";

@bestand = ();
open (BESTAND , "$bases/$betandlist");
@bestand = <BESTAND>;
close(BESTAND);


foreach $regel (@bestand) {
$regel =~ s/\%\%term\%\%/$term/g;
if ($#cases eq "-1") {
$regel =~ s/\%\%cases\%\%/no cases found/g;
} else {
$regel =~ s/\%\%cases\%\%/@cases/g;
}
print "$regel\n";
}

exit;

}
############ einde sub soort





######## subroutine definitions
sub definitions {


$fields_of_activity = "$FORM{'fields_of_activity'}";
$en_of = "$FORM{'en_of'}";
$country = "$FORM{'country'}";
$region = "$FORM{'region'}";
$samenvat = "$FORM{'samenvat'}";


############ controleren op invoerfouten
if ($fields_of_activity eq "" && $region eq "" && $country eq "") {
$fout = "alles";
&fout;
} elsif ($fields_of_activity eq "" && $en_of eq "en") {
$fout = "field";
&fout;
} elsif ($country eq "" && $en_of eq "en" && $region eq "") {
$fout = "country";
&fout;
}
############ einde controleren op invoerfouten


####################### in database field_of_activity naar de bestanden met de opgegeven waarden zoeken
@database = ();
open (DB , "$bases/$field_of_activitybd");
@database = <DB>;
close(DB);

@fields = ();
foreach $base (@database) {
$base =~ s/\n//g;
($waarde,$bestanden) = split /\?\?/,$base;
if ($waarde eq "$fields_of_activity") {
@fields = split /\:\:/,$bestanden;
}
}

####################### in database country naar de bestanden met de opgegeven waarden zoeken
@database = ();
open (DB , "$bases/$countrybd");
@database = <DB>;
close(DB);

@country = ();
foreach $base (@database) {
$base =~ s/\n//g;
($waarde,$bestanden) = split /\?\?/,$base;
if ($waarde eq "$country") {
@country = split /\:\:/,$bestanden;
}
}

####################### in database region naar de bestanden met de opgegeven waarden zoeken
@database = ();
open (DB , "$bases/$regionbd");
@database = <DB>;
close(DB);

@region = ();
foreach $base (@database) {
$base =~ s/\n//g;
($waarde,$bestanden) = split /\?\?/,$base;
if ($waarde eq "$region") {
@region = split /\:\:/,$bestanden;
}
}


@gelijken = ();
@gelijkena = ();
@gelijkenb = ();

if ($en_of eq "en")                          {#if ($en_of eq "en") 

foreach $waarde (@fields)             {#foreach $waarde (@fields)

foreach $regel (@country) {
if ($regel eq "$waarde") {
push @gelijkena, $regel;
}
}

foreach $reg (@region)              {
if ($reg eq "$waarde") {
push @gelijkenb, $reg;
}
}

                                       }#einde foreach $waarde (@fields)





if ($region eq "")  {
@gelijken = @gelijkena;
} elsif ($country eq "") {
@gelijken = @gelijkenb;
} else                                { ###################bbbbbbbbbbbbb

foreach $waarde (@gelijkena) { #########foreach a
foreach $regel (@gelijkenb) { #########foreach b
if ($regel eq "$waarde") { ###################aaaaaaaaa
$regel = "";
} ###################aaaaaaaaa
} #########foreach b
}  #########foreach a

@gelijken = (@gelijkena, @gelijkenb);

                                       } ###################bbbbbbbbbbbbb


                                               } #einde $en_of eq "en"




########vergelijk de verzamelingen uit de database en voeg samen bij $en_of heeft de waarde "of"
if ($en_of eq "of") {

foreach $waarde (@region) { #########foreach a
foreach $regel (@fields) { #########foreach b
if ($regel eq "$waarde") { ###################aaaaaaaaa
$regel = "";
} ###################aaaaaaaaa
} #########foreach b
}  #########foreach a

@gelijken = (@region, @fields);

foreach $waarde (@gelijken) { #########foreach a
foreach $regel (@country) { #########foreach b
if ($regel eq "$waarde") { ###################aaaaaaaaa
$regel = "";
} ###################aaaaaaaaa
} #########foreach b
}  #########foreach a

@gelijken = (@gelijken, @country);

}########einde vergelijk de verzamelingen uit de database en voeg samen bij $en_of heeft de waarde "of"

#### verzameling bestanden is gemaakt, nu lege waarden verwijderen en afdrukpagina opbouwen

@bestanden = ();
foreach $waarde (@gelijken) {
if ($waarde eq "") {
} else {
push @bestanden, $waarde;
}
}


@database = ();
open (DB , "$bases/$bestandendb");
@database = <DB>;
close(DB);

@cases = ();
foreach $base (@database) {#############a
$base =~ s/\n//g;
($html,$titel,$illus,$samen,$soort) = split /\:\:/,$base;
foreach $waarde (@bestanden) {#############b
$regel = "<B>$soort<\/B>\: ";
if ($waarde eq "$html") {#############c
$regel = "$regel<B><A HREF=\"$baseurl\/$html\">$titel<\/A></B>";
if ($samenvat eq "yes") {
$regel = "$regel<BR>$samen<P>\n";
} else {
$regel = "$regel<P>\n";
}
push @cases, $regel;
}############c
}#############b
}#############a



$term = "$fields_of_activity<BR> $country<BR> $region<BR>\n";

@bestand = ();
open (BESTAND , "$bases/$betandlist");
@bestand = <BESTAND>;
close(BESTAND);


foreach $regel (@bestand) {
$regel =~ s/\%\%term\%\%/$term/g;
if ($#cases eq "-1") {
$regel =~ s/\%\%cases\%\%/no cases found/g;
} else {
$regel =~ s/\%\%cases\%\%/@cases/g;
}
print "$regel\n";
}

exit;


} ###############einde subroutine definitions

######## subroutine vrije termen
sub vrij {

# Get Files To Search Through

@FILES = <$basedir/$file>;
foreach $FILE (@FILES) {
if ($FILE =~ /$basedir\/(.*)/) {
$FILE = $1;
}
}



# Search the files
&search;

# Print Results of Search
&return_html;
exit;
}
######## einde subroutine vrij



sub fout {
print "<!-- ©2000 Duotone, grafische samenwerking, Dordrecht, The Netherlands\: info\@duotone.nl-->\n";
print "<HTM><HEAD><TITLE>wrong<\/TITLE><\/HEAD><BODY background=\"..\/impact\/illus\/bg1.jpg\" BGCOLOR=\"\#DAE8DE\" LINK=\"\#224337\" VLINK=\"\#224337\" TEXT=\"\#000000\">\n";
print "<FONT face=\"Verdana, arial, helvetica\" size=\"2\">\n";
print "<B>You made a mistake. <A HREF=\"JavaScript\:history.back()\">go back<\/A><\/B><P>\n";

if ($fout eq "alles") {
print "no field of activity,<BR>nor country,<BR> nor region\n";
} elsif ($fout eq "field") {
print "no field of activity\n";
} elsif ($fout eq "country") {
print "no country,<BR>nor region\n";
}


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



#######################
# search Subroutine
sub search {

   @terms = split(/\s+/, $FORM{'vrij'});

   foreach $FILE (@FILES) {


      open(FILE,"$basedir\/$FILE");
      @LINES = <FILE>;
      close(FILE);




      $string = join(' ',@LINES);
      $string =~ s/\n//g;
#########      if ($FORM{'boolean'} eq 'AND') {     #################### 1
         foreach $term (@terms) { ########foreach 1
#########            if ($FORM{'case'} eq 'Insensitive') {  ############ 2
               if (!($string =~ /$term/i)) {  ################# 3
                  $include{$FILE} = 'no';
  		  last;
               } ############################################## - 3
               else { ######################################### 4
                  $include{$FILE} = 'yes';
               } ############################################## - 4
#########            } ################################################# - 2
#########            elsif ($FORM{'case'} eq 'Sensitive') { ############ 5
#########               if (!($string =~ /$term/)) { ################### 6
#########                  $include{$FILE} = 'no';
#########                  last;
#########               } ############################################## - 6
#########               else { ######################################### 7
#########                  $include{$FILE} = 'yes';
#########               } ############################################## -7
#########            } ################################################# -2
         } ############################################ - foreach 1
#########      } ####################################################### -1



#########      elsif ($FORM{'boolean'} eq 'OR') { ############################### 1
#########         foreach $term (@terms) { ###################################### foreach 1
#########            if ($FORM{'case'} eq 'Insensitive') { ###################### 2
#########               if ($string =~ /$term/i) { ############################## 3
#########                  $include{$FILE} = 'yes';
#########                  last;
#########               } ####################################################### -3
#########               else { ################################################## 4
#########                  $include{$FILE} = 'no';
#########               } ####################################################### -4
##########            } ########################################################## -2
##########            elsif ($FORM{'case'} eq 'Sensitive') { ##################### 5
##########               if ($string =~ /$term/) { ############################### 6
##########		  $include{$FILE} = 'yes';
##########                  last;
##########               } ####################################################### -6
##########               else { ################################################## 7
##########                  $include{$FILE} = 'no';
##########               } ####################################################### -7
##########            } ########################################################## -5
#########         } ############################################################# -foreach 1
#########      } ################################################################ -1


##########      if ($string =~ / <input type\=hidden name\=\"origsubject\" value\=\"(.*)\">(.*)<input type\=hidden name\=\"origdate\"(.*)/i) {
##########         $titles{$FILE} = "$1";
##########      }
##########      else {
##########         $titles{$FILE} = "$FILE";
##########      }



################## titels zoeken uit database
@database = ();
open (DB , "$bases/$bestandendb");
@database = <DB>;
close(DB);


foreach $base (@database) {#############a
$base =~ s/\n//g;
($html,$titel,$illus,$samen,$soort) = split /\:\:/,$base;

if ($FILE eq "$html") {#############c
$soort{$FILE} = "$soort";
$titles{$FILE} = "$titel";
$samen{$FILE} = "$samen";
$illus{$FILE} = "$illus";
}############c
}#############a
################## einde titels zoeken uit database



   }
}
    
#######################
# return html Subroutine
sub return_html {
   print "<!-- ©2000 Duotone, grafische samenwerking, Dordrecht, The Netherlands\: info\@duotone.nl-->\n";
   print "<html>\n <head>\n  <title>Results IMPACT</title>\n </head>\n";
   print "<BODY background=\"..\/impact\/illus\/bg1.jpg\" BGCOLOR=\"\#DAE8DE\" LINK=\"\#224337\" VLINK=\"\#224337\" TEXT=\"\#000000\">\n";
   print "<FONT face=\"Verdana, arial, helvetica\" size=\"2\">";

   print "<P><B>your terms:<\/B><P>\n";

   $i = 0;
   foreach $term (@terms) {
      print "$term<BR>";
      $i++;

   }
   print "\n";
   print "<P><hr><P>\n";

   print "<P><B>We found these articles:<\/B><p>\n";

   foreach $key (keys %include) {
      if ($include{$key} eq 'yes') {
         print "<P><B>$soort{$key}<\/B>\: <B><a href=\"$baseurl\/$key\">$titles{$key}<\/a><\/B>\n";
      if ($FORM{'samenvat'} eq 'yes') { 
         print "<BR>$samen{$key}\n";
                                      }
      }
   }

   print "<P><hr><P>\n";

   print "\n<a href=\"JavaScript\:history.back\(\)\">back to the last page</a>\n";

   print "</body>\n</html>\n";
}


#######################
# Parse Form Subroutine


sub parse_form {


   # Get the input
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

   # Split the name-value pairs
   @pairs = split(/&/, $buffer);

   foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);

      # Un-Webify plus signs and %-encoding
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

      $FORM{$name} = $value;
   }
}

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