--- db/prgsrc/db.cgi 2001/10/22 20:12:29 1.25
+++ db/prgsrc/db.cgi 2001/11/19 13:02:15 1.33
@@ -1,4 +1,4 @@
-#!/usr/local/bin/perl -w
+#!/usr/bin/perl -w
use DBI;
use CGI ':all';
@@ -8,7 +8,8 @@ use Time::Local;
use POSIX qw(locale_h);
use locale;
open STDERR, ">errors";
-my $printqueries=0;
+my $printqueries=1;
+my $debug=1; #added by R7
my %fieldname= (0,'Question', 1, 'Answer', 2, 'Comments', 3, 'Authors', 4, 'Sources');
my %searchin;
@@ -22,7 +23,6 @@ $searchin{'answer'}=param('Answer');
$searchin{'comment'}=param('Comment');
$searchin{'authors'}=param('Authors');
$searchin{'sources'}=param('Sources');
-$printqueries||=param('debug');
my $all=param('all');
$all=0 if lc $all eq 'no';
my ($PWD) = `pwd`;
@@ -159,6 +159,7 @@ print "$query",br if $printqueries;
}
}
+
my @bad=grep {!$nf[$_]} 0..$#w; # @bad -- номера словоформ,
# которых нет в словаре
@@ -175,8 +176,10 @@ print "$query",br if $printqueries;
}
return () if ($all && @verybad);
+
my $kvo=0;
push @$allnf, @{$_} foreach @nf;
+print "nf=@$allnf";
foreach $i (0..$#w) #запросы в базу...
{
@@ -231,7 +234,6 @@ print "$query\n",br if $printqueries;
-
if (@blob < 4)
{
$tasksof{$i}=undef;
@@ -253,7 +255,6 @@ print "$query\n",br if $printqueries;
$field=$fieldname{$field};
if ($searchin{lc $field})
{
-
push @{$tasksof{$i}{$number}}, $wordnumber;
# дополнили в хэше, висящем на
# словоформе $i в %tasksof список
@@ -269,9 +270,9 @@ print "$query\n",br if $printqueries;
}
} #foreach $i
-print "keys tasksof", keys %tasksof if $printqueries;
+#print "keys tasksof", join ' ', keys %{$tasksof{0}};
#Ищем пересечение или объединение списков вопросов (значений %tasksof)
- foreach $sf (keys %tasksof)
+ foreach $sf (keys %tasksof)
{
$count{$_}++ foreach keys %{$tasksof{$sf}};
}
@@ -279,7 +280,7 @@ print "keys tasksof", keys %tasksof if $
keys %count) ;
-#print "\n\$#tasks=",$#tasks,br;
+print "\n\$#tasks=",$#tasks,br if $printqueries;
############ Сортировка найденных вопросов
foreach (keys %wordsof)
@@ -292,7 +293,7 @@ foreach (keys %wordsof)
############
-print "tasks=@tasks" if $printqueries;;
+print "tasks=@tasks";
#print "$_ $relevance{$_} | " foreach @tasks;
#print br;
@@ -363,12 +364,11 @@ sub Search {
###Simple and advanced query processing. Added by R7
if ($metod eq 'simple' || $metod eq 'advanced')
{
- foreach (qw/Question Answer Sources Authors Comments/) {
+ foreach (qw/Question Answer Sources Authors Comments/) {
if (param($_)) {
push @fields, $_;
}
- }
-
+ }
@fields=(qw/Question Answer Sources Authors Comments/) unless scalar @fields;
my $fields=join ",", @fields;
@@ -382,20 +382,18 @@ sub Search {
$where= $$q{'matchexp'};
my $query= "SELECT Questionid FROM Questions
WHERE $where";
- print br."Query is: $query".br if $printqueries;
+ print br."Query is: $query".br if $debug;
$sth = $dbh->prepare($query);
} else
######
{
-
foreach (qw/Question Answer Sources Authors Comments/) {
if (param($_)) {
push @fields, "IFNULL($_, '')";
}
}
-
@sar = split " ", $sstr;
for $i (0 .. $#sar) {
$sar[$i] = $dbh->quote("%${sar[$i]}%");
@@ -446,7 +444,6 @@ sub PrintSearch {
my $shablon;
-
if ($metod eq 'rus')
{
my $where='0';
@@ -722,6 +719,7 @@ sub PrintField {
$value =~ s/^\s+/
/mg;
$value =~ s/^\|([^\n]*)/
$1<\/pre>/mg; } + return $text ? "$header:\n$value\n\n" : strong("$header: ") . $value . p . "\n"; } @@ -759,7 +757,32 @@ sub PrintQuestion { &PrintField("Ответ", $Question{'Answer'}, $text); if ($Question{'Authors'}) { - $output .= &PrintField("Автор(ы)", $Question{'Authors'}, $text); + my $q=$Question{'Authors'}; + + my $sth=$dbh->prepare("select Authors.Id,Name, Surname, Nicks from Authors, A2Q + where Authors.Id=Author And Question=$Id"); + $sth->execute; + my ($AuthorId,$Name, $Surname,$other,$Nicks); + + while ((($AuthorId,$Name, $Surname,$Nicks)=$sth->fetchrow),$AuthorId) + { + my ($firstletter)=$Name=~m/^./g; +# $other.=a({href=>url."?qofauthor=$AuthorId"},"$Name $Surname").". "; + my $sha="(?:$Name\\s+$Surname)|(?:$Surname\\s+$Name)|(?:$firstletter\\.\\s*$Surname)|(?:$Surname\\s+$firstletter\\.)|(?:$Surname)|(?:$Name)"; + $Nicks=~s/^\|//; + foreach (split /\|/, $Nicks) + { + s/ /\\s+/; + if (s/>$//) {$sha="$sha|(?:$_)"} + else {$sha="(?:$_)|$sha"} + } +#$output.=br."sha=$sha".br; + $q=~s/($sha)/a({href=>url."?qofauthor=$AuthorId"},$1)/ei; + } + + $output .= &PrintField("Автор(ы)", $q, $text); + +# $output.= &PrintField("Другие вопросы", $other); } if ($Question{'Sources'}) { @@ -898,6 +921,106 @@ sub PrintDates { return $output; } +sub PrintQOfAuthor +{ + my ($dbh, $id) = @_; + $id=$dbh->quote($id); + my $sth = $dbh->prepare("SELECT Name, Surname FROM Authors WHERE Id=$id"); + $sth->execute; + my ($name,$surname)=$sth->fetchrow; + + $sth = $dbh->prepare("SELECT Question FROM A2Q WHERE Author=$id"); + $sth->execute; + my $q; + my @Questions; + while (($q)=$sth->fetchrow,$q) + {push @Questions,$q;} + + my ($output, $i, $suffix, $hits) = ('', 0, '', $#Questions + 1); + + if ($hits =~ /1.$/ || $hits =~ /[5-90]$/) { + $suffix = 'й'; + } elsif ($hits =~ /1$/) { + $suffix = 'е'; + } else { + $suffix = 'я'; + } + + print p({align=>"center"}, "Автор ".strong("$name $surname. ") + . " : $hits попадани$suffix."); + + + for ($i = 0; $i <= $#Questions; $i++) { + $output = &PrintQuestion($dbh, $Questions[$i], 1, $i + 1, 1); + print $output; + } +} + + +sub PrintAuthors +{ + my ($dbh,$sort)=@_; + my($output,$out1,@array,$sth); + if ($sort eq 'surname') + { + $sth = + $dbh->prepare("SELECT Id, Name, Surname, QNumber FROM Authors order by Surname"); + + $output.="