version 1.119, 2003/05/25 21:04:33
|
version 1.126, 2003/12/19 01:44:47
|
Line 10 use vars qw($opt_z);
|
Line 10 use vars qw($opt_z);
|
use Getopt::Std; |
use Getopt::Std; |
getopts('z'); |
getopts('z'); |
$opt_z||=param("makehtml"); |
$opt_z||=param("makehtml"); |
|
my $timestamp="_timestamp.tmp"; |
my $paramtour; |
my $paramtour; |
my $withanswers=param('answer')||param('answers'); |
my $withanswers=param('answer')||param('answers'); |
open STDERR, ">/var/tmp/errors1"; |
open STDERR, ">/var/tmp/errors1"; |
Line 24 $reklama="../reklama.html" if $opt_z;
|
Line 25 $reklama="../reklama.html" if $opt_z;
|
$footer="../footer.html" if $opt_z; |
$footer="../footer.html" if $opt_z; |
$datefooter="../date" if $opt_z; |
$datefooter="../date" if $opt_z; |
my $HTMLDIR="/znatoki/dimrub/db/baza/"; |
my $HTMLDIR="/znatoki/dimrub/db/baza/"; |
$HTMLDIR="/baza/"; |
$HTMLDIR="/files/"; |
my $realHTMLDIR; |
my $realHTMLDIR; |
if ($^O =~ /win/i) { |
if ($^O =~ /win/i) { |
$realHTMLDIR="/html/znatoki/baza/"; |
$realHTMLDIR="/html/znatoki/baza/"; |
} else |
} else |
{ |
{ |
$realHTMLDIR="/home/piataev/public_html/dimrub/db/baza/"; |
$realHTMLDIR="/home/piataev/public_html/dimrub/db/files/"; |
} |
} |
my $usehtml=$opt_z||0; |
my $usehtml=$opt_z||0; |
|
$usehtml=1; |
my $usewas=0; |
my $usewas=0; |
my $cashednumber=500; |
my $cashednumber=500; |
my $outputnumber=10; |
my $outputnumber=10; |
Line 91 my %TypeName=('children'=>'Д', 'game'=>'
|
Line 93 my %TypeName=('children'=>'Д', 'game'=>'
|
'chgk'=>'Ч', 'brain'=>'Б', 'beskrylka'=>'Л','ehruditka'=>'Э'); |
'chgk'=>'Ч', 'brain'=>'Б', 'beskrylka'=>'Л','ehruditka'=>'Э'); |
|
|
|
|
|
sub countz { |
|
my ($dbh,$type)=@_; |
|
|
|
my $sth=$dbh->prepare("select count(*) from Questions where Type LIKE '%$type%'"); |
|
$sth->execute(); |
|
my ($tmp)=$sth->fetchrow(); |
|
return $tmp; |
|
} |
|
|
my $all=param('all'); |
my $all=param('all'); |
$all=0 if lc $all eq 'no'; |
$all=0 if lc $all eq 'no'; |
Line 126 sub NewEnough {
|
Line 136 sub NewEnough {
|
|
|
sub Redirect { |
sub Redirect { |
my ($destination) = @_; |
my ($destination) = @_; |
|
print header.<<EndOfHTML; |
|
<head><meta http-equiv="refresh" content="0; URL=$destination"></head> |
|
EndOfHTML |
|
; |
|
=head |
|
|
print <<EndOfHTML; |
print <<EndOfHTML; |
Content-type: text/html |
Content-type: text/html |
Location: $destination |
Location: $destination |
Line 141 by clicking <A HREF="$destination">here<
|
Line 157 by clicking <A HREF="$destination">here<
|
</HTML> |
</HTML> |
EndOfHTML |
EndOfHTML |
; |
; |
|
=cut |
} |
} |
|
|
|
|
Line 167 sub GetTournament {
|
Line 184 sub GetTournament {
|
sub fetchquestion { |
sub fetchquestion { |
my ($sth,$q,$WithTour)=@_; |
my ($sth,$q,$WithTour)=@_; |
if ($WithTour) { |
if ($WithTour) { |
($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'}, |
($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'},$$q{'Sources'}, |
$$q{'Number'}, |
$$q{'Number'}, |
$$q{'Title'}, $$q{'TourTitle'}, $$q{'FileName'},$$q{'PlayedAt'},$$q{'TourNumber'}) = |
$$q{'Title'}, $$q{'TourTitle'}, $$q{'FileName'},$$q{'PlayedAt'},$$q{'TourNumber'}) = |
$sth->fetchrow; |
$sth->fetchrow; |
} else { |
} else { |
($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'}, |
($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'},$$q{'Sources'}, |
$$q{'Number'})= |
$$q{'Number'})= |
$sth->fetchrow; |
$sth->fetchrow; |
} |
} |
Line 194 sub SelectQuestions {
|
Line 211 sub SelectQuestions {
|
|
|
my $query; |
my $query; |
if ($WithTour) { |
if ($WithTour) { |
$query="SELECT QuestionId, Questions.Question, Answer, Comments, Authors, |
$query="SELECT QuestionId, Questions.Question, Answer, Comments, Authors, Sources, |
Questions.Number |
Questions.Number |
, t2.Title, t1.Title, t2.FileName, t2.PlayedAt,t1.Number |
, t2.Title, t1.Title, t2.FileName, t2.PlayedAt,t1.Number |
from Questions,Tournaments as t1, Tournaments as t2 |
from Questions,Tournaments as t1, Tournaments as t2 |
WHERE $where"; |
WHERE $where"; |
} else { |
} else { |
$query="SELECT QuestionId, Questions.Question, Answer, Comments, Authors, |
$query="SELECT QuestionId, Questions.Question, Answer, Comments, Authors, Sources, |
Questions.Number from Questions |
Questions.Number from Questions |
WHERE $where"; |
WHERE $where"; |
} |
} |
Line 241 sub tourhref {
|
Line 258 sub tourhref {
|
$res.=$a?"-a":"-q" unless $gr; |
$res.=$a?"-a":"-q" unless $gr; |
$res.=".html"; |
$res.=".html"; |
$res=~s/(\#\d+)(.*)$/$2$1/; |
$res=~s/(\#\d+)(.*)$/$2$1/; |
|
my $t=$res; |
|
$t=~s/\#.*$//; |
|
$res=~s/\.1// unless -e "$realHTMLDIR$t"; |
|
$t=$res; |
|
$t=~s/\#.*$//; |
|
$res=~s/\.html/-q\.html/ unless -e "$realHTMLDIR$t"; |
$res="$HTMLDIR$res" unless $opt_z; |
$res="$HTMLDIR$res" unless $opt_z; |
return $res; |
return $res; |
} else { |
} else { |
Line 450 sub russearch {
|
Line 473 sub russearch {
|
my %count; |
my %count; |
POSIX::setlocale( &POSIX::LC_ALL, $thislocale ); |
POSIX::setlocale( &POSIX::LC_ALL, $thislocale ); |
$sstr=~tr/йцукенгшщзхъфывапролджэячсмитьбю/ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ/; |
$sstr=~tr/йцукенгшщзхъфывапролджэячсмитьбю/ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ/; |
@qw=@w =split (' ', uc $sstr); |
# @qw=@w =split (' ', uc $sstr); |
|
my $ts=uc $sstr; |
|
@qw=@w= $ts=~m/(?:(?:${RLrl})+)|(?:[A-Za-z0-9]+)/gom; |
|
|
|
|
#----------- |
#----------- |
foreach $i (0..$#w) # заполняем массив @nf начальных форм |
foreach $i (0..$#w) # заполняем массив @nf начальных форм |
Line 1032 sub PrintTournament {
|
Line 1058 sub PrintTournament {
|
}; |
}; |
} |
} |
} else { |
} else { |
my ($qnum) = GetQNum($dbh); |
my ($qnum) = GetQNum($dbh,0); |
$output .= h2("Банк Вопросов: $qnum вопрос".&Suffix($qnum)) |
my ($qnum1) = GetQNum($dbh,1); |
. p . "\n"; |
$output .= h2("База вопросов"). |
|
h3("$qnum запис".&Suffix2($qnum). |
|
" (не повторяется $qnum1)"); |
|
|
|
# h4("<table>". |
|
# Tr(td("Из них:"), td("Вопросов ЧГК: ".countz($dbh,'Ч'))). |
|
# Tr(td(" "), td("Вопросов для брейна: ".countz($dbh,'Б'))). |
|
# Tr(td(" "), td("Вопросов для ЧГК и брейна: ".countz($dbh,'ЧБ'))). |
|
# Tr(td(" "), td("Интернет-вопросов: ".countz($dbh,'И'))). |
|
# Tr(td(" "), td("Бескрылок: ".countz($dbh,'Л'))). |
|
# Tr(td(" "),td("Заданий для Своей Игры: ".countz($dbh,'Я'))). |
|
# Tr(td(" "),td("Эрудиток: ".countz($dbh,'Э'))))."</table>" |
} |
} |
|
|
for ($i = 0; $i <= $#Tours; $i++) { |
for ($i = 0; $i <= $#Tours; $i++) { |
Line 1125 sub Suffix {
|
Line 1162 sub Suffix {
|
return $suffix; |
return $suffix; |
} |
} |
|
|
|
|
|
sub Suffix1 { |
|
my ($qnum) = @_; |
|
my ($suffix) = 'я' if $qnum =~ /[234]$/; |
|
$suffix = 'е' if $qnum =~ /1$/; |
|
$suffix = 'й' if $qnum =~ /[567890]$/ || $qnum =~ /1.$/; |
|
return $suffix; |
|
} |
|
|
|
sub Suffix2 { |
|
my ($qnum) = @_; |
|
my ($suffix) = 'и' if $qnum =~ /[234]$/; |
|
$suffix = 'ь' if $qnum =~ /1$/; |
|
$suffix = 'ей' if $qnum =~ /[567890]$/ || $qnum =~ /1.$/; |
|
return $suffix; |
|
} |
|
|
sub IsTour { |
sub IsTour { |
my ($dbh, $Id,$n) = @_; |
my ($dbh, $Id,$n) = @_; |
|
|
Line 1195 sub PrintTour {
|
Line 1249 sub PrintTour {
|
|
|
my $n=$Tour{'Number'}; |
my $n=$Tour{'Number'}; |
if ($answer == 0) { |
if ($answer == 0) { |
|
my $nn=".$n"; |
|
$nn="" if ($n==1 && !&IsTour($dbh, $Tour{'ParentId'}, $n + 1)); |
|
|
$bottom .= |
$bottom .= |
"[" . a({href=>tourhref("$fname.$n",1)}, |
"[" . a({href=>tourhref("$fname$nn",1)}, |
"ответы") . "] " . br; |
"ответы") . "] " . br; |
} |
} |
if ($n>1) { |
if ($n>1) { |
Line 1228 sub PrintField {
|
Line 1285 sub PrintField {
|
$value =~ s/<[\/\w]*?>//sg; |
$value =~ s/<[\/\w]*?>//sg; |
} else { |
} else { |
$value =~ s/^\s+/<br> /mg; |
$value =~ s/^\s+/<br> /mg; |
|
$value =~ s/(\s+)-+(\s+)/$1–$2/mg; |
|
$value =~ s/\s+\–/ \–/mg |
|
if $value !~ /^\|/; |
$value =~ s/^\|([^\n]*)/<pre>$1<\/pre>/mg; |
$value =~ s/^\|([^\n]*)/<pre>$1<\/pre>/mg; |
$value =~ s/\s+-+\s+/ – /mg; |
|
$value =~ s/(http:\/\/\S+[^\s\)\(\,\.])/<a href="$1">$1<\/a>/g if $header !~ /^Авто/; |
$value =~ s/(http:\/\/\S+[^\s\)\(\,\.])/<a href="$1">$1<\/a>/g if $header !~ /^Авто/; |
# $value =~ s/(http:\/\/(?:\w+.)+[\w\\\~]+(\?[^\s.]+)?)/<a href="$1">$1<\/a>/g if $header !~ /^Авто/; |
# $value =~ s/(http:\/\/(?:\w+.)+[\w\\\~]+(\?[^\s.]+)?)/<a href="$1">$1<\/a>/g if $header !~ /^Авто/; |
# $value =~ s/(\s)"/$1“/mg; |
# $value =~ s/(\s)"/$1“/mg; |
Line 1384 qid=$qid"}, 'Близкие вопросы').p
|
Line 1443 qid=$qid"}, 'Близкие вопросы').p
|
|
|
# Returns the total number of questions currently in the DB. |
# Returns the total number of questions currently in the DB. |
sub GetQNum { |
sub GetQNum { |
my ($dbh) = @_; |
my ($dbh,$x) = @_; |
my ($sth) = $dbh->prepare("SELECT COUNT(*) FROM Questions"); |
my ($sth) = $dbh->prepare("SELECT COUNT(*) FROM Questions"); |
$sth->execute; |
$sth->execute; |
my $tmp=($sth->fetchrow)[0]; |
my $tmp=($sth->fetchrow)[0]; |
$sth->finish; |
$sth->finish; |
return $tmp; |
($sth)= $dbh -> prepare("select distinct count(first) FROM equalto"); |
|
$sth -> execute; |
|
my ($c)=$sth->fetchrow; |
|
|
|
# $i++ while ( my ($first, $second)=$sth -> fetchrow) |
|
# { |
|
# $forbidden{$first}=1; |
|
# } |
|
$sth->finish; |
|
|
|
return $tmp-($x?$c:0); |
} |
} |
sub GetMaxQId { |
sub GetMaxQId { |
my ($dbh) = @_; |
my ($dbh) = @_; |
Line 1533 sub PrintDates {
|
Line 1602 sub PrintDates {
|
next |
next |
if (!$array[0]); |
if (!$array[0]); |
%Tournament = &GetTournament($dbh, $array[0]); |
%Tournament = &GetTournament($dbh, $array[0]); |
|
my $textid; |
|
if ($textid=$Tournament{'FileName'}) |
|
{ |
|
$textid=~s/\.txt//; |
|
} |
|
elsif ($textid=$Tournament{'Number'}) |
|
{ |
|
$fname=~s/\.txt//; |
|
$textid="$fname.$textid"; |
|
} |
|
else {$textid=$Tournament{'Id'}}; |
$list .= dd(img({src=>"/icons/folder.gif", alt=>"[*]"}) . |
$list .= dd(img({src=>"/icons/folder.gif", alt=>"[*]"}) . |
" " . a({href=>tourhref($Tournament{'FileName'},0,1)}, |
" " . a({href=>tourhref($textid,0,1)}, |
$Tournament{'Title'}, $Tournament{'PlayedAt'}||'')); |
$Tournament{'Title'}, $Tournament{'PlayedAt'}||'')); |
} |
} |
$sth->finish; |
$sth->finish; |
Line 1823 MAIN:
|
Line 1903 MAIN:
|
POSIX::setlocale( &POSIX::LC_ALL, $thislocale ); |
POSIX::setlocale( &POSIX::LC_ALL, $thislocale ); |
my($i, $tour); |
my($i, $tour); |
my($text) = (param('text')) ? 1 : 0; |
my($text) = (param('text')) ? 1 : 0; |
if (param('qid') && (param('qid')=~/^\d+$/)) { |
$tour = (param('tour')) ? param('tour') : 0; |
|
my $texttour=$tour; |
|
my ($sth,$dbh); |
|
$dbh = DBI->connect("DBI:mysql:chgk", "piataev", "") |
|
or do { |
|
print h1("Временные проблемы") . "База вопросов временно не |
|
работает. Заходите попозже."; |
|
print &Include_virtual("$reklama") if $url!~/localhost/; |
|
print end_html; |
|
die "Can't connect to DB chgk\n"; |
|
}; |
|
|
|
|
|
if (param('qid') && (param('qid')=~/^\d+$/) || $tour && $tour=~/^\d+$/) { |
my $destination='http://db.chgk.info/search.html'; |
my $destination='http://db.chgk.info/search.html'; |
# print header (-'Content-Type' => 'text/html', |
# print header (-'Content-Type' => 'text/html', |
# -'Location:'=> 'http:\\db.chgk.info'); |
# -'Location:'=> 'http:\\db.chgk.info'); |
Line 1831 MAIN:
|
Line 1924 MAIN:
|
exit |
exit |
} |
} |
|
|
|
if ($tour && !param('qnumber') && (!param('answers')||(param('answers')<=1))) |
|
{ |
|
my $n=param('tour'); |
|
$n=~s/.txt$//; |
|
my $gr=($n=~/^[A-Z]/) || (-e "$realHTMLDIR$n.html"); |
|
my $destination=tourhref($tour,param('answers')||0,$gr); |
|
my $d=$destination; |
|
$d=~s/$HTMLDIR/$realHTMLDIR/; |
|
# print header.$destination; |
|
print header."$d|".(-e "$realHTMLDIR$n.html"); |
|
if (-e $d) { |
|
Redirect($destination); |
|
exit |
|
} |
|
$d=~s/\.\d+//; |
|
$destination=~s/\.\d+//; |
|
print br.br.$d; |
|
if (-e $d) { |
|
Redirect($destination); |
|
exit |
|
} |
|
|
|
} |
|
|
|
if ($tour !~ /^[0-9]*$/) { |
|
if ($tour=~/\./) |
|
{ |
|
my ($fname,$n)= split /\./ , $tour; |
|
|
|
$sth = $dbh->prepare( |
|
"SELECT t2.Id FROM Tournaments as t1, |
|
Tournaments as t2 |
|
WHERE (t1.FileName = '$fname.txt' OR t1.FileName='$fname') |
|
AND t1.Id=t2.ParentId AND t2.Number=$n"); |
|
} |
|
else |
|
{ |
|
$sth = $dbh->prepare("SELECT Id FROM Tournaments |
|
WHERE FileName = '$tour.txt' OR |
|
FileName = '$tour'"); |
|
} |
|
$sth->execute; |
|
$tour = ($sth->fetchrow)[0]; |
|
$sth->finish; |
|
} |
|
|
|
|
if ($text && !param ('comp')) { |
if ($text && !param ('comp')) { |
print header('text/plain'); |
print header('text/plain'); |
} elsif (!param('comp')) {print header;} |
} elsif (!param('comp')) {print header;} |
my($dbh) = DBI->connect("DBI:mysql:chgk", "piataev", "") |
|
or do { |
|
print h1("Временные проблемы") . "База вопросов временно не |
|
работает. Заходите попозже."; |
|
print &Include_virtual("$reklama") if $url!~/localhost/; |
|
print end_html; |
|
die "Can't connect to DB chgk\n"; |
|
}; |
|
my $sstr=param('sstr'); |
my $sstr=param('sstr'); |
$opt_z||=param("makehtml"); |
$opt_z||=param("makehtml"); |
if (param('qid')) { |
if (param('qid')) { |
Line 1932 th {font-size: x-small; font-family : sa
|
Line 2064 th {font-size: x-small; font-family : sa
|
} |
} |
$sth->finish; |
$sth->finish; |
} |
} |
$tour = (param('tour')) ? param('tour') : 0; |
|
my $sth; |
|
my $texttour=$tour; |
|
if ($tour !~ /^[0-9]*$/) { |
|
if ($tour=~/\./) |
|
{ |
|
my ($fname,$n)= split /\./ , $tour; |
|
|
|
$sth = $dbh->prepare( |
|
"SELECT t2.Id FROM Tournaments as t1, |
|
Tournaments as t2 |
|
WHERE (t1.FileName = '$fname.txt' OR t1.FileName='$fname') |
|
AND t1.Id=t2.ParentId AND t2.Number=$n"); |
|
} |
|
else |
|
{ |
|
$sth = $dbh->prepare("SELECT Id FROM Tournaments |
|
WHERE FileName = '$tour.txt' OR |
|
FileName = '$tour'"); |
|
} |
|
$sth->execute; |
|
$tour = ($sth->fetchrow)[0]; |
|
$sth->finish; |
|
} |
|
|
|
|
|
if (param('rand')) { |
if (param('rand')) { |
Line 2056 EOT
|
Line 2164 EOT
|
else { |
else { |
$opt_z=1; |
$opt_z=1; |
$url="http://db.chgk.info/cgi-bin/db.cgi"; |
$url="http://db.chgk.info/cgi-bin/db.cgi"; |
open TS, "timestamp"; |
open TS, $timestamp; |
my $d=$dbh->quote(<TS>); |
my $d=$dbh->quote(<TS>); |
close TS; |
close TS; |
open FF, ">${realHTMLDIR}index.html" or die "ERROR! - ${HTMLDIR}index.html\n"; |
open FF, ">${realHTMLDIR}index.html" or die "ERROR! - ${HTMLDIR}index.html\n"; |
Line 2078 EOT
|
Line 2186 EOT
|
# FROM Tournaments as t1, Tournaments as t2 |
# FROM Tournaments as t1, Tournaments as t2 |
# WHERE t1.CreatedAt>$d AND t2.ParentId=t1.Id GROUP BY t1.Id"); |
# WHERE t1.CreatedAt>$d AND t2.ParentId=t1.Id GROUP BY t1.Id"); |
my ($sth) = $dbh->prepare("SELECT t1.Id, t1.FileName, t1.Type, count(t2.Id) FROM Tournaments as t1 LEFT JOIN Tournaments as t2 |
my ($sth) = $dbh->prepare("SELECT t1.Id, t1.FileName, t1.Type, count(t2.Id) FROM Tournaments as t1 LEFT JOIN Tournaments as t2 |
ON t2.ParentId=t1.id WHERE t1.CreatedAt>$d GROUP BY t1.Id"); |
ON t2.ParentId=t1.id WHERE t1.CreatedAt>=$d GROUP BY t1.Id"); |
$sth->execute; |
$sth->execute; |
my ($Id,$fname,$type,$c); |
my ($Id,$fname,$type,$c); |
while (($Id,$fname,$type,$c)=$sth->fetchrow,$Id) { |
while (($Id,$fname,$type,$c)=$sth->fetchrow,$Id) { |