--- loncom/metadata_database/searchcat.pl 2002/10/08 15:09:36 1.21 +++ loncom/metadata_database/searchcat.pl 2002/10/08 16:59:26 1.22 @@ -2,7 +2,7 @@ # The LearningOnline Network # searchcat.pl "Search Catalog" batch script # -# $Id: searchcat.pl,v 1.21 2002/10/08 15:09:36 www Exp $ +# $Id: searchcat.pl,v 1.22 2002/10/08 16:59:26 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -57,6 +57,14 @@ sub unescape { return $str; } +# -------------------------------------------------------- Escape Special Chars + +sub escape { + my $str=shift; + $str =~ s/(\W)/"%".unpack('H2',$1)/eg; + return $str; +} + # ------------------------------------------- Code to evaluate dynamic metadata @@ -76,7 +84,7 @@ sub dynamicmeta { my ($adomain,$aauthor)=($url=~/^(\w+)\/(\w+)\//); my $prodir=&propath($adomain,$aauthor); if (tie(%evaldata,'GDBM_File', - $prodir.'/nohist_resevaldata.db',&GDBM_READER,0640)) { + $prodir.'/nohist_resevaldata.db',&GDBM_WRCREAT,0640)) { my %sum=(); my %cnt=(); my %listitems=('count' => 'add', @@ -98,32 +106,44 @@ sub dynamicmeta { foreach (keys %evaldata) { my $key=&unescape($_); if ($key=~/$regexp/) { - if (defined($cnt{$1})) { $cnt{$1}++; } else { $cnt{$1}=1; } - unless ($listitems{$1} eq 'app') { - if (defined($sum{$1})) { - $sum{$1}+=$evaldata{$_}; - } else { - $sum{$1}=$evaldata{$_}; - } - } else { - if (defined($sum{$1})) { - if ($evaldata{$_}) { - $sum{$1}.='
'.$evaldata{$_}; - } - } else { - $sum{$1}=''.$evaldata{$_}; + my $ctype=$1; + if (defined($cnt{$ctype})) { + $cnt{$ctype}++; + } else { + $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}.='
'.$evaldata{$_}; } - } - } - 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{$_}; - } - } + } else { + $sum{$ctype}=''.$evaldata{$_}; + } + } + if ($ctype eq 'count') { + delete($evaldata{$_}); + } + } + } + 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'; + $evaldata{$newkey}=$returnhash{'count'}; } untie(%evaldata); }