#!/usr/bin/perl -T # $Id: eeb.cgi,v 1.5 2000/04/16 14:36:07 michiel Exp michiel $ # BEGIN { push(@INC, '.'); } $ENV{'PATH'} = '/bin:/usr/bin'; my $mihxil = "http://katalogo.komputilo.org/"; my $mialoko = $mihxil."bibliografio/eeb.cgi"; my $bibliografialoko = $mihxil."/bibliografio/"; my $jeffk = 1; use eeb; use DBI; use strict; use Lingvoj qw(l); #use transkodoj; my $q = new eeb('eeb'); # eeb: nomo de la kuketo my $sql = $q->param('SQL'); $sql = $q->param('hsql') if !$sql; $sql = 'Simplege' if !$sql; #$q->param('kodo','unikodo') if ! defined $q->param('kodo'); #$q->param('kodo','unikodo') if ! defined $q->param('kodo'); $q->param('kolapsita',1) if ! defined $q->param('kolapsita'); $q->param('kolapsita', 1 - $q->param('kolapsita')) if defined $q->param('kolapsigu'); my $kodsxangxo = $q->param('kodsxangxo'); my $sercxu = $q->param('postajfojoj') && #ne sercxu cxe la unua eniro. (! defined $kodsxangxo) && (!defined $q->param('SQL')) && (!defined $q->param('aldonu')) && (!defined $q->param('kolapsigu')) && (!defined $q->param('visxu')); if($q->param('visxu')){ $q->param('auxtoro',''); $q->param('titolo',''); $q->param('tradukinto',''); $q->param('simplegapeto',''); $q->param('aperlingvo',''); $q->param('origlingvo',''); $q->param('kategorioj',''); } if (! defined $q->param('fonto')){ $q->param('fonto','UEA', 'Harlow', 'Aliaj', 'Dmoz'); } #Lingvoj::setlingvo($q->param('lingvo')); my @acxetoj = grep /acxeto[0-9]+/, $q->param; #$sercxu = 1 if $acxeto =~ /acxeto(.*)/; #$acxeto = $1; my %acxetoj = $q->param('acxetoj'); for my $acxeto (@acxetoj) { $acxeto =~ /([0-9]+)/; $acxetoj{$1} = 1; # if } my $nacxetoj = keys %acxetoj; $q->param('acxetoj', %acxetoj); #$q->param('kaj1') = kod($q->param('kaj1')); my $defauxltsql = join("", "#ekzemplo:\n", "select auxtoro, titolo, l.lingvo, originala_titolo, o.origino\n", " from bibliografio b, lingvoj l, originoj o\n", " where b.lingvo=l.kodo\n", " and b.origino = o.kodo\n", " and _auxtoro REGEXP \"ZAMENHOF\"\n", " order by _auxtoro\n"); my $dbh; if(! $jeffk) { my $dbname = 'Bibliografio'; my $user = 'bibliografio'; my $password = ''; my $dbd = 'mysql'; $dbh = DBI->connect($dbname, $user, $password, $dbd); eeb::Print "$DBI::err: $DBI::errstr" if $DBI::err; } eeb::Print $q->mystart, #$q->dump(), $q->start_form(-action=>$mialoko), $q->hidden('acxetoj', %acxetoj), #"
", #"Elektoj: ".join(',',keys %acxetoj), $q->mytable(); if(defined $kodsxangxo) { eeb::Print "", l('lingvoelekto'),"
", $q->popup_menu(-name=>'lingvo', -values=>[sort keys %Lingvoj::lingvoj]),"
", "Elektu vian kodigon:
", $q->popup_menu(-name=>'kodo', -values=>[sort keys %eeb::kodoj]),"
", "Surogatoj (ne necesas por kodigoj unikodo, latino 3 kaj html):
", $q->popup_menu(-name=>'surogato', -values=>[keys %eeb::surogatoj]),"
", $q->submit(-name=>'Ek!'); } else { eeb::Print "", # KOMENCO DE GRANDA TABELO $q->hidden('kodo'), $q->hidden('surogato'), $q->hidden('lingvo'); } if($sql =~ /Formulare/i && ! defined $kodsxangxo) { eeb::Print "Plenigu (per regulaj esprimoj)", " la kampojn pri kiuj vi interesiĝas. Esperantajn supersignojn vi povas tajpi unikode, ikse aŭ tute ne. Neesperantajn supersignojn forlasu. Malplenaj kampoj (kune kun iliaj kaj/aŭ-kampoj) estas ignorotaj. ", "getkodo."&nombro=200&fonto=Librokatalogo%20de%20UEA&fonto=Listo%20de%20Don%20Harlow&fonto=Listo%20de%20Verloren%20van%20Themaat&fonto=Nederlanda%20Bibliografio&prezento=tabela\">", "Jen ekzemplo kiu rezultas ĉiujn verkojn faritajn aŭ tradukitajn de Zamenhof.", "", # TABELO EN MALDEKSTRA KAMPO $q->hidden('kolapsita'); if($q->param('kolapsita') == 0) { eeb::Print $q->hidden('simplegapeto'), "", # UNUA LINIO "\n", # DUA LINIO "\n", # TRIA LINIO ""; } else { eeb::Print $q->hidden('auxtoro'),$q->hidden('titolo'),$q->hidden('tradukinto'), ""; } eeb::Print "", # FINO KVARA LINIO "", "
", # l('auxtoro'),": ", $q->textfield(-name=>'auxtoro', -size=>40,-maxlength=>100, -default=>''), $q->popup_menu(-name=>'kaj1', -values=>['kaj','au'], -default=>'kaj', -labels=>{'kaj'=>'kaj', 'au'=>'aŭ'} ),"
",l('titolo'),"", $q->textfield(-name=>'titolo', -size=>40,-maxlength=>200), $q->popup_menu(-name=>'kaj2', -values=>['kaj','au'], -default=>'kaj', -labels=>{'kaj'=>'kaj', 'au'=>'aŭ'} ),"
",l('tradukinto'),"", $q->textfield(-name=>'tradukinto',-size=>40,-maxlength=>100, -default=>''), #$q->popup_menu(-name=>'kaj3', -values=>['kaj','au'], # -default=>'kaj'), "
", $q->submit(-name=>'kolapsigu', -value=>'Prenu la suprajn tri kune'), "
",l('simplega'),"", $q->textfield(-name=>'simplegapeto', -size=>40,-maxlength=>100, -default=>''), $q->submit(-name=>'kolapsigu', -value=>'Diserigu'), "
Aperas en:", # KVARA LINIO KUN LINGVOELEKTO "", # TABELO POR LINGVOJ "
", $q->scrolling_list( -name=>'aperlingvo', -values=>&lingvoj($dbh,0), -size=>4, -multiple=>'true', -defaults=>[], -labels=>&lingvoj($dbh,1) ), "", $q->popup_menu(-name=>'kaj4', -values=>['kaj', 'au'], -default=>'kaj', -labels=>{'kaj'=>'kaj', 'au'=>'aŭ'} ),"
", "tradukita el:
", $q->scrolling_list( -name=>'origlingvo', -values=>&origlingvoj($dbh,0), -size=>4, -multiple=>'true', -defaults=>[], -labels=>&origlingvoj($dbh,1) ), "
Kategorioj:", $q->scrolling_list( -name=>'kategorioj', -values=>&kategorioj($dbh,0), -size=>4, -multiple=>'true', -defaults=>[], -labels=>&kategorioj($dbh,1)), "
", # FINO DE TABELO EN MALDEKSTRA TABELO } else { eeb::Print $q->hidden('auxtoro'),$q->hidden('titolo'),$q->hidden('tradukinto'),$q->hidden('aperlingvo'),$q->hidden('origlingvo'), $q->hidden('kaj1'),$q->hidden('kaj2'),$q->hidden('kaj3'),$q->hidden('kaj4'); } if($sql =~ /SQLe/ && ! defined $kodsxangxo) { eeb::Print "SQL-peto:
", $q->textarea(-name=>'sqlpeto', -columns=>75,-rows=>10, -value=>$defauxltsql); } else { eeb::Print $q->hidden('sqlpeto' && !$kodsxangxo); } if($sql =~ /Simplege/ && ! defined $kodsxangxo) { eeb::Print #"", #t2 tr1 td1 l('simplega'),"
", $q->textfield(-name=>'simplegapeto', -size=>40,-maxlength=>100, -default=>''), $q->hidden('prezento', 'kataloga'); #""; #t2 tr1 td1 } else { eeb::Print $q->hidden('simplegapeto') if $sql !~ /Formu/; } if (! defined $kodsxangxo) { eeb::Print #"", #t2 tr0 td0 #"
"; #"
", #t1 "
", $q->submit(-name=>'sercxu',-value=>l("sercxu")), ($sql =~ /Form/i ? $q->submit(-name=>'visxu', -value=>l('visxu')) : ''), $q->hidden('postajfojoj', 1), "
", "", "", # dekstra tabelo "", "", # unua linio en dekstra tabelo #"", "", "" # dua linio : "Maksimuma grando", $sql =~ /SQL|Simplege/ ? "" : "" : $q->scrolling_list( -name=>'fonto', -values=>[ 'UEA', 'Harlow','Verloren','Nederlanda', 'Aliaj', 'Dmoz'], -size=>5, -multiple=>'true', -defaults=>[ 'UEA', 'Harlow', 'Aliaj'], -labels=>{'UEA'=>'Librokatalogo de UEA', 'Harlow'=>'Listo de Don Harlow', 'Verloren'=>'Listo de Verloren van Themaat', 'Nederlanda'=>'Nederlanda Bibliografio', 'Aliaj'=>'Aliaj retaĵoj', 'Dmoz'=>'Serĉo en www.dmoz.org'} )."", $sql =~ /SQL|Simplege/ ? " " : "", $sercxu ? "" : "" , $nacxetoj == 0 ? "" : "", "
", #$q->hidden('hsql',"$sql"), "", #$q->hidden('hkodo',"$kodo"), #"getkodo."\">", l("sxangxumanieron"),""; if ($sql =~ /SQLe/) { eeb::Print $q->submit(-name=>'SQL',-value=>"Formulare"), $q->submit(-name=>'SQL',-value=>"Simplege"); } if ($sql =~ /Formulare/) { eeb::Print $q->submit(-name=>'SQL',-value=>"SQLe"), $q->submit(-name=>'SQL',-value=>"Simplege"); } if ($sql =~ /Simplege/) { eeb::Print $q->submit(-name=>'SQL',-value=>"Formulare"); } eeb::Print "
".eeb::kod("Ŝanĝu enkodigon al")."", ##$q->getkodo() =~ /iks/ ? $q->submit(-name=>'kodo',-value=>"unikodo") : $q->submit(-name=>'kodo',-value=>"iksoj"), #"
Regulaj esprimoj:", $q->checkbox(-name=>'regulajesperimoj', -checked=>'checked', -label=>' '),"
",$q->submit(-name=>'kodsxangxo', -value=>l('sxangxu')),"(",l('nun'),$q->param('kodo') ,")
", $sql =~ /Simplege/ ? $q->hidden('nombro',200)."
". $q->textfield(-name=>'nombro', -default=>'200', -size=>4, -maxlength=>4)."
Fontoj", $sql =~ /SQL|Simplege/ ? $q->hidden('fonto')."
Nun serĉas en ".join(', ',$q->param('fonto'))."
Prezento"."".$q->popup_menu(-name=>'prezento', -values=>['tabela','kataloga'], -default=>'kataloga')."
".$q->submit(-name=>'aldonu',-value=>l('aldonu'))."
getkodo."&surogato=".$q->getsurogato."&lingvo=".$q->param('lingvo')."&acxetoj=".join('+',keys %acxetoj)."\">".l('rigardu', $nacxetoj)."
", # dekstra tablelo ""; # supra du } eeb::Print "", $q->a({href=>($q->getkodo() =~ /uni/ ? "helpo.html" : "x/helpo.html") },"Helpo"), " | ", $q->a({href=>$bibliografialoko."interesajpetoj.html"},"Kelkaj interesaj eltiraĵoj"), " | ", $q->a({href=>$bibliografialoko."farinda.html"},"Cimoj/Ideoj"), " | ", $q->a({href=>$bibliografialoko."nova.html"},"Nova"), "        ", $q->a({href=>"http://www.uea.org/"},"UEA"), " | ",$q->a({href=>"http://www.best.com/%7Edonh/Esperanto/Literaturo/literaturo.html"},"Don"), " | ",$q->a({href=>$bibliografialoko."verloren.html"},"Verloren"), " | ",$q->a({href=>$mihxil."nederlanda.html"},"Nederlanda"), " | ",$q->a({href=>"http://www.dmoz.org/World/Esperanto/Literaturo/"},"dmoz"), #" | ",$q->a({href=>"http://www.dmoz.org/World/Esperanto/Literaturo/"},"Literaturo"), #" | ",$q->a({href=>"http://www.cs.chalmers.se/~martinw/esperanto/aalen/sercho_eo.html"},"Aalen"), #" | ",$q->a({href=>"http://euler.onb.ac.at/cgi-allegro/maske.pl?db=esperanto"},"Trovanto"), #" | ",$q->a({href=>"../esperanto.html"},eeb::kod("Miĥil'")), "
", $jeffk ? "" : "Bonvolu ligi tiun ĉi paĝon per <http://www.uea.org/katalogo>"."
", "", "2000-04-15 programo en test-fazo, raportu problemojn!", "", #"   .".eeb::kod("2000-03-11, 12:30: datumbazo en rekonstruo (mi faras ŝanĝojn en ĝi)"), "", "", # TABELO1} # $q->end_form, "", "
"; if($sercxu) # cxiujn postojn fojon kio ajn okazas, sercxu okazu. { my $sqlpeto; my $dmozsercxo =0; my $dmozpeto = ""; if($sql =~ /Form|Simplege/) { my $in = ''; for ( $q->param('fonto') ) { $in .= 'U' if /UEA/; $in .= 'N' if /Nederlanda/; $in .= 'D' if /Harlow/; $in .= 'V' if /Verloren/; $in .= 'R' if /Aliaj/; $dmozsercxo = 1 if /Dmoz/; } my @in = split ('',$in); if (@in == 0 && $dmozsercxo == 0) { @in =('U','N','D','V', 'R'); } $in = "'".join ("','",@in)."'"; my $kampoj; $kampoj = "unikanumero, auxtoro, titolo, tradukinto, b.aperloko, b.aperjaro, o.origino"; if($in =~ /U/) { $kampoj .= ", subtitolo, kunlaborantoj, priskribo, rimarkoj, prezo, pagxnombro, formato, rabatono"; } #Faru la sql-peto: $sqlpeto = join('', "select $kampoj\n", " from bibliografio b, originoj o\n", " where b.origino = o.kodo\n "); my $kaj = "and ("; if ($sql =~ /Form/i && $q->param('kolapsita') == 0) { eeb::Print("Atentu! Kun diserigitaj kampoj ne (jam) eblas serĉi en dmoz") if $dmozsercxo == 1; if(! ($q->param('auxtoro') =~ /^\s*$/)) { my $s = uc(eeb::sssigu($q->param('auxtoro'))); $s =~ s/\'//g; # malebligu fusxojn $sqlpeto .= "$kaj b._auxtoro REGEXP '$s'\n"; $kaj = $q->param('kaj1') =~ /^k/ ? "and" : "or"; } if(! ($q->param('titolo') =~ /^\s*$/)) { my $s = uc(eeb::sssigu($q->param('titolo'))); $s =~ s/\'//g; # malebligu fusxojn $sqlpeto .= "$kaj b._titolo REGEXP '$s'\n"; $kaj = $q->param('kaj2') =~ /^k/ ? "and" : "or"; } if(! ($q->param('tradukinto') =~ /^\s*$/)) { my $s = uc(eeb::sssigu($q->param('tradukinto'))); $s =~ s/\'//g; # malebligu fusxojn $sqlpeto .= "$kaj b._tradukinto REGEXP '$s'\n"; $kaj = "and"; } } if ($sql =~ /Simplege/ || ($sql =~ /Form/i && $q->param('kolapsita') == 1) && ($q->param('simplegapeto') !~ /^\s*$/) ) { my $s = uc(eeb::sssigu($q->param('simplegapeto'))); $s =~ s/\'//g; # por ke la uzantoj ne povu fusxi la peton. # se la peto nun ankoraux enhavas pli ol nur literoj, informu la uzanton ke li eble faras eraron: if ($s !~ /^[ -~]*$/ ) { eeb::Print l('neesperantaj'),"
"; } if ($s =~ /\s+AU\s+|\+/) { eeb::Print l('kombinivortojn'),"
"; } if ($s =~ /\w+\s+\w+/) { eeb::Print l('pliolunuvorto'),"
"; } if ($s =~ /(^LA\s|THE\s|DER\s|DAS\s|DIE\s|LE\s)/ ) { eeb::Print l('komencoperartikolo', $1),"
"; } # eeb::Print $q->param('simplegapeto'); $dmozpeto = uc(eeb::kod($q->param('simplegapeto'))) if $dmozsercxo == 1; #if($s =~ /\\[^n]/) { # eeb::Print l('nemysqlregulesprimo'),"
"; #} #print $s; $sqlpeto .= "$kaj (( b._auxtoro REGEXP '$s')\n"; $sqlpeto .= " or ( b._titolo REGEXP '$s') \n"; $sqlpeto .= " or ( b._tradukinto REGEXP '$s'))\n"; $kaj = "and"; } if($sql =~ /Form/i ) { if($q->param('aperlingvo')) { my $in = "'".join ("','", $q->param('aperlingvo'))."'"; if ( $in !~ /ajna/) { $sqlpeto .= "$kaj b.lingvo in ($in) \n"; $kaj = $q->param('kaj4') =~ /^k/ ? "and" : "or"; } } if($q->param('origlingvo')) { my $in = "'".join ("','", $q->param('origlingvo'))."'"; if( $in =~ /ajna/) { $sqlpeto .= "$kaj b.originalo = 0 "; } elsif ( $in =~ /neniu/) { $sqlpeto .= "$kaj b.originalo = 1 "; } else { $sqlpeto .= "$kaj b.originala_lingvo in ($in) \n"; } $kaj = "and"; } if($q->param('kategorioj')) { #$sqlpeto .= "and ("; #$kaj = ""; my $kaj = 'and ('; for ($q->param('kategorioj')) { $sqlpeto .= "$kaj b.kategorio REGEXP \"$_\" "; $kaj = 'or' } $sqlpeto .= ")"; } } # la jenaj aferoj restas validaj ankaŭ en la simplega serĉo. $sqlpeto .= ")" if $kaj !~ /\(/; if($q->param('fonto')) { $sqlpeto .= "and b.origino in ($in)" if @in < 4; } if($q->param('prezento') =~ /tabela/) { $sqlpeto .= " order by b._auxtoro"; $q->mysql($dbh, $sqlpeto, \%acxetoj, $dmozpeto); } else { $sqlpeto .= " order by b._titolo"; $q->mykatalogo($dbh, $sqlpeto, \%acxetoj, $dmozpeto); } } if($sql =~ /SQLe/) { $sqlpeto = $q ->param('sqlpeto'); $q->mysql($dbh, $sqlpeto); } $dbh->disconnect(); } eeb::Print "
", $q->end_form; print $q->end_html,"\n"; { my (%lingvoj, @lingvoj); sub origlingvoj { my $dbh = shift; my $kion = shift; if(! %lingvoj) { my $nuna; $nuna= $dbh->prepare("select l.lingvo, l.kodo from bibliografio b, lingvoj l where b.originala_lingvo=l.kodo group by l.lingvo order by l._lingvo"); $nuna->execute(); eeb::Print "

Eraro $DBI::err: $DBI::errstr" if($DBI::err); my (@rezulto); @lingvoj = ('ajna', 'neniu'); $lingvoj{'ajna'} = 'ajna lingvo'; $lingvoj{'neniu'} = 'neniu lingvo'; while(@rezulto = $nuna->fetchrow()) { push(@lingvoj, $rezulto[1]); $lingvoj{$rezulto[1]} = $rezulto[0]; } } return \@lingvoj if $kion == 0; return \%lingvoj; } } { my (%lingvoj, @lingvoj); sub lingvoj { my $dbh = shift; my $kion = shift; if(! %lingvoj) { my $nuna; $nuna= $dbh->prepare("select l.lingvo, l.kodo from bibliografio b, lingvoj l where b.lingvo=l.kodo group by b.lingvo order by l._lingvo"); $nuna->execute(); eeb::Print "

Eraro $DBI::err: $DBI::errstr" if($DBI::err); my (@rezulto); @lingvoj = ('ajna'); $lingvoj{'ajna'} = 'ajna lingvo'; while(@rezulto = $nuna->fetchrow()) { push(@lingvoj, $rezulto[1]); $lingvoj{$rezulto[1]} = $rezulto[0]; } } return \@lingvoj if $kion == 0; return \%lingvoj; } } { my (%kategorioj, @kategorioj); sub kategorioj { my $dbh = shift; my $kion = shift; if (! %kategorioj) { my $nuna; $nuna= $dbh->prepare("select k.kodo, k.priskribo from kategorioj k where super = 0 order by k._priskribo"); $nuna->execute(); eeb::Print "

Eraro $DBI::err: $DBI::errstr" if($DBI::err); my (@rezulto); while(@rezulto = $nuna->fetchrow()) { $kategorioj{$rezulto[0]} = $rezulto[1]; push(@kategorioj, $rezulto[0]); } } return \@kategorioj if $kion == 0; return \%kategorioj; } } # Local variables: # coding: utf-8 # End: