Diff for /loncom/interface/lonmeta.pm between versions 1.63 and 1.64

version 1.63, 2004/04/12 21:13:13 version 1.64, 2004/04/13 14:42:24
Line 44  use Apache::lonmsg; Line 44  use Apache::lonmsg;
   
 my @columns;  my @columns;
   
 # ----------------------------------------- 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);
     $url=~s/\.meta$//;      $url=~s/\.meta$//;
Line 61  sub dynamicmeta { Line 60  sub dynamicmeta {
     #      #
     # Deal with 'count' separately      # Deal with 'count' separately
     $Data{'count'} = &access_count($url,$aauthor,$adomain);      $Data{'count'} = &access_count($url,$aauthor,$adomain);
     # since "usage" is reserved word in MySQL ...  
   
     return %Data;      return %Data;
 }  }
   
Line 77  sub access_count { Line 74  sub access_count {
     }      }
 }  }
   
 # ------------------------------------- Try to make an alt tag if there is none  # Try to make an alt tag if there is none
   
 sub alttag {  sub alttag {
     my ($base,$src)=@_;      my ($base,$src)=@_;
     my $fullpath=&Apache::lonnet::hreflocation($base,$src);      my $fullpath=&Apache::lonnet::hreflocation($base,$src);
     my $alttag=&Apache::lonnet::metadata($fullpath,'title').' '.      my $alttag=&Apache::lonnet::metadata($fullpath,'title').' '.
                &Apache::lonnet::metadata($fullpath,'subject').' '.          &Apache::lonnet::metadata($fullpath,'subject').' '.
                &Apache::lonnet::metadata($fullpath,'abstract');          &Apache::lonnet::metadata($fullpath,'abstract');
     $alttag=~s/\s+/ /gs;      $alttag=~s/\s+/ /gs;
     $alttag=~s/\"//gs;      $alttag=~s/\"//gs;
     $alttag=~s/\'//gs;      $alttag=~s/\'//gs;
     $alttag=~s/\s+$//gs;      $alttag=~s/\s+$//gs;
     $alttag=~s/^\s+//gs;      $alttag=~s/^\s+//gs;
     if ($alttag) { return $alttag; } else       if ($alttag) { 
                  { return &mt('No information available'); }          return $alttag; 
       } else { 
           return &mt('No information available'); 
       }
 }  }
   
 # -------------------------------------------------------------- Author display  # Author display
   
 sub authordisplay {  sub authordisplay {
     my ($aname,$adom)=@_;      my ($aname,$adom)=@_;
     return &Apache::loncommon::aboutmewrapper(      return &Apache::loncommon::aboutmewrapper
                 &Apache::loncommon::plainname($aname,$adom),          (&Apache::loncommon::plainname($aname,$adom),
                     $aname,$adom,'preview').' <tt>['.$aname.'@'.$adom.']</tt>';           $aname,$adom,'preview').' <tt>['.$aname.'@'.$adom.']</tt>';
 }  }
   
 # -------------------------------------------------------------- Pretty display  # Pretty display
   
 sub evalgraph {  sub evalgraph {
     my $value=shift;      my $value=shift;
     unless ($value) { return ''; }      unless ($value) { return ''; }
Line 121  sub evalgraph { Line 118  sub evalgraph {
  $output.='<td width='.($val-20).' bgcolor="#33FF33">&nbsp;</td>'.   $output.='<td width='.($val-20).' bgcolor="#33FF33">&nbsp;</td>'.
                  '<td width='.(40-$val).' bgcolor="#555555">&nbsp;</td>';                   '<td width='.(40-$val).' bgcolor="#555555">&nbsp;</td>';
     } else {      } else {
        $output.='<td width=20 bgcolor="#555555">&nbsp&nbsp;</td>';          $output.='<td width=20 bgcolor="#555555">&nbsp&nbsp;</td>';
     }      }
     $output.='<td> ('.$value.') </td></tr></table>';      $output.='<td> ('.$value.') </td></tr></table>';
     return $output;      return $output;
Line 145  sub diffgraph { Line 142  sub diffgraph {
     return $output;      return $output;
 }  }
   
 # ==================================================== Turn MySQL row into hash  # Turn MySQL row into hash
   
 sub metadata_col_to_hash {  sub metadata_col_to_hash {
     my @cols=@_;      my @cols=@_;
     my %hash=();      my %hash=();
Line 156  sub metadata_col_to_hash { Line 152  sub metadata_col_to_hash {
     return %hash;      return %hash;
 }  }
   
 # ============================================================= The field names  # The field names
   
 sub fieldnames {  sub fieldnames {
     return &Apache::lonlocal::texthash(      return &Apache::lonlocal::texthash
    'title' => 'Title',          (
    'author' =>'Author(s)',           'title' => 'Title',
    'authorspace' => 'Author Space',           'author' =>'Author(s)',
    'modifyinguser' => 'Last Modifying User',           'authorspace' => 'Author Space',
    'subject' => 'Subject',           'modifyinguser' => 'Last Modifying User',
    'keywords' => 'Keyword(s)',           'subject' => 'Subject',
    'notes' => 'Notes',           'keywords' => 'Keyword(s)',
    'abstract' => 'Abstract',           'notes' => 'Notes',
                                    'lowestgradelevel' => 'Lowest Grade Level',           'abstract' => 'Abstract',
                                    'highestgradelevel' => 'Highest Grade Level',           'lowestgradelevel' => 'Lowest Grade Level',
                                    'standards' => 'Standards',           'highestgradelevel' => 'Highest Grade Level',
    'mime' => 'MIME Type',           'standards' => 'Standards',
    'language' => 'Language',           'mime' => 'MIME Type',
    'creationdate' => 'Creation Date',           'language' => 'Language',
    'lastrevisiondate' => 'Last Revision Date',           'creationdate' => 'Creation Date',
    'owner' => 'Publisher/Owner',           'lastrevisiondate' => 'Last Revision Date',
                                    'copyright' => 'Copyright/Distribution',           'owner' => 'Publisher/Owner',
    'customdistributionfile' => 'Custom Distribution File',           'copyright' => 'Copyright/Distribution',
                                    'obsolete' => 'Obsolete',           'customdistributionfile' => 'Custom Distribution File',
    'obsoletereplacement' => 'Suggested Replacement for Obsolete File',           'obsolete' => 'Obsolete',
    'count'      => 'Network-wide number of accesses (hits)',           'obsoletereplacement' => 'Suggested Replacement for Obsolete File',
    'course'     => 'Network-wide number of courses using resource',           'count'      => 'Network-wide number of accesses (hits)',
    'course_list' => 'Network-wide courses using resource',           'course'     => 'Network-wide number of courses using resource',
    'sequsage'      => 'Number of resources using or importing resource',           'course_list' => 'Network-wide courses using resource',
    'sequsage_list' => 'Resources using or importing resource',           'sequsage'      => 'Number of resources using or importing resource',
    'goto'       => 'Number of resources that follow this resource in maps',           'sequsage_list' => 'Resources using or importing resource',
    'goto_list'  => 'Resources that follow this resource in maps',           'goto'       => 'Number of resources that follow this resource in maps',
    'comefrom'   => 'Number of resources that lead up to this resource in maps',           'goto_list'  => 'Resources that follow this resource in maps',
    'comefrom_list' => 'Resources that lead up to this resource in maps',           'comefrom'   => 'Number of resources that lead up to this resource in maps',
    'clear'      => 'Material presented in clear way',           'comefrom_list' => 'Resources that lead up to this resource in maps',
    'depth'      => 'Material covered with sufficient depth',           'clear'      => 'Material presented in clear way',
    'helpful'    => 'Material is helpful',           'depth'      => 'Material covered with sufficient depth',
    'correct'    => 'Material appears to be correct',           'helpful'    => 'Material is helpful',
    'technical'  => 'Resource is technically correct',            'correct'    => 'Material appears to be correct',
    'avetries'   => 'Average number of tries till solved',           'technical'  => 'Resource is technically correct', 
    'stdno'      => 'Total number of students who have worked on this problem',           'avetries'   => 'Average number of tries till solved',
    'difficulty' => 'Degree of difficulty'           'stdno'      => 'Total number of students who have worked on this problem',
        );           'difficulty' => 'Degree of difficulty'
            );
 }  }
   
 # =========================================== Pretty printing of metadata field  # Pretty printing of metadata field
   
 sub prettyprint {  sub prettyprint {
     my ($type,$value)=@_;      my ($type,$value)=@_;
     unless (defined($value)) { return '&nbsp;'; }      unless (defined($value)) { return '&nbsp;'; }
 # Title      # Title
     if ($type eq 'title') {      if ($type eq 'title') {
  return '<font size="+1" face="arial">'.$value.'</font>';   return '<font size="+1" face="arial">'.$value.'</font>';
     }      }
 # Dates      # Dates
     if (($type eq 'creationdate') ||      if (($type eq 'creationdate') ||
  ($type eq 'lastrevisiondate')) {   ($type eq 'lastrevisiondate')) {
  return ($value?&Apache::lonlocal::locallocaltime(   return ($value?&Apache::lonlocal::locallocaltime(
   &Apache::lonmysql::unsqltime($value)):    &Apache::lonmysql::unsqltime($value)):
  &mt('not available'));   &mt('not available'));
     }      }
 # Language      # Language
     if ($type eq 'language') {      if ($type eq 'language') {
  return &Apache::loncommon::languagedescription($value);   return &Apache::loncommon::languagedescription($value);
     }      }
 # Copyright      # Copyright
     if ($type eq 'copyright') {      if ($type eq 'copyright') {
  return &Apache::loncommon::copyrightdescription($value);   return &Apache::loncommon::copyrightdescription($value);
     }      }
 # MIME      # MIME
     if ($type eq 'mime') {      if ($type eq 'mime') {
        return '<img src="'.&Apache::loncommon::icon($value).'" />&nbsp;'.          return '<img src="'.&Apache::loncommon::icon($value).'" />&nbsp;'.
    &Apache::loncommon::filedescription($value);              &Apache::loncommon::filedescription($value);
    }      }
 # Person      # Person
     if (($type eq 'author') ||       if (($type eq 'author') || 
  ($type eq 'owner') ||   ($type eq 'owner') ||
  ($type eq 'modifyinguser') ||   ($type eq 'modifyinguser') ||
Line 237  sub prettyprint { Line 233  sub prettyprint {
  $value=~s/(\w+)(\:|\@)(\w+)/&authordisplay($1,$3)/gse;   $value=~s/(\w+)(\:|\@)(\w+)/&authordisplay($1,$3)/gse;
  return $value;   return $value;
     }      }
 # Gradelevel      # Gradelevel
     if (($type eq 'lowestgradelevel') ||      if (($type eq 'lowestgradelevel') ||
  ($type eq 'highestgradelevel')) {   ($type eq 'highestgradelevel')) {
  return &Apache::loncommon::gradeleveldescription($value);   return &Apache::loncommon::gradeleveldescription($value);
     }      }
 # Only for advance users below      # Only for advance users below
     unless ($ENV{'user.adv'}) { return '<i>- '.&mt('not displayed').' -</i>' };      unless ($ENV{'user.adv'}) { return '<i>- '.&mt('not displayed').' -</i>' };
 # File      # File
     if (($type eq 'customdistributionfile') ||      if (($type eq 'customdistributionfile') ||
  ($type eq 'obsoletereplacement') ||   ($type eq 'obsoletereplacement') ||
  ($type eq 'goto_list') ||   ($type eq 'goto_list') ||
  ($type eq 'comefrom_list') ||   ($type eq 'comefrom_list') ||
  ($type eq 'sequsage_list')) {   ($type eq 'sequsage_list')) {
  return join('<br />',map {   return join('<br />',map {
        my $url=&Apache::lonnet::clutter($_);              my $url=&Apache::lonnet::clutter($_);
        '<b>'.&Apache::lonnet::gettitle($url).'</b>'.              '<b>'.&Apache::lonnet::gettitle($url).'</b>'.
        &Apache::lonhtmlcommon::crumbs($url,'preview','',undef,'+0');                  &Apache::lonhtmlcommon::crumbs($url,'preview','',undef,'+0');
     } split(/\s*\,\s*/,$value));          } split(/\s*\,\s*/,$value));
     }      }
 # Evaluations      # Evaluations
     if (($type eq 'clear') ||      if (($type eq 'clear') ||
  ($type eq 'depth') ||   ($type eq 'depth') ||
  ($type eq 'helpful') ||   ($type eq 'helpful') ||
Line 264  sub prettyprint { Line 260  sub prettyprint {
  ($type eq 'technical')) {   ($type eq 'technical')) {
  return &evalgraph($value);   return &evalgraph($value);
     }      }
 # Difficulty      # Difficulty
     if ($type eq 'difficulty') {      if ($type eq 'difficulty') {
  return &diffgraph($value);   return &diffgraph($value);
     }      }
 # List of courses      # List of courses
     if ($type=~/\_list/) {      if ($type=~/\_list/) {
  return join('<br />',map {   return join('<br />',map {
     my %courseinfo=&Apache::lonnet::coursedescription($_);        my %courseinfo=&Apache::lonnet::coursedescription($_);  
Line 277  sub prettyprint { Line 273  sub prettyprint {
  $courseinfo{'description'}.'</a>';   $courseinfo{'description'}.'</a>';
  } split(/\s*\,\s*/,$value));   } split(/\s*\,\s*/,$value));
     }      }
 # No pretty print found      # No pretty print found
     return $value;      return $value;
 }  }
 # ============================================== Pretty input of metadata field  
   
   # Pretty input of metadata field
 sub direct {  sub direct {
     return shift;      return shift;
 }  }
Line 312  sub relatedfield { Line 308  sub relatedfield {
 sub prettyinput {  sub prettyinput {
     my ($type,$value,$fieldname,$formname,      my ($type,$value,$fieldname,$formname,
  $relatedsearchflag,$relatedsep,$relatedvalue)=@_;   $relatedsearchflag,$relatedsep,$relatedvalue)=@_;
 # Language      # Language
     if ($type eq 'language') {      if ($type eq 'language') {
  return &selectbox($fieldname,   return &selectbox($fieldname,
   $value,    $value,
   \&Apache::loncommon::languagedescription,    \&Apache::loncommon::languagedescription,
   (&Apache::loncommon::languageids)).    (&Apache::loncommon::languageids)).
        &relatedfield(0,$relatedsearchflag,$relatedsep);                                &relatedfield(0,$relatedsearchflag,$relatedsep);
     }      }
 # Copyright      # Copyright
     if ($type eq 'copyright') {      if ($type eq 'copyright') {
  return &selectbox($fieldname,   return &selectbox($fieldname,
   $value,    $value,
   \&Apache::loncommon::copyrightdescription,    \&Apache::loncommon::copyrightdescription,
   (&Apache::loncommon::copyrightids)).    (&Apache::loncommon::copyrightids)).
        &relatedfield(0,$relatedsearchflag,$relatedsep);                                &relatedfield(0,$relatedsearchflag,$relatedsep);
     }      }
 # Gradelevels      # Gradelevels
     if (($type eq 'lowestgradelevel') ||      if (($type eq 'lowestgradelevel') ||
  ($type eq 'highestgradelevel')) {   ($type eq 'highestgradelevel')) {
  return &Apache::loncommon::select_level_form($value,$fieldname).   return &Apache::loncommon::select_level_form($value,$fieldname).
        &relatedfield(0,$relatedsearchflag,$relatedsep);              &relatedfield(0,$relatedsearchflag,$relatedsep);
     }      }
 # Obsolete      # Obsolete
     if ($type eq 'obsolete') {      if ($type eq 'obsolete') {
  return '<input type="checkbox" name="'.$fieldname.'"'.   return '<input type="checkbox" name="'.$fieldname.'"'.
     ($value?' checked="1"':'').' />'.      ($value?' checked="1"':'').' />'.
        &relatedfield(0,$relatedsearchflag,$relatedsep);               &relatedfield(0,$relatedsearchflag,$relatedsep); 
     }      }
 # Obsolete replacement file      # Obsolete replacement file
     if ($type eq 'obsoletereplacement') {      if ($type eq 'obsoletereplacement') {
  return '<input type="text" name="'.$fieldname.   return '<input type="text" name="'.$fieldname.
     '" size="60" value="'.$value.'" /><a href="javascript:openbrowser'.      '" size="60" value="'.$value.'" /><a href="javascript:openbrowser'.
     "('".$formname."','".$fieldname."'".      "('".$formname."','".$fieldname."'".
     ",'')\">".&mt('Select').'</a>'.      ",'')\">".&mt('Select').'</a>'.
        &relatedfield(0,$relatedsearchflag,$relatedsep);               &relatedfield(0,$relatedsearchflag,$relatedsep); 
    }      }
 # Customdistribution file      # Customdistribution file
     if ($type eq 'customdistributionfile') {      if ($type eq 'customdistributionfile') {
  return '<input type="text" name="'.$fieldname.   return '<input type="text" name="'.$fieldname.
     '" size="60" value="'.$value.'" /><a href="javascript:openbrowser'.      '" size="60" value="'.$value.'" /><a href="javascript:openbrowser'.
     "('".$formname."','".$fieldname."'".      "('".$formname."','".$fieldname."'".
     ",'rights')\">".&mt('Select').'</a>'.      ",'rights')\">".&mt('Select').'</a>'.
        &relatedfield(0,$relatedsearchflag,$relatedsep);               &relatedfield(0,$relatedsearchflag,$relatedsep); 
     }      }
 # Dates      # Dates
     if (($type eq 'creationdate') ||      if (($type eq 'creationdate') ||
  ($type eq 'lastrevisiondate')) {   ($type eq 'lastrevisiondate')) {
  return &Apache::lonhtmlcommon::date_setter($formname,   return 
    $fieldname,$value).              &Apache::lonhtmlcommon::date_setter($formname,$fieldname,$value).
        &relatedfield(0,$relatedsearchflag,$relatedsep);              &relatedfield(0,$relatedsearchflag,$relatedsep);
     }      }
 # No pretty input found      # No pretty input found
     $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/\"/\&quod\;/gs;
     return       return 
     '<input type="text" name="'.$fieldname.'" size="80" value="'.$value.'" />'.          '<input type="text" name="'.$fieldname.'" size="80" '.
     &relatedfield(1,$relatedsearchflag,$relatedsep,$fieldname,$relatedvalue);           'value="'.$value.'" />'.
           &relatedfield(1,$relatedsearchflag,$relatedsep,$fieldname,
                         $relatedvalue); 
 }  }
   
 # ================================================================ Main Handler  # Main Handler
   
 sub handler {  sub handler {
   my $r=shift;      my $r=shift;
       #
     my $loaderror=&Apache::lonnet::overloaderror($r);      my $loaderror=&Apache::lonnet::overloaderror($r);
     if ($loaderror) { return $loaderror; }      if ($loaderror) { return $loaderror; }
       #
   
     my $uri=$r->uri;      my $uri=$r->uri;
       #
 # ====================================================== Looking for all bombs?      # Looking for all bombs?
   if ($uri=~/\/adm\/bombs\/(.*)$/) {      if ($uri=~/\/adm\/bombs\/(.*)$/) {
 # ----------------------------------------------------------- Set document type          # Set document type
       $uri=&Apache::lonnet::declutter($1);          $uri=&Apache::lonnet::declutter($1);
       &Apache::loncommon::content_type($r,'text/html');          &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;          $r->send_http_header;
                 #
       return OK if $r->header_only;          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>');          $r->print('<h1>'.&Apache::lonnet::clutter($uri).'</h1>');
       my ($domain,$author)=($uri=~/^(\w+)\/(\w+)\//);          my ($domain,$author)=($uri=~/^(\w+)\/(\w+)\//);
       if (&Apache::loncacc::constructaccess('/~'.$author.'/',$domain)) {          if (&Apache::loncacc::constructaccess('/~'.$author.'/',$domain)) {
   my %brokenurls=&Apache::lonmsg::all_url_author_res_msg($author,$domain);              my %brokenurls=&Apache::lonmsg::all_url_author_res_msg($author,
   foreach (sort keys %brokenurls) {                                                                     $domain);
       if ($_=~/^\Q$uri\E/) {              foreach (sort keys %brokenurls) {
   $r->print(&Apache::lonhtmlcommon::crumbs(&Apache::lonnet::clutter($_)).                  if ($_=~/^\Q$uri\E/) {
     &Apache::lonmsg::retrieve_author_res_msg($_).'<hr />');                      $r->print(&Apache::lonhtmlcommon::crumbs
       }                                (&Apache::lonnet::clutter($_)).
   }                                &Apache::lonmsg::retrieve_author_res_msg($_).
       } else {                                '<hr />');
   $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)=          $r->print('</body></html>');
            (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);      } elsif ($uri!~/^\/\~/) { 
           # This is not in construction space
     $loaderror=          my ($resdomain,$resuser)=
        &Apache::lonnet::overloaderror($r,              (&Apache::lonnet::declutter($uri)=~/^(\w+)\/(\w+)\//);
          &Apache::lonnet::homeserver($resuser,$resdomain));          $loaderror=&Apache::lonnet::overloaderror
     if ($loaderror) { return $loaderror; }              ($r,
                &Apache::lonnet::homeserver($resuser,$resdomain));
   my %content=();          if ($loaderror) { return $loaderror; }
           #
 # ----------------------------------------------------------- Set document type          my %content=();
           # Set document type
   &Apache::loncommon::content_type($r,'text/html');          &Apache::loncommon::content_type($r,'text/html');
   $r->send_http_header;          $r->send_http_header;
           return OK if $r->header_only;
   return OK if $r->header_only;          # Read file
           foreach (split(/\,/,&Apache::lonnet::metadata($uri,'keys'))) {
 # ------------------------------------------------------------------- Read file              $content{$_}=&Apache::lonnet::metadata($uri,$_);
   foreach (split(/\,/,&Apache::lonnet::metadata($uri,'keys'))) {          }
       $content{$_}=&Apache::lonnet::metadata($uri,$_);          # Render Output
   }          # displayed url
 # --------------------------------------------------------------- Render Output          my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);
 # displayed url          $uri=~s/\.meta$//;
     my ($thisversion)=($uri=~/\.(\d+)\.(\w+)\.meta$/);          my $disuri=&Apache::lonnet::clutter($uri);
     $uri=~s/\.meta$//;          # version
     my $disuri=&Apache::lonnet::clutter($uri);          my $currentversion=&Apache::lonnet::getversion($disuri);
 # version          my $versiondisplay='';
     my $currentversion=&Apache::lonnet::getversion($disuri);          if ($thisversion) {
     my $versiondisplay='';              $versiondisplay=&mt('Version').': '.$thisversion.
     if ($thisversion) {                  ' ('.&mt('most recent version').': '.
  $versiondisplay=&mt('Version').': '.$thisversion.                  ($currentversion>0 ? 
     ' ('.&mt('most recent version').': '.                   $currentversion   :
     ($currentversion>0?$currentversion:&mt('information not available')).')';                   &mt('information not available')).')';
     } else {          } else {
  $versiondisplay='Version: '.$currentversion;              $versiondisplay='Version: '.$currentversion;
     }          }
 # crumbify displayed URL          # crumbify displayed URL
     $disuri=&Apache::lonhtmlcommon::crumbs($disuri);          $disuri=&Apache::lonhtmlcommon::crumbs($disuri);
 # obsolete          # obsolete
     my $obsolete=$content{'obsolete'};          my $obsolete=$content{'obsolete'};
     my $obsoletewarning='';          my $obsoletewarning='';
     if (($obsolete) && ($ENV{'user.adv'})) {          if (($obsolete) && ($ENV{'user.adv'})) {
  $obsoletewarning='<p><font color="red">'.              $obsoletewarning='<p><font color="red">'.
     &mt('This resource has been marked obsolete by the author(s)').'</font></p>';                  &mt('This resource has been marked obsolete by the author(s)').
     }                  '</font></p>';
           }
     my %lt=&fieldnames();          #
     my $table='';          my %lt=&fieldnames();
     my $bodytag=&Apache::loncommon::bodytag          my $table='';
           my $bodytag=&Apache::loncommon::bodytag
             ('Catalog Information','','','',$resdomain);              ('Catalog Information','','','',$resdomain);
     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>  <html><head><title>Catalog Information</title></head>
 $bodytag  $bodytag
 <h2>$content{'title'}</h2>  <h2>$content{'title'}</h2>
Line 494  $versiondisplay<br /> Line 491  $versiondisplay<br />
 $table  $table
 </table>  </table>
 ENDHEAD  ENDHEAD
   if ($ENV{'user.adv'}) {          if ($ENV{'user.adv'}) {
 # ------------------------------------------------------------ Dynamic Metadata              # Dynamic Metadata
       $r->print(              $r->print(
  '<h3>'.&mt('Dynamic Metadata').' ('.                        '<h3>'.&mt('Dynamic Metadata').' ('.
  &mt('updated periodically').')</h3>'.&mt('Processing').                        &mt('updated periodically').')</h3>'.&mt('Processing').
  ' ...<br />');                        ' ...<br />');
       $r->rflush();              $r->rflush();
       my %items=&fieldnames();              my %items=&fieldnames();
       my %dynmeta=&dynamicmeta($uri);              my %dynmeta=&dynamicmeta($uri);
 # General Access and Usage Statistics              # General Access and Usage Statistics
       $r->print('<h4>'.&mt('Access and Usage Statistics').'</h4><table cellspacing=2 border=0>');              $r->print('<h4>'.&mt('Access and Usage Statistics').'</h4>'.
       foreach ('count',                        '<table cellspacing=2 border=0>');
        'sequsage','sequsage_list',              foreach ('count',
        'comefrom','comefrom_list',                       'sequsage','sequsage_list',
        'goto','goto_list',                       'comefrom','comefrom_list',
        'course','course_list') {                       'goto','goto_list',
   $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td><td bgcolor="#CCCCCC">'.                       'course','course_list') {
     &prettyprint($_,$dynmeta{$_})."</td></tr>\n");                  $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
       }                            '<td bgcolor="#CCCCCC">'.
       $r->print('</table>');                            &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
       if ($uri=~/\.(problem|exam|quiz|assess|survey|form)\.meta$/) {              }
 # This is an assessment, print assessment data              $r->print('</table>');
   $r->print(              if ($uri=~/\.(problem|exam|quiz|assess|survey|form)\.meta$/) {
     '<h4>'.&mt('Assessment Statistical Data').'</h4><table cellspacing=2 border=0>');                  # This is an assessment, print assessment data
   foreach ('stdno','avetries','difficulty') {                  $r->print(
       $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td><td bgcolor="#CCCCCC">'.                            '<h4>'.&mt('Assessment Statistical Data').'</h4>'.
  &prettyprint($_,$dynmeta{$_})."</td></tr>\n");                            '<table cellspacing=2 border=0>');
   }                  foreach ('stdno','avetries','difficulty') {
   $r->print('</table>');                          $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
       }                                '<td bgcolor="#CCCCCC">'.
       $r->print('<h4>'.&mt('Evaluation Data').'</h4><table cellspacing=2 border=0>');                                &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
       foreach ('clear','depth','helpful','correct','technical') {                  }
   $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td><td bgcolor="#CCCCCC">'.                  $r->print('</table>');    
     &prettyprint($_,$dynmeta{$_})."</td></tr>\n");              }
      }                  $r->print('<h4>'.&mt('Evaluation Data').'</h4>'.
       $r->print('</table>');                        '<table cellspacing=2 border=0>');
       $uri=~/^\/res\/(\w+)\/(\w+)\//;               foreach ('clear','depth','helpful','correct','technical') {
       if ((($ENV{'user.domain'} eq $1) && ($ENV{'user.name'} eq $2))                  $r->print('<tr><td bgcolor="#AAAAAA">'.$lt{$_}.'</td>'.
   || ($ENV{'user.role.ca./'.$1.'/'.$2})) {                            '<td bgcolor="#CCCCCC">'.
   $r->print('<h4>'.&mt('Evaluation Comments').' ('.                            &prettyprint($_,$dynmeta{$_})."</td></tr>\n");
     &mt('visible to author and co-authors only').')</h4>'.              }
     '<blockquote>'.$dynmeta{'comments'}.'</blockquote>');              $r->print('</table>');
   $r->print('<a name="bombs" /><h4>'.&mt('Error Messages').' ('.              $uri=~/^\/res\/(\w+)\/(\w+)\//; 
     &mt('visible to author and co-authors only').')</h4>'.              if ((($ENV{'user.domain'} eq $1) && ($ENV{'user.name'} eq $2))
     &Apache::lonmsg::retrieve_author_res_msg($uri));                  || ($ENV{'user.role.ca./'.$1.'/'.$2})) {
       }                  $r->print('<h4>'.&mt('Evaluation Comments').' ('.
 # ------------------------------------------------------------- All other stuff                            &mt('visible to author and co-authors only').
       $r->print(                            ')</h4>'.
  '<h3>'.&mt('Additional Metadata (non-standard, parameters, exports)').'</h3>');                            '<blockquote>'.$dynmeta{'comments'}.'</blockquote>');
       foreach (sort keys %content) {                  $r->print('<a name="bombs" /><h4>'.&mt('Error Messages').' ('.
   my $name=$_;                            &mt('visible to author and co-authors only').')'.
   unless ($name=~/\.display$/) {                            '</h4>'.
       my $display=&Apache::lonnet::metadata($uri,$name.'.display');                            &Apache::lonmsg::retrieve_author_res_msg($uri));
       unless ($display) { $display=$name; };              }
       my $otherinfo='';              # All other stuff
       foreach ('name','part','type','default') {              $r->print('<h3>'.
   if (defined(&Apache::lonnet::metadata($uri,$name.'.'.$_))) {                  &mt('Additional Metadata (non-standard, parameters, exports)').
       $otherinfo.=' '.$_.'='.                        '</h3>');
   &Apache::lonnet::metadata($uri,$name.'.'.$_).'; ';              foreach (sort keys %content) {
   }                  my $name=$_;
       }                  unless ($name=~/\.display$/) {
       $r->print('<b>'.$display.':</b> '.$content{$name});                      my $display=&Apache::lonnet::metadata($uri,
       if ($otherinfo) {                                                            $name.'.display');
   $r->print(' ('.$otherinfo.')');                      unless ($display) { $display=$name; };
       }                      my $otherinfo='';
       $r->print("<br />\n");                      foreach ('name','part','type','default') {
   }                          if (defined(&Apache::lonnet::metadata($uri,
       }                                                                $name.'.'.$_))) {
   }                              $otherinfo.=' '.$_.'='.
 # ===================================================== End Resource Space Call                                  &Apache::lonnet::metadata($uri,
  } else {                                                            $name.'.'.$_).'; ';
 # ===================================================== Construction Space Call                          }
                       }
 # ----------------------------------------------------------- Set document type                      $r->print('<b>'.$display.':</b> '.$content{$name});
                       if ($otherinfo) {
   &Apache::loncommon::content_type($r,'text/html');                          $r->print(' ('.$otherinfo.')');
   $r->send_http_header;                      }
                       $r->print("<br />\n");
   return OK if $r->header_only;                  }
 # ---------------------------------------------------------------------- Header              }
   my $disuri=$uri;          }
   my $fn=&Apache::lonnet::filelocation('',$uri);          # End Resource Space Call
   $disuri=~s/^\/\~/\/priv\//;      } else {
   $disuri=~s/\.meta$//;          # Construction Space Call
   my $target=$uri;          # Set document type
   $target=~s/^\/\~/\/res\/$ENV{'request.role.domain'}\//;          &Apache::loncommon::content_type($r,'text/html');
   $target=~s/\.meta$//;          $r->send_http_header;
   my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);          #
   if ($bombs) {          return OK if $r->header_only;
       if ($ENV{'form.delmsg'}) {          # Header
   if (&Apache::lonmsg::del_url_author_res_msg($target) eq 'ok') {          my $disuri=$uri;
       $bombs=&mt('Messages deleted.');          my $fn=&Apache::lonnet::filelocation('',$uri);
   } else {          $disuri=~s/^\/\~/\/priv\//;
       $bombs=&mt('Error deleting messages');          $disuri=~s/\.meta$//;
   }          my $target=$uri;
       }          $target=~s/^\/\~/\/res\/$ENV{'request.role.domain'}\//;
       my $bodytag=&Apache::loncommon::bodytag('Error Messages');          $target=~s/\.meta$//;
       my $del=&mt('Delete Messages');          my $bombs=&Apache::lonmsg::retrieve_author_res_msg($target);
       $r->print(<<ENDBOMBS);          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');
               $r->print(<<ENDBOMBS);
 <html><head><title>Edit Catalog Information</title></head>  <html><head><title>Edit Catalog Information</title></head>
 $bodytag  $bodytag
 <h1>$disuri</h1>  <h1>$disuri</h1>
Line 603  $bodytag Line 610  $bodytag
 </body>  </body>
 </html>  </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=&mt('Default Cataloging Information for Directory').' '.                  $displayfile=
       $dir;                      &mt('Default Cataloging Information for Directory').' '.
       }                      $dir;
       my $bodytag=&Apache::loncommon::bodytag('Edit Catalog Information');              }
       %Apache::lonpublisher::metadatafields=();              my $bodytag=
       %Apache::lonpublisher::metadatakeys=();                  &Apache::loncommon::bodytag('Edit Catalog Information');
       &Apache::lonpublisher::metaeval(&Apache::lonnet::getfile($fn));              %Apache::lonpublisher::metadatafields=();
       $r->print(<<ENDEDIT);              %Apache::lonpublisher::metadatakeys=();
               &Apache::lonpublisher::metaeval(&Apache::lonnet::getfile($fn));
               $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','standards',                       'copyright','customdistributionfile','language',
        'lowestgradelevel','highestgradelevel',                       'standards',
        'obsolete','obsoletereplacement') {                       'lowestgradelevel','highestgradelevel',
   if (defined($ENV{'form.new_'.$_})) {                       'obsolete','obsoletereplacement') {
       $Apache::lonpublisher::metadatafields{$_}=$ENV{'form.new_'.$_};                  if (defined($ENV{'form.new_'.$_})) {
   }                      $Apache::lonpublisher::metadatafields{$_}=
   unless ($Apache::lonpublisher::metadatafields{'copyright'}) {                          $ENV{'form.new_'.$_};
       $Apache::lonpublisher::metadatafields{'copyright'}='default';                  }
   }                  unless ($Apache::lonpublisher::metadatafields{'copyright'}) {
   $r->print('<p>'.$lt{$_}.': '.&prettyinput($_,                      $Apache::lonpublisher::metadatafields{'copyright'}=
     $Apache::lonpublisher::metadatafields{$_},                          'default';
     'new_'.$_,'defaultmeta').'</p>');                  }
       }                  $r->print('<p>'.$lt{$_}.': '.
       if ($ENV{'form.store'}) {                            &prettyinput
   my $mfh;                            ($_,$Apache::lonpublisher::metadatafields{$_},
   unless ($mfh=Apache::File->new('>'.$fn)) {                             'new_'.$_,'defaultmeta').'</p>');
       $r->print(              }
  '<p><font color=red>'.&mt('Could not write metadata').', '.              if ($ENV{'form.store'}) {
  &mt('FAIL').'</font>');                  my $mfh;
   } else {                  unless ($mfh=Apache::File->new('>'.$fn)) {
       foreach (sort keys %Apache::lonpublisher::metadatafields) {                      $r->print('<p><font color=red>'.
   unless ($_=~/\./) {                                &mt('Could not write metadata').', '.
       my $unikey=$_;                                &mt('FAIL').'</font>');
       $unikey=~/^([A-Za-z]+)/;                  } else {
       my $tag=$1;                      foreach (sort keys %Apache::lonpublisher::metadatafields) {
       $tag=~tr/A-Z/a-z/;                          unless ($_=~/\./) {
       print $mfh "\n\<$tag";                              my $unikey=$_;
       foreach                               $unikey=~/^([A-Za-z]+)/;
   (split(/\,/,$Apache::lonpublisher::metadatakeys{$unikey})) {                              my $tag=$1;
       my $value=                              $tag=~tr/A-Z/a-z/;
   $Apache::lonpublisher::metadatafields{$unikey.'.'.$_};                              print $mfh "\n\<$tag";
       $value=~s/\"/\'\'/g;                              foreach (split(/\,/,
       print $mfh ' '.$_.'="'.$value.'"';                                   $Apache::lonpublisher::metadatakeys{$unikey})
   }                                       ) {
       print $mfh '>'.                                  my $value=
   &HTML::Entities::encode($Apache::lonpublisher::metadatafields{$unikey},'<>&"')                          $Apache::lonpublisher::metadatafields{$unikey.'.'.$_};
   .'</'.$tag.'>';                                  $value=~s/\"/\'\'/g;
   }                                  print $mfh ' '.$_.'="'.$value.'"';
       }                              }
       $r->print('<p>'.&mt('Wrote Metadata'));                              print $mfh '>'.
   }                                  &HTML::Entities::encode($Apache::lonpublisher::metadatafields{$unikey},'<>&"').
       }                                  '</'.$tag.'>';
       $r->print(                          }
  '<br /><input type="submit" name="store" value="'.                      }
  &mt('Store Catalog Information').'"></form></body></html>');                      $r->print('<p>'.&mt('Wrote Metadata'));
    }                  }
   }              }
   return OK;              $r->print('<br /><input type="submit" name="store" value="'.
                         &mt('Store Catalog Information').'"></form>'.
                         '</body></html>');
           }
       }
       return OK;
 }  }
   
 # ================================================================= BEGIN Block  # BEGIN Block
 BEGIN {  BEGIN {
 # Get columns of MySQL metadata table      # Get columns of MySQL metadata table
     @columns=&Apache::lonmysql::col_order('metadata');      @columns=&Apache::lonmysql::col_order('metadata');
 }  }
   
 1;  1;
 __END__  __END__
   
   
   
   
   
   
   

Removed from v.1.63  
changed lines
  Added in v.1.64


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