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

version 1.115, 2003/04/22 10:50:37 version 1.116, 2003/04/28 22:49:50
Line 9  use locale; Line 9  use locale;
 use vars qw($opt_z);  use vars qw($opt_z);
 use Getopt::Std;  use Getopt::Std;
 getopts('z');  getopts('z');
   $opt_z||=param("makehtml");
   my $paramtour;
 my $withanswers=param('answer')||param('answers');  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 $reklama="../dimrub/db/reklama.html";
   my $footer="../dimrub/db/footer.html";
   
   my $datefooter="../dimrub/db/date";
   
   my $fname;
 $reklama="../reklama.html" if $opt_z;  $reklama="../reklama.html" if $opt_z;
   $footer="../footer.html" if $opt_z;
   $datefooter="../date" if $opt_z;
 my $HTMLDIR="/znatoki/dimrub/db/baza/";  my $HTMLDIR="/znatoki/dimrub/db/baza/";
   $HTMLDIR="/baza/";
 my $realHTMLDIR;  my $realHTMLDIR;
 if ($^O =~ /win/i) {  if ($^O =~ /win/i) {
  $realHTMLDIR="/html/znatoki/baza/";   $realHTMLDIR="/html/znatoki/baza/";
 } else   } else 
 {  {
   $realHTMLDIR="/home/znatoki/public_html/dimrub/db/baza/";    $realHTMLDIR="/home/piataev/public_html/dimrub/db/baza/";
 }  }
 my $usehtml=$opt_z||0;  my $usehtml=$opt_z||0;
 my $usewas=0;  my $usewas=0;
Line 157  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 170  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 388  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 396  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 404  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 434  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 565  foreach (keys %wordsof) Line 579  foreach (keys %wordsof)
   
 @tasks=sort {$relevance{$b}<=>$relevance{$a}} @tasks;  @tasks=sort {$relevance{$b}<=>$relevance{$a}} @tasks;
   
   
 ############  ############
   
   
Line 732  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 809  sub PrintList { Line 822  sub PrintList {
         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 978  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 1067  sub PrintTournament { Line 1087  sub PrintTournament {
                   "×ÏÐÒÏÓÙ + ÏÔ×ÅÔÙ") . "]")                    "×ÏÐÒÏÓÙ + ÏÔ×ÅÔÙ") . "]")
                                 );                                  );
                 } else {                  } else {
                         $list .= dd(a({href=>                          $list .= dd(#a({href=>
                                  $url . "?tour=$textid&comp=1"},  #                                 $url . "?tour=$textid&comp=1"},
                                 img({src=>'/icons/compressed.gif', alt=>'[ZIP]', border=>1})).   #                               img({src=>'/icons/compressed.gif', alt=>'[ZIP]', border=>1}))                           .  
                                 " " .                                   " " . 
                                 img({src=>$imgsrc, alt=>$alt})                                  img({src=>$imgsrc, alt=>$alt})
                                 . " " . a({href=>tourhref($textid,0,1)},                                  . " " . a({href=>tourhref($textid,0,1)},
                                 $Tournament{'Title'}. " ".                                  $Tournament{'Title'}. " ".
Line 1177  sub PrintTour { Line 1197  sub PrintTour {
         my $n=$Tour{'Number'};          my $n=$Tour{'Number'};
         if ($answer == 0) {          if ($answer == 0) {
                 $bottom .=                  $bottom .=
                         "[" . a({href=>tourhref($fname,1)},                           "[" . a({href=>tourhref("$fname.$n",1)}, 
                          "ÏÔ×ÅÔÙ") .  "] " . br;                           "ÏÔ×ÅÔÙ") .  "] " . br;
         }          }
         if ($n>1) {          if ($n>1) {
Line 1354  $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
Line 1633  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 1776  sub WriteFile { Line 1798  sub WriteFile {
   
 sub Bottom  sub Bottom
 {  {
         my $output.=&Include_virtual("../dimrub/db/footer.html")||"";          my $output.=&Include_virtual("$footer")||"";
         $output.=p."<center><font size=-2>ïÂÎÏ×ÌÅÎÉÅ: ".&Include_virtual("../dimrub/db/date")."</center></font>";          $output.=p."<center><font size=-2>ïÂÎÏ×ÌÅÎÉÅ: ".&Include_virtual("$datefooter")."</center></font>";
         $output.=<<EEE          $output.=<<EEE
 <SCRIPT LANGUAGE="JavaScript">  <SCRIPT LANGUAGE="JavaScript">
 function toggle(e) {  function toggle(e) {
Line 1799  MAIN: Line 1821  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 1821  MAIN: Line 1844  MAIN:
                         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 1828  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 1884  th {font-size: x-small; font-family : sa Line 1909  th {font-size: x-small; font-family : sa
                 $globaloutput.=&Include_virtual("$reklama")||'';                  $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 1918  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 2012  EOT Line 2037  EOT
             exit;              exit;
   
         }           } 
         elsif (!$opt_z) {          elsif (!$opt_z && !param("makehtml")) {
                 my $QuestionNumber=0;                  my $QuestionNumber=0;
                 my $qnum;                  my $qnum;
                 if ($qnum=param('qnumber')){                  if ($qnum=param('qnumber')){
Line 2029  EOT Line 2054  EOT
                 }                  }
         }          }
         else {          else {
                     $opt_z=1;
                     $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;
Line 2062  my ($sth) = $dbh->prepare("SELECT t1.Id, Line 2089  my ($sth) = $dbh->prepare("SELECT t1.Id,
                      {                       {
                        open FF, ">$realHTMLDIR$fname-q.html" or die "ERROR! - $fname-q.html\n";                         open FF, ">$realHTMLDIR$fname-q.html" or die "ERROR! - $fname-q.html\n";
                        my $o=$globaloutput;                         my $o=$globaloutput;
                          $paramtour=$fname;
                        $o.=&PrintTournament($dbh, $Id, 0);                         $o.=&PrintTournament($dbh, $Id, 0);
                        $o.=&Bottom;                         $o.=&Bottom;
                        print FF $o;                         print FF $o;

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


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