--- loncom/metadata_database/searchcat.pl 2003/10/08 19:38:41 1.43 +++ loncom/metadata_database/searchcat.pl 2003/12/23 15:47:26 1.44 @@ -2,7 +2,7 @@ # The LearningOnline Network # searchcat.pl "Search Catalog" batch script # -# $Id: searchcat.pl,v 1.43 2003/10/08 19:38:41 www Exp $ +# $Id: searchcat.pl,v 1.44 2003/12/23 15:47:26 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -124,82 +124,85 @@ sub escape { # ------------------------------------------- Code to evaluate dynamic metadata sub dynamicmeta { - my $url=&declutter(shift); $url=~s/\.meta$//; my %returnhash=(); my ($adomain,$aauthor)=($url=~/^(\w+)\/(\w+)\//); my $prodir=&propath($adomain,$aauthor); - if ((tie(%evaldata,'GDBM_File', - $prodir.'/nohist_resevaldata.db',&GDBM_READER(),0640)) && - (tie(%newevaldata,'GDBM_File', - $prodir.'/nohist_new_resevaldata.db',&GDBM_WRCREAT(),0640))) { - my %sum=(); - my %cnt=(); - my %listitems=('count' => 'add', - 'course' => 'add', - 'goto' => 'add', - 'comefrom' => 'add', - 'avetries' => 'avg', - 'stdno' => 'add', - 'difficulty' => 'avg', - 'clear' => 'avg', - 'technical' => 'avg', - 'helpful' => 'avg', - 'correct' => 'avg', - 'depth' => 'avg', - 'comments' => 'app', - 'usage' => 'cnt' - ); - my $regexp=$url; - $regexp=~s/(\W)/\\$1/g; - $regexp='___'.$regexp.'___([a-z]+)$'; - while (my ($esckey,$value)=each %evaldata) { - $key=&unescape($esckey); - if ($key=~/$regexp/) { - my $ctype=$1; - if (defined($cnt{$ctype})) { - $cnt{$ctype}++; - } else { - $cnt{$ctype}=1; - } - unless ($listitems{$ctype} eq 'app') { - if (defined($sum{$ctype})) { - $sum{$ctype}+=$value; - } else { - $sum{$ctype}=$value; - } - } else { - if (defined($sum{$ctype})) { - if ($value) { - $sum{$ctype}.='
'.$value; - } - } else { - $sum{$ctype}=''.$value; - } +# Get metadata except counts + if (tie(%evaldata,'GDBM_File', + $prodir.'/nohist_resevaldata.db',&GDBM_READER(),0640)) { + my %sum=(); + my %cnt=(); + my %concat=(); + my %listitems=( + 'course' => 'add', + 'goto' => 'add', + 'comefrom' => 'add', + 'avetries' => 'avg', + 'stdno' => 'add', + 'difficulty' => 'avg', + 'clear' => 'avg', + 'technical' => 'avg', + 'helpful' => 'avg', + 'correct' => 'avg', + 'depth' => 'avg', + 'comments' => 'app', + 'usage' => 'cnt' + ); + + my $regexp=$url; + $regexp=~s/(\W)/\\$1/g; + $regexp='___'.$regexp.'___([a-z]+)$'; + while (my ($esckey,$value)=each %evaldata) { + $key=&unescape($esckey); + if ($key=~/$regexp/) { + my ($item,$purl,$cat)=split(/___/,$_); + if (defined($cnt{$cat})) { $cnt{$cat}++; } else { $cnt{$cat}=1; } + unless ($listitems{$cat} eq 'app') { + if (defined($sum{$cat})) { + $sum{$cat}+=$evaldata{$_}; + $concat{$cat}.=','.$item; + } else { + $sum{$cat}=$evaldata{$_}; + $concat{$cat}=$item; + } + } else { + if (defined($sum{$cat})) { + if ($evaldata{$_}) { + $sum{$cat}.='
'.$evaldata{$_}; + } + } else { + $sum{$cat}=''.$evaldata{$_}; + } + } } - if ($ctype ne 'count') { - $newevaldata{$esckey}=$value; - } - } - } - 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; + } + untie(%evaldata); + } +# construct the return hash for non-count data + my %returnhash=(); + while ($_=each(%cnt)) { + if ($listitems{$_} eq 'avg') { + $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0; + } elsif ($listitems{$_} eq 'cnt') { + $returnhash{$_}=$cnt{$_}; + } else { + $returnhash{$_}=$sum{$_}; + } + $returnhash{$_.'_list'}=$concat{$_}; + } +# get count + if (tie(%evaldata,'GDBM_File', + $prodir.'/nohist_accesscount.db',&GDBM_READER(),0640)) { + if (! exists($evaldata{$uri})) { + $returnhash{'count'}='Not Available'; + } else { + $returnhash{'count'}=$evaldata{$uri}; + } + untie %evaldata; + } + return %returnhash; } # ----------------- Code to enable 'find' subroutine listing of the .meta files @@ -296,9 +299,8 @@ my $insert_sth = $dbh->prepare foreach my $user (@homeusers) { print LOG "\n=== User: ".$user."\n\n"; - # Remove left-over db-files from potentially crashed searchcat run + my $prodir=&propath($perlvar{'lonDefDomain'},$user); - unlink($prodir.'/nohist_new_resevaldata.db'); # Use find.pl undef @metalist; @metalist=(); @@ -340,12 +342,6 @@ foreach my $user (@homeusers) { # Need to, perhaps, remove stale SQL database records. # ... not yet implemented - # ------------------------------------------- Copy over the new db-files - # - - system('mv '.$prodir.'/nohist_new_resevaldata.db '. - $prodir.'/nohist_resevaldata.db'); - } # --------------------------------------------------- Close database connection $dbh->disconnect;