--- loncom/interface/lonmeta.pm	2003/03/14 02:26:12	1.27
+++ loncom/interface/lonmeta.pm	2003/09/22 00:48:32	1.35
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Metadata display handler
 #
-# $Id: lonmeta.pm,v 1.27 2003/03/14 02:26:12 www Exp $
+# $Id: lonmeta.pm,v 1.35 2003/09/22 00:48:32 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -39,6 +39,7 @@ use Apache::lonnet();
 use Apache::loncommon();
 use Apache::lonmsg;
 use Apache::lonpublisher;
+use Apache::lonlocal;
 
 # ----------------------------------------- Fetch and evaluate dynamic metadata
 
@@ -51,10 +52,13 @@ sub dynamicmeta {
     $regexp='___'.$regexp.'___';
     my %evaldata=&Apache::lonnet::dump('nohist_resevaldata',$adomain,
 				       $aauthor,$regexp);
-    my %sum;
-    my %cnt;
+    my %sum=();
+    my %cnt=();
+    my %concat=();
     my %listitems=('count'        => 'add',
                    'course'       => 'add',
+                   'goto'         => 'add',
+                   'comefrom'     => 'add',
                    'avetries'     => 'avg',
                    'stdno'        => 'add',
                    'difficulty'   => 'avg',
@@ -67,21 +71,24 @@ sub dynamicmeta {
                    'usage'        => 'cnt'
                    );
     foreach (keys %evaldata) {
-	$_=~/___(\w+)$/;
-        if (defined($cnt{$1})) { $cnt{$1}++; } else { $cnt{$1}=1; }
-        unless ($listitems{$1} eq 'app') {
-            if (defined($sum{$1})) {
-               $sum{$1}+=$evaldata{$_};
+	my ($item,$purl,$cat)=&Apache::lonnet::decode_symb($_);
+###	print "\n".$_.' - '.$item.'<br />';
+        if (defined($cnt{$cat})) { $cnt{$cat}++; } else { $cnt{$cat}=1; }
+        unless ($listitems{$cat} eq 'app') {
+            if (defined($sum{$cat})) {
+               $sum{$cat}+=$evaldata{$_};
+               $concat{$cat}.=','.$item;
 	    } else {
-               $sum{$1}=$evaldata{$_};
+               $sum{$cat}=$evaldata{$_};
+               $concat{$cat}=$item;
 	    }
         } else {
-            if (defined($sum{$1})) {
+            if (defined($sum{$cat})) {
                if ($evaldata{$_}) {
-                  $sum{$1}.='<hr>'.$evaldata{$_};
+                  $sum{$cat}.='<hr>'.$evaldata{$_};
 	       }
  	    } else {
-	       $sum{$1}=''.$evaldata{$_};
+	       $sum{$cat}=''.$evaldata{$_};
 	    }
 	}
     }
@@ -94,6 +101,8 @@ sub dynamicmeta {
        } else {
            $returnhash{$_}=$sum{$_};
        }
+       $returnhash{$_.'_list'}=$concat{$_};
+### print "\n<hr />".$_.': '.$returnhash{$_}.'<br />'.$returnhash{$_.'_list'};
     }
     return %returnhash;
 }
@@ -115,6 +124,15 @@ sub alttag {
                  { return 'No information available'; }
 }
 
+# -------------------------------------------------------------- Author display
+
+sub authordisplay {
+    my ($aname,$adom)=@_;
+    return &Apache::loncommon::aboutmewrapper(
+                &Apache::loncommon::plainname($aname,$adom),
+                    $aname,$adom).' <tt>['.$aname.'@'.$adom.']</tt>';
+}
+
 # -------------------------------------------------------------- Pretty display
 
 sub evalgraph {
@@ -182,7 +200,7 @@ sub handler {
 
 # ----------------------------------------------------------- Set document type
 
-  $r->content_type('text/html');
+  &Apache::loncommon::content_type($r,'text/html');
   $r->send_http_header;
 
   return OK if $r->header_only;
@@ -195,7 +213,7 @@ sub handler {
 
   unless ($ENV{'user.adv'}) {
       foreach ('keywords','notes','abstract','subject') {
-          $content{$_}='<i>- not displayed -</i>';
+          $content{$_}='<i>- '.&mt('not displayed').' -</i>';
       }
   }
 
@@ -210,6 +228,10 @@ my $mime=&Apache::loncommon::filedescrip
 my $disuri=&Apache::lonnet::declutter($uri);
   $disuri=~s/\.meta$//;
 my $currentversion=&Apache::lonnet::getversion($disuri);
+my $author=$content{'author'};
+$author=~s/(\w+)(\:|\@)(\w+)/&authordisplay($1,$3)/gse;
+my $owner=$content{'owner'};
+$owner=~s/(\w+)(\:|\@)(\w+)/&authordisplay($1,$3)/gse;
 my $versiondisplay='';
 if ($thisversion) {
     $versiondisplay='Version: '.$thisversion.
@@ -217,6 +239,23 @@ if ($thisversion) {
 } else {
     $versiondisplay='Version: '.$currentversion;
 }
+my $customdistributionfile='';
+if ($content{'customdistributionfile'}) {
+   $customdistributionfile='<a href="'.$content{'customdistributionfile'}.
+     '"><tt>'.$content{'customdistributionfile'}.'</tt></a>';
+}
+my %lt=&Apache::lonlocal::texthash(
+				   'au' =>'Author(s)',
+				   'sb' => 'Subject',
+				   'kw' => 'Keyword(s)',
+				   'no' => 'Notes',
+				   'ab' => 'Abstract',
+				   'mi' => 'MIME Type',
+				   'la' => 'Language',
+				   'cd' => 'Creation Date',
+				   'pu' => 'Publisher/Owner',
+                                   'co' => 'Copyright/Distribution',
+				   'cf' => 'Custom Distribution File');
 my $bodytag=&Apache::loncommon::bodytag
             ('Catalog Information','','','',$resdomain);
   $r->print(<<ENDHEAD);
@@ -226,28 +265,30 @@ $bodytag
 <h3><tt>$disuri</tt></h3>
 $versiondisplay<br />
 <table cellspacing=2 border=0>
-<tr><td bgcolor='#AAAAAA'>Author(s)</td>
-<td bgcolor="#CCCCCC">$content{'author'}&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>Subject</td>
+<tr><td bgcolor='#AAAAAA'>$lt{'au'}</td>
+<td bgcolor="#CCCCCC">$author&nbsp;</td></tr>
+<tr><td bgcolor='#AAAAAA'>$lt{'sb'}</td>
 <td bgcolor="#CCCCCC">$content{'subject'}&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>Keyword(s)</td>
+<tr><td bgcolor='#AAAAAA'>$lt{'kw'}</td>
 <td bgcolor="#CCCCCC">$content{'keywords'}&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>Notes</td>
+<tr><td bgcolor='#AAAAAA'>$lt{'no'}</td>
 <td bgcolor="#CCCCCC">$content{'notes'}&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>Abstract</td>
+<tr><td bgcolor='#AAAAAA'>$lt{'ab'}</td>
 <td bgcolor="#CCCCCC">$content{'abstract'}&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>MIME Type</td>
+<tr><td bgcolor='#AAAAAA'>$lt{'mi'}</td>
 <td bgcolor="#CCCCCC">$mime ($content{'mime'})&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>Language</td>
+<tr><td bgcolor='#AAAAAA'>$lt{'la'}</td>
 <td bgcolor="#CCCCCC">$language&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>Creation Date</td>
+<tr><td bgcolor='#AAAAAA'>$lt{'cd'}</td>
 <td bgcolor="#CCCCCC">$creationdate&nbsp;</td></tr>
 <tr><td bgcolor='#AAAAAA'>
 Last Revision Date</td><td bgcolor="#CCCCCC">$lastrevisiondate&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>Publisher/Owner</td>
-<td bgcolor="#CCCCCC">$content{'owner'}&nbsp;</td></tr>
-<tr><td bgcolor='#AAAAAA'>Copyright/Distribution</td>
-<td bgcolor="#CCCCCC">$content{'copyright'}
+<tr><td bgcolor='#AAAAAA'>$lt{'pu'}</td>
+<td bgcolor="#CCCCCC">$owner&nbsp;</td></tr>
+<tr><td bgcolor='#AAAAAA'>$lt{'co'}</td>
+<td bgcolor="#CCCCCC">$content{'copyright'}&nbsp;</td></tr>
+<tr><td bgcolor='#AAAAAA'>$lt{'cf'}</td>
+<td bgcolor="#CCCCCC">$customdistributionfile&nbsp;</td></tr>
 </table>
 ENDHEAD
   delete($content{'title'});
@@ -262,15 +303,20 @@ ENDHEAD
   delete($content{'lastrevisiondate'});
   delete($content{'owner'});
   delete($content{'copyright'});
+  delete($content{'customdistributionfile'});
   if ($ENV{'user.adv'}) {
 # ------------------------------------------------------------ Dynamic Metadata
    $r->print(
-   '<h3>Dynamic Metadata (updated periodically)</h3>Processing ...<br>');
+   '<h3>'.&mt('Dynamic Metadata').' ('.
+	     &mt('updated periodically').')</h3>'.&mt('Processing').
+	     ' ...<br>');
    $r->rflush();
-    my %items=(
+    my %items=&Apache::lonlocal::texthash(
  'count'      => 'Network-wide number of accesses (hits)',
  'course'     => 'Network-wide number of courses using resource',
  'usage'      => 'Number of resources using or importing resource',
+ 'goto'       => 'Number of resources that follow this resource in maps',
+ 'comefrom'   => 'Number of resources that lead up to this resource in maps',
  'clear'      => 'Material presented in clear way',
  'depth'      => 'Material covered with sufficient depth',
  'helpful'    => 'Material is helpful',
@@ -281,16 +327,36 @@ ENDHEAD
  'difficulty' => 'Degree of difficulty');
    my %dynmeta=&dynamicmeta($uri);
    $r->print(
-'</table><h4>Access and Usage Statistics</h4><table cellspacing=2 border=0>');
-   foreach ('count','usage','course') {
+'</table><h4>'.&mt('Access and Usage Statistics').'</h4><table cellspacing=2 border=0>');
+   foreach ('count') {
        $r->print(
 '<tr><td bgcolor="#AAAAAA">'.$items{$_}.'</td><td bgcolor="#CCCCCC">'.
 $dynmeta{$_}."&nbsp;</td></tr>\n");
    }
+   foreach my $cat ('usage','comefrom','goto') {
+       $r->print(
+'<tr><td bgcolor="#AAAAAA">'.$items{$cat}.'</td><td bgcolor="#CCCCCC">'.
+$dynmeta{$cat}.'<font size="-1"><ul>'.join("\n",
+      map { my $murl=$_; 
+ '<li><a href="'.&Apache::lonnet::clutter($murl).'" target="preview">'.
+                        &Apache::lonnet::gettitle($murl).' [<tt>'.$murl
+                        .'</tt>]</a></li>' }
+      split(/\,/,$dynmeta{$cat.'_list'}))."</ul></font></td></tr>\n");
+   }
+   foreach my $cat ('course') {
+       $r->print(
+'<tr><td bgcolor="#AAAAAA">'.$items{$cat}.'</td><td bgcolor="#CCCCCC">'.
+$dynmeta{$cat}.'<font size="-1"><ul>'.join("\n",
+      map { my %courseinfo=&Apache::lonnet::coursedescription($_);  
+ '<li><a href="/public/'.
+  $courseinfo{'domain'}.'/'.$courseinfo{'num'}.'/syllabus" target="preview">'.
+  $courseinfo{'description'}.'</a></li>' }
+      split(/\,/,$dynmeta{$cat.'_list'}))."</ul></font></td></tr>\n");
+   }
        $r->print('</table>');
    if ($uri=~/\.(problem|exam|quiz|assess|survey|form)\.meta$/) {
       $r->print(
-'<h4>Assessment Statistical Data</h4><table cellspacing=2 border=0>');
+'<h4>'.&mt('Assessment Statistical Data').'</h4><table cellspacing=2 border=0>');
       foreach ('stdno','avetries') {
           $r->print(
 '<tr><td bgcolor="#AAAAAA">'.$items{$_}.'</td><td bgcolor="#CCCCCC">'.
@@ -303,7 +369,7 @@ $dynmeta{$_}."&nbsp;</td></tr>\n");
       }
       $r->print('</table>');    
    }
-   $r->print('<h4>Evaluation Data</h4><table cellspacing=2 border=0>');
+   $r->print('<h4>'.&mt('Evaluation Data').'</h4><table cellspacing=2 border=0>');
    foreach ('clear','depth','helpful','correct','technical') {
        $r->print(
 '<tr><td bgcolor="#AAAAAA">'.$items{$_}.'</td><td bgcolor="#CCCCCC">'.
@@ -314,13 +380,13 @@ $dynmeta{$_}."&nbsp;</td></tr>\n");
    if ((($ENV{'user.domain'} eq $1) && ($ENV{'user.name'} eq $2))
        || ($ENV{'user.role.ca./'.$1.'/'.$2})) {
       $r->print(
-  '<h4>Evaluation Comments (visible to author and co-authors only)</h4>'.
+  '<h4>'.&mt('Evaluation Comments').' ('.&mt('visible to author and co-authors only').')</h4>'.
       '<blockquote>'.$dynmeta{'comments'}.'</blockquote>');
       $r->print(
    '<h4>Error Messages (visible to author and co-authors only)</h4>');
       my %errormsgs=&Apache::lonnet::dump('nohist_res_msgs',$1,$2);
       foreach (keys %errormsgs) {
-	if ($_=~/^$disuri\_\d+$/) {
+	if ($_=~/^\Q$disuri\E\_\d+$/) {
           my %content=&Apache::lonmsg::unpackagemsg($errormsgs{$_});
 	  $r->print('<b>'.$content{'time'}.'</b>: '.$content{'message'}.
                     '<br />');
@@ -329,23 +395,25 @@ $dynmeta{$_}."&nbsp;</td></tr>\n");
    }
 # ------------------------------------------------------------- All other stuff
    $r->print(
- '<h3>Additional Metadata (non-standard, parameters, exports)</h3>');
+ '<h3>'.&mt('Additional Metadata (non-standard, parameters, exports)').'</h3>');
    foreach (sort keys %content) {
       my $name=$_;
-      my $display=&Apache::lonnet::metadata($uri,$name.'.display');
-      unless ($display) { $display=$name; };
-      my $otherinfo='';
-      foreach ('name','part','type','default') {
-          if (defined(&Apache::lonnet::metadata($uri,$name.'.'.$_))) {
-             $otherinfo.=' '.$_.'='.
-		 &Apache::lonnet::metadata($uri,$name.'.'.$_).'; ';
-          }
-      }
-      $r->print('<b>'.$display.':</b> '.$content{$name});
-      if ($otherinfo) {
-         $r->print(' ('.$otherinfo.')');
+      unless ($name=~/\.display$/) {
+	  my $display=&Apache::lonnet::metadata($uri,$name.'.display');
+	  unless ($display) { $display=$name; };
+	  my $otherinfo='';
+	  foreach ('name','part','type','default') {
+	      if (defined(&Apache::lonnet::metadata($uri,$name.'.'.$_))) {
+		  $otherinfo.=' '.$_.'='.
+		      &Apache::lonnet::metadata($uri,$name.'.'.$_).'; ';
+	      }
+	  }
+	  $r->print('<b>'.$display.':</b> '.$content{$name});
+	  if ($otherinfo) {
+	      $r->print(' ('.$otherinfo.')');
+	  }
+	  $r->print("<br>\n");
       }
-      $r->print("<br>\n");
    }
   }
 # ===================================================== End Resource Space Call
@@ -384,9 +452,20 @@ ENDEDIT
        if ($ENV{'form.new_'.$_}) {
 	   $Apache::lonpublisher::metadatafields{$_}=$ENV{'form.new_'.$_};
        }
-       $r->print(
-         &Apache::lonpublisher::textfield($_,'new_'.$_,
-                                 $Apache::lonpublisher::metadatafields{$_}));
+       if (m/copyright/) {
+	   $r->print(&Apache::lonpublisher::selectbox($_,'new_'.$_,
+			       $Apache::lonpublisher::metadatafields{$_},
+			       \&Apache::loncommon::copyrightdescription,
+			       (&Apache::loncommon::copyrightids)));
+       } elsif (m/language/) {
+	   $r->print(&Apache::lonpublisher::selectbox($_,'new_'.$_,
+			      $Apache::lonpublisher::metadatafields{$_},
+			      \&Apache::loncommon::languagedescription,
+			      (&Apache::loncommon::languageids)));
+       } else {
+	   $r->print(&Apache::lonpublisher::textfield($_,'new_'.$_,
+			     $Apache::lonpublisher::metadatafields{$_}));
+       }
    }
    if ($ENV{'form.store'}) {
       my $mfh;