Diff for /loncom/metadata_database/searchcat.pl between versions 1.21 and 1.24

version 1.21, 2002/10/08 15:09:36 version 1.24, 2002/10/18 13:54:31
Line 45  use IO::File; Line 45  use IO::File;
 use HTML::TokeParser;  use HTML::TokeParser;
 use DBI;  use DBI;
 use GDBM_File;  use GDBM_File;
   use POSIX qw(strftime mktime);
   
 my @metalist;  my @metalist;
   
Line 57  sub unescape { Line 58  sub unescape {
     return $str;      return $str;
 }  }
   
   # -------------------------------------------------------- Escape Special Chars
   
   sub escape {
       my $str=shift;
       $str =~ s/(\W)/"%".unpack('H2',$1)/eg;
       return $str;
   }
   
   
 # ------------------------------------------- Code to evaluate dynamic metadata  # ------------------------------------------- Code to evaluate dynamic metadata
   
Line 76  sub dynamicmeta { Line 85  sub dynamicmeta {
     my ($adomain,$aauthor)=($url=~/^(\w+)\/(\w+)\//);      my ($adomain,$aauthor)=($url=~/^(\w+)\/(\w+)\//);
     my $prodir=&propath($adomain,$aauthor);      my $prodir=&propath($adomain,$aauthor);
     if (tie(%evaldata,'GDBM_File',      if (tie(%evaldata,'GDBM_File',
             $prodir.'/nohist_resevaldata.db',&GDBM_READER,0640)) {              $prodir.'/nohist_resevaldata.db',&GDBM_WRCREAT(),0640)) {
        my %sum=();         my %sum=();
        my %cnt=();         my %cnt=();
        my %listitems=('count'        => 'add',         my %listitems=('count'        => 'add',
Line 98  sub dynamicmeta { Line 107  sub dynamicmeta {
        foreach (keys %evaldata) {         foreach (keys %evaldata) {
  my $key=&unescape($_);   my $key=&unescape($_);
  if ($key=~/$regexp/) {   if ($key=~/$regexp/) {
             if (defined($cnt{$1})) { $cnt{$1}++; } else { $cnt{$1}=1; }      my $ctype=$1;
             unless ($listitems{$1} eq 'app') {              if (defined($cnt{$ctype})) { 
                   if (defined($sum{$1})) {                 $cnt{$ctype}++; 
                      $sum{$1}+=$evaldata{$_};              } else { 
              } else {                 $cnt{$ctype}=1; 
                      $sum{$1}=$evaldata{$_};              }
               unless ($listitems{$ctype} eq 'app') {
                  if (defined($sum{$ctype})) {
                     $sum{$ctype}+=$evaldata{$_};
             } else {
                     $sum{$ctype}=$evaldata{$_};
          }
               } else {
                  if (defined($sum{$ctype})) {
                     if ($evaldata{$_}) {
                        $sum{$ctype}.='<hr>'.$evaldata{$_};
           }            }
              } else {          } else {
                   if (defined($sum{$1})) {               $sum{$ctype}=''.$evaldata{$_};
                      if ($evaldata{$_}) {         }
                         $sum{$1}.='<hr>'.$evaldata{$_};      }
              }      if ($ctype eq 'count') {
            } else {         delete($evaldata{$_});
              $sum{$1}=''.$evaldata{$_};              }
           }   }
       }        }
           }        foreach (keys %cnt) {
           foreach (keys %cnt) {           if ($listitems{$_} eq 'avg') {
              if ($listitems{$_} eq 'avg') {       $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0;
          $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0;           } elsif ($listitems{$_} eq 'cnt') {
              } elsif ($listitems{$_} eq 'cnt') {               $returnhash{$_}=$cnt{$_};
                  $returnhash{$_}=$cnt{$_};           } else {
              } else {               $returnhash{$_}=$sum{$_};
                  $returnhash{$_}=$sum{$_};           }
              }       }
           }       if ($returnhash{'count'}) {
            my $newkey=$$.'_'.time.'_searchcat___'.&escape($url).'___count';
            $evaldata{$newkey}=$returnhash{'count'};
      }       }
      untie(%evaldata);       untie(%evaldata);
    }     }
Line 315  sub propath { Line 336  sub propath {
 # ---------------------------- convert 'time' format into a datetime sql format  # ---------------------------- convert 'time' format into a datetime sql format
 sub sqltime {  sub sqltime {
     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =      my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
  localtime(@_[0]);   localtime(&unsqltime(@_[0]));
     $mon++; $year+=1900;      $mon++; $year+=1900;
     return "$year-$mon-$mday $hour:$min:$sec";      return "$year-$mon-$mday $hour:$min:$sec";
 }  }
   
   sub maketime {
       my %th=@_;
       return POSIX::mktime(
           ($th{'seconds'},$th{'minutes'},$th{'hours'},
            $th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,$th{'dlsav'}));
   }
   
   
   #########################################
   #
   # Retro-fixing of un-backward-compatible time format
   
   sub unsqltime {
       my $timestamp=shift;
       if ($timestamp=~/^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/) {
          $timestamp=&maketime(
      'year'=>$1,'month'=>$2,'day'=>$3,
              'hours'=>$4,'minutes'=>$5,'seconds'=>$6);
       }
       return $timestamp;
   }
   

Removed from v.1.21  
changed lines
  Added in v.1.24


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