Diff for /loncom/interface/lonmeta.pm between versions 1.65 and 1.69

version 1.65, 2004/04/13 15:41:19 version 1.69, 2004/04/14 18:56:36
Line 40  use Apache::lonlocal; Line 40  use Apache::lonlocal;
 use Apache::lonmysql;  use Apache::lonmysql;
 use Apache::lonmsg;  use Apache::lonmsg;
   
 # MySQL table columns  
   
 my @columns;  
   
 # Fetch and evaluate dynamic metadata  # Fetch and evaluate dynamic metadata
 sub dynamicmeta {  sub dynamicmeta {
Line 60  sub dynamicmeta { Line 57  sub dynamicmeta {
     #      #
     # Deal with 'count' separately      # Deal with 'count' separately
     $Data{'count'} = &access_count($url,$aauthor,$adomain);      $Data{'count'} = &access_count($url,$aauthor,$adomain);
       #
       # Debugging code I will probably need later
       if (0) {
           &Apache::lonnet::logthis('Dynamic Metadata');
           while(my($k,$v)=each(%Data)){
               &Apache::lonnet::logthis('    "'.$k.'"=>"'.$v.'"');
           }
           &Apache::lonnet::logthis('-------------------');
       }
     return %Data;      return %Data;
 }  }
   
Line 146  sub diffgraph { Line 152  sub diffgraph {
     return $output;      return $output;
 }  }
   
 # Turn MySQL row into hash  
 sub metadata_col_to_hash {  
     my @cols=@_;  
     my %hash=();  
     for (my $i=0; $i<=$#columns; $i++) {  
  $hash{$columns[$i]}=$cols[$i];  
     }  
     return %hash;  
 }  
   
 # The field names  # The field names
 sub fieldnames {  sub fieldnames {
Line 391  sub prettyinput { Line 388  sub prettyinput {
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     #      #
       my $uri=$r->uri;
       #
       # Check to see if this server is overloaded
     my $loaderror=&Apache::lonnet::overloaderror($r);      my $loaderror=&Apache::lonnet::overloaderror($r);
     if ($loaderror) { return $loaderror; }      if ($loaderror) { 
           return $loaderror;
       }
     #      #
     my $uri=$r->uri;      # Check to see if original resource server is overloaded
       my ($resdomain,$resuser)=
           (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);
       $loaderror=&Apache::lonnet::overloaderror
           ($r,&Apache::lonnet::homeserver($resuser,$resdomain));
       if ($loaderror) { 
           return $loaderror;
       }
       #
       # Set document type
       &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;
       return OK if $r->header_only;
     #      #
     # Looking for all bombs?      $r->print('<html><head><title>'.
     if ($uri=~/\/adm\/bombs\/(.*)$/) {                'Catalog Information'.
         # Set document type                '</title></head>');
         $uri=&Apache::lonnet::declutter($1);      if ($uri=~m:/adm/bombs/(.*)$:) {
         &Apache::loncommon::content_type($r,'text/html');  
         $r->send_http_header;  
         #  
         return OK if $r->header_only;  
         $r->print(&Apache::loncommon::bodytag('Error Messages'));          $r->print(&Apache::loncommon::bodytag('Error Messages'));
         $r->print('<h1>'.&Apache::lonnet::clutter($uri).'</h1>');          # Looking for all bombs?
         my ($domain,$author)=($uri=~/^(\w+)\/(\w+)\//);          &report_bombs($r,$uri);
         if (&Apache::loncacc::constructaccess('/~'.$author.'/',$domain)) {      } elsif ($uri=~/^\/\~/) { 
             my %brokenurls=&Apache::lonmsg::all_url_author_res_msg($author,          # Construction space
                                                                    $domain);          $r->print(&Apache::loncommon::bodytag
             foreach (sort keys %brokenurls) {                    ('Edit Catalog Information','','','',$resdomain));
                 if ($_=~/^\Q$uri\E/) {          &present_editable_metadata($r,$uri);
                     $r->print(&Apache::lonhtmlcommon::crumbs      } else {
                               (&Apache::lonnet::clutter($_)).          $r->print(&Apache::loncommon::bodytag
                               &Apache::lonmsg::retrieve_author_res_msg($_).                    ('Catalog Information','','','',$resdomain));
                               '<hr />');          &present_uneditable_metadata($r,$uri);
                 }      }
       $r->print('</body></html>');
       return OK;
   }
   
   #####################################################
   #####################################################
   ###                                               ###
   ###                Report Bombs                   ###
   ###                                               ###
   #####################################################
   #####################################################
   sub report_bombs {
       my ($r,$uri) = @_;
       # Set document type
       $uri =~ s:/adm/bombs/::;
       $uri = &Apache::lonnet::declutter($uri);
       $r->print('<h1>'.&Apache::lonnet::clutter($uri).'</h1>');
       my ($domain,$author)=($uri=~/^(\w+)\/(\w+)\//);
       if (&Apache::loncacc::constructaccess('/~'.$author.'/',$domain)) {
           my %brokenurls = 
               &Apache::lonmsg::all_url_author_res_msg($author,$domain);
           foreach (sort(keys(%brokenurls))) {
               if ($_=~/^\Q$uri\E/) {
                   $r->print(&Apache::lonhtmlcommon::crumbs
                             (&Apache::lonnet::clutter($_)).
                             &Apache::lonmsg::retrieve_author_res_msg($_).
                             '<hr />');
             }              }
         } else {  
             $r->print(&mt('Not authorized'));  
         }          }
         $r->print('</body></html>');      } else {
     } elsif ($uri!~/^\/\~/) {           $r->print(&mt('Not authorized'));
         # This is not in construction space      }
         my ($resdomain,$resuser)=      return;
             (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);  }
         $loaderror=&Apache::lonnet::overloaderror  
             ($r,  #####################################################
              &Apache::lonnet::homeserver($resuser,$resdomain));  #####################################################
         if ($loaderror) { return $loaderror; }  ###                                               ###
         #  ###        Uneditable Metadata Display            ###
         my %content=();  ###                                               ###
         # Set document type  #####################################################
         &Apache::loncommon::content_type($r,'text/html');  #####################################################
         $r->send_http_header;  sub present_uneditable_metadata {
         return OK if $r->header_only;      my ($r,$uri) = @_;
         # Read file      #
         foreach (split(/\,/,&Apache::lonnet::metadata($uri,'keys'))) {      my %content=();
             $content{$_}=&Apache::lonnet::metadata($uri,$_);      # Read file
         }      foreach (split(/\,/,&Apache::lonnet::metadata($uri,'keys'))) {
         # Render Output          $content{$_}=&Apache::lonnet::metadata($uri,$_);
         # displayed url      }
         my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);      # Render Output
         $uri=~s/\.meta$//;      # displayed url
         my $disuri=&Apache::lonnet::clutter($uri);      my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);
         # version      $uri=~s/\.meta$//;
         my $currentversion=&Apache::lonnet::getversion($disuri);      my $disuri=&Apache::lonnet::clutter($uri);
         my $versiondisplay='';      # version
         if ($thisversion) {      my $currentversion=&Apache::lonnet::getversion($disuri);
             $versiondisplay=&mt('Version').': '.$thisversion.      my $versiondisplay='';
                 ' ('.&mt('most recent version').': '.      if ($thisversion) {
                 ($currentversion>0 ?           $versiondisplay=&mt('Version').': '.$thisversion.
                  $currentversion   :              ' ('.&mt('most recent version').': '.
                  &mt('information not available')).')';              ($currentversion>0 ? 
         } else {               $currentversion   :
             $versiondisplay='Version: '.$currentversion;               &mt('information not available')).')';
         }      } else {
         # crumbify displayed URL          $versiondisplay='Version: '.$currentversion;
         $disuri=&Apache::lonhtmlcommon::crumbs($disuri);      }
         # obsolete      # crumbify displayed URL
         my $obsolete=$content{'obsolete'};      $disuri=&Apache::lonhtmlcommon::crumbs($disuri);
         my $obsoletewarning='';      # obsolete
         if (($obsolete) && ($ENV{'user.adv'})) {      my $obsolete=$content{'obsolete'};
             $obsoletewarning='<p><font color="red">'.      my $obsoletewarning='';
                 &mt('This resource has been marked obsolete by the author(s)').      if (($obsolete) && ($ENV{'user.adv'})) {
                 '</font></p>';          $obsoletewarning='<p><font color="red">'.
         }              &mt('This resource has been marked obsolete by the author(s)').
         #              '</font></p>';
         my %lt=&fieldnames();      }
         my $table='';      #
         my $bodytag=&Apache::loncommon::bodytag      my %lt=&fieldnames();
             ('Catalog Information','','','',$resdomain);      my $table='';
         foreach ('title',       foreach ('title', 
                  'author',                'author', 
                  'subject',                'subject', 
                  'keywords',                'keywords', 
                  'notes',                'notes', 
                  'abstract',               'abstract',
                  'lowestgradelevel',               'lowestgradelevel',
                  'highestgradelevel',               'highestgradelevel',
                  'standards',                'standards', 
                  'mime',                'mime', 
                  'language',                'language', 
                  'creationdate',                'creationdate', 
                  'lastrevisiondate',                'lastrevisiondate', 
                  'owner',                'owner', 
                  'copyright',                'copyright', 
                  'customdistributionfile',                'customdistributionfile', 
                  'obsolete',                'obsolete', 
                  'obsoletereplacement') {               'obsoletereplacement') {
             $table.='<tr><td bgcolor="#AAAAAA">'.$lt{$_}.          $table.='<tr><td bgcolor="#AAAAAA">'.$lt{$_}.
         '</td><td bgcolor="#CCCCCC">'.              '</td><td bgcolor="#CCCCCC">'.
                 &prettyprint($_,$content{$_}).'</td></tr>';              &prettyprint($_,$content{$_}).'</td></tr>';
             delete $content{$_};          delete $content{$_};
         }      }
         #      #
         $r->print(<<ENDHEAD);      $r->print(<<ENDHEAD);
 <html><head><title>Catalog Information</title></head>  
 $bodytag  
 <h2>$content{'title'}</h2>  <h2>$content{'title'}</h2>
 <h3><tt>$disuri</tt></h3>  <h3><tt>$disuri</tt></h3>
 $obsoletewarning  $obsoletewarning
Line 507  $versiondisplay<br /> Line 540  $versiondisplay<br />
 $table  $table
 </table>  </table>
 ENDHEAD  ENDHEAD
         if ($ENV{'user.adv'}) {      if ($ENV{'user.adv'}) {
             # Dynamic Metadata          &print_dynamic_metadata($r,$uri,\%content);
             $r->print(      }
                       '<h3>'.&mt('Dynamic Metadata').' ('.      return;
                       &mt('updated periodically').')</h3>'.&mt('Processing').  }
                       ' ...<br />');  
             $r->rflush();  sub print_dynamic_metadata {
             my %items=&fieldnames();      my ($r,$uri,$content) = @_;
             my %dynmeta=&dynamicmeta($uri);      #
             # General Access and Usage Statistics      my %content = %$content;
             $r->print('<h4>'.&mt('Access and Usage Statistics').'</h4>'.      my %lt=&fieldnames();
                       '<table cellspacing=2 border=0>');      #
             foreach ('count',      my $description = 'Dynamic Metadata (updated periodically)';
                      'sequsage','sequsage_list',      $r->print('<h3>'.&mt($description).'</h3>'.
                      'comefrom','comefrom_list',                &mt('Processing').' ...<br />');
                      'goto','goto_list',      $r->rflush();
                      'course','course_list') {      my %items=&fieldnames();
                 $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.      my %dynmeta=&dynamicmeta($uri);
                           '<td bgcolor="#CCCCCC">'.      #
                           &prettyprint($_,$dynmeta{$_})."</td></tr>\n");      # General Access and Usage Statistics
             }      $r->print('<h4>'.&mt('Access and Usage Statistics').'</h4>'.
             $r->print('</table>');                '<table cellspacing=2 border=0>');
             if ($uri=~/\.(problem|exam|quiz|assess|survey|form)\.meta$/) {      foreach ('count',
                 # This is an assessment, print assessment data               'sequsage','sequsage_list',
                 $r->print(               'comefrom','comefrom_list',
                           '<h4>'.&mt('Assessment Statistical Data').'</h4>'.               'goto','goto_list',
                           '<table cellspacing=2 border=0>');               'course','course_list') {
                 foreach ('stdno','avetries','difficulty') {          $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
                     $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.                    '<td bgcolor="#CCCCCC">'.
                               '<td bgcolor="#CCCCCC">'.                    &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
                               &prettyprint($_,$dynmeta{$_})."</td></tr>\n");      }
       $r->print('</table>');
       #
       # Assessment statistics
       if ($uri=~/\.(problem|exam|quiz|assess|survey|form)$/) {
           # This is an assessment, print assessment data
           $r->print(
                     '<h4>'.&mt('Assessment Statistical Data').'</h4>'.
                     '<table cellspacing=2 border=0>');
           foreach ('stdno','avetries','difficulty') {
               $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
                         '<td bgcolor="#CCCCCC">'.
                         &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
           }
           $r->print('</table>');    
       }
       
       $r->print('<h4>'.&mt('Evaluation Data').'</h4>'.
                 '<table cellspacing=2 border=0>');
       foreach ('clear','depth','helpful','correct','technical') {
           $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
                     '<td bgcolor="#CCCCCC">'.
                     &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
       }
       $r->print('</table>');
       $uri=~/^\/res\/(\w+)\/(\w+)\//; 
       if ((($ENV{'user.domain'} eq $1) && ($ENV{'user.name'} eq $2))
           || ($ENV{'user.role.ca./'.$1.'/'.$2})) {
           $r->print('<h4>'.&mt('Evaluation Comments').' ('.
                     &mt('visible to author and co-authors only').
                     ')</h4>'.
                     '<blockquote>'.$dynmeta{'comments'}.'</blockquote>');
           $r->print('<a name="bombs" /><h4>'.&mt('Error Messages').' ('.
                     &mt('visible to author and co-authors only').')'.
                     '</h4>'.
                     &Apache::lonmsg::retrieve_author_res_msg($uri));
       }
       #
       # All other stuff
       $r->print('<h3>'.
                 &mt('Additional Metadata (non-standard, parameters, exports)').
                 '</h3>');
       foreach (sort(keys(%content))) {
           my $name=$_;
           if ($name!~/\.display$/) {
               my $display=&Apache::lonnet::metadata($uri,
                                                     $name.'.display');
               if (! $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('</table>');      
             }  
             $r->print('<h4>'.&mt('Evaluation Data').'</h4>'.  
                       '<table cellspacing=2 border=0>');  
             foreach ('clear','depth','helpful','correct','technical') {  
                 $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.  
                           '<td bgcolor="#CCCCCC">'.  
                           &prettyprint($_,$dynmeta{$_})."</td></tr>\n");  
             }              }
             $r->print('</table>');              $r->print('<b>'.$display.':</b> '.$content{$name});
             $uri=~/^\/res\/(\w+)\/(\w+)\//;               if ($otherinfo) {
             if ((($ENV{'user.domain'} eq $1) && ($ENV{'user.name'} eq $2))                  $r->print(' ('.$otherinfo.')');
                 || ($ENV{'user.role.ca./'.$1.'/'.$2})) {  
                 $r->print('<h4>'.&mt('Evaluation Comments').' ('.  
                           &mt('visible to author and co-authors only').  
                           ')</h4>'.  
                           '<blockquote>'.$dynmeta{'comments'}.'</blockquote>');  
                 $r->print('<a name="bombs" /><h4>'.&mt('Error Messages').' ('.  
                           &mt('visible to author and co-authors only').')'.  
                           '</h4>'.  
                           &Apache::lonmsg::retrieve_author_res_msg($uri));  
             }  
             # All other stuff  
             $r->print('<h3>'.  
                 &mt('Additional Metadata (non-standard, parameters, exports)').  
                       '</h3>');  
             foreach (sort keys %content) {  
                 my $name=$_;  
                 if ($name!~/\.display$/) {  
                     my $display=&Apache::lonnet::metadata($uri,  
                                                           $name.'.display');  
                     if (! $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      }
     } else {      return;
         # Construction Space Call  }
         # Set document type  
         &Apache::loncommon::content_type($r,'text/html');  #####################################################
         $r->send_http_header;  #####################################################
         #  ###                                               ###
         return OK if $r->header_only;  ###          Editable metadata display            ###
         # Header  ###                                               ###
         my $disuri=$uri;  #####################################################
         my $fn=&Apache::lonnet::filelocation('',$uri);  #####################################################
         $disuri=~s/^\/\~/\/priv\//;  sub present_editable_metadata {
         $disuri=~s/\.meta$//;      my ($r,$uri) = @_;
         my $target=$uri;      # Construction Space Call
         $target=~s/^\/\~/\/res\/$ENV{'request.role.domain'}\//;      # Header
         $target=~s/\.meta$//;      my $disuri=$uri;
         my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);      my $fn=&Apache::lonnet::filelocation('',$uri);
         if ($bombs) {      $disuri=~s/^\/\~/\/priv\//;
             if ($ENV{'form.delmsg'}) {      $disuri=~s/\.meta$//;
                 if (&Apache::lonmsg::del_url_author_res_msg($target) eq 'ok') {      my $target=$uri;
                     $bombs=&mt('Messages deleted.');      $target=~s/^\/\~/\/res\/$ENV{'request.role.domain'}\//;
                 } else {      $target=~s/\.meta$//;
                     $bombs=&mt('Error deleting messages');      my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);
                 }      if ($bombs) {
           if ($ENV{'form.delmsg'}) {
               if (&Apache::lonmsg::del_url_author_res_msg($target) eq 'ok') {
                   $bombs=&mt('Messages deleted.');
               } else {
                   $bombs=&mt('Error deleting messages');
             }              }
             my $bodytag=&Apache::loncommon::bodytag('Error Messages');          }
             my $del=&mt('Delete Messages');          my $del=&mt('Delete Messages');
             $r->print(<<ENDBOMBS);          $r->print(<<ENDBOMBS);
 <html><head><title>Edit Catalog Information</title></head>  
 $bodytag  
 <h1>$disuri</h1>  <h1>$disuri</h1>
 <form method="post" name="defaultmeta">  <form method="post" name="defaultmeta">
 <input type="submit" name="delmsg" value="$del" />  <input type="submit" name="delmsg" value="$del" />
 <br />$bombs  <br />$bombs
 </form>  
 </body>  
 </html>  
 ENDBOMBS  ENDBOMBS
         } else {      } else {
             my $displayfile='Catalog Information for '.$disuri;          my $displayfile='Catalog Information for '.$disuri;
             if ($disuri=~/\/default$/) {          if ($disuri=~/\/default$/) {
                 my $dir=$disuri;              my $dir=$disuri;
                 $dir=~s/default$//;              $dir=~s/default$//;
                 $displayfile=              $displayfile=
                     &mt('Default Cataloging Information for Directory').' '.                  &mt('Default Cataloging Information for Directory').' '.
                     $dir;                  $dir;
             }          }
             my $bodytag=          my $bodytag=
                 &Apache::loncommon::bodytag('Edit Catalog Information');              &Apache::loncommon::bodytag('Edit Catalog Information');
             %Apache::lonpublisher::metadatafields=();          %Apache::lonpublisher::metadatafields=();
             %Apache::lonpublisher::metadatakeys=();          %Apache::lonpublisher::metadatakeys=();
             &Apache::lonpublisher::metaeval(&Apache::lonnet::getfile($fn));          &Apache::lonpublisher::metaeval(&Apache::lonnet::getfile($fn));
             $r->print(<<ENDEDIT);          $r->print(<<ENDEDIT);
 <html><head><title>Edit Catalog Information</title></head>  <html><head><title>Edit Catalog Information</title></head>
 $bodytag  $bodytag
 <h1>$displayfile</h1>  <h1>$displayfile</h1>
 <form method="post" name="defaultmeta">  <form method="post" name="defaultmeta">
 ENDEDIT  ENDEDIT
             $r->print('<script language="JavaScript">'.          $r->print('<script language="JavaScript">'.
                       &Apache::loncommon::browser_and_searcher_javascript.                    &Apache::loncommon::browser_and_searcher_javascript.
                       '</script>');                    '</script>');
             my %lt=&fieldnames();          my %lt=&fieldnames();
             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',
                      'obsolete','obsoletereplacement') {                   'obsolete','obsoletereplacement') {
                 if (defined($ENV{'form.new_'.$_})) {              if (defined($ENV{'form.new_'.$_})) {
                     $Apache::lonpublisher::metadatafields{$_}=                  $Apache::lonpublisher::metadatafields{$_}=
                         $ENV{'form.new_'.$_};                      $ENV{'form.new_'.$_};
                 }              }
                 if (! $Apache::lonpublisher::metadatafields{'copyright'}) {              if (! $Apache::lonpublisher::metadatafields{'copyright'}) {
                     $Apache::lonpublisher::metadatafields{'copyright'}=                  $Apache::lonpublisher::metadatafields{'copyright'}=
                         'default';                      'default';
                 }  
                 $r->print('<p>'.$lt{$_}.': '.  
                           &prettyinput  
                           ($_,$Apache::lonpublisher::metadatafields{$_},  
                            'new_'.$_,'defaultmeta').'</p>');  
             }              }
             if ($ENV{'form.store'}) {              $r->print('<p>'.$lt{$_}.': '.
                 my $mfh;                        &prettyinput
                 if (!  ($mfh=Apache::File->new('>'.$fn))) {                        ($_,$Apache::lonpublisher::metadatafields{$_},
                     $r->print('<p><font color=red>'.                         'new_'.$_,'defaultmeta').'</p>');
                               &mt('Could not write metadata').', '.          }
                               &mt('FAIL').'</font>');          if ($ENV{'form.store'}) {
                 } else {              my $mfh;
                     foreach (sort keys %Apache::lonpublisher::metadatafields) {              if (!  ($mfh=Apache::File->new('>'.$fn))) {
                         if ($_!~/\./) {                  $r->print('<p><font color=red>'.
                             my $unikey=$_;                            &mt('Could not write metadata').', '.
                             $unikey=~/^([A-Za-z]+)/;                            &mt('FAIL').'</font>');
                             my $tag=$1;              } else {
                             $tag=~tr/A-Z/a-z/;                  foreach (sort keys %Apache::lonpublisher::metadatafields) {
                             print $mfh "\n\<$tag";                      next if ($_ =~ /\./);
                             foreach (split(/\,/,                      my $unikey=$_;
                       $unikey=~/^([A-Za-z]+)/;
                       my $tag=$1;
                       $tag=~tr/A-Z/a-z/;
                       print $mfh "\n\<$tag";
                       foreach (split(/\,/,
                                  $Apache::lonpublisher::metadatakeys{$unikey})                                   $Apache::lonpublisher::metadatakeys{$unikey})
                                      ) {                               ) {
                                 my $value=                          my $value=
                         $Apache::lonpublisher::metadatafields{$unikey.'.'.$_};                           $Apache::lonpublisher::metadatafields{$unikey.'.'.$_};
                                 $value=~s/\"/\'\'/g;                          $value=~s/\"/\'\'/g;
                                 print $mfh ' '.$_.'="'.$value.'"';                          print $mfh ' '.$_.'="'.$value.'"';
                             }  
                             print $mfh '>'.  
                                 &HTML::Entities::encode($Apache::lonpublisher::metadatafields{$unikey},'<>&"').  
                                 '</'.$tag.'>';  
                         }  
                     }                      }
                     $r->print('<p>'.&mt('Wrote Metadata'));                      print $mfh '>'.
                           &HTML::Entities::encode
                           ($Apache::lonpublisher::metadatafields{$unikey},
                            '<>&"').
                            '</'.$tag.'>';
                 }                  }
                   $r->print('<p>'.&mt('Wrote Metadata'));
             }              }
             $r->print('<br /><input type="submit" name="store" value="'.  
                       &mt('Store Catalog Information').'"></form>'.  
                       '</body></html>');  
         }          }
           $r->print('<br /><input type="submit" name="store" value="'.
                     &mt('Store Catalog Information').'">');
     }      }
     return OK;      $r->print('</form>');
 }      return;
   
 # BEGIN Block  
 BEGIN {  
     # Get columns of MySQL metadata table  
     @columns=&Apache::lonmysql::col_order('metadata');  
 }  }
   
 1;  1;

Removed from v.1.65  
changed lines
  Added in v.1.69


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>