Diff for /loncom/interface/lonmeta.pm between versions 1.112 and 1.143

version 1.112, 2005/10/14 16:34:17 version 1.143, 2005/12/19 21:13:45
Line 238  sub diffgraph { Line 238  sub diffgraph {
 sub fieldnames {  sub fieldnames {
     my $file_type=shift;      my $file_type=shift;
     my %fields =       my %fields = 
         ('metadata.title' => 'Title',          ('title' => 'Title',
          'metadata.author' =>'Author(s)',           'author' =>'Author(s)',
          'metadata.authorspace' => 'Author Space',           'authorspace' => 'Author Space',
          'metadata.modifyinguser' => 'Last Modifying User',           'modifyinguser' => 'Last Modifying User',
          'metadata.subject' => 'Subject',           'subject' => 'Subject',
          'metadata.keywords' => 'Keyword(s)',           'standards' => 'Standards',
          'metadata.notes' => 'Notes',           'keywords' => 'Keyword(s)',
          'metadata.abstract' => 'Abstract',           'notes' => 'Notes',
          'metadata.lowestgradelevel' => 'Lowest Grade Level',           'abstract' => 'Abstract',
          'metadata.highestgradelevel' => 'Highest Grade Level');           'lowestgradelevel' => 'Lowest Grade Level',
            'highestgradelevel' => 'Highest Grade Level',
            'courserestricted' => 'Course Restricting Metadata');
            
     if (! defined($file_type) || $file_type ne 'portfolio') {      if (! defined($file_type) || $file_type ne 'portfolio') {
         %fields =           %fields = 
         (%fields,          (%fields,
          'domain' => 'Domain',           'domain' => 'Domain',
          'standards' => 'Standards',  
          'mime' => 'MIME Type',           'mime' => 'MIME Type',
          'language' => 'Language',           'language' => 'Language',
          'creationdate' => 'Creation Date',           'creationdate' => 'Creation Date',
Line 282  sub fieldnames { Line 284  sub fieldnames {
          'stdno'      => 'Total number of students who have worked on this problem',           'stdno'      => 'Total number of students who have worked on this problem',
          'difficulty' => 'Degree of difficulty',           'difficulty' => 'Degree of difficulty',
          'disc'       => 'Degree of discrimination',           'disc'       => 'Degree of discrimination',
  'dependencies' => 'Resources used by this resource',       'dependencies' => 'Resources used by this resource',
          );           );
     }      }
     return &Apache::lonlocal::texthash(%fields);      return &Apache::lonlocal::texthash(%fields);
 }  }
   
   sub portfolio_display_uri {
       my ($uri)=@_;
       $uri =~ s|.*/portfolio(/.*)$|$1|;
       my ($res_uri,$meta_uri) = ($uri,$uri);
   
       if ($uri =~ /\.meta$/) {
    $res_uri =~ s/\.meta//;
       } else {
    $meta_uri .= '.meta';
       }
       return ($res_uri,$meta_uri);
   }
   
   sub pre_select_course {
       my ($r,$uri) = @_;
       my $output;
       my $fn=&Apache::lonnet::filelocation('',$uri);
       my ($res_uri,$meta_uri) = &portfolio_display_uri($uri);
       %Apache::lonpublisher::metadatafields=();
       %Apache::lonpublisher::metadatakeys=();
       my $result=&Apache::lonnet::getfile($fn);
       if ($result == -1){
           $r->print(&mt('Creating new file [_1]'),$meta_uri);
       } else {
           &Apache::lonpublisher::metaeval($result);
       }
       $r->print('<hr /><form method="post" action="" >');
       $r->print('<p>'.&mt('If you would like to associate this resource ([_1]) with a current or previous course, please select one from the list below, otherwise select, \'None\'','<tt>'.$res_uri.'</tt>').'</p>');
       $output = &select_course();
       $r->print($output.'<br /><input type="submit" name="store" value="'.
                     &mt('Associate Resource With Selected Course').'">');
       $r->print('</form>');
       return;
   }
 sub select_course {  sub select_course {
     my ($r)=@_;      my %courses;
     my @courses;      my $output;
       my $selected;
     foreach my $key (keys (%env)) {       foreach my $key (keys (%env)) { 
                   if ($key =~ m/\.metadata\./) {
         if ($key =~ m/^(course\..+)\.metadata\..+\.options/) {              $key =~ m/^course\.(.+)(\.metadata.+$)/;
             my $course_key = $1;              my $course = $1;
             $course_key .= '.description';              my $coursekey = 'course.'.$course.'.description';
             $r->print($env{$course_key}.' of '.$course_key.'<br />');              my $value = $env{$coursekey};
             push @courses, $key;              $courses{$coursekey} = $value;
         }          }
     }      }
     foreach (@courses) {      &Apache::lonnet::logthis('the restricted is'.$Apache::lonpublisher::metadatafields{'courserestricted'});
         $r->print($_.' was found<br />');  
     }  
     $r->print('<h3>Portfolio Meta-Data</h3><br />');  
     $r->print('<form action="" method="post">');  
     $r->print('Select your test course<br />');  
     $r->print('<select name="metacourse" >');  
     my $meta_not_found = 1;      my $meta_not_found = 1;
     foreach my $key (keys (%env)) {          if ($Apache::lonpublisher::metadatafields{'courserestricted'} eq 'none') {
                   $selected = ' SELECTED ';
         if ($key =~ /\.metadata\./) {      } else {
             if ($meta_not_found) {          $selected = '';
                 undef($meta_not_found);  
                 $r->print('<h3>Portfolio Meta-Data</h3><br />');  
                 $r->print('<form action="" method="post">');  
                 $r->print('Select your course<br />');  
                 $r->print('<select name="metacourse" >');  
             }  
             my $course_key = $key;  
             $course_key =~ s/\.metadata\..*//;  
             $r->print('<option value="'.$course_key.'">');  
             $r->print($env{$course_key.'.description'});  
             $r->print('</option>');  
         }  
     }  
     unless ($meta_not_found) {  
         $r->print('</select><br />');  
         $r->print('<input type="submit" value="Assign Portfolio Metadata" />');  
         $r->print('</form>');  
     }      }
     return 'ok';      $output .= '<select name="new_courserestricted" >';
       $output .= '<option value="none" '.$selected.'>None</option>';
       foreach my $key (keys (%courses)) {    
           $key =~ m/(^.+)\.description$/;
           if ($Apache::lonpublisher::metadatafields{'courserestricted'} eq $1) {
               $selected = ' SELECTED ';
           } else {
               $selected = '';
           }
           $output .= '<option value="'.$1.'"'.$selected.'>';
           $output .= $courses{$key};
           $output .= '</option>';
       }
       $output .= '</select><br />';
       return ($output);
 }  }
 # Pretty printing of metadata field  # Pretty printing of metadata field
   
Line 484  sub relatedfield { Line 512  sub relatedfield {
   
 sub prettyinput {  sub prettyinput {
     my ($type,$value,$fieldname,$formname,      my ($type,$value,$fieldname,$formname,
  $relatedsearchflag,$relatedsep,$relatedvalue,$size)=@_;   $relatedsearchflag,$relatedsep,$relatedvalue,$size,$course_key)=@_;
     if (! defined($size)) {      if (! defined($size)) {
         $size = 80;          $size = 80;
     }      }
       my $output;
       if (defined($course_key)) {
           my $stu_add;
           my $only_one;
           my %meta_options;
           my @cur_values_inst;
           my $cur_values_stu;
           my $values = $env{$course_key.'.metadata.'.$type.'.values'};
           if ($env{$course_key.'.metadata.'.$type.'.options'} =~ m/stuadd/) {
               $stu_add = 'true';
           }
           if ($env{$course_key.'.metadata.'.$type.'.options'} =~ m/onlyone/) {
               $only_one = 'true';
           }
           # need to take instructor values out of list where instructor and student
           # values may be mixed.
           if ($values) {
               foreach my $item (split(/,/,$values)) {
                   $item =~ s/^\s+//;
                   $meta_options{$item} = $item;
               }
               foreach my $item (split(/,/,$value)) {
                   $item =~ s/^\s+//;
                   if ($meta_options{$item}) {
                       push(@cur_values_inst,$item);
                   } else {
                       $cur_values_stu .= $item.',';
                   }
               }
           } else {
               $cur_values_stu = $value;
           }
           if ($type eq 'courserestricted') {
               return (&select_course());
               # return ('<input type="hidden" name="new_courserestricted" value="'.$course_key.'" />');
           }
           if (($type eq 'keywords') || ($type eq 'subject')
                || ($type eq 'author')||($type eq  'notes')
                || ($type eq  'abstract')|| ($type eq  'title')|| ($type eq  'standards')) {
               if ($values) {
                   if ($only_one) {
                       $output .= (&Apache::loncommon::select_form($cur_values_inst[0],'new_'.$type,%meta_options));
                   } else {
                       $output .= (&Apache::loncommon::multiple_select_form('new_'.$type,\@cur_values_inst,undef,\%meta_options));
                   }
               }
               if ($stu_add) {
                   $output .= '<input type="text" name="'.$fieldname.'" size="'.$size.'" '.
                   'value="'.$cur_values_stu.'" />'.
                   &relatedfield(1,$relatedsearchflag,$relatedsep,$fieldname,
                         $relatedvalue); 
               }
               return ($output);
           }
           if (($type eq 'lowestgradelevel') ||
       ($type eq 'highestgradelevel')) {
       return &Apache::loncommon::select_level_form($value,$fieldname).
               &relatedfield(0,$relatedsearchflag,$relatedsep); 
           }
           return(); 
       }
     # Language      # Language
     if ($type eq 'language') {      if ($type eq 'language') {
  return &selectbox($fieldname,   return &selectbox($fieldname,
Line 548  sub prettyinput { Line 637  sub prettyinput {
     ",'rights')\">".&mt('Select').'</a>'.      ",'rights')\">".&mt('Select').'</a>'.
             &relatedfield(0,$relatedsearchflag,$relatedsep);               &relatedfield(0,$relatedsearchflag,$relatedsep); 
     }      }
       if ($type eq 'courserestricted') {
           return (&select_course());
           #return ('<input type="hidden" name="new_courserestricted" value="'.$course_key.'" />');
       }
   
     # Dates      # Dates
     if (($type eq 'creationdate') ||      if (($type eq 'creationdate') ||
  ($type eq 'lastrevisiondate')) {   ($type eq 'lastrevisiondate')) {
Line 589  sub handler { Line 683  sub handler {
         # Looking for all bombs?          # Looking for all bombs?
         &report_bombs($r,$uri);          &report_bombs($r,$uri);
     } elsif ($uri=~/\/portfolio\//) {      } elsif ($uri=~/\/portfolio\//) {
  ($resdomain,$resuser)=      ($resdomain,$resuser)=
     (&Apache::lonnet::declutter($uri)=~m|^(\w+)/(\w+)/portfolio|);      (&Apache::lonnet::declutter($uri)=~m|^(\w+)/(\w+)/portfolio|);
         $r->print(&Apache::loncommon::bodytag          $r->print(&Apache::loncommon::bodytag
           ('Edit Portfolio File Information','','','',$resdomain));            ('Edit Portfolio File Information','','','',$resdomain));
         &present_editable_metadata($r,$uri,'portfolio');          if ($env{'form.store'}) {
         &select_course($r);              &present_editable_metadata($r,$uri,'portfolio');
           } else {
               &pre_select_course($r,$uri);
           }
     } elsif ($uri=~/^\/\~/) {       } elsif ($uri=~/^\/\~/) { 
         # Construction space          # Construction space
         $r->print(&Apache::loncommon::bodytag          $r->print(&Apache::loncommon::bodytag
Line 946  sub present_editable_metadata { Line 1043  sub present_editable_metadata {
     my $fn=&Apache::lonnet::filelocation('',$uri);      my $fn=&Apache::lonnet::filelocation('',$uri);
     $disuri=~s/^\/\~/\/priv\//;      $disuri=~s/^\/\~/\/priv\//;
     $disuri=~s/\.meta$//;      $disuri=~s/\.meta$//;
     $disuri=~s|^/editupload||;      my $meta_uri = $disuri;
       if ($disuri =~ m|/portfolio/|) {
    ($disuri, $meta_uri) =  &portfolio_display_uri($disuri);
       }
     my $target=$uri;      my $target=$uri;
     $target=~s/^\/\~/\/res\/$env{'request.role.domain'}\//;      $target=~s/^\/\~/\/res\/$env{'request.role.domain'}\//;
     $target=~s/\.meta$//;      $target=~s/\.meta$//;
Line 1000  ENDDEL Line 1100  ENDDEL
         %Apache::lonpublisher::metadatakeys=();          %Apache::lonpublisher::metadatakeys=();
         my $result=&Apache::lonnet::getfile($fn);          my $result=&Apache::lonnet::getfile($fn);
         if ($result == -1){          if ($result == -1){
             $r->print('Creating new '.$disuri);      $r->print(&mt('Creating new file [_1]'),$meta_uri);
         } else {          } else {
             &Apache::lonpublisher::metaeval($result);              &Apache::lonpublisher::metaeval($result);
         }          }
Line 1015  ENDEDIT Line 1115  ENDEDIT
  my $output;   my $output;
  my @fields;   my @fields;
  if ($file_type eq 'portfolio') {   if ($file_type eq 'portfolio') {
     @fields =  ('author','metadata.title','metadata.subject','metadata.keywords','abstract','notes','lowestgradelevel',      @fields =  ('author','title','subject','keywords','abstract','notes','lowestgradelevel',
                 'highestgradelevel');                  'highestgradelevel','standards');
  } else {   } else {
     @fields = ('author','title','subject','keywords','abstract','notes',      @fields = ('author','title','subject','keywords','abstract','notes',
                  'copyright','customdistributionfile','language',                   'copyright','customdistributionfile','language',
Line 1024  ENDEDIT Line 1124  ENDEDIT
                  'lowestgradelevel','highestgradelevel','sourceavail','sourcerights',                   'lowestgradelevel','highestgradelevel','sourceavail','sourcerights',
                  'obsolete','obsoletereplacement');                   'obsolete','obsoletereplacement');
         }          }
         foreach (@fields) {          if ((! $Apache::lonpublisher::metadatafields{'courserestricted'}) &&
             if (defined($env{'form.new_'.$_})) {                  (! $env{'form.new_courserestricted'})) {
                 $Apache::lonpublisher::metadatafields{$_}=              $Apache::lonpublisher::metadatafields{'courserestricted'}=
                     $env{'form.new_'.$_};                  'none';
             }          } elsif ($env{'form.new_courserestricted'}) {
             if (! $Apache::lonpublisher::metadatafields{'copyright'}) {              $Apache::lonpublisher::metadatafields{'courserestricted'}=
                   $env{'form.new_courserestricted'}; 
           }           
           if (! $Apache::lonpublisher::metadatafields{'copyright'}) {
                 $Apache::lonpublisher::metadatafields{'copyright'}=                  $Apache::lonpublisher::metadatafields{'copyright'}=
                     'default';                  'default';
             }  
             $output.=('<p>'.$lt{$_}.': '.  
                       &prettyinput($_,  
    $Apache::lonpublisher::metadatafields{$_},  
    'new_'.$_,'defaultmeta').'</p>');  
             if ($env{'form.metacourse'}) {  
                 $r->print('This is the instructor metadata area<br />');  
                 # have to find all the metadata items, so we'll loop through and find them  
                 $r->print('<form method="post" action="" size="3" >');  
                 $r->print('The course is: '.$env{'form.metacourse'}.'<br>');  
                 foreach my $key (sort keys %env) {  
                     if ($key=~m/^($env{'form.metacourse'}\.metadata\.)(\d+)\.title/) {  
                         my $key_base = $1;  
                         my $item_num = $2;  
                         # found one, so let's display it  
                         my $title = $env{$key_base.$item_num.'.title'};  
                         my $type = $env{$key_base.$item_num.'.type'};  
                         my @choices = sort(split /, /,$env{$key_base.$item_num.'.values'});  
                         $r->print($title.'<br />');  
                         $r->print($type.'<br />');  
               
             foreach my $word (@choices) {  
                 my $checked;  
                 if ($Apache::lonpublisher::metadatafields{'coursekeyword'}=~ m/$word/) {  
                     $checked = 1;  
                 } else {  
                     undef($checked);  
                 }  
                 $r->print(&Apache::lonhtmlcommon::checkbox('instmeta_'.$env{'form.metacourse'}.'_'.$item_num,$checked,$word).$word.'<br />');  
             }  
         }          }
     }             if ($Apache::lonpublisher::metadatafields{'courserestricted'} ne 'none') {
     $r->print('<br /><input type="submit" name="store" value="Assign Meta-data" />');              $r->print(&mt('Associated with course [_1]','<strong>'.$env{$Apache::lonpublisher::metadatafields{'courserestricted'}.".description"}.
     $r->print('</form>');                          '</strong>').'<br />');
     return 'ok';          } else {
             }              $r->print("This resource is not associated with a course.<br />");
         }          }
         if ($env{'form.store'}) {          foreach my $field_name (@fields) {
             my $mfh;  
             my $formname='store';               if (defined($env{'form.new_'.$field_name})) {
             my $file_content;                  $Apache::lonpublisher::metadatafields{$field_name}=
             foreach my $meta_field (keys %env) {                      join(',',&Apache::loncommon::get_env_multiple('form.new_'.$field_name));
                 if ($meta_field=~m/^form.instmeta_(.+)_(\d+)$/) {              }
                     $r->print('Found a field<br>');              if ($Apache::lonpublisher::metadatafields{'courserestricted'} ne 'none') {
                 }                  # handle restrictions here
                 if (&Apache::loncommon::get_env_multiple('form.keywords')) {                  if (($env{$Apache::lonpublisher::metadatafields{'courserestricted'}.'.metadata.'.$field_name.'.options'} =~ m/active/) ||
                 $Apache::lonpublisher::metadatafields{'coursekeyword'} =                       ($field_name eq 'courserestricted')){
                         join (', ', &Apache::loncommon::get_env_multiple('form.keywords'));                      $output.=("\n".'<p>'.$lt{$field_name}.': '.
                 }                                &prettyinput($field_name,
             }     $Apache::lonpublisher::metadatafields{$field_name},
             foreach (sort keys %Apache::lonpublisher::metadatafields) {                      'new_'.$field_name,'defaultmeta',
                 next if ($_ =~ /\./);                      undef,undef,undef,undef,
                 my $unikey=$_;                      $Apache::lonpublisher::metadatafields{'courserestricted'}).'</p>'."\n");
                 $unikey=~/^([A-Za-z]+)/;                   }
                 my $tag=$1;  
                 $tag=~tr/A-Z/a-z/;  
                 $file_content.= "\n\<$tag";  
                 foreach (split(/\,/,  
                              $Apache::lonpublisher::metadatakeys{$unikey})  
                          ) {  
                     my $value=  
                      $Apache::lonpublisher::metadatafields{$unikey.'.'.$_};  
                     $value=~s/\"/\'\'/g;  
                     $file_content.=' '.$_.'="'.$value.'"' ;  
                     # print $mfh ' '.$_.'="'.$value.'"';  
                 }  
                 $file_content.= '>'.  
                     &HTML::Entities::encode  
                     ($Apache::lonpublisher::metadatafields{$unikey},  
                      '<>&"').  
                      '</'.$tag.'>';  
             }  
             if ($fn =~ /\/portfolio\//) {  
                 $fn =~ /\/portfolio\/(.*)$/;  
                 my $new_fn = '/'.$1;  
                 $env{'form.'.$formname}=$file_content;  
                 $env{'form.'.$formname.'.filename'}=$new_fn;  
                 &Apache::lonnet::userfileupload('uploaddoc','',  
          'portfolio'.$env{'form.currentpath'});  
         my $status =&Apache::lonnet::userfileupload($formname,'','portfolio');  
                 if (&Apache::lonnet::userfileupload($formname,'','portfolio') eq 'error: no uploaded file') {  
                     $r->print('<p><font color="red">'.  
                       &mt('Could not write metadata').', '.  
                      &mt('FAIL').'</font></p>');  
                 } else {  
                     $r->print('<p><font color="blue">'.&mt('Wrote Metadata').  
   ' '.&Apache::lonlocal::locallocaltime(time).  
   '</font></p>');  
                 }  
             } else {              } else {
                 if (!  ($mfh=Apache::File->new('>'.$fn))) {  
                     $r->print('<p><font color="red">'.                      $output.=('<p>'.$lt{$field_name}.': '.
                         &mt('Could not write metadata').', '.                              &prettyinput($field_name,
                         &mt('FAIL').'</font></p>');     $Apache::lonpublisher::metadatafields{$field_name},
                 } else {     'new_'.$field_name,'defaultmeta').'</p>');
                     print $mfh $file_content;                 
               }
           }
    if ($env{'form.store'}) {
       my $mfh;
       my $formname='store'; 
       my $file_content;
       if (&Apache::loncommon::get_env_multiple('form.new_keywords')) {
    $Apache::lonpublisher::metadatafields{'keywords'} = 
       join (',', &Apache::loncommon::get_env_multiple('form.new_keywords'));
       }
   
       foreach (sort keys %Apache::lonpublisher::metadatafields) {
    next if ($_ =~ /\./);
    my $unikey=$_;
    $unikey=~/^([A-Za-z]+)/;
    my $tag=$1;
    $tag=~tr/A-Z/a-z/;
    $file_content.= "\n\<$tag";
    foreach (split(/\,/,
          $Apache::lonpublisher::metadatakeys{$unikey})
    ) {
       my $value=
    $Apache::lonpublisher::metadatafields{$unikey.'.'.$_};
       $value=~s/\"/\'\'/g;
       $file_content.=' '.$_.'="'.$value.'"' ;
       # print $mfh ' '.$_.'="'.$value.'"';
    }
    $file_content.= '>'.
       &HTML::Entities::encode
       ($Apache::lonpublisher::metadatafields{$unikey},
        '<>&"').
        '</'.$tag.'>';
       }
       &Apache::lonnet::logthis(" file ".$file_content);
       if ($fn =~ m|/portfolio/|) {
    my ($path, $new_fn) = ($fn =~ m|/(portfolio.*)/([^/]*)$|);
    $env{'form.'.$formname}=$file_content."\n";
    $env{'form.'.$formname.'.filename'}=$new_fn;
    my $result =&Apache::lonnet::userfileupload($formname,'',
       $path);
   
    if ($result =~ /(error|notfound)/) {
       $r->print('<p><font color="red">'.
         &mt('Could not write metadata').', '.
         &mt('FAIL').'</font></p>');
    } else {
     $r->print('<p><font color="blue">'.&mt('Wrote Metadata').      $r->print('<p><font color="blue">'.&mt('Wrote Metadata').
       ' '.&Apache::lonlocal::locallocaltime(time).        ' '.&Apache::lonlocal::locallocaltime(time).
       '</font></p>');        '</font></p>');
                 }   }
             }      } else {
         }   if (!  ($mfh=Apache::File->new('>'.$fn))) {
       $r->print('<p><font color="red">'.
         &mt('Could not write metadata').', '.
         &mt('FAIL').'</font></p>');
    } else {
       print $mfh $file_content;
       $r->print('<p><font color="blue">'.&mt('Wrote Metadata').
         ' '.&Apache::lonlocal::locallocaltime(time).
         '</font></p>');
    }
       }
    }
   
  $r->print($output.'<br /><input type="submit" name="store" value="'.   $r->print($output.'<br /><input type="submit" name="store" value="'.
                   &mt('Store Catalog Information').'">');                    &mt('Store Catalog Information').'">');
           
     }      }
     $r->print('</form>');      $r->print('</form>');
   
     return;      return;
 }  }
   

Removed from v.1.112  
changed lines
  Added in v.1.143


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.