--- db/prgsrc/db.cgi 2003/02/21 19:39:46 1.91 +++ db/prgsrc/db.cgi 2003/04/04 10:01:27 1.94 @@ -8,6 +8,8 @@ use POSIX qw(locale_h); use locale; open STDERR, ">/var/tmp/errors1"; my $newsurl='http://news.chgk.info/'; +my $cashednumber=500; +my $outputbumber=10; my ($proxyptext,$proxysstr); my $printqueries=0; my %forbidden=(); @@ -169,7 +171,7 @@ sub printform { my $qnumber=(" "x10)."Выводить по ". textfield(-name=>'kvo', - -default=>param('kvo')||'150', + -default=>param('kvo')||$outputbumber, -size=>3, -maxlength=>5)." вопросов"; my $sstr=param('sstr'); @@ -620,11 +622,12 @@ sub PrintList { my ($dbh,$Questions,$shablon,$was)=@_; my $first=param('first') ||1; - my $kvo=param('kvo') ||150; + my $kvo=param('kvo') ||$outputbumber; $first=$first-($first-1)%$kvo; + my $fkvo=param('fkvo')||($#$Questions+1); my $last=$first+$kvo-1; - $last=scalar @$Questions if scalar @$Questions <$last; + $last=$fkvo if $fkvo<$last; my($f,$l); my $nav=''; my $qs=query_string; @@ -633,24 +636,24 @@ sub PrintList { my $sstr=param('sstr')||''; $qs=~s/sstr=[^\&]+/sstr=$sstr/; $qs=~s/\&was=[^\&]+//; - $qs.="&was=$was"||''; + $qs.="&was=$was" if $was; + $qs.="&fkvo=$fkvo" if $was; if ($first>$kvo*3+1) { $nav.= (" "x4). a({href=>url."?".$qs."\&first=1"},"<<").(" "x4). a({href=>(url."?".$qs."\&first=".($first-$kvo))},"<").(" "x4) - } - + } else {$nav.=' 'x15;} my ($fprint,$lprint); - my $llprint=$#$Questions- ($#$Questions+1)%$kvo+2; - if ($#$Questions+1<=$kvo*7) + my $llprint=$fkvo- ($fkvo)%$kvo+1; # + if ($fkvo<=$kvo*7) { $fprint=1; $lprint=$llprint; } - elsif ($first>$kvo*3 && $#$Questions+1-$first>$kvo*3) + elsif ($first>$kvo*3 && $fkvo-$first>$kvo*3) { $fprint=$first-$kvo*3; $lprint=$first+$kvo*3; @@ -679,12 +682,12 @@ sub PrintList { { # next if $first-$f>$kvo*3; $l=$f+$kvo-1; - $l=$#$Questions+1 if $l>$#$Questions+1; + $l=$fkvo 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). @@ -717,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; @@ -726,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; @@ -772,7 +777,7 @@ print "$query" if $printqueries; } - + $hits=param("fkvo")||$hits; if ($hits =~ /1.$/ || $hits =~ /[5-90]$/) { $suffix = 'й'; @@ -1773,13 +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')) { - &PrintSearch($dbh, $sstr, 'proxy'); + &PrintSearch($dbh, $sstr||'', 'proxy'); } elsif (param('getfile')){ print &writefile