Diff for /db/prgsrc/db.cgi between versions 1.97 and 1.116

version 1.97, 2003/04/14 20:06:59 version 1.116, 2003/04/28 22:49:50
Line 6  use strict; Line 6  use strict;
 use Time::Local;  use Time::Local;
 use POSIX qw(locale_h);  use POSIX qw(locale_h);
 use locale;  use locale;
   use vars qw($opt_z);
   use Getopt::Std;
   getopts('z');
   $opt_z||=param("makehtml");
   my $paramtour;
   my $withanswers=param('answer')||param('answers');
 open STDERR, ">/var/tmp/errors1";  open STDERR, ">/var/tmp/errors1";
 my $newsurl='http://news.chgk.info/';  my $newsurl='http://news.chgk.info/';
   my $reklama="../dimrub/db/reklama.html";
   my $footer="../dimrub/db/footer.html";
   
   my $datefooter="../dimrub/db/date";
   
   my $fname;
   $reklama="../reklama.html" if $opt_z;
   $footer="../footer.html" if $opt_z;
   $datefooter="../date" if $opt_z;
   my $HTMLDIR="/znatoki/dimrub/db/baza/";
   $HTMLDIR="/baza/";
   my $realHTMLDIR;
   if ($^O =~ /win/i) {
    $realHTMLDIR="/html/znatoki/baza/";
   } else 
   {
     $realHTMLDIR="/home/piataev/public_html/dimrub/db/baza/";
   }
   my $usehtml=$opt_z||0;
 my $usewas=0;  my $usewas=0;
 my $cashednumber=500;  my $cashednumber=500;
 my $outputnumber=10;  my $outputnumber=10;
 my ($proxyptext,$proxysstr);  my ($proxyptext,$proxysstr);
 my $printqueries=0;  my $printqueries=0;
 my $url=url;  my $url=url||'';
 my $qs=query_string;  my $qs=query_string;
 my $globaloutput;  my $globaloutput;
 my %forbidden=();  my %forbidden=();
Line 23  $outputkvo=100 if $outputkvo>100; Line 48  $outputkvo=100 if $outputkvo>100;
   
 if (param('debug')) {$debug=1; $printqueries=1}  if (param('debug')) {$debug=1; $printqueries=1}
 *STDERR=*STDOUT if $debug;  *STDERR=*STDOUT if $debug;
 if ($url !~ /db\.chgk\.info/ && $url !~ /localhost/ ) {  if ($url !~ /db\.chgk\.info/ && $url !~ /localhost/ && $url !~ /bilbo/) {
    my $u="http://db.chgk.info/cgi-bin/db.cgi?$qs";     my $u="http://db.chgk.info/cgi-bin/db.cgi?$qs";
    Redirect ($u);     Redirect ($u);
    exit;     exit;
Line 92  my @months=('000','Jan',"Feb","Mar","Apr Line 117  my @months=('000','Jan',"Feb","Mar","Apr
 sub NewEnough {  sub NewEnough {
         my ($a) = @_;          my ($a) = @_;
         my ($year, $month, $day) = split('-', $a);          my ($year, $month, $day) = split('-', $a);
           $month=1 if ($month<=0);
           $day=1 if ($day<=0);
         return (time - timelocal(0, 0, 0, $day, $month -1, $year) < $TMSECS);          return (time - timelocal(0, 0, 0, $day, $month -1, $year) < $TMSECS);
 }  }
   
Line 141  sub GetTournament { Line 167  sub GetTournament {
 sub fetchquestion {  sub fetchquestion {
         my ($sth,$q,$WithTour)=@_;          my ($sth,$q,$WithTour)=@_;
         if ($WithTour) {          if ($WithTour) {
                 ($$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'},                  ($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'},
                 $$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{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'},                  ($$q{'QuestionId'}, $$q{'Question'},$$q{'Answer'},$$q{'Comments'},$$q{'Authors'},
                 $$q{'Number'})=                   $$q{'Number'})= 
                 $sth->fetchrow;                  $sth->fetchrow;
         }          }
Line 154  sub fetchquestion { Line 180  sub fetchquestion {
   
   
   
   
 sub SelectQuestions {  sub SelectQuestions {
         my ($dbh,$q,$WithTour) = @_;          my ($dbh,$q,$WithTour) = @_;
         my %q=();          my %q=();
         $_ = "QuestionId=$_" foreach @$q;  #       $_ = "QuestionId=$_" foreach @$q;
         my $where=join " OR ",@$q;  #       my $where=join " OR ",@$q;
           my $where=join ',',@$q;
           $where &&= "QuestionId IN (".(join ',',$where).")";
         $where||=1;          $where||=1;
         $where="($where) AND Questions.ParentId=t1.Id AND t1.ParentId=t2.Id"           $where="($where) AND Questions.ParentId=t1.Id AND t1.ParentId=t2.Id" 
                 if $WithTour;                  if $WithTour;
   
         my $query;          my $query;
         if ($WithTour) {          if ($WithTour) {
                 $query="SELECT Questions.Question, Answer, Comments, Authors,                  $query="SELECT QuestionId, Questions.Question, Answer, Comments, Authors,
                         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 Questions.Question, Answer, Comments, Authors,                  $query="SELECT QuestionId, Questions.Question, Answer, Comments, Authors,
                         Questions.Number from Questions                           Questions.Number from Questions 
                         WHERE $where";                          WHERE $where";
         }          }
Line 204  sub GetQuestion { Line 233  sub GetQuestion {
         return %Question;          return %Question;
 }  }
   
   sub tourhref {
      my ($t,$a,$gr)=@_;
      my $res;
      if ($usehtml) {
           $res=$t;
           $res.=$a?"-a":"-q" unless $gr;
           $res.=".html";
           $res=~s/(\#\d+)(.*)$/$2$1/;
           $res="$HTMLDIR$res" unless $opt_z;
           return $res;
      } else {
           $res=$url;
           $res.="?tour=$t";
           $res.=$a?"&answers=1":"";
           return $res;
      }
   
   }
   
 # Gets numbers of all the questions from the given tour.  # Gets numbers of all the questions from the given tour.
 sub GetTourQuestions {  sub GetTourQuestions {
         my ($dbh, $ParentId) = @_;          my ($dbh, $ParentId) = @_;
Line 353  sub proxy Line 401  sub proxy
 sub makeproxysstr {  sub makeproxysstr {
       my ($dbh,$ptext)=@_;        my ($dbh,$ptext)=@_;
       my $text=$$ptext;        my $text=$$ptext;
         POSIX::setlocale( &POSIX::LC_ALL, $thislocale );
       $text=~tr/£³/Åå/;        $text=~tr/£³/Åå/;
       $text=~s/(${RLrl})p(${RLrl})/$1p$2/gom;        $text=~s/(${RLrl})p(${RLrl})/$1p$2/gom;
       $text=~s/p(${RLrl})/Ò$1/gom;        $text=~s/p(${RLrl})/Ò$1/gom;
Line 361  sub makeproxysstr { Line 410  sub makeproxysstr {
       $text=~s/[^ÊÃÕËÅÎÇÛÝÚÈßÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔØÂÀêãõëåîçûýúèÿæù÷áðòïìäöüñþóíéôøâàQWERTYUIOPASDFGHJKLZXCVBNM0-9]/ /g;        $text=~s/[^ÊÃÕËÅÎÇÛÝÚÈßÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔØÂÀêãõëåîçûýúèÿæù÷áðòïìäöüñþóíéôøâàQWERTYUIOPASDFGHJKLZXCVBNM0-9]/ /g;
       $text=uc $text;        $text=uc $text;
       my @list= $text=~m/(?:(?:${RLrl})+)|(?:[A-Za-z0-9]+)/gom;        my @list= $text=~m/(?:(?:${RLrl})+)|(?:[A-Za-z0-9]+)/gom;
   
       my (%c, %good,$sstr);        my (%c, %good,$sstr);
       foreach (@list)        foreach (@list)
       {        {
Line 369  sub makeproxysstr { Line 419  sub makeproxysstr {
       my @words=sort {$c{$a}<=> $c{$b}} @list;        my @words=sort {$c{$a}<=> $c{$b}} @list;
   
 #      $good{$words[$_]}=1 foreach 0..4;  #      $good{$words[$_]}=1 foreach 0..4;
   
       foreach (@words)        foreach (@words)
       {        {
          $good{$_}=1 if $c{$_}<200;           $good{$_}=1 if $c{$_}<200;
Line 399  sub russearch { Line 448  sub russearch {
             my %relevance;              my %relevance;
             my @blob;              my @blob;
             my %count;              my %count;
           POSIX::setlocale( &POSIX::LC_ALL, $thislocale );
 $sstr=~tr/ÊÃÕËÅÎÇÛÝÚÈßÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔØÂÀ/êãõëåîçûýúèÿæù÷áðòïìäöüñþóíéôøâà/;  $sstr=~tr/ÊÃÕËÅÎÇÛÝÚÈßÆÙ×ÁÐÒÏÌÄÖÜÑÞÓÍÉÔØÂÀ/êãõëåîçûýúèÿæù÷áðòïìäöüñþóíéôøâà/;
             @qw=@w =split (' ', uc $sstr);              @qw=@w =split (' ', uc $sstr);
   
Line 530  foreach (keys %wordsof) Line 579  foreach (keys %wordsof)
   
 @tasks=sort {$relevance{$b}<=>$relevance{$a}} @tasks;  @tasks=sort {$relevance{$b}<=>$relevance{$a}} @tasks;
   
   
 ############  ############
   
   
Line 697  sub PrintList { Line 745  sub PrintList {
    my ($dbh,$Questions,$shablon,$was)=@_;     my ($dbh,$Questions,$shablon,$was)=@_;
         my $Output;          my $Output;
         my $first=param('first') ||1;          my $first=param('first') ||1;
   print "shablon=$shablon".p;
         $first=$first-($first-1)%$outputkvo;          $first=$first-($first-1)%$outputkvo;
         my $fkvo=param('fkvo')||($#$Questions+1);          my $fkvo=param('fkvo')||($#$Questions+1);
         my $last=$first+$outputkvo-1;          my $last=$first+$outputkvo-1;
Line 718  sub PrintList { Line 766  sub PrintList {
         {          {
            $nav.=             $nav.=
             ("&nbsp;"x4).              ("&nbsp;"x4).
             a({href=>url."?".$qs."\&first=1"},"<<").("&nbsp;"x4).              a({href=>$url."?".$qs."\&first=1"},"<<").("&nbsp;"x4).
             a({href=>(url."?".$qs."\&first=".($first-$outputkvo))},"<").("&nbsp;"x4)              a({href=>($url."?".$qs."\&first=".($first-$outputkvo))},"<").("&nbsp;"x4)
         }          }
         else {$nav.='&nbsp;'x15;}          else {$nav.='&nbsp;'x15;}
   
Line 761  sub PrintList { Line 809  sub PrintList {
           $l=$fkvo if $l>$fkvo+1;            $l=$fkvo if $l>$fkvo+1;
           if ($f==$first) {$nav.="[$f-$l] ";}            if ($f==$first) {$nav.="[$f-$l] ";}
           else {            else {
                   $nav.= "[".a({href=>(url."?".$qs."\&first=$f")},"$f-$l")."] ";}                    $nav.= "[".a({href=>($url."?".$qs."\&first=$f")},"$f-$l")."] ";}
         }          }
         if ($lprint+$outputkvo<$fkvo)          if ($lprint+$outputkvo<$fkvo)
         {          {
            $nav.=             $nav.=
             ("&nbsp;"x4).              ("&nbsp;"x4).
             a({href=>(url."?".$qs."\&first=".($first+$outputkvo))},">").("&nbsp;"x4).              a({href=>($url."?".$qs."\&first=".($first+$outputkvo))},">").("&nbsp;"x4).
             a({href=>url."?".$qs."\&first=$llprint"},">>").("&nbsp;"x4)              a({href=>$url."?".$qs."\&first=$llprint"},">>").("&nbsp;"x4)
         }          }
         $Output.= "$nav".br."\n";          $Output.= "$nav".br."\n";
         my @q=@$Questions[$first-1..$last-1];          my @q=@$Questions[$first-1..$last-1];
         my %q=();          my %q=();
         my $sth=SelectQuestions($dbh,\@q,1);          my $sth=SelectQuestions($dbh,\@q,1);
           my $qq;
           my @Q;
           for (0..$#q) {
                   %{$Q[$_]}=();
                   fetchquestion($sth,$Q[$_],1);
                   $q{$Q[$_]{'QuestionId'}}=$Q[$_];
           }
   
         for (my $i = $first; $i <= $last; $i++) {          for (my $i = $first; $i <= $last; $i++) {
                 fetchquestion($sth,\%q,1);                  my $q=$q{$$Questions[$i-1]};
                 my $output;                  my $output;
                 $output = &PrintQuestion($dbh, \%q, 1, 0, 1,0,1  );                  $output = &PrintQuestion($dbh, $q, 1, 0, 1,0,1  );
                 if (param('metod') && (param('metod') eq 'rus' || param('metod') eq 'proxy'))  #                if (param('metod') && (param('metod') eq 'rus' || param('metod') eq 'proxy'))
                 {                  {
                      $output=~s/\b($shablon)\b/\<strong\>$1\<\/strong\>/gi;                       $output=~s/\b($shablon)\b/\<strong\>$1\<\/strong\>/gi;
                 } else {  
                      $output=~s/($shablon)/\<strong\>$1\<\/strong\>/gi;                       $output=~s/($shablon)/\<strong\>$1\<\/strong\>/gi;
                 }                  }
                 $Output.= $output;                  $Output.= $output;
Line 943  sub PrintTournament { Line 998  sub PrintTournament {
         %Tournament = &GetTournament($dbh, $Id) if ($Id);          %Tournament = &GetTournament($dbh, $Id) if ($Id);
   
         my ($URL) = $Tournament{'URL'};          my ($URL) = $Tournament{'URL'};
         $URL=~s/http:\/znatoki\/boris\/reports\//$newsurl/ if url=~/kulichki/;          $URL=~s/http:\/znatoki\/boris\/reports\//$newsurl/ if $url=~/kulichki/ || $url=~/db.chgk.info/;
         $URL=~s/\/znatoki\/boris\/reports\//$newsurl/ if url=~/kulichki/;;          $URL=~s/\/znatoki\/boris\/reports\//$newsurl/ if url=~/kulichki/ || $url=~/db.chgk.info/;
         my ($Info) = $Tournament{'Info'};          my ($Info) = $Tournament{'Info'};
         my ($Copyright) = $Tournament{'Copyright'};          my ($Copyright) = $Tournament{'Copyright'};
         my $fname=$Tournament{'FileName'};          my $fname=$Tournament{'FileName'};
Line 998  sub PrintTournament { Line 1053  sub PrintTournament {
                 } else {                  } else {
                         $qnum = '';                          $qnum = '';
                 }                  }
                 if ($Tournament{'Type'} =~ /ç/) {                  if ($Tournament{'Type'} !~ /[ôþ]/) {
                     $SingleTour=0;                      $SingleTour=0;
                         $imgsrc = "/icons/folder.gif";                          $imgsrc = "/icons/folder.gif";
                         $alt = "[*]";                          $alt = "[*]";
Line 1020  sub PrintTournament { Line 1075  sub PrintTournament {
                else {$textid=$Tournament{'Id'}};                 else {$textid=$Tournament{'Id'}};
                                   
   
                 if ($SingleTour or $Tournament{'Type'} =~ /ô/) {                  if ($SingleTour or ($Tournament{'Type'} =~ /ô/)) {
                         $list .= dd(img({src=>$imgsrc, alt=>$alt})                          $list .= dd(img({src=>$imgsrc, alt=>$alt})
                                 . " " . $Tournament{'Title'} . " " .                                  . " " . $Tournament{'Title'} . " " .
                                     $Tournament{'PlayedAt'} . $qnum) .                                      ($Tournament{'PlayedAt'}||"") . $qnum) .
                                 dl(                                  dl(
                                         dd("["                                          dd("["
                                                 . a({href=>url .  "?tour=$textid&answer=0"},                                                  . a({href=>tourhref($textid,0)},
                                                 "×ÏÐÒÏÓÙ") . "] ["                                                  "×ÏÐÒÏÓÙ") . "] ["
                   . a({href=>url .  "?tour=$textid&answer=1"},                    . a({href=>tourhref($textid,1)},
                   "×ÏÐÒÏÓÙ + ÏÔ×ÅÔÙ") . "]")                    "×ÏÐÒÏÓÙ + ÏÔ×ÅÔÙ") . "]")
                                 );                                  );
                 } else {                  } else {
                         $list .= dd(a({href=>url . "?tour=$textid&comp=1"},                          $list .= dd(#a({href=>
                                 img({src=>'/icons/compressed.gif', alt=>'[ZIP]', border=>1})). " " .   #                                 $url . "?tour=$textid&comp=1"},
   #                               img({src=>'/icons/compressed.gif', alt=>'[ZIP]', border=>1}))                           .  
                                   " " . 
                                 img({src=>$imgsrc, alt=>$alt})                                  img({src=>$imgsrc, alt=>$alt})
                                 . " " . a({href=>url . "?tour=$textid&answer=0"},                                  . " " . a({href=>tourhref($textid,0,1)},
                                 $Tournament{'Title'}. " ".                                  $Tournament{'Title'}. " ".
                                           $Tournament{'PlayedAt'}||'') . $qnum);                                            ($Tournament{'PlayedAt'}||'')) . $qnum); 
                 }                  }
         }          }
         $output .= dl($list);          $output .= dl($list);
   
         if ($URL) {          if ($URL) {
                 if (url=~/zaba\.ru/ && $URL=~/^\//){$URL="http://info.chgk.info$URL"}                  if ($url=~/zaba\.ru/ && $URL=~/^\//){$URL="http://info.chgk.info$URL"}
                 $output .=                  $output .=
                 p("äÏÐÏÌÎÉÔÅÌØÎÁÑ ÉÎÆÏÒÍÁÃÉÑ Ï ÜÔÏÍ ÔÕÒÎÉÒÅ - ÐÏ ÁÄÒÅÓÕ " .                  p("äÏÐÏÌÎÉÔÅÌØÎÁÑ ÉÎÆÏÒÍÁÃÉÑ Ï ÜÔÏÍ ÔÕÒÎÉÒÅ - ÐÏ ÁÄÒÅÓÕ " .
                         a({-'href'=>$URL}, $URL));                          a({-'href'=>$URL}, $URL));
Line 1140  sub PrintTour { Line 1197  sub PrintTour {
         my $n=$Tour{'Number'};          my $n=$Tour{'Number'};
         if ($answer == 0) {          if ($answer == 0) {
                 $bottom .=                  $bottom .=
                         "[" . a({href=>url . "?tour=$fname.$n&answer=1"}, "ÏÔ×ÅÔÙ") .  "] " . br;                          "[" . a({href=>tourhref("$fname.$n",1)}, 
                            "ÏÔ×ÅÔÙ") .  "] " . br;
         }          }
         if ($n>1) {          if ($n>1) {
                 $bottom .=                  $bottom .=
                         "[" . a({href=>url . "?tour=$fname." . ($n - 1) . "&answer=0"},                          "[" . a({href=>tourhref("$fname.".($n-1),0)},
                         "ÐÒÅÄÙÄÕÝÉÊ ÔÕÒ") . "] ";                          "ÐÒÅÄÙÄÕÝÉÊ ÔÕÒ") . "] ";
                 $bottom .=                  $bottom .=
                         "[" . a({href=>url . "?tour=$fname." . ($n - 1) . "&answer=1"},                          "[" . a({href=>tourhref("$fname.".($n-1),1)},
                         "ÐÒÅÄÙÄÕÝÉÊ ÔÕÒ Ó ÏÔ×ÅÔÁÍÉ") . "] " . br;                          "ÐÒÅÄÙÄÕÝÉÊ ÔÕÒ Ó ÏÔ×ÅÔÁÍÉ") . "] " . br;
         }          }
         if (&IsTour($dbh, $Tour{'ParentId'}, $n + 1)) {          if (&IsTour($dbh, $Tour{'ParentId'}, $n + 1)) {
                 $bottom .=                  $bottom .=
                         "[" . a({href=>url . "?tour=$fname." . ($n + 1) . "&answer=0"},                          "[" . a({href=>tourhref("$fname.".($n+1),0)},
                         "ÓÌÅÄÕÀÝÉÊ ÔÕÒ") . "] ";                          "ÓÌÅÄÕÀÝÉÊ ÔÕÒ") . "] ";
                 $bottom .=                  $bottom .=
                         "[" . a({href=>url . "?tour=$fname." . ($n + 1) . "&answer=1"},                          "[" . a({href=>tourhref("$fname.".($n+1),1)},
                         "ÓÌÅÄÕÀÝÉÊ ÔÕÒ Ó ÏÔ×ÅÔÁÍÉ") . "] ";                          "ÓÌÅÄÕÀÝÉÊ ÔÕÒ Ó ÏÔ×ÅÔÁÍÉ") . "] ";
         }          }
   
Line 1215  sub PrintQuestion { Line 1273  sub PrintQuestion {
                         $fname=~s/\.txt//;                          $fname=~s/\.txt//;
                         $titles .=                          $titles .=
                                 dd(img({src=>"/icons/folder.open.gif"}) . " " .                                  dd(img({src=>"/icons/folder.open.gif"}) . " " .
                                          a({href=>url . "?tour=$fname"}, $Question{'Title'}, $Question{'PlayedAt'}||''));                                           a({href=>tourhref($fname,0,1)}, 
                                  $Question{'Title'}, $Question{'PlayedAt'}||''));
                         $titles .=                          $titles .=
                                 dl(dd(img({src=>"/icons/folder.open.gif"}) . " " .                                  dl(dd(img({src=>"/icons/folder.open.gif"}) . " " .
                                         a({href=>url . "?tour=$fname.$Question{TourNumber}#$qnum"}, $Question{'TourTitle'})));                                          a({href=>tourhref("$fname.$Question{'TourNumber'}#$qnum",1)}, 
                             $Question{'TourTitle'})));
                 }                  }
                 $output .= dl(strong($titles));                  $output .= dl(strong($titles));
         }          }
Line 1314  $output.="</span>" Line 1374  $output.="</span>"
   
         }          }
         $output=~s/\(pic: ([^\)]*)\)/<p><img src="\/znatoki\/images\/db\/$1"><p>/g unless $text;          $output=~s/\(pic: ([^\)]*)\)/<p><img src="\/znatoki\/images\/db\/$1"><p>/g unless $text;
         my $qid=param('tour') ? (param('tour').".$Question{'Number'}" ): '';          $paramtour||=param("tour");
           my $qid=$paramtour ? ($paramtour.".$Question{'Number'}" ): '';
   
         $output.=br.a({href=> url."?metod=proxy&          $output.=br.a({href=> $url."?metod=proxy&
 qid=$qid"}, 'âÌÉÚËÉÅ ×ÏÐÒÏÓÙ').p  qid=$qid"}, 'âÌÉÚËÉÅ ×ÏÐÒÏÓÙ').p
              if $answer>0 && !$text && $qid;               if $answer>0 && !$text && $qid;
         return $output;          return $output;
Line 1379  sub Get12Random { Line 1440  sub Get12Random {
   
 sub Include_virtual {  sub Include_virtual {
         my ($fn, $output) = (@_, '');          my ($fn, $output) = (@_, '');
           return "<!--#include virtual=\"$fn\"-->" if ($opt_z);
         open F , $fn          open F , $fn
                 or return; #die "Can't open the file $fn: $!\n";                  or return ""; #die "Can't open the file $fn: $!\n";
   
         while (<F>) {          while (<F>) {
                 if (/<!--#include/o) {                  if (/<!--#include/o) {
Line 1392  sub Include_virtual { Line 1453  sub Include_virtual {
                 }                  }
                 $output .= $_;                  $output .= $_;
         }          }
         return $output;          return $output||"";
 }  }
   
 sub PrintArchive {  sub PrintArchive {
Line 1417  sub PrintAll { Line 1478  sub PrintAll {
   
         my (%Tournament) = &GetTournament($dbh, $Id);          my (%Tournament) = &GetTournament($dbh, $Id);
         my (@Tours) = &GetTours($dbh, $Id);          my (@Tours) = &GetTours($dbh, $Id);
           my $SingleTour = $#Tours == 0;
   
         my ($New) = ($Id and $Tournament{'Type'} eq 'þ' and          my ($New) = ($Id and $Tournament{'Type'} eq 'þ' and
                 &NewEnough($Tournament{"CreatedAt"})) ?                  &NewEnough($Tournament{"CreatedAt"})) ?
                 img({src=>"/znatoki/dimrub/db/new-sml.gif", alt=>"NEW!"}) : "";                  img({src=>"/znatoki/dimrub/db/new-sml.gif", alt=>"NEW!"}) : "";
Line 1438  sub PrintAll { Line 1501  sub PrintAll {
   
   
                 $output .= dd(img({src=>"/icons/folder.gif", alt=>"[*]"}) .                  $output .= dd(img({src=>"/icons/folder.gif", alt=>"[*]"}) .
       " " . a({href=>url . "?tour=$textid&answer=0"},        " " . a({href=>tourhref($textid,0,!$SingleTour)},
       $Tournament{'Title'}) ." " . ($Tournament{'PlayedAt'}||'') . " $New");        $Tournament{'Title'}) ." " . ($Tournament{'PlayedAt'}||'') . " $New");
         }          }
         if ($Id == 0 or $Tournament{'Type'} =~ /ç/ or $Tournament{'Type'} eq '') {          if ($Id == 0 or $Tournament{'Type'} =~ /ç/ or $Tournament{'Type'} eq '') {
Line 1472  sub PrintDates { Line 1535  sub PrintDates {
                         if (!$array[0]);                          if (!$array[0]);
                 %Tournament = &GetTournament($dbh, $array[0]);                  %Tournament = &GetTournament($dbh, $array[0]);
       $list .= dd(img({src=>"/icons/folder.gif", alt=>"[*]"}) .        $list .= dd(img({src=>"/icons/folder.gif", alt=>"[*]"}) .
       " " . a({href=>url . "?tour=$Tournament{'Id'}&answer=0"},        " " . a({href=>tourhref($Tournament{'FileName'},0,1)},
       $Tournament{'Title'}, $Tournament{'PlayedAt'}||''));        $Tournament{'Title'}, $Tournament{'PlayedAt'}||''));
         }          }
         $sth->finish;          $sth->finish;
Line 1553  sub PrintAuthors Line 1616  sub PrintAuthors
   
   
      $sth->execute;       $sth->execute;
      $output.=Tr(th[a({href=>url."?authors=name"},"éÍÑ")       $output.=Tr(th[a({href=>$url."?authors=name"},"éÍÑ")
 .", ".  .", ".
 a({href=>url."?authors=surname"},"ÆÁÍÉÌÉÑ")  a({href=>$url."?authors=surname"},"ÆÁÍÉÌÉÑ")
      , a({href=>url."?authors=kvo"},"ëÏÌÉÞÅÓÔ×Ï ×ÏÐÒÏÓÏ×")]);       , a({href=>$url."?authors=kvo"},"ëÏÌÉÞÅÓÔ×Ï ×ÏÐÒÏÓÏ×")]);
   
      $out1='';       $out1='';
   
Line 1572  a({href=>url."?authors=surname"},"ÆÁÍÉÌÉ Line 1635  a({href=>url."?authors=surname"},"ÆÁÍÉÌÉ
            if (!$name || !$surname) {             if (!$name || !$surname) {
               } else                } else
            {             {
              my $add=Tr(td([a({href=>url."?qofauthor=$id"},"$name $surname"), $kvo]))."\n";               my $add=Tr(td([a({href=>$url."?qofauthor=$id"},"$name $surname"), $kvo]))."\n";
              $output.=$add;               $output.=$add;
            }             }
      }       }
Line 1591  sub WriteFile { Line 1654  sub WriteFile {
   
   my $query= "SELECT Id, Title, Copyright, Info, URL,     my $query= "SELECT Id, Title, Copyright, Info, URL, 
                       Editors, EnteredBy, PlayedAt, CreatedAt                         Editors, EnteredBy, PlayedAt, CreatedAt 
                      from Tournaments where FileName=".$dbh->quote("$fname.txt");                       from Tournaments where FileName=
                        '$fname' OR FileName=".$dbh->quote("$fname.txt");
   my $sth=$dbh->prepare($query);    my $sth=$dbh->prepare($query);
   my (%Question,%editor,%qnumber,%copyright,%author,%vid,%tourtitle);    my (%Question,%editor,%qnumber,%copyright,%author,%vid,%tourtitle);
   $sth->execute;    $sth->execute;
Line 1732  sub WriteFile { Line 1796  sub WriteFile {
   
 }  }
   
   sub Bottom
   {
           my $output.=&Include_virtual("$footer")||"";
           $output.=p."<center><font size=-2>ïÂÎÏ×ÌÅÎÉÅ: ".&Include_virtual("$datefooter")."</center></font>";
           $output.=<<EEE
   <SCRIPT LANGUAGE="JavaScript">
   function toggle(e) {
     if (e.style.display == "none") {
        e.style.display="";
     } else {
        e.style.display = "none";
    }
   }
   </SCRIPT>
   EEE
   ;
           $output.=end_html;
           return $output;
   }
   
   
 MAIN:  MAIN:
 {  {
                   
         setlocale(LC_CTYPE,'russian');          setlocale(LC_CTYPE,'russian');
           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+$/)) {          if (param('qid') && (param('qid')=~/^\d+$/)) {
Line 1754  MAIN: Line 1839  MAIN:
                 or do {                  or do {
                         print h1("÷ÒÅÍÅÎÎÙÅ ÐÒÏÂÌÅÍÙ") . "âÁÚÁ ×ÏÐÒÏÓÏ× ×ÒÅÍÅÎÎÏ ÎÅ                          print h1("÷ÒÅÍÅÎÎÙÅ ÐÒÏÂÌÅÍÙ") . "âÁÚÁ ×ÏÐÒÏÓÏ× ×ÒÅÍÅÎÎÏ ÎÅ
                         ÒÁÂÏÔÁÅÔ. úÁÈÏÄÉÔÅ ÐÏÐÏÚÖÅ.";                          ÒÁÂÏÔÁÅÔ. úÁÈÏÄÉÔÅ ÐÏÐÏÚÖÅ.";
                         print &Include_virtual("../dimrub/db/reklama.html") if $url!~/localhost/;                          print &Include_virtual("$reklama") if $url!~/localhost/;
                     print end_html;                      print end_html;
                         die "Can't connect to DB chgk\n";                          die "Can't connect to DB chgk\n";
                 };                  };
           my $sstr=param('sstr');            my $sstr=param('sstr');
             $opt_z||=param("makehtml");
           if (param('qid')) {            if (param('qid')) {
               my $sth;                my $sth;
               my $qid=param('qid');                my $qid=param('qid');
Line 1766  MAIN: Line 1852  MAIN:
                 {                  {
                     my ($fname,$t,$n)= split /\./ , $qid;                      my ($fname,$t,$n)= split /\./ , $qid;
                     $n=$t,$t='' unless $n;                      $n=$t,$t='' unless $n;
                       $t||=1;
                     if ($t)                      if ($t)
                     {                      {
                         $sth = $dbh->prepare(                          $sth = $dbh->prepare(
                        "SELECT t2.Id FROM Tournaments as t1,                          "SELECT t2.Id FROM Tournaments as t1, 
                         Tournaments as t2                           Tournaments as t2 
                         WHERE t1.FileName = '$fname.txt'                          WHERE (t1.FileName = '$fname.txt' OR t1.FileName='$fname')
                         AND t1.Id=t2.ParentId AND t2.Number=$t");                          AND t1.Id=t2.ParentId AND t2.Number=$t");
                     }                         }   
                     else   #                   else 
                         {  #                       {
                           $sth = $dbh->prepare("SELECT Id FROM Tournaments  #                          $sth = $dbh->prepare("SELECT Id FROM Tournaments
                                      WHERE FileName = '$fname.txt'");  #                                    WHERE FileName = '$fname.txt' OR FileName = '$fname'" );
                         }  #                       }
                     $sth->execute;                      $sth->execute;
                     $tour = ($sth->fetchrow)[0];                      $tour = ($sth->fetchrow)[0];
                     $sth->finish;                      $sth->finish;
Line 1819  td {font-size: x-small; font-family : sa Line 1906  td {font-size: x-small; font-family : sa
 th      {font-size: x-small; font-family : sans-serif}  th      {font-size: x-small; font-family : sans-serif}
 </style>\n";  </style>\n";
   
                 $globaloutput.=&Include_virtual("../dimrub/db/reklama.html");                  $globaloutput.=&Include_virtual("$reklama")||'';
         }          }
   
        if (length ($qs)<=255 && $qs !~ /(sstr)|(rand)|(comp)|(all=)/i) {         if (!$opt_z && length ($qs)<=255 && $qs !~ /(sstr)|(rand)|(comp)|(all=)/i) {
                 my $sth=$dbh->prepare("SELECT page,times,t from hash where query=".$dbh->quote($qs));                  my $sth=$dbh->prepare("SELECT page,times,t from hash where query=".$dbh->quote($qs));
                 $sth->execute();                  $sth->execute();
                 my ($p,$times,$t)=$sth->fetchrow();                  my ($p,$times,$t)=$sth->fetchrow();
Line 1856  th {font-size: x-small; font-family : sa Line 1943  th {font-size: x-small; font-family : sa
                         $sth = $dbh->prepare(                          $sth = $dbh->prepare(
                        "SELECT t2.Id FROM Tournaments as t1,                          "SELECT t2.Id FROM Tournaments as t1, 
                         Tournaments as t2                           Tournaments as t2 
                         WHERE t1.FileName = '$fname.txt'                          WHERE (t1.FileName = '$fname.txt' OR t1.FileName='$fname')
                         AND t1.Id=t2.ParentId AND t2.Number=$n");                          AND t1.Id=t2.ParentId AND t2.Number=$n");
                     }                         }   
                     else                       else 
Line 1949  EOT Line 2036  EOT
             $dbh->disconnect;              $dbh->disconnect;
             exit;              exit;
   
         } else {          } 
           elsif (!$opt_z && !param("makehtml")) {
                 my $QuestionNumber=0;                  my $QuestionNumber=0;
                 my $qnum;                  my $qnum;
                 if ($qnum=param('qnumber')){                  if ($qnum=param('qnumber')){
Line 1959  EOT Line 2047  EOT
                   $QuestionNumber=($sth->fetchrow)[0]||0;                    $QuestionNumber=($sth->fetchrow)[0]||0;
                 }                  }
                 if ($QuestionNumber) {                  if ($QuestionNumber) {
                   $globaloutput.= &PrintQuestion($dbh, $QuestionNumber, param('answer')||0, $qnum, 1,0,0);                    $globaloutput.= &PrintQuestion($dbh, $QuestionNumber, $withanswers||0, $qnum, 1,0,0);
 #                                        $dbh, $Id, $answer, $qnum, $title, $text  #                                        $dbh, $Id, $answer, $qnum, $title, $text
                 } else  {                  } else  {
                    $globaloutput.=&PrintTournament($dbh, $tour, param('answer'));                     $globaloutput.=&PrintTournament($dbh, $tour, $withanswers);
                 }                  }
         }          }
           else {
                     $opt_z=1;
                     $url="http://db.chgk.info/cgi-bin/db.cgi";
                     open TS, "timestamp";
                     my $d=$dbh->quote(<TS>);
                     close TS;
                     open FF, ">${realHTMLDIR}index.html" or die "ERROR! - ${HTMLDIR}index.html\n";
                          my $o=$globaloutput;
                          $o.=&PrintTournament($dbh, 0, 0);
                          $o.=&Bottom;
                          print FF $o;
                     close FF;
                     open FF, ">${realHTMLDIR}all.html" or die "ERROR! - ${HTMLDIR}all.html\n";
                          $o=$globaloutput;
                          $o.=&PrintAll($dbh,0);
                          $o.=&Bottom;
                          print FF $o;
                          close FF;
   
   
   #                 my ($sth) = $dbh->prepare("SELECT t1.Id, t1.FileName, t1.Type, 
   #                       count(t2.Id) 
   #                     FROM Tournaments as t1, Tournaments as t2
   #                    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 
    ON t2.ParentId=t1.id WHERE t1.CreatedAt>$d GROUP BY t1.Id");
                     $sth->execute;
                     my ($Id,$fname,$type,$c);
                     while (($Id,$fname,$type,$c)=$sth->fetchrow,$Id) {
                        next unless $fname;
                        print "$fname\n";
                        $fname=~s/\.txt$//;
                        if ($type=~/ô/ || $c<=1)
                        {
                          open FF, ">$realHTMLDIR$fname-q.html" or die "ERROR! - $fname-q.html\n";
                          my $o=$globaloutput;
                          $paramtour=$fname;
                          $o.=&PrintTournament($dbh, $Id, 0);
                          $o.=&Bottom;
                          print FF $o;
                          close FF;
                          open FF, ">$realHTMLDIR$fname-a.html";
                          $o=$globaloutput;
                          $o.=&PrintTournament($dbh, $Id, 1);
                          $o.=&Bottom;
                          print FF $o;
                          close FF;
                        }
                        else {
                          open FF, ">$realHTMLDIR$fname.html" or die "ERROR! - $fname-q.html\n";
                          my $o=$globaloutput;
                          $o.=&PrintTournament($dbh, $Id, 0);
                          $o.=&Bottom;
                          print FF $o;
                          close FF;
   
                        }
                     }
           }
         if (!$text) {          if (!$text) {
                 $globaloutput.=&Include_virtual("../dimrub/db/footer.html");                  $globaloutput.=&Bottom;
                 $globaloutput.=p."<center><font size=-2>ïÂÎÏ×ÌÅÎÉÅ: ".&Include_virtual("../dimrub/db/date")."</center></font>";  
 print <<EEE  
   <SCRIPT LANGUAGE="JavaScript">  
 function toggle(e) {  
   if (e.style.display == "none") {  
      e.style.display="";  
   } else {  
      e.style.display = "none";  
  }  
 }  
 </SCRIPT>  
 EEE  
 ;  
                 print end_html;  
         }          }
         print $globaloutput;          if (!$opt_z){ 
         if (($qs!~ /(rand)|(sstr)|(comp)/i) && (length $qs<=255)) {            print $globaloutput;
             if (($qs!~ /(rand)|(sstr)|(comp)/i) && (length $qs<=255)) {
                 $globaloutput=  $dbh->quote($globaloutput);                  $globaloutput=  $dbh->quote($globaloutput);
                 $dbh->do("insert into hash (query,page) values (".                  $dbh->do("insert into hash (query,page) values (".
                 $dbh->quote($qs).                  $dbh->quote($qs).
                     ",$globaloutput)");                      ",$globaloutput)");
             }
         }          }
   
         $dbh->disconnect;          $dbh->disconnect;

Removed from v.1.97  
changed lines
  Added in v.1.116


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>