Diff for /loncom/metadata_database/searchcat.pl between versions 1.33 and 1.35

version 1.33, 2003/06/19 19:34:27 version 1.35, 2003/06/25 14:42:00
Line 104  sub dynamicmeta { Line 104  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_READER(),0640)) &&
         (tie(%newevaldata,'GDBM_File',          (tie(%newevaldata,'GDBM_File',
              $prodir.'/nohist_new_resevaldata.db',&GDBM_WRCREAT(),0640))) {              $prodir.'/nohist_new_resevaldata.db',&GDBM_WRCREAT(),0640))) {
         my %sum=();         my %sum=();
         my %cnt=();         my %cnt=();
         my %listitems=('count'        => 'add',         my %listitems=('count'        => 'add',
                        'course'       => 'add',                        'course'       => 'add',
                        'avetries'     => 'avg',                        'avetries'     => 'avg',
                        'stdno'        => 'add',                        'stdno'        => 'add',
                        'difficulty'   => 'avg',                        'difficulty'   => 'avg',
                        'clear'        => 'avg',                        'clear'        => 'avg',
                        'technical'    => 'avg',                        'technical'    => 'avg',
                        'helpful'      => 'avg',                        'helpful'      => 'avg',
                        'correct'      => 'avg',                        'correct'      => 'avg',
                        'depth'        => 'avg',                        'depth'        => 'avg',
                        'comments'     => 'app',                        'comments'     => 'app',
                        'usage'        => 'cnt'                        'usage'        => 'cnt'
                        );                        );
         my $regexp=$url;         my $regexp=$url;
         $regexp=~s/(\W)/\\$1/g;         $regexp=~s/(\W)/\\$1/g;
         $regexp='___'.$regexp.'___([a-z]+)$';         $regexp='___'.$regexp.'___([a-z]+)$';
         foreach (keys %evaldata) {         foreach (keys %evaldata) {
             my $key=&unescape($_);   my $key=&unescape($_);
             if ($key=~/$regexp/) {   if ($key=~/$regexp/) {
                 my $ctype=$1;      my $ctype=$1;
                 if (defined($cnt{$ctype})) {               if (defined($cnt{$ctype})) { 
                     $cnt{$ctype}++;                  $cnt{$ctype}++; 
                 } else {               } else { 
                     $cnt{$ctype}=1;                  $cnt{$ctype}=1; 
                 }  
                 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 {  
                         $sum{$ctype}=''.$evaldata{$_};  
                     }  
                 }  
                 if ($ctype ne 'count') {  
                     $newevaldata{$_}=$evaldata{$_};  
                 }  
             }              }
         }              unless ($listitems{$ctype} eq 'app') {
         foreach (keys %cnt) {                 if (defined($sum{$ctype})) {
             if ($listitems{$_} eq 'avg') {                    $sum{$ctype}+=$evaldata{$_};
                 $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0;            } else {
             } elsif ($listitems{$_} eq 'cnt') {                    $sum{$ctype}=$evaldata{$_};
                 $returnhash{$_}=$cnt{$_};         }
             } else {              } else {
                 $returnhash{$_}=$sum{$_};                 if (defined($sum{$ctype})) {
             }                    if ($evaldata{$_}) {
         }                       $sum{$ctype}.='<hr>'.$evaldata{$_};
         if ($returnhash{'count'}) {            }
             my $newkey=$$.'_'.time.'_searchcat___'.&escape($url).'___count';          } else {
             $newevaldata{$newkey}=$returnhash{'count'};               $sum{$ctype}=''.$evaldata{$_};
         }         }
         untie(%evaldata);      }
         untie(%newevaldata);      if ($ctype ne 'count') {
     }         $newevaldata{$_}=$evaldata{$_};
     return %returnhash;     }
    }
         }
         foreach (keys %cnt) {
            if ($listitems{$_} eq 'avg') {
        $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0;
            } elsif ($listitems{$_} eq 'cnt') {
                $returnhash{$_}=$cnt{$_};
            } else {
                $returnhash{$_}=$sum{$_};
            }
        }
        if ($returnhash{'count'}) {
            my $newkey=$$.'_'.time.'_searchcat___'.&escape($url).'___count';
            $newevaldata{$newkey}=$returnhash{'count'};
        }
        untie(%evaldata);
        untie(%newevaldata);
      }
      return %returnhash;
 }  }
     
 # ----------------- Code to enable 'find' subroutine listing of the .meta files  # ----------------- Code to enable 'find' subroutine listing of the .meta files
 require "find.pl";  require "find.pl";
 sub wanted {  sub wanted {
Line 237  my @homeusers = grep { Line 237  my @homeusers = grep {
     &ishome("$perlvar{'lonDocRoot'}/res/$perlvar{'lonDefDomain'}/$_")      &ishome("$perlvar{'lonDocRoot'}/res/$perlvar{'lonDefDomain'}/$_")
     } grep {!/^\.\.?$/} readdir(RESOURCES);      } grep {!/^\.\.?$/} readdir(RESOURCES);
 closedir RESOURCES;  closedir RESOURCES;
   
   #
   # Create the statement handlers we need
   my $delete_sth = $dbh->prepare
       ("DELETE FROM metadata WHERE url LIKE BINARY ?");
   
   my $insert_sth = $dbh->prepare
       ("INSERT INTO metadata VALUES (".
        "?,".   # title
        "?,".   # author
        "?,".   # subject
        "?,".   # m2???
        "?,".   # version
        "?,".   # current
        "?,".   # notes
        "?,".   # abstract
        "?,".   # mime
        "?,".   # language
        "?,".   # creationdate
        "?,".   # revisiondate
        "?,".   # owner
        "?)"    # copyright
        );
   
 foreach my $user (@homeusers) {  foreach my $user (@homeusers) {
     print LOG "\n=== User: ".$user."\n\n";      print LOG "\n=== User: ".$user."\n\n";
     # Remove left-over db-files from potentially crashed searchcat run      # Remove left-over db-files from potentially crashed searchcat run
Line 255  foreach my $user (@homeusers) { Line 279  foreach my $user (@homeusers) {
         my $m2='/res/'.&declutter($m);          my $m2='/res/'.&declutter($m);
         $m2=~s/\.meta$//;          $m2=~s/\.meta$//;
         &dynamicmeta($m2);          &dynamicmeta($m2);
         my $q2="select * from metadata where url like binary '$m2'";          $delete_sth->execute($m2);
         my $sth = $dbh->prepare($q2);          $insert_sth->execute($ref->{'title'},
         $sth->execute();                               $ref->{'author'},
         my $r1=$sth->fetchall_arrayref;                               $ref->{'subject'},
         if (@$r1) {                               $m2,
             $sth=$dbh->prepare("delete from metadata where url like binary '$m2'");                               $ref->{'keywords'},
             $sth->execute();                               'current',
         }                               $ref->{'notes'},
         $sth=$dbh->prepare('insert into metadata values ('.                               $ref->{'abstract'},
                            '"'.delete($ref->{'title'}).'"'.','.                               $ref->{'mime'},
                            '"'.delete($ref->{'author'}).'"'.','.                               $ref->{'language'},
                            '"'.delete($ref->{'subject'}).'"'.','.                               sqltime($ref->{'creationdate'}),
                            '"'.$m2.'"'.','.                               sqltime($ref->{'lastrevisiondate'}),
                            '"'.delete($ref->{'keywords'}).'"'.','.                               $ref->{'owner'},
                            '"'.'current'.'"'.','.                               $ref->{'copyright'});
                            '"'.delete($ref->{'notes'}).'"'.','.  #        if ($dbh->err()) {
                            '"'.delete($ref->{'abstract'}).'"'.','.  #            print STDERR "Error:".$dbh->errstr()."\n";
                            '"'.delete($ref->{'mime'}).'"'.','.  #        }
                            '"'.delete($ref->{'language'}).'"'.','.          $ref = undef;
                            '"'.sqltime(delete($ref->{'creationdate'})).'"'.','.  
                            '"'.sqltime(delete($ref->{'lastrevisiondate'})).'"'.','.  
                            '"'.delete($ref->{'owner'}).'"'.','.  
                            '"'.delete($ref->{'copyright'}).'"'.')');  
         $sth->execute();  
     }      }
           
     # --------------------------------------------------- Clean up database      # --------------------------------------------------- Clean up database

Removed from v.1.33  
changed lines
  Added in v.1.35


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