--- db/prgsrc/db.cgi 2001/12/03 13:57:20 1.40 +++ db/prgsrc/db.cgi 2001/12/04 01:17:12 1.41 @@ -1,4 +1,4 @@ -#!/perl/bin/perl -w +#!/usr/bin/perl -w use DBI; use CGI ':all'; @@ -12,6 +12,9 @@ my $printqueries=0; my %forbidden=(); my $debug=0; #added by R7 my %fieldname= (0,'Question', 1, 'Answer', 2, 'Comments', 3, 'Authors', 4, 'Sources'); +my %rusfieldname=('Question','Вопрос', 'Answer', 'Ответ', + 'Comments', 'Комментарии', 'Authors', 'Автор', + 'Sources', 'Источник','old','Старый','rus','Новый'); my %searchin; my $rl=qr/[йцукенгшщзхъфывапролджэячсмитьбюё]/; my $RL=qr/[ЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮЁ]/; @@ -21,14 +24,15 @@ my $Ll=qr/(?:[A-Z])|(?:${RL})/; -my $thislocale; +my $thislocale; -$searchin{'question'}=param('Question'); -$searchin{'answer'}=param('Answer'); -$searchin{'comments'}=param('Comments'); -$searchin{'authors'}=param('Authors'); -$searchin{'sources'}=param('Sources'); +$searchin{$_}=1 foreach param('searchin'); +#$searchin{'Question'}=param('Question'); +#$searchin{'Answer'}=param('Answer'); +#$searchin{'Comments'}=param('Comments'); +#$searchin{'Authors'}=param('Authors'); +#$searchin{'Sources'}=param('Sources'); my $all=param('all'); $all=0 if lc $all eq 'no'; my ($PWD) = `pwd`; @@ -141,6 +145,44 @@ print "timee0=".time.br if $debug; } +sub printform +{ + + my $submit=submit(-value=>'Поиск'); + my $inputstring=textfield(-name=>'sstr', + -default=>param('sstr')||'', + -size=>50); + my $fields=checkbox_group('searchin',['Question','Answer','Comments','Authors','Sources'], [grep $searchin{$_}, keys %searchin], + 'false',\%rusfieldname); + + my $metod=radio_group(-name=>'metod',-values=>['old','rus'], + -default=>param('metod')||'rus', + -labels=>\%rusfieldname); + my $all=radio_group(-name=>'all',-values=>['yes','no'], + -default=>param('all')||'no', + -labels=>{'yes'=>'Все','no'=>'Любое'}); + +################################################# +return start_form(-method=>'get', + -action=>url, + -enctype=> + "application/x-www-form-urlencoded" +).br. +table(Tr +( + td({-valign=>'TOP'},$inputstring.$submit.p."Метод: $metod".p."Слова: $all"), + td({-valign=>'TOP'},(' 'x 8).'Поля:'), + td({-valign=>'TOP'},$fields) +) +) + +#$fields. +#$inputstring.$submit.br.$metod.$all +.endform +.hr + +} + sub proxy { #print "time0=".time.br if $debug; @@ -168,6 +210,8 @@ sub proxy $good{$_}=1 if $c{$_}<200; } + $good{$words[$_]}=0 foreach 11..$#words; + # foreach (@list) # { # if ($good{$_}) @@ -296,7 +340,7 @@ print "$query\n",br if $printqueries; $ii+=4; $number=$lo+$hi*256; $field=$fieldname{$field}; - if ($searchin{lc $field}) + if ($searchin{$field}) { push @{$tasksof{$i}{$number}}, $wordnumber; # дополнили в хэше, висящем на @@ -450,10 +494,11 @@ print $query if $printqueries; ###### { - foreach (qw/Question Answer Sources Authors Comments/) { - if (param($_)) { +# foreach (qw/Question Answer Sources Authors Comments/) { + foreach (param('searchin')) { +# if (param($_)) { push @fields, "IFNULL($_, '')"; - } +# } } @sar = split " ", $sstr; for $i (0 .. $#sar) { @@ -511,20 +556,70 @@ sub PrintList { $last=scalar @$Questions if scalar @$Questions <$last; my($f,$l); my $nav=''; + my $qs=query_string; + $qs=~s/\;/\&/g; + $qs=~s/\&first\=[^\&]+//g; - for($f=1; $f<=@$Questions; $f+=$kvo) + + 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) + { $fprint=1; + $lprint=$llprint; + } + elsif ($first>$kvo*3 && $#$Questions+1-$first>$kvo*3) + { + $fprint=$first-$kvo*3; + $lprint=$first+$kvo*3; + } + elsif ($first<=$kvo*3) + { + $fprint=1; $lprint=6*$kvo+1; + } + else + { + $lprint=$llprint; + $fprint=$lprint-$kvo*6 + } + +# my $fprint=($first>$kvo*3) ? $first-$kvo*3 : 1; +# my $lprint=$#$Questions+1-$fprint>$kvo*7 ? $kvo*7 :$#$Questions+1; +# if ($lprint-$fprint<$kvo*6 && $fprint>1) +# { +# $fprint=$lprint-$kvo*6; +# $fprint=1 if ($fprint<=0) +# } + + + + for($f=$fprint; $f<=$lprint; $f+=$kvo) { +# next if $first-$f>$kvo*3; $l=$f+$kvo-1; $l=$#$Questions+1 if $l>$#$Questions+1; if ($f==$first) {$nav.="[$f-$l] ";} else { - my $qs=query_string; - $qs=~s/\;/\&/g; - $qs=~s/\&first\=[^\&]+//g; - $qs.="\&first=$f"; - - $nav.= "[".a({href=>(url."?".$qs)},"$f-$l")."] ";} + $nav.= "[".a({href=>(url."?".$qs."\&first=$f")},"$f-$l")."] ";} } + if ($lprint+$kvo<$#$Questions) + { + $nav.= + (" "x4). + a({href=>(url."?".$qs."\&first=".($first+$kvo))},">").(" "x4). + a({href=>url."?".$qs."\&first=$llprint"},">>").(" "x4) + } + + print "$nav".br."\n"; for (my $i = $first; $i <= $last; $i++) { my $output = &PrintQuestion($dbh, $$Questions[$i-1], 1, $i, 1); @@ -536,13 +631,16 @@ sub PrintList { } print $output; } + + print "$nav".br."\n"; } sub PrintSearch { my ($dbh, $sstr, $metod) = @_; - + print h2("Поиск в базе вопросов"); + print printform; my @allnf; my (@Questions) = &Search($dbh, \$sstr,$metod,$all,\@allnf); my ($output, $i, $suffix, $hits) = ('', 0, '', $#Questions + 1); @@ -1029,6 +1127,7 @@ sub PrintDates { sub PrintQOfAuthor { + my ($dbh, $id) = @_; $id=$dbh->quote($id); my $sth = $dbh->prepare("SELECT Name, Surname FROM Authors WHERE Id=$id"); @@ -1051,7 +1150,8 @@ sub PrintQOfAuthor } else { $suffix = 'я'; } - + print h2("Поиск в базе вопросов"); + print printform; print p({align=>"center"}, "Автор ".strong("$name $surname. ") . " : $hits попадани$suffix."); @@ -1141,6 +1241,7 @@ MAIN: print &Include_virtual("../dimrub/db/reklama.html"); } + if ($^O =~ /win/i) { $thislocale = "Russian_Russia.20866"; } else { @@ -1208,8 +1309,9 @@ print $query if $printqueries; my $sth=$dbh->prepare($query); $sth->execute; my $sstr= join ' ',$sth->fetchrow; - $searchin{'question'}=1; - $searchin{'answer'}=1; + $searchin{'Question'}=1; + $searchin{'Answer'}=1; + $sstr=~tr/ёЁ/еЕ/; $sstr=~s/[^йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮa-zA-Z0-9]/ /gi; # print &PrintQuestion($dbh,$qid, 1, '!'); &PrintSearch($dbh, $sstr, 'proxy');