Diff for /loncom/homework/essayresponse.pm between versions 1.101.10.2 and 1.118

version 1.101.10.2, 2010/09/13 04:23:00 version 1.118, 2014/01/21 14:38:55
Line 58  sub start_essayresponse { Line 58  sub start_essayresponse {
         if (!defined($maxfilesize)) {          if (!defined($maxfilesize)) {
             $maxfilesize = 10.0; #FIXME This should become a domain configuration               $maxfilesize = 10.0; #FIXME This should become a domain configuration 
         }          }
  if ( $Apache::lonhomework::type eq 'survey' ) {          my $hiddendraft;
     $result.= '<input type="hidden" name="HWDRAFT'.$part.'_'.$id.'" value="yes" /> ';   if (($Apache::lonhomework::type eq 'survey') ||
  }              ($Apache::lonhomework::type eq 'surveycred') ||
         my $status_text = &mt('Submission type');              ($Apache::lonhomework::type eq 'anonsurvey') ||
         if ($Apache::lonhomework::history{"resource.$part.award"} eq 'DRAFT') {              ($Apache::lonhomework::type eq 'anonsurveycred')) {
             $status_text .= '<br />'.&mt('(Currently -- draft)');              $hiddendraft = '<input type="hidden" name="HWDRAFT'.$part.'_'.$id.'" value="yes" />';
         }          } else {
         $result.= '<p>'.&Apache::lonhtmlcommon::start_pick_box();              my $status_text = &mt('Submission type');
  if ( $Apache::lonhomework::type ne 'survey' ) {              if ($Apache::lonhomework::history{"resource.$part.award"} eq 'DRAFT') {
             if ($env{'request.uri'} eq '/res/gci/gci/internal/submission.problem') {                  $status_text .= '<br />'.&mt('(Currently -- draft)');
               }
                 $result .= '<input type="hidden" name="HWDRAFT'.$part.'_'.$id.'" value="yes" />';              $result = &Apache::lonhtmlcommon::row_title($status_text);
             } else {              my $closure;
                 $result .= &Apache::lonhtmlcommon::row_title($status_text);              unless ($ncol || $uploadedfiletypes) {
                 my $closure;                  $closure = 1;
                 unless ($ncol || $uploadedfiletypes) {              }
                     $closure = 1;      $result.= 
                 }  
         $result.=   
  '<label>'.   '<label>'.
  '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="yes" checked="checked" />&nbsp;'.   '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="yes" checked="checked" />&nbsp;'.
  &mt('Submit entries below as answer to receive credit').   &mt('Submit entries below as answer to receive credit').
Line 85  sub start_essayresponse { Line 83  sub start_essayresponse {
  '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="no" />&nbsp;'.   '<input type="radio" name="HWDRAFT'.$part.'_'.$id.'" value="no" />&nbsp;'.
  &mt('Save entries below (not submitted for credit yet)').   &mt('Save entries below (not submitted for credit yet)').
  '</label>'.   '</label>'.
  &Apache::lonhtmlcommon::row_closure($closure);                  &Apache::lonhtmlcommon::row_closure($closure);
             }  
  }   }
   
  if ($ncol > 0) {   if ($ncol > 0) {
     $result.= &Apache::lonhtmlcommon::row_title(&mt('Collaborators')).      $result.= &Apache::lonhtmlcommon::row_title(&mt('Collaborators')).
                       '<label>'.                        '<label>'.
       &mt('Collaborators:').' <input type="text" size="70" max="80" name="HWCOL'.        &mt('Collaborators:').' <input type="text" size="70" max="80" name="HWCOL'.
       $part.'_'.$id.'" value="'.$coll.'" /><br />'.        $part.'_'.$id.'" value="'.$coll.'" /><br />'.
       &mt('(Enter a maximum of [quant,_1,collaborator] using username or username:domain, e.g. smithje or smithje:[_2].)',$ncol,$env{'user.domain'});        &mt('Enter a maximum of [quant,_1,collaborator] using username or username:domain, e.g. smithje or smithje:[_2].',$ncol,$env{'user.domain'});
             if ($ncol > 1) {              if ($ncol > 1) {
                 $result .= '<br />'.&mt('If entering more than one, use spaces to separate the collaborators.');                  $result .= '<br />'.&mt('If entering more than one, use spaces to separate the collaborators.');
             }              }
             $result .= '</label><br />';              $result .= '</label><br />';
     $result .= &check_collaborators($ncol,$coll) if ($coll =~ /\w+/);      $result .= &check_collaborators($ncol,$coll) if ($coll =~ /\w+/);
             $result .= &Apache::lonhtmlcommon::row_closure();      $result .= &Apache::lonhtmlcommon::row_closure();
  }   }
         my $filesfrom = 'both';          my $filesfrom = 'both';
         my $stuname = &Apache::lonnet::EXT('user.name');          my $stuname = &Apache::lonnet::EXT('user.name');
Line 109  sub start_essayresponse { Line 107  sub start_essayresponse {
         }          }
  $result.=&Apache::inputtags::file_selector($part,$id,$uploadedfiletypes,   $result.=&Apache::inputtags::file_selector($part,$id,$uploadedfiletypes,
    $filesfrom,undef,$maxfilesize);     $filesfrom,undef,$maxfilesize);
         $result.=&Apache::lonhtmlcommon::end_pick_box().'</p>';          if ($result) {
               $result =
                     '<div>'.$hiddendraft.
                     &Apache::lonhtmlcommon::start_pick_box().
                     $result.
                     &Apache::lonhtmlcommon::end_pick_box().'</div>';
           } else {
               $result = $hiddendraft;
           }
     } elsif ($target eq 'web' &&      } elsif ($target eq 'web' &&
      $Apache::inputtags::status[-1] ne 'CAN_ANSWER') {       $Apache::inputtags::status[-1] ne 'CAN_ANSWER') {
  my $part= $Apache::inputtags::part;   my $part= $Apache::inputtags::part;
Line 141  sub end_essayresponse { Line 147  sub end_essayresponse {
     my $increment     = &Apache::response::repetition();      my $increment     = &Apache::response::repetition();
     my $result;      my $result;
     if ( $target eq 'grade' ) {      if ( $target eq 'grade' ) {
  my $collaborators = $env{'form.HWCOL'.$part.'_'.$id};  # Deal with collaborators
  if ($collaborators =~ /[^\s]/) {   my $collaborators = $env{'form.HWCOL'.$part.'_'.$id};
     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   if ($collaborators ne $previous_list) { 
  if ($collaborators ne $previous_list);  #           &Apache::lonnet::logthis("New collaborators [$collaborators] [$previous_list]");
  }             $Apache::lonhomework::results{"resource.$part.$id.collaborators"}=$collaborators; 
           }
   # Scantron
  if (  &Apache::response::submitted('scantron') ) {   if (  &Apache::response::submitted('scantron') ) {
     $increment=&Apache::response::scored_response($part,$id);      $increment=&Apache::response::scored_response($part,$id);
  } elsif ( &Apache::response::submitted() ) {   } elsif ( &Apache::response::submitted() ) {
Line 166  sub end_essayresponse { Line 174  sub end_essayresponse {
             }              }
     if (($response =~ /[^\s]/) || ($filename =~ /[^\s]/) || ($portfiles =~ /[^\s]/) ||       if (($response =~ /[^\s]/) || ($filename =~ /[^\s]/) || ($portfiles =~ /[^\s]/) || 
                 (@deletions > 0) || ($was_draft && $is_submit)) {                  (@deletions > 0) || ($was_draft && $is_submit)) {
   my $award='DRAFT';    my $award='DRAFT';
         if ($env{'form.HWDRAFT'.$part.'_'.$id} eq 'yes') {          if ($env{'form.HWDRAFT'.$part.'_'.$id} eq 'yes') {
     $award='SUBMITTED';                      if ($Apache::lonhomework::type eq 'anonsurvey') {
                           $award='ANONYMOUS';
                       } elsif ($Apache::lonhomework::type eq 'anonsurveycred') {
                           $award='ANONYMOUS_CREDIT';
                       } elsif ($Apache::lonhomework::type eq 'surveycred') {
                           $award='SUBMITTED_CREDIT';
                       } else {
           $award='SUBMITTED';
                       }
  }   }
                 my $uploadedflag=0;                  my $uploadedflag=0;
                 my $totalsize=0;                  my $totalsize=0;
Line 202  sub end_essayresponse { Line 218  sub end_essayresponse {
  { $akey => $response },$adom,$aname);   { $akey => $response },$adom,$aname);
     }      }
                 }                  }
     }              }
  }    } 
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=&Apache::edit::end_table();   $result.=&Apache::edit::end_table();
Line 263  sub format_prior_response { Line 279  sub format_prior_response {
     }      }
     if ($answer =~ /\S/) {      if ($answer =~ /\S/) {
  $output.='<p>'.&mt('Submitted text').   $output.='<p>'.&mt('Submitted text').
     '<blockquote>'.$answer.'</blockquote></p>';      '<blockquote>'.&HTML::Entities::encode($answer, '"<>&').'</blockquote></p>';
     }      }
   
     return '<div class="LC_prior_essay">'.$output.'</div>';      return '<div class="LC_prior_essay">'.$output.'</div>';
Line 295  sub file_submission { Line 311  sub file_submission {
                     if (grep(/^\Q$file\E$/,@portfiles)) {                      if (grep(/^\Q$file\E$/,@portfiles)) {
                         $port_delete{$file} = 1;                          $port_delete{$file} = 1;
                     } elsif ($file =~ m{^/uploaded/\Q$udom\E/\Q$uname\E/essayresponse/\Q$cdom\E/\Q$cnum\E/}) {                      } elsif ($file =~ m{^/uploaded/\Q$udom\E/\Q$uname\E/essayresponse/\Q$cdom\E/\Q$cnum\E/}) {
                         $uploaded_delete = $file;                          $uploaded_delete = $file; 
                     } elsif ($file =~ m{^/uploaded/\Q$udom\E/\Q$uname\E/essayresponse/[^/]+$}) {                      } elsif ($file =~ m{^/uploaded/\Q$udom\E/\Q$uname\E/essayresponse/[^/]+$}) {
                         $uploaded_delete = $file;                          $uploaded_delete = $file;
                     }                      }
Line 381  sub file_submission { Line 397  sub file_submission {
                 my ($path,$filename) = ($file =~ m{^(.*/)([^/]+)$});                  my ($path,$filename) = ($file =~ m{^(.*/)([^/]+)$});
                 my $fullpath = '/userfiles/portfolio'.$path;                  my $fullpath = '/userfiles/portfolio'.$path;
                 if (!exists($dirlist{$fullpath})) {                  if (!exists($dirlist{$fullpath})) {
                     my @list = &Apache::lonnet::dirlist($fullpath,$udom,$uname,1);                      my ($listref,$listerror) =
                     $dirlist{$fullpath} = \@list;                          &Apache::lonnet::dirlist($fullpath,$udom,$uname,1);
                       if (ref($listref) eq 'ARRAY') {
                           $dirlist{$fullpath} = $listref;
                       }
                 }                  }
                 if (ref($dirlist{$fullpath}) eq 'ARRAY') {                  if (ref($dirlist{$fullpath}) eq 'ARRAY') {
                     foreach my $dir_line (@{$dirlist{$fullpath}}) {                      foreach my $dir_line (@{$dirlist{$fullpath}}) {
                         my ($fname,$dom,undef,$testdir,undef,undef,undef,undef,                          my ($fname,$dom,undef,$testdir,undef,undef,undef,undef,
                             $size,undef,$mtime,undef,undef,undef,$obs,undef) =                               $size,undef,$mtime,undef,undef,undef,$obs,undef) =
                         split(/\&/,$dir_line,16);                          split(/\&/,$dir_line,16);
                         if ($filename eq $fname) {                          if ($filename eq $fname) {
                             my $mbsize = $size/(1024.0*1024.0);                              my $mbsize = $size/(1024.0*1024.0);
Line 425  sub file_submission { Line 444  sub file_submission {
         }          }
     }      }
     if ($accepted_upload ne '') {      if ($accepted_upload ne '') {
         my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb);          my ($path,$multiresp) = 
         my $turnindir;              &Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom,
         my %userhash = &Apache::lonnet::userenvironment($udom,$uname,'turnindir');                                                        'submission');
         $turnindir = $userhash{'turnindir'};          if ($path eq '') {
         if ($turnindir eq '') {              $$award = 'INTERNAL_ERROR';
             $turnindir = &mt('turned in');          } else {
             $turnindir =~ s/\W+/_/g;              if ($multiresp) {
             my %newhash = (                  $path .= '/'.$jspart.'_'.$id;
                             'turnindir' => $turnindir,              }
                           );              my $prefix = 'portfolio';
             &Apache::lonnet::put('environment',\%newhash,$udom,$uname);              my $formelement = 'HWFILE'.$jspart.'_'.$id;
         }              my $fname = &Apache::lonnet::clean_filename($env{'form.'.$formelement.'.filename'});
         my $prefix = 'portfolio';              my $url = '/uploaded/'.$udom.'/'.$uname.'/'.$prefix.$path.'/'.$fname;
         my $path = '/'.$turnindir.'/';              my @stat = &Apache::lonnet::stat_file($url);
         my $restitle=&Apache::lonnet::gettitle($symb);              my $conflicts = 0;
         $restitle =~ s/\W+/_/g;              if (@stat && $stat[0] ne 'no_such_dir') {
         if ($restitle eq '') {                  my $current_permissions = 
             $restitle = ($resurl =~ m{/[^/]+$});                      &Apache::lonnet::get_portfile_permissions($udom,$uname);
             if ($restitle eq '') {                  if (ref($current_permissions) eq 'HASH') {
                 $restitle = time;                      if (ref($current_permissions->{$path.'/'.$fname}) eq 'ARRAY') {
             }                          foreach my $record (@{$current_permissions->{$path.'/'.$fname}}) {
         }                              if (ref($record) eq 'ARRAY') {
         my @pathitems;                                  next if (($record->[0] eq $symb) && 
         my $navmap = Apache::lonnavmaps::navmap->new();                                           ($record->[1] eq $crsid));
         if (defined($navmap)) {                                  $conflicts ++;
             my $mapres = $navmap->getResourceByUrl($map);                              } 
             if (ref($mapres)) {  
                 my $pcslist = $mapres->map_hierarchy();  
                 if ($pcslist ne '') {  
                     foreach my $pc (split(/,/,$pcslist)) {  
                         my $res = $navmap->getByMapPc($pc);  
                         if (ref($res)) {  
                             my $title = $res->compTitle();  
                             $title =~ s/\W+/_/g;  
                             if ($title ne '') {  
                                 push(@pathitems,$title);  
                             }  
                         }                          }
                     }                      }
                 }                  }
                 my $maptitle = $mapres->compTitle();                  if ($conflicts) {
                 $maptitle =~ s/\W+/_/g;                      $$award = 'FILENAME_INUSE';
                 if ($maptitle ne '') {  
                     push(@pathitems,$maptitle);  
                 }                  }
             } else {  
                 $$award = 'INTERNAL_ERROR';  
             }              }
         } else {              unless ($conflicts) { 
             $$award = 'INTERNAL_ERROR';                  my ($mode,%allfiles,%codebase);
         }                  my $result = &Apache::lonnet::userfileupload($formelement,'',
         push(@pathitems,$restitle);  
         $path .= join('/',@pathitems);  
         my $formelement = 'HWFILE'.$jspart.'_'.$id;  
         my $fname = &Apache::lonnet::clean_filename($env{'form.'.$formelement.'.filename'});  
         my $url = '/uploaded/'.$udom.'/'.$uname.'/'.$prefix.$path.'/'.$fname;  
         my @stat = &Apache::lonnet::stat_file($url);  
         if (@stat && $stat[0] ne 'no_such_dir') {  
             $$award = 'FILENAME_INUSE';  
         } else {  
             my ($mode,%allfiles,%codebase);  
             my $result = &Apache::lonnet::userfileupload($formelement,'',  
                              $prefix.$path,$mode,\%allfiles,\%codebase);                               $prefix.$path,$mode,\%allfiles,\%codebase);
             if ($result =~ m{^/uploaded/}) {                  if ($result =~ m{^/uploaded/}) {
                 $stored_upload = $path.'/'.$fname;                      $stored_upload = $path.'/'.$fname;
                 $Apache::lonhomework::results{"resource.$part.$id.portfiles"} = $stored_upload;                      unless (grep(/^\Q$stored_upload\E$/,@accepted_portfiles)) {
                 push(@tolock,$stored_upload);                          $Apache::lonhomework::results{"resource.$part.$id.portfiles"} = $stored_upload;
             } else {                          push(@tolock,$stored_upload);
                  $$award = 'INTERNAL_ERROR';                      }
                   } else {
                       $$award = 'INTERNAL_ERROR';
                   }
             }              }
  }          }
         delete($env{'form.HWFILE'.$jspart.'_'.$id});          delete($env{'form.HWFILE'.$jspart.'_'.$id});
     }      }
     if (@accepted_portfiles) {      if (@accepted_portfiles) {
         if ($stored_upload) {          if ($Apache::lonhomework::results{"resource.$part.$id.portfiles"}) {
             $Apache::lonhomework::results{"resource.$part.$id.portfiles"} .= ',';              $Apache::lonhomework::results{"resource.$part.$id.portfiles"} .= ',';
         }          }
         $Apache::lonhomework::results{"resource.$part.$id.portfiles"}.=join(',',@accepted_portfiles);          $Apache::lonhomework::results{"resource.$part.$id.portfiles"}.=join(',',@accepted_portfiles);

Removed from v.1.101.10.2  
changed lines
  Added in v.1.118


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