--- loncom/metadata_database/searchcat.pl 2003/06/19 19:34:27 1.33 +++ loncom/metadata_database/searchcat.pl 2003/06/19 20:24:57 1.34 @@ -2,7 +2,7 @@ # The LearningOnline Network # searchcat.pl "Search Catalog" batch script # -# $Id: searchcat.pl,v 1.33 2003/06/19 19:34:27 matthew Exp $ +# $Id: searchcat.pl,v 1.34 2003/06/19 20:24:57 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -125,42 +125,42 @@ sub dynamicmeta { my $regexp=$url; $regexp=~s/(\W)/\\$1/g; $regexp='___'.$regexp.'___([a-z]+)$'; - foreach (keys %evaldata) { - my $key=&unescape($_); - if ($key=~/$regexp/) { - my $ctype=$1; - if (defined($cnt{$ctype})) { - $cnt{$ctype}++; - } else { - $cnt{$ctype}=1; + study($regexp); + while (my ($key,$value) = each(%evaldata)) { + $key=&unescape($key); + next 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; } - unless ($listitems{$ctype} eq 'app') { - if (defined($sum{$ctype})) { - $sum{$ctype}+=$evaldata{$_}; - } else { - $sum{$ctype}=$evaldata{$_}; + } else { + if (defined($sum{$ctype})) { + if ($value) { + $sum{$ctype}.='
'.$value; } } else { - if (defined($sum{$ctype})) { - if ($evaldata{$_}) { - $sum{$ctype}.='
'.$evaldata{$_}; - } - } else { - $sum{$ctype}=''.$evaldata{$_}; - } - } - if ($ctype ne 'count') { - $newevaldata{$_}=$evaldata{$_}; + $sum{$ctype}=''.$value; } } + if ($ctype ne 'count') { + $newevaldata{$_}=$value; + } } - foreach (keys %cnt) { - if ($listitems{$_} eq 'avg') { - $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0; - } elsif ($listitems{$_} eq 'cnt') { - $returnhash{$_}=$cnt{$_}; + while (my($key,$value) = each(%cnt)) { + if ($listitems{$key} eq 'avg') { + $returnhash{$key}=int(($sum{$key}/$value)*100.0+0.5)/100.0; + } elsif ($listitems{$key} eq 'cnt') { + $returnhash{$key}=$value; } else { - $returnhash{$_}=$sum{$_}; + $returnhash{$key}=$sum{$key}; } } if ($returnhash{'count'}) { @@ -237,6 +237,30 @@ my @homeusers = grep { &ishome("$perlvar{'lonDocRoot'}/res/$perlvar{'lonDefDomain'}/$_") } grep {!/^\.\.?$/} readdir(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) { print LOG "\n=== User: ".$user."\n\n"; # Remove left-over db-files from potentially crashed searchcat run @@ -255,30 +279,25 @@ foreach my $user (@homeusers) { my $m2='/res/'.&declutter($m); $m2=~s/\.meta$//; &dynamicmeta($m2); - my $q2="select * from metadata where url like binary '$m2'"; - my $sth = $dbh->prepare($q2); - $sth->execute(); - my $r1=$sth->fetchall_arrayref; - if (@$r1) { - $sth=$dbh->prepare("delete from metadata where url like binary '$m2'"); - $sth->execute(); - } - $sth=$dbh->prepare('insert into metadata values ('. - '"'.delete($ref->{'title'}).'"'.','. - '"'.delete($ref->{'author'}).'"'.','. - '"'.delete($ref->{'subject'}).'"'.','. - '"'.$m2.'"'.','. - '"'.delete($ref->{'keywords'}).'"'.','. - '"'.'current'.'"'.','. - '"'.delete($ref->{'notes'}).'"'.','. - '"'.delete($ref->{'abstract'}).'"'.','. - '"'.delete($ref->{'mime'}).'"'.','. - '"'.delete($ref->{'language'}).'"'.','. - '"'.sqltime(delete($ref->{'creationdate'})).'"'.','. - '"'.sqltime(delete($ref->{'lastrevisiondate'})).'"'.','. - '"'.delete($ref->{'owner'}).'"'.','. - '"'.delete($ref->{'copyright'}).'"'.')'); - $sth->execute(); + $delete_sth->execute($m2); + $insert_sth->execute($ref->{'title'}, + $ref->{'author'}, + $ref->{'subject'}, + $m2, + $ref->{'keywords'}, + 'current', + $ref->{'notes'}, + $ref->{'abstract'}, + $ref->{'mime'}, + $ref->{'language'}, + sqltime($ref->{'creationdate'}), + sqltime($ref->{'lastrevisiondate'}), + $ref->{'owner'}, + $ref->{'copyright'}); +# if ($dbh->err()) { +# print STDERR "Error:".$dbh->errstr()."\n"; +# } + $ref = undef; } # --------------------------------------------------- Clean up database