--- db/prgsrc/db.cgi 2009/06/20 12:21:02 1.153 +++ db/prgsrc/db.cgi 2010/09/24 09:46:44 1.162 @@ -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); @@ -233,7 +235,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 +781,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 +826,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 +855,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 +871,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 +884,6 @@ sub PrintList { # } - for($f=$fprint; $f<=$lprint; $f+=$outputkvo) { # next if $first-$f>$outputkvo*3; @@ -893,13 +895,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 +920,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 +1016,8 @@ sub PrintSearch { $suffix = 'я'; } + $hits = 'очень много' if ($hits==$maxQuestions); + $Output.= p({align=>"center"}, "Результаты поиска на " . strong($sstr) . " : $hits попадани$suffix."); @@ -1092,6 +1104,7 @@ sub PrintTournament { @Tours = &GetTours($dbh, $Id); $list=''; my $textid; + my $isGroup; if ($Id) { for ($Tournament{'Type'}) { /Г/ && do { @@ -1102,6 +1115,7 @@ sub PrintTournament { $Tournament{'PlayedAt2'}:'') . p . "\n"; + $isGroup=1; last; }; /Ч/ && do { @@ -1223,8 +1237,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 +1365,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 +1380,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)}, @@ -1389,7 +1420,16 @@ sub PrintField { if $value !~ /^\|/; $value =~ s/^\|([^\n]*)/
$1<\/pre>/mg;
 
-	    $value =~ s/(http:\/\/\S+[^\s\)\(\,\.])/a({href=>escapeUrl($1)},$1)/egm if $header !~ /^Авто/;#!!!
+	    $value =~ s/(http:\/\/\S+[^\s\)\(\,\.\]])/a({href=>escapeUrl($1)},$1)/egm if $header !~ /^Авто/;#!!!
+
+	    $value =~ s/\.\.\.\]/!!!ZAKR!!!/g;
+	    $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; # $value =~ s/(http:\/\/\S+[^\s\)\(\,\.])/make/eg if $header !~ /^Авто/;#!!! @@ -2171,6 +2211,14 @@ MAIN: $globaloutput.="\n"; $globaloutput.=&Include_virtual("$reklama")||'';