--- db/prgsrc/db.cgi 2004/03/11 07:14:14 1.130 +++ db/prgsrc/db.cgi 2008/11/29 08:51:29 1.151 @@ -2,14 +2,22 @@ use DBI; use CGI ':all'; -use strict; +#use strict; +use Encode; +my @softfields=("От Олега Степанова"); use Time::Local; +use Data::Dumper "Dumper"; +use URI::Escape; +my $proxyredirect=1; use POSIX qw(locale_h); use locale; use vars qw($opt_z); use Getopt::Std; -my ($dbuser,$dbname,$dbpass,$dbhost); -require "dbdefs.pl"; +#my ($dbuser,$dbname,$dbpass,$dbhost); +eval {require "dbdefs.pl";} ; +my $url=url||''; +my @used_stop=(); +my $showNearQuestions=0; $dbuser||="piataev"; $dbname||="chgk"; $dbpass||=""; @@ -24,8 +32,10 @@ open STDERR, ">/var/tmp/errors1"; my $newsurl='http://news.chgk.info/'; my $reklama="../dimrub/db/reklama.html"; my $footer="../dimrub/db/footer.html"; - +$footer="../../chgk/footer.html" if $url=~/zaba/; +$reklama="../../chgk/reklama.html" if $url=~/zaba/; my $datefooter="../dimrub/db/date"; +$datefooter="../../chgk/date" if $url=~/zaba/; my $fname; $reklama="../reklama.html" if $opt_z; @@ -38,13 +48,13 @@ if ($^O =~ /win/i) { $realHTMLDIR="/html/znatoki/baza/"; } else { - $realHTMLDIR="/home/piataev/public_html/dimrub/db/files/"; + $realHTMLDIR="/home/znatoki/chgk-db/public_html/dimrub/db/files/"; } -my $url=url||''; + my $usehtml=$opt_z||0; $usehtml=1; -$usehtml=0 if $url=~/zaba/; +$usehtml=0 if $url=~/zaba/ || $url=~/localhost/; my $usewas=0; my $cashednumber=500; @@ -61,13 +71,13 @@ $outputkvo=100 if $outputkvo>100; if (param('debug')) {$debug=1; $printqueries=1} *STDERR=*STDOUT if $debug; -if ($url !~ /db\.chgk\.info/ && $url !~ /localhost/ && $url !~ /bilbo/ && $url !~ /zaba/) { +if ($url !~ /db\.chgk\.info/ && $url !~ /localhost/ && $url !~ /bilbo/ && $url !~ /zaba/ && $url !~ /question\.chgk\.info/ ) { my $u="http://db.chgk.info/cgi-bin/db.cgi?$qs"; Redirect ($u); exit; } -if ($metod=~/proxy/ && $url !~ /localhost/ && $url !~ /bilbo/ && $url !~ /zaba/) { +if ($proxyredirect && $metod=~/proxy/ && $url !~ /localhost/ && $url !~ /bilbo/ && $url !~ /zaba/) { my $u="http://chgk.zaba.ru/cgi-bin/db.cgi?$qs"; Redirect ($u); exit; @@ -88,8 +98,8 @@ POSIX::setlocale( &POSIX::LC_ALL, $thisl if ((uc 'а') ne 'А') {print STDERR "Koi8-r locale not installed!\n"}; -my %fieldname= (0,'Question', 1, 'Answer', 2, 'Comments', 3, 'Authors', 4, 'Sources'); -my %rusfieldname=('Question','Вопрос', 'Answer', 'Ответ', +my %fieldname= (0,'Question', 1, 'Answer', 2, 'PassCriteria', 3, 'Comments', 4, 'Authors', 5, 'Sources'); +my %rusfieldname=('Question','Вопрос', 'Answer', 'Ответ', 'PassCriteria','Зачёт', 'Comments', 'Комментарии', 'Authors', 'Автор', 'Sources', 'Источник','old','Старый','rus','Новый', 'chgk', 'ЧГК', 'brain', 'Брейн-ринг','game', 'Своя игра', @@ -124,8 +134,8 @@ my $all=param('all'); $all=0 if lc $all eq 'no'; my ($PWD) = `pwd` if $^O!~/win/i; chomp $PWD if $PWD; -my ($SRCPATH) = "/home/piataev/public_html/dimrub/src"; -my ($ZIP) = "/usr/local/bin/zip"; +my ($SRCPATH) = "/home/db-chgk/public_html/dimrub/src"; +my ($ZIP) = "/usr/bin/zip"; my $DUMPFILE = "/tmp/chgkdump"; my ($SENDMAIL) = "/usr/sbin/sendmail"; my ($TMPDIR) = "/var/tmp"; @@ -202,12 +212,12 @@ sub GetTournament { sub fetchquestion { my ($sth,$q,$WithTour)=@_; if ($WithTour) { - ($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'},$$q{'Sources'}, + ($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'PassCriteria'},$$q{'Comments'},$$q{'Authors'},$$q{'Sources'}, $$q{'Number'}, $$q{'Title'}, $$q{'TourTitle'}, $$q{'FileName'},$$q{'PlayedAt'},$$q{'TourNumber'}) = $sth->fetchrow; } else { - ($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'},$$q{'Sources'}, + ($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'PassCriteria'},$$q{'Comments'},$$q{'Authors'},$$q{'Sources'}, $$q{'Number'})= $sth->fetchrow; } @@ -229,13 +239,13 @@ sub SelectQuestions { my $query; if ($WithTour) { - $query="SELECT QuestionId, Questions.Question, Answer, Comments, Authors, Sources, + $query="SELECT QuestionId, Questions.Question, Answer, PassCriteria, Comments, Authors, Sources, Questions.Number , t2.Title, t1.Title, t2.FileName, t2.PlayedAt,t1.Number from Questions,Tournaments as t1, Tournaments as t2 WHERE $where"; } else { - $query="SELECT QuestionId, Questions.Question, Answer, Comments, Authors, Sources, + $query="SELECT QuestionId, Questions.Question, Answer, PassCriteria, Comments, Authors, Sources, Questions.Number from Questions WHERE $where"; } @@ -273,21 +283,24 @@ sub tourhref { my $res; if ($usehtml) { $res=$t; + $res=~s/\-q$//; + $res=~s/\-a$//; $res.=$a?"-a":"-q" unless $gr; $res.=".html"; $res=~s/(\#\d+)(.*)$/$2$1/; my $t=$res; $t=~s/\#.*$//; - $res=~s/\.1// unless -e "$realHTMLDIR$t"; +# $res=~s/\.1// unless $gr ||$res=~/\.\d+$/;#-e "$realHTMLDIR$t"; $t=$res; $t=~s/\#.*$//; - $res=~s/\.html/-q\.html/ unless -e "$realHTMLDIR$t"; +# $res=~s/\.html/-q\.html/ unless -e "$realHTMLDIR$t"; $res="$HTMLDIR$res" unless $opt_z; return $res; } else { $res=$url; - $res.="?tour=$t"; - $res.=$a?"&answers=1":""; + $res.=$a?"?answers=1&":"?"; + $res.="tour=$t"; + return $res; } @@ -352,11 +365,11 @@ sub printform my $sstr=param('sstr'); my @df=keys %searchin; my %checked; - $checked{lc $_}="" foreach ('Question','Answer','Comments','Authors','Sources','old','rus', + $checked{lc $_}="" foreach ('Question','Answer','PassCriteria','Comments','Authors','Sources','old','rus', 'chgk','brain','igp','game','ehruditka','beskrylka'); @df=('Question', 'Answer') unless @df; $checked{lc $_}="checked" foreach @df; - my $fields=checkbox_group('searchin',['Question','Answer','Comments','Authors','Sources'], [@df], + my $fields=checkbox_group('searchin',['Question','Answer','PassCriteria','Comments','Authors','Sources'], [@df], 'false',\%rusfieldname); @df=param('type'); @df=('chgk','brain','igp','game','ehruditka','beskrylka') unless @df; @@ -382,7 +395,7 @@ action="/znatoki/cgi-bin/db.cgi">
Вариант поиска: - | + | Простой (старый) | "Что? Где? Когда?" @@ -400,11 +413,11 @@ action="/znatoki/cgi-bin/db.cgi"> "Бескрылка" | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Расширенный (с учетом грамматики, в вопросах всех типов) + | Расширенный (с учетом грамматики, в вопросах всех типов) | |||||||||||
Искать: - | + | Все слова | Любое слово @@ -416,6 +429,8 @@ action="/znatoki/cgi-bin/db.cgi"> |
Ответ |
+Зачёт + |
Комментарии |
Автор @@ -424,6 +439,9 @@ action="/znatoki/cgi-bin/db.cgi"> |
$1<\/pre>/mg; - $value =~ s/(http:\/\/\S+[^\s\)\(\,\.])/$1<\/a>/g if $header !~ /^Авто/; + + $value =~ s/(http:\/\/\S+[^\s\)\(\,\.])/a({href=>escapeUrl($1)},$1)/egm if $header !~ /^Авто/;#!!! + + +# $value =~ s/(http:\/\/\S+[^\s\)\(\,\.])/make/eg if $header !~ /^Авто/;#!!! +# $value =~ s/(http:\/\/\S+[^\s\)\(\,\.])/$1<\/a>/g if $header !~ /^Авто/; # $value =~ s/(http:\/\/(?:\w+.)+[\w\\\~]+(\?[^\s.]+)?)/$1<\/a>/g if $header !~ /^Авто/; # $value =~ s/(\s)"/$1/mg; # $value =~ s/^"//mg; # $value =~ s/"//mg; } - + if ($value=~/^\s*()?\s*"50%"}) if $answer>=0; if ($title) { - my $fname=$Question{'FileName'}; + $fname=$Question{'FileName'}; $fname=~s/\.txt//; $titles .= dd(img({src=>"/icons/folder.open.gif"}) . " " . @@ -1370,6 +1446,10 @@ sub PrintQuestion { if ($answer==1|| $answer==-1) { $output .= &PrintField("Ответ", $Question{'Answer'}, $text); + if ($Question{'PassCriteria'} ) { + $output .= + &PrintField("Зачёт", $Question{'PassCriteria'}, $text); + } if ($Question{'Authors'} ) { my $q=$Question{'Authors'}; @@ -1438,6 +1518,10 @@ EOTT if ($Question{'Authors'}) { $output .= &PrintField("Автор(ы)", $Question{'Authors'}, $text); } + if ($Question{'PassCriteria'}) { + $output .= &PrintField("Зачёт", $Question{'PassCriteria'}, $text); + } + if ($Question{'Sources'}) { $output .= &PrintField("Источник(и)", $Question{'Sources'}, $text); } @@ -1452,12 +1536,17 @@ $output.="" } $output=~s/\(pic: ([^\)]*)\)/ /g unless $text; + $output=~s/⌡/\ï/g; + $output=~s/⌠/\Ï/g; + $paramtour||=param("tour"); - my $qid=$paramtour ? ($paramtour.".$Question{'Number'}" ): ''; + $fname=$fname.".$Question{'TourNumber'}" if $fname && $Question{'TourNumber'}; +$fname||=param('tour'); + my $qid=$fname ? ($fname.".$Question{'Number'}" ): ''; - $output.=br.a({href=> $url."?metod=proxy& + $output.=br."\n".a({href=> "/search/"."?metod=proxy& qid=$qid"}, 'Близкие вопросы').p - if $answer>0 && !$text && $qid; + if $answer>0 && !$text && $qid && $showNearQuestions; return $output; } @@ -1680,7 +1769,7 @@ sub PrintQOfAuthor $suffix = 'я'; } $Output.= printform; - $Output.= p({align=>"center"}, "Автор ".strong("$name $surname. ") + $Output.= p({align=>"center"}, "Автор ".strong("$name $surname ") . " : $hits попадани$suffix."); @@ -1879,6 +1968,7 @@ sub WriteFile { { print OUT "Вопрос $q:\n".$Question{$tour}[$q]{'Question'}."\n\n"; print OUT "Ответ:\n".$Question{$tour}[$q]{'Answer'}."\n\n"; + print OUT "Зачёт:\n".$Question{$tour}[$q]{'PassCriteria'}."\n\n"; print OUT "Автор:\n".$Question{$tour}[$q]{'Authors'}."\n\n" if !$tourauthor && !$eqauthor && $Question{$tour}[$q]{'Authors'}; print OUT "Комментарий:\n".$Question{$tour}[$q]{'Comments'}."\n\n" @@ -1929,7 +2019,7 @@ MAIN: my $texttour=$tour; my ($sth,$dbh); my($dsn) = "DBI:mysql:database=$dbname;host=$dbhost"; - $dbh = DBI->connect($dsn, $dbuser, $dbpass) + $dbh = DBI->connect($dsn, $dbuser, $dbpass) # $dbh = DBI->connect("DBI:mysql:$dbname", $username, $dbpass) or do { print header.h1("Временные проблемы") . "База вопросов временно не @@ -1938,17 +2028,17 @@ MAIN: print end_html; die "Can't connect to DB chgk\n"; }; - + $dbh->do("set names koi8r"); if (param('qid') && (param('qid')=~/^\d+$/) || $tour && $tour=~/^\d+$/) { - my $destination='http://chgk.zaba.ru/search.html'; +# my $destination='http://chgk.zaba.ru/search.html'; # print header (-'Content-Type' => 'text/html', # -'Location:'=> 'http:\\db.chgk.info'); Redirect($destination); exit } - if ($tour && !param('qnumber') && (!param('answers')||(param('answers')<=1))) + if (0 && $tour && !param('qnumber') && (!param('answers')||(param('answers')<=1))) { my $n=param('tour'); $n=~s/.txt$//; @@ -1957,14 +2047,13 @@ MAIN: my $d=$destination; $d=~s/$HTMLDIR/$realHTMLDIR/; # print header.$destination; - print header."$d|".(-e "$realHTMLDIR$n.html"); +# 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 @@ -2052,11 +2141,10 @@ print br.br.$d; my $title="Результаты поиска на \"". ($proxysstr||$sstr) .'"' if ($proxysstr||$sstr); $title||="База вопросов"; - $globaloutput.=start_html(-"title"=>$title, -author=>'dimrub@icomverse.com', -bgcolor=>'#fff0e0', - -vlink=>'#800020'); + -vlink=>'#800020');#} $globaloutput.="