#!/usr/bin/perl use utf8; use POSIX qw(locale_h); use warnings; # use strict; use OpenDict; use OpenDict::WebUtils; use OpenDict::Users; use XML::DT; use DBI; use CGI qw/:standard !dt/; use CGI::Session; use CGI::Cookie; use Template; use Encode; setlocale(LC_CTYPE, "pt_PT.utf8"); setlocale(LC_COLLATE, "pt_PT.utf8"); use locale; # This prints the CGI header, search entry et al! our $DA = new OpenDict::WebUtils(login => 1, query => '/search', jslogin => 1); our $ROOT = $DA->{root}; our $pathinfo = $DA->{pathinfo}; our $username = $DA->{session} ? $DA->{session}->param("username") : undef; if ($pathinfo || param("word")) { $pathinfo ||= param("word"); Encode::_utf8_on($pathinfo); if ($pathinfo eq "random") { my $xml = OpenDict->connect( db => "$ROOT/xml.db"); $pathinfo = $xml->randomWord(); $xml->close; } search($pathinfo); } else { show_main_page(); } $DA->footer; ## Options: # # 1. main page & menu sub show_main_page { my $news = OpenDict::WebUtils::show_news($ROOT, 2); $DA->TT->process('login'); $DA->TT->process('menu', { username => $username, news => $news } ); } # # 2. word was searched sub search { my $word = shift; $word = lc(trim($word)); OpenDict::WebUtils::log_query($ROOT, $word); my $xml = OpenDict->connect( db => "$ROOT/xml.db", attach => { users => "$ROOT/TMP/users.db" }); my $row; my $found_word = 0; my $found_prefix = 0; print "
\n$_\n" } @xmls)); } $found_word = 1; } # Generate near misses and print them my $combinacoes = $xml->generateNearMisses($word); if (@$combinacoes) { print hr, div({-class=>'nearmisses'}, strong("Será que queria dizer... "), join( " ".strong("» "), map { a({-href=>"/search/$_"}, $_); } @$combinacoes)); } # Search for same prefix words my $dbs = $xml->dbh->prepare("SELECT word,n FROM entry WHERE word LIKE ? AND word != ? ORDER BY word COLLATE perllocale LIMIT 10"); $dbs->execute("$word%",$word); while ($row = $dbs->fetchrow_hashref) { print hr, "