--- loncom/interface/lonmeta.pm 2004/06/16 14:30:15 1.79 +++ loncom/interface/lonmeta.pm 2004/06/16 18:33:46 1.80 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Metadata display handler # -# $Id: lonmeta.pm,v 1.79 2004/06/16 14:30:15 matthew Exp $ +# $Id: lonmeta.pm,v 1.80 2004/06/16 18:33:46 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,6 +41,88 @@ use Apache::lonmysql; use Apache::lonmsg; +############################################################ +############################################################ +## +## &get_dynamic_metadata_from_sql($url) +## +## Queries sql database for dynamic metdata +## Returns a hash of hashes, with keys of urls which match $url +## Returned fields are given below. +## +## Examples: +## +## %DynamicMetadata = &Apache::lonmeta::get_dynmaic_metadata_from_sql +## ('/res/msu/korte/'); +## +## $DynamicMetadata{'/res/msu/korte/example.problem'}->{$field} +## +############################################################ +############################################################ +sub get_dynamic_metadata_from_sql { + my ($url) = shift(); + # &Apache::lonnet::logthis('url = '.$url); + my ($authordom,$author)=($url=~m:^/res/(\w+)/(\w+)/:); + if (! defined($authordom)) { + $authordom = shift(); + } + if (! defined($author)) { + $author = shift(); + } + if (! defined($authordom) || ! defined($author)) { + return (); + } + my @Fields = ('url', + 'goto','goto_list', + 'comefrom','comefrom_list', + 'sequsage','sequsage_list', + 'stdno','stdno_list', + 'avetries','avetries_list', + 'difficulty','difficulty_list', + 'disc','disc_list', + 'clear','technical','correct', + 'helpful','depth'); + # + my $query = 'SELECT '.join(',',@Fields). + ' FROM metadata WHERE url LIKE "'.$url.'%"'; + my $server = &Apache::lonnet::homeserver($author,$authordom); + my $reply = &Apache::lonnet::metadata_query($query,undef,undef, + ,[$server]); + return () if (! defined($reply) || ref($reply) ne 'HASH'); + my $filename = $reply->{$server}; + if (! defined($filename) || $filename =~ /^error/) { + return (); + } + my $max_time = time + 10; # wait 10 seconds for results at most + my %ReturnHash; + # + # Look for results + my $finished = 0; + while (! $finished && time < $max_time) { + my $datafile=$Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/'.$filename; + if (! -e "$datafile.end") { next; } + my $fh; + if (!($fh=Apache::File->new($datafile))) { next; } + while (my $result = <$fh>) { + chomp($result); + next if (! $result); + my @Data = + map { + &Apache::lonnet::unescape($_); + } split(',',$result); + my $url = $Data[0]; + for (my $i=0;$i<=$#Fields;$i++) { + $ReturnHash{$url}->{$Fields[$i]}=$Data[$i]; + # &Apache::lonnet::logthis(' '.$Fields[$i].' => '.$Data[$i]); + } + } + $finished = 1; + } + # + return %ReturnHash; +} + + # Fetch and evaluate dynamic metadata sub dynamicmeta { my $url=&Apache::lonnet::declutter(shift);