--- db/prgsrc/db.cgi 2003/02/02 21:54:11 1.88 +++ db/prgsrc/db.cgi 2003/02/04 01:09:42 1.89 @@ -8,11 +8,22 @@ use POSIX qw(locale_h); use locale; open STDERR, ">/var/tmp/errors1"; my $newsurl='http://news.chgk.info/'; +my ($proxyptext,$proxysstr); my $printqueries=0; my %forbidden=(); my $debug=0; #added by R7 if (param('debug')) {$debug=1; $printqueries=1} *STDERR=*STDOUT if $debug; +my $thislocale; +if ($^O =~ /win/i) { + $thislocale = "Russian_Russia.20866"; +} else { + $thislocale = "ru_RU.KOI8-R"; +} +POSIX::setlocale( &POSIX::LC_ALL, $thislocale ); + +if ((uc 'Á') ne 'á') {print STDERR "Koi8-r locale not installed!\n"}; + my %fieldname= (0,'Question', 1, 'Answer', 2, 'Comments', 3, 'Authors', 4, 'Sources'); my %rusfieldname=('Question','÷ÏÐÒÏÓ', 'Answer', 'ïÔ×ÅÔ', 'Comments', 'ëÏÍÍÅÎÔÁÒÉÉ', 'Authors', 'á×ÔÏÒ', @@ -30,7 +41,6 @@ my %metodchar=('rus',1,'old',2); -my $thislocale; $searchin{$_}=1 foreach param('searchin'); my %TypeName=('children'=>'ä', 'game'=>'ñ', 'igp'=>'é', @@ -145,13 +155,11 @@ sub GetTours { sub count { my ($dbh,$word)=@_; -print "timeb=".time.br if $debug; $word=$dbh->quote(uc $word); my $query="SELECT number from nests,nf where $word=w1 AND w2=nf.id"; my $sth=$dbh->prepare($query); $sth->execute; my @a=$sth->fetchrow; -print "timee0=".time.br if $debug; $sth->finish; $a[0]||0; } @@ -246,9 +254,14 @@ EOT } sub proxy -{ -#print "time0=".time.br if $debug; +{ my ($dbh,$ptext,$allnf)=@_; + my $sstr=makeproxysstr($dbh,$ptext,$allnf); + return russearch($dbh,$sstr,0,$allnf); +} + +sub makeproxysstr { + my ($dbh,$ptext)=@_; my $text=$$ptext; $text=~tr/£³/Åå/; $text=~s/(${RLrl})p(${RLrl})/$1p$2/gom; @@ -274,18 +287,9 @@ sub proxy $good{$words[$_]}=0 foreach 16..$#words; -# foreach (@list) -# { -# if ($good{$_}) -# { -# $good{$_}=0; -# $sstr.=" $_"; -# } -# } $sstr.=" $_" foreach grep {$good{$_}} @list; -print "time05=".time.br if $debug; $$ptext=$sstr; - return russearch($dbh,$sstr,0,$allnf); + return $sstr; } @@ -504,17 +508,6 @@ sub Search { my $sstr=$$s; my (@arr, @Questions, @fields); my (@sar, $i, $sth,$where,$query); -# my $ip=$ENV{'REMOTE_ADDR'}; - -# $ip=$dbh->quote($ip); -# $query= -# "INSERT into queries (query,metod,searchin,ip) -# values (". $dbh->quote($sstr).', '. -# $dbh->quote($metod) . ', ' . -# $dbh->quote(join ' ', grep $searchin{$_}, keys %searchin) . -# ", $ip)"; -#print $query if $printqueries; -# $dbh -> do ($query); if ($metod eq 'rus') { my @tasks=russearch($dbh,$sstr,$all,$allnf); @@ -522,10 +515,7 @@ sub Search { } elsif ($metod eq 'proxy') { -# $searchin{'question'}=1; -# $searchin{'answer'}=1; my @task=proxy($dbh,$s,$allnf); -# $$s=$sstr; return @task } @@ -1146,6 +1136,8 @@ sub PrintQuestion { { my ($firstletter)=$Name=~m/^./g; $Name=~s/\./\\\./g; + $Name=~s/£/[Å£]/g; + $Surname=~s/£/[Å£]/g; my $sha="(?:$Name\\s+$Surname)|(?:$Surname\\s+$Name)|(?:$firstletter\\.\\s*$Surname)|(?:$Surname\\s+$firstletter\\.)|(?:$Surname)|(?:$Name)"; if ($Nicks) { @@ -1629,6 +1621,7 @@ sub WriteFile { MAIN: { + setlocale(LC_CTYPE,'russian'); my($i, $tour); my($text) = (param('text')) ? 1 : 0; @@ -1644,8 +1637,57 @@ MAIN: print end_html; die "Can't connect to DB chgk\n"; }; + my $sstr=param('sstr'); + if (param('qid')) { + my $sth; + my $qid=param('qid'); + if ($qid !~ /^[0-9]*$/) { + my ($fname,$t,$n)= split /\./ , $qid; + $n=$t,$t='' unless $n; + if ($n) + { + $sth = $dbh->prepare( + "SELECT t2.Id FROM Tournaments as t1, + Tournaments as t2 + WHERE t1.FileName = '$fname.txt' + AND t1.Id=t2.ParentId AND t2.Number=$t"); + } + else + { + $sth = $dbh->prepare("SELECT Id FROM Tournaments + WHERE FileName = '$fname.txt'"); + } + $sth->execute; + $tour = ($sth->fetchrow)[0]; + $sth->finish; + $sth = $dbh->prepare( + "SELECT QuestionId FROM + Questions + WHERE ParentId=$tour AND + Questions.Number=$n"); + $sth->execute; + $qid = ($sth->fetchrow)[0]; + } + my $query="SELECT Question, Answer from Questions where QuestionId=$qid"; + $sth=$dbh->prepare($query); + $sth->execute; + $sstr= join ' ',$sth->fetchrow; + $sth->finish; + $searchin{'Question'}=1; + $searchin{'Answer'}=1; + $sstr=~tr/£³/Åå/; + $sstr=~s/[^ÊÃÕËÅÎÇÛÝÚÈßÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔØÂÀêãõëåîçûýúèÿæù÷áðòïìäöüñþóíéôøâàa-zA-Z0-9]/ /gi; + $proxysstr=$sstr; + $proxysstr=makeproxysstr($dbh,\$proxysstr); + } + + if (!param('comp') and !param('sqldump') and !$text) { - print start_html(-"title"=>'Database of the questions', + my $title="òÅÚÕÌØÔÁÔÙ ÐÏÉÓËÁ ÎÁ \"". ($proxysstr||$sstr) .'"' + if ($proxysstr||$sstr); + $title||="âÁÚÁ ×ÏÐÒÏÓÏ×"; + + print start_html(-"title"=>$title, -author=>'dimrub@icomverse.com', -bgcolor=>'#fff0e0', -vlink=>'#800020'); @@ -1658,14 +1700,6 @@ th {font-size: x-small; font-family : sa } -if ($^O =~ /win/i) { - $thislocale = "Russian_Russia.20866"; -} else { - $thislocale = "ru_RU.KOI8-R"; -} -POSIX::setlocale( &POSIX::LC_ALL, $thislocale ); - -if ((uc 'Á') ne 'á') {print "Koi8-r locale not installed!\n"}; if (param('hideequal')) { @@ -1741,45 +1775,6 @@ EOT (time_to_sec(now())-time_to_sec(t) >3600)") } elsif (param('qid')) { - my $qid=param('qid'); - if ($qid !~ /^[0-9]*$/) { - my ($fname,$t,$n)= split /\./ , $qid; - $n=$t,$t='' unless $n; - if ($n) - { - $sth = $dbh->prepare( - "SELECT t2.Id FROM Tournaments as t1, - Tournaments as t2 - WHERE t1.FileName = '$fname.txt' - AND t1.Id=t2.ParentId AND t2.Number=$t"); - } - else - { - $sth = $dbh->prepare("SELECT Id FROM Tournaments - WHERE FileName = '$fname.txt'"); - } - $sth->execute; - $tour = ($sth->fetchrow)[0]; - $sth->finish; - $sth = $dbh->prepare( - "SELECT QuestionId FROM - Questions - WHERE ParentId=$tour AND - Questions.Number=$n"); - $sth->execute; - $qid = ($sth->fetchrow)[0]; - } - my $query="SELECT Question, Answer from Questions where QuestionId=$qid"; -print $query if $printqueries; - my $sth=$dbh->prepare($query); - $sth->execute; - my $sstr= join ' ',$sth->fetchrow; - $sth->finish; - $searchin{'Question'}=1; - $searchin{'Answer'}=1; - $sstr=~tr/£³/Åå/; -$sstr=~s/[^ÊÃÕËÅÎÇÛÝÚÈßÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔØÂÀêãõëåîçûýúèÿæù÷áðòïìäöüñþóíéôøâàa-zA-Z0-9]/ /gi; -# print &PrintQuestion($dbh,$qid, 1, '!'); &PrintSearch($dbh, $sstr, 'proxy'); } elsif (param('getfile')){