Diff for /loncom/homework/essayresponse.pm between versions 1.89 and 1.91

version 1.89, 2008/11/07 18:58:06 version 1.91, 2008/11/16 02:46:25
Line 39  Handler to evaluate essay (ungraded) sty Line 39  Handler to evaluate essay (ungraded) sty
 This is part of the LearningOnline Network with CAPA project  This is part of the LearningOnline Network with CAPA project
 described at http://www.lon-capa.org.  described at http://www.lon-capa.org.
   
 =head2 Subroutines  
   
 =cut  =cut
   
 package Apache::essayresponse;  package Apache::essayresponse;
Line 147  sub end_essayresponse { Line 145  sub end_essayresponse {
     $increment=&Apache::response::scored_response($part,$id);      $increment=&Apache::response::scored_response($part,$id);
  } elsif ( &Apache::response::submitted() ) {   } elsif ( &Apache::response::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'} || 
                              $env{'form.HWFILETOOBIG'.$part.'_'.$id};
             my $portfiles = $env{'form.HWPORT'.$part.'_'.$id};              my $portfiles = $env{'form.HWPORT'.$part.'_'.$id};
     if (( $response =~ /[^\s]/) || ($filename =~ /[^\s]/) || ($portfiles =~ /[^\s]/)) {      if (( $response =~ /[^\s]/) || ($filename =~ /[^\s]/) || ($portfiles =~ /[^\s]/)) {
   my $award='DRAFT';    my $award='DRAFT';
Line 155  sub end_essayresponse { Line 154  sub end_essayresponse {
     $award='SUBMITTED';      $award='SUBMITTED';
  }   }
                 my $uploadedflag=0;                  my $uploadedflag=0;
  &file_submission($part,$id,'filename',\$award,\$uploadedflag);                  my $totalsize=0;
  &file_submission($part,$id,'portfiles',\$award,\$uploadedflag);   &file_submission($part,$id,'filename',\$award,\$uploadedflag,\$totalsize);
    &file_submission($part,$id,'portfiles',\$award,\$uploadedflag,\$totalsize);
  $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);
Line 247  sub format_prior_response { Line 247  sub format_prior_response {
 }  }
   
 sub file_submission {  sub file_submission {
     my ($part,$id,$which,$award,$uploadedflag)=@_;      my ($part,$id,$which,$award,$uploadedflag,$totalsize)=@_;
     my $files;      my $files;
     my $jspart=$part;      my $jspart=$part;
     $jspart=~s/\./_/g;      $jspart=~s/\./_/g;
     if ($which eq 'portfiles') { $files= $env{'form.HWPORT'.$jspart.'_'.$id}; }      if ($which eq 'portfiles') { 
     if ($which eq 'filename') {          $files= $env{'form.HWPORT'.$jspart.'_'.$id};
  $files = $env{'form.HWFILE'.$jspart.'_'.$id.'.filename'};      } elsif ($which eq 'filename') {
           if ($env{'form.HWFILETOOBIG'.$jspart.'_'.$id} ne '') {
               $$award = 'EXCESS_FILESIZE';
               return;
           } else {
               $files = $env{'form.HWFILE'.$jspart.'_'.$id.'.filename'};
           }
     }      }
       
     if ($files =~ /[^\s]/) {      if ($files =~ /[^\s]/) {
  $files =~s/,$//;   $files =~s/,$//;
  $Apache::lonhomework::results{"resource.$part.$id.$which"}=$files;          my (@submitted_files,@acceptable_files,@accepted_files);
           if ($which eq 'portfiles') {
  my @submitted_files = ($files);              @submitted_files = split(/\s*,\s*/,$files);
  if ( $which eq 'portfiles' ) {          } else {
     @submitted_files = split(/\s*,\s*/,$files);              @submitted_files = ($files);
  }          }
           my $uploadedfiletypes= 
               &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");
           if ($uploadedfiletypes) {
               $uploadedfiletypes=~s/[^\w\,]//g;
               $uploadedfiletypes=','.$uploadedfiletypes.',';
               foreach my $file (@submitted_files) {
                   my ($extension)=($file=~/\.(\w+)$/);
                   if ($uploadedfiletypes=~/\,\s*\Q$extension\E\s*\,/i) {
                       push(@acceptable_files,$file);
                   } else {
                       $$award='INVALID_FILETYPE';
                       if ($which eq 'filename') {
                           &delete_form_items($jspart,$id);
                       }
                   }
               }
           }
           my $maxfilesize=&Apache::lonnet::EXT("resource.$part".'_'."$id.maxfilesize");
           if (!$maxfilesize) {
               $maxfilesize = 100.0; #FIXME This should become a domain configuration
           }
           my %dirlist;
           foreach my $file (@acceptable_files) {
               if ($which eq 'filename') {
                   if (ref($totalsize)) {
                       $$totalsize += $env{'form.HWFILESIZE'.$jspart.'_'.$id};
                   }
               } else {
                   my ($symb,$crsid,$udom,$uname) = &Apache::lonnet::whichuser();
                   my ($path,$filename) = ($file =~ m{^(.+)/([^/]+)$});
                   my $fullpath = '/userfiles/portfolio'.$path;
                   if (!exists($dirlist{$fullpath})) {
                       my @list = &Apache::lonnet::dirlist($fullpath,$udom,$uname,1);
                       foreach my $dir_line (@list) {
                           my ($fname,$dom,undef,$testdir,undef,undef,undef,undef,
                               $size,undef,$mtime,undef,undef,undef,$obs,undef) = 
                           split(/\&/,$dir_line,16);
                           if ($filename eq $fname) {
                               my $mbsize = $size/(1024.0*1024.0);
                               if (ref($totalsize)) {
                                   $$totalsize += $mbsize;
                               }
                               last;
                           }
                       }
                       $dirlist{$fullpath} = \@list;
                   }
               }
               if (ref($totalsize)) {
                   if ($$totalsize > $maxfilesize) {
                       $$award='EXCESS_FILESIZE';
                       if ($which eq 'filename') {
                           &delete_form_items($jspart,$id);
                       }
                   }
               } else {
                   push(@accepted_files,$file);
               }
           }
  my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");   my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes");
  if ($uploadedfiletypes) {          $Apache::lonhomework::results{"resource.$part.$id.$which"}=join(',',@accepted_files);
     $uploadedfiletypes=~s/[^\w\,]//g;          if (($$award eq 'INVALID_FILETYPE') || ($award eq 'EXCESS_FILESIZE')) {
     $uploadedfiletypes=','.$uploadedfiletypes.',';              return;
     foreach my $file (@submitted_files) {          }
  my ($extension)=($file=~/\.(\w+)$/);   if (ref($uploadedflag)) {
  unless ($uploadedfiletypes=~/\,\s*\Q$extension\E\s*\,/i) {  
     $$award='INVALID_FILETYPE';  
  }  
     }  
  }  
  if ($$award ne 'INVALID_FILETYPE' && ref($uploadedflag)) {  
     $$uploadedflag=1;      $$uploadedflag=1;
  }   }
  if ($$award ne 'INVALID_FILETYPE' && $which eq 'portfiles') {   if ($which eq 'portfiles') {
     my ($symb,$crsid,$domain,$name)=&Apache::lonnet::whichuser();      my ($symb,$crsid,$domain,$name)=&Apache::lonnet::whichuser();
     &Apache::lonnet::unmark_as_readonly($domain,$name,[$symb,$crsid]);      &Apache::lonnet::unmark_as_readonly($domain,$name,[$symb,$crsid]);
     &Apache::lonnet::mark_as_readonly($domain,$name,\@submitted_files,[$symb,$crsid]);      &Apache::lonnet::mark_as_readonly($domain,$name,\@submitted_files,[$symb,$crsid]);
     &Apache::lonnet::clear_selected_files($name);      &Apache::lonnet::clear_selected_files($name);
  }   }
  if ($$award ne 'INVALID_FILETYPE' && $which eq 'filename') {   if ($which eq 'filename') {
     $Apache::lonhomework::results{"resource.$part.$id.uploadedfile"}=      $Apache::lonhomework::results{"resource.$part.$id.uploadedfile"}=
  $files;   $files;
     $Apache::lonhomework::results{"resource.$part.$id.uploadedurl"}=      $Apache::lonhomework::results{"resource.$part.$id.uploadedurl"}=
  &Apache::lonnet::userfileupload('HWFILE'.$jspart.'_'.$id,undef,   &Apache::lonnet::userfileupload('HWFILE'.$jspart.'_'.$id,undef,
  'essayresponse');   'essayresponse');
               &Apache::lonnet::delenv($env{'form.HWFILE'.$jspart.'_'.$id});
  }   }
     } elsif ($which eq 'portfiles' &&      } elsif ($which eq 'portfiles' &&
      $Apache::lonhomework::history{"resource.$part.$id.$which"}) {       $Apache::lonhomework::history{"resource.$part.$id.$which"}) {
Line 300  sub file_submission { Line 358  sub file_submission {
     }      }
 }  }
   
   sub delete_form_items {
       my ($jspart,$id) = @_;
       &Apache::lonnet::delenv($env{'form.HWFILE'.$jspart.'_'.$id.'.filename'});
       &Apache::lonnet::delenv($env{'form.HWFILE'.$jspart.'_'.$id.'.mimetype'});
       &Apache::lonnet::delenv($env{'form.HWFILE'.$jspart.'_'.$id});
   }
   
   
 sub check_collaborators {  sub check_collaborators {
     my ($ncol,$coll) = @_;      my ($ncol,$coll) = @_;
     my %classlist=&Apache::lonnet::dump('classlist',      my %classlist=&Apache::lonnet::dump('classlist',

Removed from v.1.89  
changed lines
  Added in v.1.91


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