version 1.79, 2004/06/16 14:30:15
|
version 1.80, 2004/06/16 18:33:46
|
Line 41 use Apache::lonmysql;
|
Line 41 use Apache::lonmysql;
|
use Apache::lonmsg; |
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 |
# Fetch and evaluate dynamic metadata |
sub dynamicmeta { |
sub dynamicmeta { |
my $url=&Apache::lonnet::declutter(shift); |
my $url=&Apache::lonnet::declutter(shift); |