Diff for /loncom/homework/essayresponse.pm between versions 1.31 and 1.52

version 1.31, 2003/04/21 20:59:02 version 1.52, 2004/12/06 18:09:54
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # 4/3 Guy  
 # July, 2002, H. K. Ng  
 #  
 package Apache::essayresponse;  package Apache::essayresponse;
 use strict;  use strict;
 use Apache::lonxml;  use Apache::lonxml();
 use Apache::lonnet;  use Apache::lonnet();
   use Apache::lonlocal;
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::essayresponse',('essayresponse'));      &Apache::lonxml::register('Apache::essayresponse',('essayresponse'));
Line 45  sub start_essayresponse { Line 44  sub start_essayresponse {
  $result=&Apache::response::meta_package_write('essayresponse');   $result=&Apache::response::meta_package_write('essayresponse');
     } elsif ($target eq 'web') {      } elsif ($target eq 'web') {
  my $part= $Apache::inputtags::part;   my $part= $Apache::inputtags::part;
   
  my $ncol= &Apache::lonnet::EXT("resource.$part".'_'."$id.maxcollaborators");   my $ncol= &Apache::lonnet::EXT("resource.$part".'_'."$id.maxcollaborators");
  my $coll= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"});   my $coll= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');
  my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");   my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");
         $uploadedfiletypes=~s/[^\w\,]//g;          $uploadedfiletypes=~s/[^\w\,]//g;
  my $uploadedfile= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.uploadedfile"});   my $uploadedfile= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.uploadedfile"},'<>&"');
  $result='<br /><table border="1">';   $result='<br /><table border="1">';
  $result.='<tr><td>'.   $result.='<tr><td>'.
     '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="yes" checked>'.      '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="yes" checked="checked" /> '.
     ' Submit entries below as answer to receive credit <br />'.      &mt('Submit entries below as answer to receive credit').' <br />'.
     '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="no">'.      '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="no" /> '.
     ' Save entries below as a draft answer (not submitting them for credit yet) '.      &mt('Save entries below as a draft answer (not submitting them for credit yet)').
     '</td></tr>';      ' </td></tr>';
  if ($ncol > 0) {   if ($ncol > 0) {
     $result .='<tr><td>'.      $result .='<tr><td>'.
  'Collaborators: <input type="text" size="70" max="80" name="HWCOL'.   'Collaborators: <input type="text" size="70" max="80" name="HWCOL'.
  $part.'_'.$id.'" value="'.$coll.'" /><br />'.   $part.'_'.$id.'" value="'.$coll.'" /><br />'.
  '(Enter maximum '.$ncol.' collaborators using username or username@domain, e.g. '.   &mt('(Enter maximum [_1] collaborators using username or username@domain, e.g. smithje or smithje@[_2].)',$ncol,$ENV{'user.domain'}).'<br />';
  'smithje or smithje@'.$ENV{'user.domain'}.'.)<br />';  
     $result .= &check_collaborators($ncol,$coll) if ($coll =~ /\w+/);      $result .= &check_collaborators($ncol,$coll) if ($coll =~ /\w+/);
     $result .='</td></tr>';      $result .='</td></tr>';
  }   }
         if ($uploadedfiletypes) {          if ($uploadedfiletypes) {
            $result.=      $result.='<tr><td>'.&mt('Submit a file:').
 '<tr><td>Submit a file: <input type="file" size="50" name="HWFILE'.   ' <br /><input type="file" size="50" name="HWFILE'.
  $part.'_'.$id.'" onFocus="this.form.enctype='.   $part.'_'.$id.'" onFocus="this.form.enctype='.
 "'multipart/form-data'".';" /><br />Allowed filetypes: <b>'.$uploadedfiletypes.'</b><br />';   "'multipart/form-data'".';" /><br />'.
            if ($uploadedfile) {   &mt('Allowed filetypes: <b>[_1]</b>',$uploadedfiletypes).'<br />'.
        $result.='Currently submitted: <tt><a href="'.                  '<strong>OR:</strong><br /><a href='."'".'javascript:void(window.open("/adm/portfolio?mode=selectfile&amp;fieldname=HWPORT'.$part.'_'.$id.'","cat","height=600,'.
                 &Apache::lonnet::tokenwrapper($Apache::lonhomework::history{"resource.$part.$id.uploadedurl"}).'"><img src="/adm/lonIcons/unknown.gif" border=0"> '.$uploadedfile.'</a></tt>';                  'width=600,scrollbars=1,resizable=1,menubar=2,location=1"))'."'".'>Select Portfolio Files</a>'.
                   '<br />'.
                   '<input type="text" size="50" name="HWPORT'.$part.'_'.$id.'" value="" />'.
    '<br />';
       if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"}=~/[^\s]/){
           $result.="Portfolio files previously selected: <strong>".&Apache::lonnet::unescape($Apache::lonhomework::history{"resource.$part.$id.portfiles"})."</strong><br />";
       }
   
               if ($uploadedfile) {
          my $url=$Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};
          push (@Apache::lonxml::extlinks,$url);
          &Apache::lonnet::allowuploaded('/adm/essayresponse',$url);
          my $curfile='<a href="'.$url.
      '"><img src="/adm/lonIcons/unknown.gif" border=0" /> '.
      $uploadedfile.'</a>';
          $result.=&mt('Currently submitted: <tt>[_1]</tt>',$curfile);
            } else {             } else {
               $result.='(Hand in a file you have prepared on your computer)';                $result.=&mt('(Hand in a file you have prepared on your computer)');
            }             }
            $result.='</td></tr>';              $result.='</td></tr>'; 
         }          }
Line 94  sub end_essayresponse { Line 106  sub end_essayresponse {
     if ( $target eq 'grade' ) {      if ( $target eq 'grade' ) {
  my $collaborators = $ENV{'form.HWCOL'.$part.'_'.$id};   my $collaborators = $ENV{'form.HWCOL'.$part.'_'.$id};
  if ($collaborators =~ /[^\s]/) {   if ($collaborators =~ /[^\s]/) {
     my $previous_list= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"});      my $previous_list= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"');
     $Apache::lonhomework::results{"resource.$part.$id.collaborators"}=$collaborators      $Apache::lonhomework::results{"resource.$part.$id.collaborators"}=$collaborators
  if ($collaborators ne $previous_list);   if ($collaborators ne $previous_list);
  }   }
Line 104  sub end_essayresponse { Line 116  sub end_essayresponse {
  } elsif ( defined($ENV{'form.submitted'}) ) {   } elsif ( defined($ENV{'form.submitted'}) ) {
     my $response      = $ENV{'form.HWVAL_'.$id};      my $response      = $ENV{'form.HWVAL_'.$id};
             my $filename= $ENV{'form.HWFILE'.$part.'_'.$id.'.filename'};              my $filename= $ENV{'form.HWFILE'.$part.'_'.$id.'.filename'};
     if (( $response =~ /[^\s]/) || ($filename =~ /[^\s]/)) {              my $portfiles = $ENV{'form.HWPORT'.$part.'_'.$id};
       if (( $response =~ /[^\s]/) || ($filename =~ /[^\s]/) || ($portfiles =~ /[^\s]/)) {
   my $award;    my $award;
  if ($ENV{'form.HWDRAFT'.$part.'_'.$id} eq 'yes') {          if ($ENV{'form.HWDRAFT'.$part.'_'.$id} eq 'yes') {
     $award='SUBMITTED';      $award='SUBMITTED';
  } else {   } else {
     $award='DRAFT';      $award='DRAFT';
Line 120  sub end_essayresponse { Line 133  sub end_essayresponse {
            if ($uploadedfiletypes=~/\,$extension\,/i) {             if ($uploadedfiletypes=~/\,$extension\,/i) {
               $Apache::lonhomework::results{"resource.$part.$id.uploadedfile"}=$filename;                $Apache::lonhomework::results{"resource.$part.$id.uploadedfile"}=$filename;
                       $Apache::lonhomework::results{"resource.$part.$id.uploadedurl"}=                        $Apache::lonhomework::results{"resource.$part.$id.uploadedurl"}=
                          &Apache::lonnet::userfileupload('HWFILE'.$part.'_'.$id);                           &Apache::lonnet::userfileupload('HWFILE'.$part.'_'.$id,undef,'essayresponse');
                       $uploadedflag=1;                        $uploadedflag=1;
    } else {     } else {
       $award='INVALID_FILETYPE';        $award='INVALID_FILETYPE';
                    }                     }
         }          }
                   if ($portfiles =~ /[^\s]/) {
                       $portfiles =~s/,$//;
                       $Apache::lonhomework::results{"resource.$part.$id.portfiles"}=$portfiles;
                       my @submitted_files = split /,/,$portfiles;
       my ($dsymb,$crsid,$domain,$name)=&Apache::lonxml::whichuser();
       &Apache::lonnet::unmark_as_readonly($domain,$name,$dsymb.$crsid);
                       &Apache::lonnet::mark_as_readonly($domain,$name,\@submitted_files,$dsymb.$crsid);
                       &Apache::lonnet::clear_selected_files($name);
                       $uploadedflag=1;
              }
  $Apache::lonhomework::results{"resource.$part.$id.submission"}=$response;   $Apache::lonhomework::results{"resource.$part.$id.submission"}=$response;
  $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$award;   $Apache::lonhomework::results{"resource.$part.$id.awarddetail"}=$award;
  my %previous=&Apache::response::check_for_previous($response,$part,$id);   my %previous=&Apache::response::check_for_previous($response,$part,$id);
  unless ($uploadedflag) { &Apache::response::handle_previous(\%previous,$award); }   unless ($uploadedflag) { &Apache::response::handle_previous(\%previous,$award); }
   #
   # Store with resource author for similarity testing
   #
                   if ($award eq 'SUBMITTED') {
       my ($symb,$crsid,$domain,$name)=
    &Apache::lonxml::whichuser();
       if ($crsid) {
    my $akey=$name.'.'.$domain.'.'.$crsid;
    my $essayurl=
       &Apache::lonnet::declutter($ENV{'REQUEST_URI'});
    my ($adom,$aname,$apath)=
       ($essayurl=~/^(\w+)\/(\w+)\/(.*)$/);
                           $apath=&Apache::lonnet::escape($apath);
    $apath=~s/\W/\_/gs;
    &Apache::lonnet::put('nohist_essay_'.$apath,
    { $akey => $response },$adom,$aname);
       }
                   }
     }      }
  }   } 
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=&Apache::edit::end_table();   $result.=&Apache::edit::end_table();
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  if ($Apache::lonhomework::type eq 'exam') {   if ($Apache::lonhomework::type eq 'exam') {
     my $repetition=&Apache::response::repetition();      my $repetition=&Apache::response::repetition();
     $result.='\begin{enumerate}';      $result.='\begin{enumerate}';
       if ($ENV{'request.state'} eq "construct" ) {$result.='\item[\strut]';}
     for (my $i=0;$i<$repetition;$i++) {      for (my $i=0;$i<$repetition;$i++) {
  $result.='\item[\textbf{'.($Apache::lonxml::counter+$i).   $result.='\item[\textbf{'.($Apache::lonxml::counter+$i).
     '}.]\textit{Leave blank on scoring form}\vskip 0 mm';      '}.]\textit{'.&mt('Leave blank on scoring form').
       '}\vskip 0 mm';
     }      }
     $result.= '\end{enumerate}';      $result.= '\end{enumerate}';
       $increment=$repetition;
  }   }
     }      }
     if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||      if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
Line 150  sub end_essayresponse { Line 194  sub end_essayresponse {
  &Apache::lonxml::increment_counter($increment);   &Apache::lonxml::increment_counter($increment);
     }      }
     &Apache::response::end_response;      &Apache::response::end_response;
   
     return $result;      return $result;
 }  }
   

Removed from v.1.31  
changed lines
  Added in v.1.52


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.