version 1.76, 2004/05/06 20:56:07
|
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); |
Line 175 sub fieldnames {
|
Line 257 sub fieldnames {
|
'owner' => 'Publisher/Owner', |
'owner' => 'Publisher/Owner', |
'copyright' => 'Copyright/Distribution', |
'copyright' => 'Copyright/Distribution', |
'customdistributionfile' => 'Custom Distribution File', |
'customdistributionfile' => 'Custom Distribution File', |
|
'sourceavail' => 'Source Availible', |
|
'sourcerights' => 'Source Custom Distribution File', |
'obsolete' => 'Obsolete', |
'obsolete' => 'Obsolete', |
'obsoletereplacement' => 'Suggested Replacement for Obsolete File', |
'obsoletereplacement' => 'Suggested Replacement for Obsolete File', |
'count' => 'Network-wide number of accesses (hits)', |
'count' => 'Network-wide number of accesses (hits)', |
Line 224 sub prettyprint {
|
Line 308 sub prettyprint {
|
if ($type eq 'copyright') { |
if ($type eq 'copyright') { |
return &Apache::loncommon::copyrightdescription($value); |
return &Apache::loncommon::copyrightdescription($value); |
} |
} |
|
# Copyright |
|
if ($type eq 'sourceavail') { |
|
return &Apache::loncommon::source_copyrightdescription($value); |
|
} |
# MIME |
# MIME |
if ($type eq 'mime') { |
if ($type eq 'mime') { |
return '<img src="'.&Apache::loncommon::icon($value).'" /> '. |
return '<img src="'.&Apache::loncommon::icon($value).'" /> '. |
Line 365 sub prettyinput {
|
Line 453 sub prettyinput {
|
(&Apache::loncommon::copyrightids)). |
(&Apache::loncommon::copyrightids)). |
&relatedfield(0,$relatedsearchflag,$relatedsep); |
&relatedfield(0,$relatedsearchflag,$relatedsep); |
} |
} |
|
# Source Copyright |
|
if ($type eq 'sourceavail') { |
|
return &selectbox($fieldname, |
|
$value, |
|
\&Apache::loncommon::source_copyrightdescription, |
|
(&Apache::loncommon::source_copyrightids)). |
|
&relatedfield(0,$relatedsearchflag,$relatedsep); |
|
} |
# Gradelevels |
# Gradelevels |
if (($type eq 'lowestgradelevel') || |
if (($type eq 'lowestgradelevel') || |
($type eq 'highestgradelevel')) { |
($type eq 'highestgradelevel')) { |
Line 393 sub prettyinput {
|
Line 489 sub prettyinput {
|
",'rights')\">".&mt('Select').'</a>'. |
",'rights')\">".&mt('Select').'</a>'. |
&relatedfield(0,$relatedsearchflag,$relatedsep); |
&relatedfield(0,$relatedsearchflag,$relatedsep); |
} |
} |
|
# Source Customdistribution file |
|
if ($type eq 'sourcerights') { |
|
return '<input type="text" name="'.$fieldname. |
|
'" size="60" value="'.$value.'" /><a href="javascript:openbrowser'. |
|
"('".$formname."','".$fieldname."'". |
|
",'rights')\">".&mt('Select').'</a>'. |
|
&relatedfield(0,$relatedsearchflag,$relatedsep); |
|
} |
# Dates |
# Dates |
if (($type eq 'creationdate') || |
if (($type eq 'creationdate') || |
($type eq 'lastrevisiondate')) { |
($type eq 'lastrevisiondate')) { |
Line 404 sub prettyinput {
|
Line 508 sub prettyinput {
|
$value=~s/^\s+//gs; |
$value=~s/^\s+//gs; |
$value=~s/\s+$//gs; |
$value=~s/\s+$//gs; |
$value=~s/\s+/ /gs; |
$value=~s/\s+/ /gs; |
$value=~s/\"/\&quod\;/gs; |
$value=~s/\"/\"\;/gs; |
return |
return |
'<input type="text" name="'.$fieldname.'" size="'.$size.'" '. |
'<input type="text" name="'.$fieldname.'" size="'.$size.'" '. |
'value="'.$value.'" />'. |
'value="'.$value.'" />'. |
Line 542 sub present_uneditable_metadata {
|
Line 646 sub present_uneditable_metadata {
|
'lastrevisiondate', |
'lastrevisiondate', |
'owner', |
'owner', |
'copyright', |
'copyright', |
'customdistributionfile', |
'customdistributionfile', |
|
'sourceavail', |
|
'sourcerights', |
'obsolete', |
'obsolete', |
'obsoletereplacement') { |
'obsoletereplacement') { |
$table.='<tr><td bgcolor="#AAAAAA">'.$lt{$_}. |
$table.='<tr><td bgcolor="#AAAAAA">'.$lt{$_}. |
Line 580 sub print_dynamic_metadata {
|
Line 686 sub print_dynamic_metadata {
|
$r->rflush(); |
$r->rflush(); |
my %items=&fieldnames(); |
my %items=&fieldnames(); |
my %dynmeta=&dynamicmeta($uri); |
my %dynmeta=&dynamicmeta($uri); |
&Apache::lonnet::logthis('dynamic metadata keys:'.$/. |
|
join("\n",keys(%dynmeta))); |
|
# |
# |
# General Access and Usage Statistics |
# General Access and Usage Statistics |
if (exists($dynmeta{'count'}) || |
if (exists($dynmeta{'count'}) || |
Line 817 ENDEDIT
|
Line 921 ENDEDIT
|
foreach ('author','title','subject','keywords','abstract','notes', |
foreach ('author','title','subject','keywords','abstract','notes', |
'copyright','customdistributionfile','language', |
'copyright','customdistributionfile','language', |
'standards', |
'standards', |
'lowestgradelevel','highestgradelevel', |
'lowestgradelevel','highestgradelevel','sourceavail','sourcerights', |
'obsolete','obsoletereplacement') { |
'obsolete','obsoletereplacement') { |
if (defined($ENV{'form.new_'.$_})) { |
if (defined($ENV{'form.new_'.$_})) { |
$Apache::lonpublisher::metadatafields{$_}= |
$Apache::lonpublisher::metadatafields{$_}= |