--- loncom/interface/lonmeta.pm	2004/06/11 02:21:45	1.78
+++ loncom/interface/lonmeta.pm	2004/06/17 18:22:13	1.82
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Metadata display handler
 #
-# $Id: lonmeta.pm,v 1.78 2004/06/11 02:21:45 taceyjo1 Exp $
+# $Id: lonmeta.pm,v 1.82 2004/06/17 18:22:13 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -41,6 +41,86 @@ 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();
+    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];
+            }
+        }
+        $finished = 1;
+    }
+    #
+    return %ReturnHash;
+}
+
+
 # Fetch and evaluate dynamic metadata
 sub dynamicmeta {
     my $url=&Apache::lonnet::declutter(shift);
@@ -203,7 +283,8 @@ sub fieldnames {
 # Pretty printing of metadata field
 
 sub prettyprint {
-    my ($type,$value)=@_;
+    my ($type,$value,$target,$prefix,$form,$noformat)=@_;
+# $target,$prefix,$form are optional and for filecrumbs only
     if (! defined($value)) { 
         return '&nbsp;'; 
     }
@@ -257,8 +338,9 @@ sub prettyprint {
 	($type eq 'obsoletereplacement') ||
 	($type eq 'goto_list') ||
 	($type eq 'comefrom_list') ||
-	($type eq 'sequsage_list')) {
-	return join('<br />',map {
+	($type eq 'sequsage_list') ||
+	($type eq 'linkto_list')) {
+	return '<ul><font size="-1">'.join("\n",map {
             my $url = &Apache::lonnet::clutter($_);
             my $title = &Apache::lonnet::gettitle($url);
             if ($title eq '') {
@@ -275,11 +357,10 @@ sub prettyprint {
                     $title .= ' Syllabus';
                 } 
             }
-            $_ = '<b>'.$title.'</b> '.
-                '<a href="'.$url.'" target="preview">'.
-                '<font size="-1">'.$url.'</font>'.
-                '</a>'
-        } split(/\s*\,\s*/,$value));
+            $_ = '<li>'.$title.' '.
+		&Apache::lonhtmlcommon::crumbs($url,$target,$prefix,$form,'-1',$noformat).
+                '</li>'
+	    } split(/\s*\,\s*/,$value)).'</ul></font>';
     }
     # Evaluations
     if (($type eq 'clear') ||
@@ -604,8 +685,6 @@ sub print_dynamic_metadata {
     $r->rflush();
     my %items=&fieldnames();
     my %dynmeta=&dynamicmeta($uri);
-    &Apache::lonnet::logthis('dynamic metadata keys:'.$/.
-                             join("\n",keys(%dynmeta)));
     #
     # General Access and Usage Statistics
     if (exists($dynmeta{'count'}) ||
@@ -752,7 +831,7 @@ sub print_dynamic_metadata {
     # All other stuff
     $r->print('<h3>'.
               &mt('Additional Metadata (non-standard, parameters, exports)').
-              '</h3>');
+              '</h3><table border="0" cellspacing="1">');
     foreach (sort(keys(%content))) {
         my $name=$_;
         if ($name!~/\.display$/) {
@@ -770,13 +849,14 @@ sub print_dynamic_metadata {
                                                   $name.'.'.$_).'; ';
                 }
             }
-            $r->print('<b>'.$display.':</b> '.$content{$name});
+            $r->print('<tr><td bgcolor="#bbccbb"><font size="-1" color="#556655">'.$display.'</font></td><td bgcolor="#ccddcc"><font size="-1" color="#556655">'.$content{$name});
             if ($otherinfo) {
                 $r->print(' ('.$otherinfo.')');
             }
-            $r->print("<br />\n");
+            $r->print("</font></td></tr>\n");
         }
     }
+    $r->print("</table>");
     return;
 }