--- db/prgsrc/db.cgi 2010/01/10 19:19:44 1.156 +++ db/prgsrc/db.cgi 2016/06/13 16:32:07 1.164 @@ -11,6 +11,8 @@ use URI::Escape; my $proxyredirect=1; use POSIX qw(locale_h); use locale; +my $maxQuestions = 3000; + use vars qw($opt_z); use Getopt::Std; #my ($dbuser,$dbname,$dbpass,$dbhost); @@ -71,11 +73,6 @@ $outputkvo=100 if $outputkvo>100; if (param('debug')) {$debug=1; $printqueries=1} *STDERR=*STDOUT if $debug; -if ($url!~ /\/\/db\// && $url !~ /db\.chgk\.info/ && $url !~ /localhost/ && $url !~ /bilbo/ && $url !~ /zaba/ && $url !~ /question\.chgk\.info/ ) { - my $u="http://db.chgk.info/cgi-bin/db.cgi?$qs"; - Redirect ($u); - exit; -} if ($proxyredirect && $metod=~/proxy/ && $url !~ /localhost/ && $url !~ /bilbo/ && $url !~ /zaba/) { my $u="http://chgk.zaba.ru/cgi-bin/db.cgi?$qs"; @@ -233,7 +230,7 @@ sub SelectQuestions { # my $where=join " OR ",@$q; my $where=join ',',@$q; $where &&= "QuestionId IN (".(join ',',$where).")"; - $where||=1; + $where||=0; $where="($where) AND Questions.ParentId=t1.Id AND t1.ParentId=t2.Id" if $WithTour; @@ -779,7 +776,7 @@ sub Search { my $query; $query="SELECT QuestionId FROM Questions - WHERE ($f LIKE $sstr) AND (".&makewhere.") ORDER BY QuestionId"; + WHERE ($f LIKE $sstr) AND (".&makewhere.") ORDER BY QuestionId LIMIT $maxQuestions"; $sth = $dbh->prepare($query) @@ -824,10 +821,11 @@ sub NoCase { sub PrintList { my ($dbh,$Questions,$shablon,$was)=@_; + my $total_found = $totalfound||$#$Questions+1; my $Output; my $first=param('first') ||1; $first=$first-($first-1)%$outputkvo; - my $fkvo=param('fkvo')||($#$Questions+1); + my $fkvo=param('fkvo')||$total_found; my $last=$first+$outputkvo-1; $last=$fkvo if $fkvo<$last; my($f,$l); @@ -852,10 +850,10 @@ sub PrintList { else {$nav.=' 'x15;} my ($fprint,$lprint); - my $llprint=$fkvo- ($fkvo)%$outputkvo+1; # + my $llprint=$fkvo- ($fkvo-1)%$outputkvo; # if ($fkvo<=$outputkvo*7) { $fprint=1; - $lprint=$llprint; + $lprint=$llprint+($fkvo)%$outputkvo; } elsif ($first>$outputkvo*3 && $fkvo-$first>$outputkvo*3) { @@ -868,8 +866,8 @@ sub PrintList { } else { - $lprint=$llprint; - $fprint=$lprint-$outputkvo*6 + $lprint=$fkvo; + $fprint=$lprint-($lprint-1)%$outputkvo-$outputkvo*6; } # my $fprint=($first>$outputkvo*3) ? $first-$outputkvo*3 : 1; @@ -881,7 +879,6 @@ sub PrintList { # } - for($f=$fprint; $f<=$lprint; $f+=$outputkvo) { # next if $first-$f>$outputkvo*3; @@ -893,13 +890,21 @@ sub PrintList { } if ($lprint+$outputkvo<$fkvo) { + my $reminder = ($llprint-1)%$outputkvo; + my $newlprint = $llprint-$reminder; +# $newlprint +=$outputkvo if $reminder!=$outputkvo-1; $nav.= (" "x4). a({href=>($url."?".$qs."\&first=".($first+$outputkvo))},">").(" "x4). - a({href=>$url."?".$qs."\&first=$llprint"},">>").(" "x4) + a({href=>$url."?".$qs."\&first=$newlprint"},">>").(" "x4) } $Output.= "$nav".br."\n"; - my @q=@$Questions[$first-1..$last-1]; + my @q; + if ($totalfound) { + @q = @$Questions; + } else { + @q=@$Questions[$first-1..$last-1]; + } my %q=(); my $sth=SelectQuestions($dbh,\@q,1); my $qq; @@ -910,8 +915,8 @@ sub PrintList { $q{$Q[$_]{'QuestionId'}}=$Q[$_]; } - for (my $i = $first; $i <= $last; $i++) { - my $q=$q{$$Questions[$i-1]}; + for my $i(0..$#q) { + my $q=$q{$q[$i]}; my $output; $output = &PrintQuestion($dbh, $q, 1, 0, 1,$text,1 ); # if (param('metod') && (param('metod') eq 'rus' || param('metod') eq 'proxy')) @@ -1006,6 +1011,8 @@ sub PrintSearch { $suffix = 'я'; } + $hits = 'очень много' if ($hits==$maxQuestions); + $Output.= p({align=>"center"}, "Результаты поиска на " . strong($sstr) . " : $hits попадани$suffix."); @@ -1092,6 +1099,7 @@ sub PrintTournament { @Tours = &GetTours($dbh, $Id); $list=''; my $textid; + my $isGroup; if ($Id) { for ($Tournament{'Type'}) { /Г/ && do { @@ -1102,6 +1110,7 @@ sub PrintTournament { $Tournament{'PlayedAt2'}:'') . p . "\n"; + $isGroup=1; last; }; /Ч/ && do { @@ -1223,8 +1232,19 @@ sub PrintTournament { $output .= p($Info); } + + $output.=p("XML"); - + + if ($textid=$fname) + { + $textid=~s/\.txt//; + } + if (!$isGroup) { + $output .= center("[". + a({href=>"/v2/tour/$textid/print", target=>'_blank'}, 'версия для печати')."] [". + a({href=>"/v2/tour/$textid/fb2", target=>'_blank'}, 'fb2')."]".""); + } return $output; } @@ -1340,8 +1360,13 @@ sub PrintTour { $bottom .= "[" . a({href=>tourhref("$fname$nn",1)}, - "ответы") . "] " . br."\n"; + "ответы") . "] " } + $bottom .= "[".a({href=>"/v2/tour/$fname/print", target=>'_blank'}, 'версия для печати')."] [". + a({href=>"/v2/tour/$fname/fb2/", target=>'_blank'}, 'fb2')."]".br; + +# $bottom .= "[".a({href=>'/v2/print/'.$fname.'.'.$Tour{'Number'}, target=>'_blank'}, 'версия для печати')."]".br; + if ($n>1) { $bottom .= "[" . a({href=>tourhref("$fname.".($n-1),0)}, @@ -1350,6 +1375,7 @@ sub PrintTour { "[" . a({href=>tourhref("$fname.".($n-1),1)}, "предыдущий тур с ответами") . "] " . br."\n"; } + if (&IsTour($dbh, $Tour{'ParentId'}, $n + 1)) { $bottom .= "[" . a({href=>tourhref("$fname.".($n+1),0)}, @@ -1395,7 +1421,9 @@ sub PrintField { $value =~ s/пропущено\]/!!!PROP!!!/g; $value =~ s/пропущены\]/!!!PROP2!!!/g; $value =~ s/\[Раздаточный материал:(.*?)\]\s*\n/
Раздаточный материал<\/div> $1<\/div>\n$2/sm; + $value =~ s/<раздатка>(.*?)<\/раздатка>/
Раздаточный материал<\/div> $1<\/div>\n/sm; $value =~ s/!!!ZAKR!!!/\.\.\.\]/g; + $value =~ s/!!!PROP!!!/пропущено\]/g; $value =~ s/!!!PROP2!!!/пропущены\]/g; @@ -2231,7 +2259,7 @@ div.razdatka_header {font-style:italic;} my ($mime_type) = $text ? "plain" : "html"; print F <