--- db/prgsrc/db.cgi 2003/02/02 21:54:11 1.88 +++ db/prgsrc/db.cgi 2003/02/22 01:40:28 1.92 @@ -8,11 +8,23 @@ use POSIX qw(locale_h); use locale; open STDERR, ">/var/tmp/errors1"; my $newsurl='http://news.chgk.info/'; +my $cashednumber=500; +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 +42,6 @@ my %metodchar=('rus',1,'old',2); -my $thislocale; $searchin{$_}=1 foreach param('searchin'); my %TypeName=('children'=>'ä', 'game'=>'ñ', 'igp'=>'é', @@ -145,13 +156,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 +255,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 +288,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 +509,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 +516,7 @@ sub Search { } elsif ($metod eq 'proxy') { -# $searchin{'question'}=1; -# $searchin{'answer'}=1; my @task=proxy($dbh,$s,$allnf); -# $$s=$sstr; return @task } @@ -643,7 +634,9 @@ sub PrintList { my $sstr=param('sstr')||''; $qs=~s/sstr=[^\&]+/sstr=$sstr/; $qs=~s/\&was=[^\&]+//; - $qs.="&was=$was"||''; + $qs.="&was=$was" if $was; + my $fkvo=param('fkvo')||$#$Questions; + $qs.="&fkvo=$fkvo" if $was; if ($first>$kvo*3+1) { $nav.= @@ -655,12 +648,12 @@ sub PrintList { else {$nav.=' 'x15;} my ($fprint,$lprint); - my $llprint=$#$Questions- ($#$Questions+1)%$kvo+2; - if ($#$Questions+1<=$kvo*7) + my $llprint=$fkvo- ($fkvo+1)%$kvo+2; + if ($fkvo+1<=$kvo*7) { $fprint=1; $lprint=$llprint; } - elsif ($first>$kvo*3 && $#$Questions+1-$first>$kvo*3) + elsif ($first>$kvo*3 && $fkvo+1-$first>$kvo*3) { $fprint=$first-$kvo*3; $lprint=$first+$kvo*3; @@ -689,12 +682,12 @@ sub PrintList { { # next if $first-$f>$kvo*3; $l=$f+$kvo-1; - $l=$#$Questions+1 if $l>$#$Questions+1; + $l=$#$Questions+1 if $l>$fkvo+1; if ($f==$first) {$nav.="[$f-$l] ";} else { $nav.= "[".a({href=>(url."?".$qs."\&first=$f")},"$f-$l")."] ";} } - if ($lprint+$kvo<$#$Questions) + if ($lprint+$kvo<$fkvo) { $nav.= (" "x4). @@ -727,7 +720,8 @@ sub PrintSearch { print printform; my @allnf; my @Questions; - if ($was) + $was=0 if $metod eq 'proxy'; + if ($was && ($metod ne 'proxy')) { my $sth=$dbh->prepare ("select sstr,questions,allnf from lastqueries where id=".param('was')); $sth->execute; @@ -736,10 +730,11 @@ sub PrintSearch { @Questions=unpack 'L*',$q; @allnf=unpack 'L*',$nf; $sth->finish; - } else + } + if (!$was || ($metod eq 'proxy') || (param('first')+param('kvo')>$cashednumber)) { @Questions=&Search($dbh, \$sstr,$metod,$all,\@allnf); - my $tmp=$dbh->quote(pack("L*",@Questions)); + my $tmp=$dbh->quote(pack("L*",@Questions[0..$cashednumber])); my $qsstr=$dbh->quote($sstr); my $nf=$dbh->quote(pack("L*", @allnf)); my $ss=200; @@ -782,7 +777,7 @@ print "$query" if $printqueries; } - + $hits=param("fkvo")||$hits; if ($hits =~ /1.$/ || $hits =~ /[5-90]$/) { $suffix = 'Ê'; @@ -1146,7 +1141,9 @@ sub PrintQuestion { { my ($firstletter)=$Name=~m/^./g; $Name=~s/\./\\\./g; - my $sha="(?:$Name\\s+$Surname)|(?:$Surname\\s+$Name)|(?:$firstletter\\.\\s*$Surname)|(?:$Surname\\s+$firstletter\\.)|(?:$Surname)|(?:$Name)"; + $Name=~s/£/[Å£]/g; + $Surname=~s/£/[Å£]/g; + my $sha="(?:$Name\\s+$Surname)|(?:$Surname\\s+$Name)|(?:$firstletter\\.\\s*$Surname)|(?:$Surname\\s+$firstletter\\.)|(?:$Surname)"; if ($Nicks) { $Nicks=~s/^\|//; @@ -1161,6 +1158,10 @@ sub PrintQuestion { } } $q=~s/($sha)/a({href=>url."?qofauthor=$AuthorId"},$1)/ei; + unless ($1) + { + $q=~s/$Name/a({href=>url."?qofauthor=$AuthorId"},$1)/ei; + } } } $output .= &PrintField("á×ÔÏÒ(Ù)", $q, $text); @@ -1629,6 +1630,7 @@ sub WriteFile { MAIN: { + setlocale(LC_CTYPE,'russian'); my($i, $tour); my($text) = (param('text')) ? 1 : 0; @@ -1644,8 +1646,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 +1709,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')) { @@ -1735,52 +1778,13 @@ EOT &PrintQOfAuthor($dbh,param('qofauthor')); } elsif (param('sstr')||param('was')) { - &PrintSearch($dbh, param('sstr'), param('metod'),param('was')); + &PrintSearch($dbh, $sstr||' ', param('metod')||'',param('was')); $dbh->do("delete from lastqueries where (TO_DAYS(NOW()) - TO_DAYS(t) >= 2) OR (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'); + &PrintSearch($dbh, $sstr||'', 'proxy'); } elsif (param('getfile')){ print &writefile @@ -1839,6 +1843,7 @@ $sstr=~s/[^ÊÃÕËÅÎÇÛÝÚÈßÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔ } if (!$text) { print &Include_virtual("../dimrub/db/footer.html"); + print p."
ïÂÎÏ×ÌÅÎÉÅ: ".&Include_virtual("../dimrub/db/date")."
"; print < function toggle(e) {