--- loncom/interface/lonmeta.pm	2007/03/12 19:10:48	1.204
+++ loncom/interface/lonmeta.pm	2008/12/12 10:01:25	1.219
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Metadata display handler
 #
-# $Id: lonmeta.pm,v 1.204 2007/03/12 19:10:48 banghart Exp $
+# $Id: lonmeta.pm,v 1.219 2008/12/12 10:01:25 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -42,24 +42,6 @@ use Apache::lonmsg;
 use LONCAPA qw(:DEFAULT :match);
 
 
-############################################################
-############################################################
-##
-## &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/($match_domain)/($match_username)/});
@@ -182,7 +164,7 @@ sub evalgraph {
     my $val=int($value*10.+0.5)-10;
     my $output='<table border="0" cellpadding="0" cellspacing="0"><tr>';
     if ($val>=20) {
-	$output.='<td width="20" bgcolor="#555555">&nbsp&nbsp;</td>';
+	$output.='<td width="20" bgcolor="#555555">&nbsp;&nbsp;</td>';
     } else {
         $output.='<td width="'.($val).'" bgcolor="#555555">&nbsp;</td>'.
                  '<td width="'.(20-$val).'" bgcolor="#FF3333">&nbsp;</td>';
@@ -192,7 +174,7 @@ sub evalgraph {
 	$output.='<td width="'.($val-20).'" bgcolor="#33FF33">&nbsp;</td>'.
                  '<td width="'.(40-$val).'" bgcolor="#555555">&nbsp;</td>';
     } else {
-        $output.='<td width="20" bgcolor="#555555">&nbsp&nbsp;</td>';
+        $output.='<td width="20" bgcolor="#555555">&nbsp;&nbsp;</td>';
     }
     $output.='<td> ('.sprintf("%5.2f",$value).') </td></tr></table>';
     return $output;
@@ -265,7 +247,7 @@ sub fieldnames {
          'correct'    => 'Material appears to be correct',
          'technical'  => 'Resource is technically correct', 
          'avetries'   => 'Average number of tries till solved',
-         'stdno'      => 'Total number of students who have worked on this problem',
+         'stdno'      => 'Statistics calculated for number of students',
          'difficulty' => 'Degree of difficulty',
          'disc'       => 'Degree of discrimination',
 	     'dependencies' => 'Resources used by this resource',
@@ -811,7 +793,7 @@ sub handler {
 						 {'domain' => $resdomain,}));
         &present_editable_metadata($r,$uri);
     } else {
-        $r->print(&Apache::loncommon::start_page('Catalog Information',
+        $r->print(&Apache::loncommon::start_page('Metadata',
 						 undef,
 						 {'domain' => $resdomain,}));
         &present_uneditable_metadata($r,$uri);
@@ -839,10 +821,14 @@ sub report_bombs {
 	    &Apache::lonmsg::clear_author_res_msg($uri);
 	}
         my $clear=&mt('Clear all Messages in Subdirectory');
-	$r->print(<<ENDCLEAR);
+        my $cancel=&mt('Back to Directory');
+        my $cancelurl=$uri;
+        $cancelurl=~s/^\Q$domain\E/\/priv/;
+        $r->print(<<ENDCLEAR);
 <form method="post">
 <input type="submit" name="clearbombs" value="$clear" />
-</form>
+<a href="$cancelurl">$cancel</a>
+</form><hr />
 ENDCLEAR
         my %brokenurls = 
             &Apache::lonmsg::all_url_author_res_msg($author,$domain);
@@ -902,9 +888,9 @@ sub present_uneditable_metadata {
     my $obsolete=$content{'obsolete'};
     my $obsoletewarning='';
     if (($obsolete) && ($env{'user.adv'})) {
-        $obsoletewarning='<p><font color="red">'.
+        $obsoletewarning='<p><span class="LC_warning">'.
             &mt('This resource has been marked obsolete by the author(s)').
-            '</font></p>';
+            '</span></p>';
     }
     #
     my %lt=&fieldnames();
@@ -941,23 +927,22 @@ sub present_uneditable_metadata {
 		   'obsoletereplacement');
     }
     foreach my $field (@fields) {
-        $table.='<tr><td bgcolor="#AAAAAA">'.$lt{$field}.
-            '</td><td bgcolor="#CCCCCC">'.
-            &prettyprint($field,$content{$field}).'</td></tr>';
+        $table.=&Apache::lonhtmlcommon::row_title($lt{$field})
+               .&prettyprint($field,$content{$field})
+               .&Apache::lonhtmlcommon::row_closure();
         delete($content{$field});
     }
     #
-    $r->print(<<ENDHEAD);
-<h2>$title</h2>
-<p>
-$disuri<br />
-$obsoletewarning
-$versiondisplay
-</p>
-<table cellspacing="2" border="0">
-$table
-</table>
-ENDHEAD
+    $r->print("<h2>$title</h2>"
+             .'<p>'
+             .$disuri.'<br />'
+             .$obsoletewarning
+             .$versiondisplay
+             .'</p>'
+             .&Apache::lonhtmlcommon::start_pick_box()
+             .$table
+             .&Apache::lonhtmlcommon::end_pick_box()
+    );
     if (!$uploaded && $env{'user.adv'}) {
         &print_dynamic_metadata($r,$uri,\%content);
     }
@@ -984,17 +969,18 @@ sub print_dynamic_metadata {
         exists($dynmeta{'goto'}) ||
         exists($dynmeta{'course'})) {
         $r->print('<h4>'.&mt('Access and Usage Statistics').'</h4>'.
-                  '<table cellspacing="2" border="0">');
+                  &Apache::lonhtmlcommon::start_pick_box());
         foreach ('count',
                  'sequsage','sequsage_list',
                  'comefrom','comefrom_list',
                  'goto','goto_list',
                  'course','course_list') {
-            $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
-                      '<td bgcolor="#CCCCCC">'.
-                      &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
+            $r->print(&Apache::lonhtmlcommon::row_title($lt{$_})
+                     .&prettyprint($_,$dynmeta{$_})
+                     .&Apache::lonhtmlcommon::row_closure()
+            );
         }
-        $r->print('</table>');
+        $r->print(&Apache::lonhtmlcommon::end_pick_box());
     } else {
         $r->print('<h4>'.&mt('No Access or Usages Statistics are available for this resource.').'</h4>');
     }
@@ -1009,35 +995,35 @@ sub print_dynamic_metadata {
             $r->print('<h4>'.
                       &mt('Overall Assessment Statistical Data').
                       '</h4>'.
-                      '<table cellspacing="2" border="0">');
-            $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{'stdno'}.'</td>'.
-                      '<td bgcolor="#CCCCCC">'.
-                      &prettyprint('stdno',$dynmeta{'stdno'}).
-                      '</td>'."</tr>\n");
+                      &Apache::lonhtmlcommon::start_pick_box());
+            $r->print(&Apache::lonhtmlcommon::row_title($lt{'stdno'})
+                     .&prettyprint('stdno',$dynmeta{'stdno'})
+                     .&Apache::lonhtmlcommon::row_closure()
+            );
             foreach ('avetries','difficulty','disc') {
-                $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
-                          '<td bgcolor="#CCCCCC">'.
-                          &prettyprint($_,sprintf('%5.2f',$dynmeta{$_})).
-                          '</td>'."</tr>\n");
+                $r->print(&Apache::lonhtmlcommon::row_title($lt{$_})
+                         .&prettyprint($_,sprintf('%5.2f',$dynmeta{$_}))
+                         .&Apache::lonhtmlcommon::row_closure()
+                );
             }
-            $r->print('</table>');    
+            $r->print(&Apache::lonhtmlcommon::end_pick_box());
         }
         if (exists($dynmeta{'stats'})) {
             #
             # New assessment statistics
             $r->print('<h4>'.
-                      &mt('Detailed Assessment Statistical Data').
+                      &mt('Recent Detailed Assessment Statistical Data').
                       '</h4>');
-            my $table = '<table cellspacing="2" border="0">'.
-                '<tr>'.
-                '<th>Course</th>'.
-                '<th>Section(s)</th>'.
-                '<th>Num Students</th>'.
-                '<th>Mean Tries</th>'.
-                '<th>Degree of Difficulty</th>'.
-                '<th>Degree of Discrimination</th>'.
-                '<th>Time of computation</th>'.
-                '</tr>'.$/;
+            my $table=&Apache::loncommon::start_data_table()
+                     .&Apache::loncommon::start_data_table_header_row()
+                     .'<th>'.&mt('Course').'</th>'
+                     .'<th>'.&mt('Section(s)').'</th>'
+                     .'<th>'.&mt('Num Students').'</th>'
+                     .'<th>'.&mt('Mean Tries').'</th>'
+                     .'<th>'.&mt('Degree of Difficulty').'</th>'
+                     .'<th>'.&mt('Degree of Discrimination').'</th>'
+                     .'<th>'.&mt('Time of computation').'</th>'
+                     .&Apache::loncommon::end_data_table_header_row().$/;
             foreach my $identifier (sort(keys(%{$dynmeta{'stats'}}))) {
                 my $data = $dynmeta{'stats'}->{$identifier};
                 my $course = $data->{'course'};
@@ -1048,9 +1034,9 @@ sub print_dynamic_metadata {
                     &Apache::lonnet::logthis('lookup for '.$course.' failed');
                     next;
                 }
-                $table .= '<tr>';
+                $table .= &Apache::loncommon::start_data_table_row();
                 $table .= 
-                    '<td><nobr>'.$courseinfo{'description'}.'</nobr></td>';
+                    '<td><span class="LC_nobreak">'.$courseinfo{'description'}.'</span></td>';
                 $table .= 
                     '<td align="right">'.$data->{'sections'}.'</td>';
                 $table .=
@@ -1065,16 +1051,15 @@ sub print_dynamic_metadata {
                     $table .= '</td>';
                 }
                 $table .=
-                    '<td><nobr>'.
+                    '<td><span class="LC_nobreak">'.
                     &Apache::lonlocal::locallocaltime($data->{'timestamp'}).
-                    '</nobr></td>';
-                $table .=
-                    '</tr>'.$/;
+                    '</span></td>';
+                $table .= &Apache::loncommon::end_data_table_row().$/;
             }
-            $table .= '</table>'.$/;
+            $table .= &Apache::loncommon::end_data_table().$/;
             $r->print($table);
         } else {
-            $r->print('No new dynamic data found.');
+            $r->print(&mt('No new dynamic data found.'));
         }
     } else {
         $r->print('<h4>'.
@@ -1090,13 +1075,14 @@ sub print_dynamic_metadata {
         exists($dynmeta{'correct'}) || 
         exists($dynmeta{'technical'})){ 
         $r->print('<h4>'.&mt('Evaluation Data').'</h4>'.
-                  '<table cellspacing="2" border="0">');
+                  &Apache::lonhtmlcommon::start_pick_box());
         foreach ('clear','depth','helpful','correct','technical') {
-            $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
-                      '<td bgcolor="#CCCCCC">'.
-                      &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
+            $r->print(&Apache::lonhtmlcommon::row_title($lt{$_})
+                     .&prettyprint($_,$dynmeta{$_})
+                     .&Apache::lonhtmlcommon::row_closure()
+            );
         }
-        $r->print('</table>');
+        $r->print(&Apache::lonhtmlcommon::end_pick_box());
     } else {
         $r->print('<h4>'.&mt('No Evaluation Data is available for this resource.').'</h4>');
     }
@@ -1124,7 +1110,8 @@ sub print_dynamic_metadata {
     # All other stuff
     $r->print('<h3>'.
               &mt('Additional Metadata (non-standard, parameters, exports)').
-              '</h3><table border="0" cellspacing="1">');
+              '</h3>');
+    $r->print(&Apache::lonhtmlcommon::start_pick_box());
     foreach (sort(keys(%content))) {
         my $name=$_;
         if ($name!~/\.display$/) {
@@ -1142,14 +1129,16 @@ sub print_dynamic_metadata {
                                                   $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});
+            $r->print(&Apache::lonhtmlcommon::row_title($display)
+                     .$content{$name}
+            );
             if ($otherinfo) {
                 $r->print(' ('.$otherinfo.')');
             }
-            $r->print("</font></td></tr>\n");
+            $r->print(&Apache::lonhtmlcommon::row_closure());
         }
     }
-    $r->print("</table>");
+    $r->print(&Apache::lonhtmlcommon::end_pick_box());
     return;
 }
 
@@ -1212,22 +1201,20 @@ ENDBOMBS
 <input type="submit" name="clearmsg" value="$clear" />
 ENDDEL
         } else {
-            $r->print('<p><a href="'.$disuri.'" />'.$goback.'</a></p>');
+            $r->print('<p><a href="'.$disuri.'">'.$goback.'</a></p>');
 	    if ($env{'form.clearmsg'}) {
 		my ($diruri) = ($disuri =~ m{(.*/)[^/]*});
-		$r->print('<p><a href="'.$diruri.'" />'.
+		$r->print('<p><a href="'.$diruri.'">'.
 			  &mt('Back To Directory').'</a></p>');
 	    }
 	}
 	$r->print('<br />'.$bombs);
     } else {
-        my $displayfile='Catalog Information for '.$disuri;
+        my $displayfile=&mt('Metadata for [_1]',$disuri);
         if ($disuri=~/\/default$/) {
             my $dir=$disuri;
             $dir=~s/default$//;
-            $displayfile=
-                &mt('Default Cataloging Information for Directory').' '.
-                $dir;
+            $displayfile=&mt('Default Metadata for Directory [_1]',$dir);
         }
         %Apache::lonpublisher::metadatafields=();
         %Apache::lonpublisher::metadatakeys=();
@@ -1312,6 +1299,11 @@ ENDEDIT
 		$Apache::lonpublisher::metadatafields{'owner'} =
 		    $env{'user.name'}.':'.$env{'user.domain'};
 	    }
+	    if (! $Apache::lonpublisher::metadatafields{'author'}) {
+		$Apache::lonpublisher::metadatafields{'author'} =
+		    &Apache::loncommon::plainname($env{'user.name'},
+						  $env{'user.domain'});
+	    }
 	    if ($Apache::lonpublisher::metadatafields{'courserestricted'} ne 'none') {
 
                 if ($file_type eq 'portfolio') {
@@ -1327,7 +1319,7 @@ ENDEDIT
                         ".description"}.'</strong>').'<br />');
                 }
 	    } else {
-		$r->print('<a href="'.$uri.'?changecourse=true">This resource is not associated with a course.</a><br />');
+		$r->print('<a href="'.$uri.'?changecourse=true">'.&mt('This resource is not associated with a course.').'</a><br />');
 	    }
 	}
 	if (@added_order) {
@@ -1385,8 +1377,8 @@ ENDEDIT
             my ($outcome,$result) = &store_metadata($fn,$uri,'store');
             $r->print($result);
 	}
-	$r->print($output.'<br /><input type="submit" name="store" value="'.
-                  &mt('Store Catalog Information').'" />');
+	$r->print($output.'<br /><input type="submit" title="'.&mt('Save Metadata').'" name="store" value="'.
+                  &mt('Save').'" />');
 
 	if ($file_type eq 'portfolio' || $file_type eq 'groups') {
 	    my ($port_path,$group) = &get_port_path_and_group($uri);
@@ -1551,3 +1543,95 @@ sub update_metadata_table {
 1;
 __END__
 
+
+=head1 NAME
+
+Apache::lonmeta - display meta data
+
+=head1 SYNOPSIS
+
+Handler to display meta data
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+=head1 SUBROUTINES
+
+=over
+
+=item &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}
+
+=item dynamicmeta()
+
+Fetch and evaluate dynamic metadata
+
+=item access_count()
+
+=item alttag()
+
+Try to make an alt tag if there is none
+
+=item authordisplay()
+
+Author display
+
+=item evalgraph()
+
+Pretty display
+
+=item diffgraph()
+
+=item fieldnames()
+
+=item portfolio_linked_path()
+
+=item get_port_path_and_group()
+
+=item portfolio_display_uri()
+
+=item pre_select_course()
+
+=item select_course()
+
+=item prettyprint()
+
+Pretty printing of metadata field
+
+=item direct()
+
+Pretty input of metadata field
+
+=item selectbox()
+
+=item relatedfield()
+
+=item prettyinput()
+
+=item report_bombs()
+
+=item present_uneditable_metadata()
+
+=item present_editable_metadata()
+
+=item store_metadata()
+
+=item store_transferred_addedfields()
+
+=item store_portfolio_metadata()
+
+=item update_metadata_table()
+
+=back
+
+=cut