--- loncom/homework/essayresponse.pm 2008/11/20 14:37:37 1.92 +++ loncom/homework/essayresponse.pm 2009/09/11 16:34:09 1.100.4.1 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # essay (ungraded) style responses # -# $Id: essayresponse.pm,v 1.92 2008/11/20 14:37:37 jms Exp $ +# $Id: essayresponse.pm,v 1.100.4.1 2009/09/11 16:34:09 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -51,22 +51,30 @@ sub start_essayresponse { my $coll= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.collaborators"},'<>&"'); my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes"); $uploadedfiletypes=~s/[^\w\,]//g; + my $maxfilesize=&Apache::lonnet::EXT("resource.$part".'_'."$id.maxfilesize"); + if (!defined($maxfilesize)) { + $maxfilesize = 10.0; #FIXME This should become a domain configuration + } if ( $Apache::lonhomework::type eq 'survey' ) { $result.= ' '; } $result.='
'; if ( $Apache::lonhomework::type ne 'survey' ) { - $result.= ''; - } + if ($env{'request.uri'} eq '/res/gci/gci/internal/submission.problem') { + $result .= ''; + } else { + $result.= ''; + } + } if ($ncol > 0) { $result .=''; } - $result.=&Apache::inputtags::file_selector($part,$id, - $uploadedfiletypes,'both'); + my $filesfrom = 'both'; + my $stuname = &Apache::lonnet::EXT('user.name'); + my $studom = &Apache::lonnet::EXT('user.domain'); + if (!&Apache::lonnet::usertools_access($stuname,$studom,'portfolio')) { + $filesfrom = 'uploadonly'; + } + $result.=&Apache::inputtags::file_selector($part,$id,$uploadedfiletypes, + $filesfrom,undef,$maxfilesize); $result.='
'. - '
'. - ''. - '
'. + '
'. + ''. + '
'.'
'; } elsif ($target eq 'web' && $Apache::inputtags::status[-1] ne 'CAN_ANSWER') { @@ -193,6 +207,7 @@ sub end_essayresponse { if ($target eq 'analyze') { $Apache::lonhomework::analyze{"$part.$id.type"} = 'essayresponse'; + push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id"); &Apache::lonhomework::set_bubble_lines(); } } @@ -256,7 +271,7 @@ sub file_submission { } my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes"); - if ($uploadedfiletypes) { + if ($uploadedfiletypes ne '') { $uploadedfiletypes=~s/[^\w\,]//g; $uploadedfiletypes=','.$uploadedfiletypes.','; foreach my $file (@submitted_files) { @@ -270,10 +285,12 @@ sub file_submission { } } } + } else { + @acceptable_files = @submitted_files; } my $maxfilesize=&Apache::lonnet::EXT("resource.$part".'_'."$id.maxfilesize"); if (!$maxfilesize) { - $maxfilesize = 100.0; #FIXME This should become a domain configuration + $maxfilesize = 10.0; #FIXME This should become a domain configuration } my %dirlist; foreach my $file (@acceptable_files) { @@ -283,11 +300,14 @@ sub file_submission { } } else { my ($symb,$crsid,$udom,$uname) = &Apache::lonnet::whichuser(); - my ($path,$filename) = ($file =~ m{^(.+)/([^/]+)$}); + 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) { + $dirlist{$fullpath} = \@list; + } + if (ref($dirlist{$fullpath}) eq 'ARRAY') { + foreach my $dir_line (@{$dirlist{$fullpath}}) { my ($fname,$dom,undef,$testdir,undef,undef,undef,undef, $size,undef,$mtime,undef,undef,undef,$obs,undef) = split(/\&/,$dir_line,16); @@ -299,7 +319,6 @@ sub file_submission { last; } } - $dirlist{$fullpath} = \@list; } } if (ref($totalsize)) { @@ -308,12 +327,14 @@ sub file_submission { if ($which eq 'filename') { &delete_form_items($jspart,$id); } + last; + } else { + push(@accepted_files,$file); } } else { push(@accepted_files,$file); } } - my $uploadedfiletypes= &Apache::lonnet::EXT("resource.$part".'_'."$id.uploadedfiletypes"); $Apache::lonhomework::results{"resource.$part.$id.$which"}=join(',',@accepted_files); if (($$award eq 'INVALID_FILETYPE') || ($award eq 'EXCESS_FILESIZE')) { return; @@ -321,8 +342,8 @@ sub file_submission { if (ref($uploadedflag)) { $$uploadedflag=1; } + my ($symb,$crsid,$domain,$name)=&Apache::lonnet::whichuser(); if ($which eq 'portfiles') { - my ($symb,$crsid,$domain,$name)=&Apache::lonnet::whichuser(); &Apache::lonnet::unmark_as_readonly($domain,$name,[$symb,$crsid]); &Apache::lonnet::mark_as_readonly($domain,$name,\@submitted_files,[$symb,$crsid]); &Apache::lonnet::clear_selected_files($name); @@ -330,10 +351,40 @@ sub file_submission { if ($which eq 'filename') { $Apache::lonhomework::results{"resource.$part.$id.uploadedfile"}= $files; + my $cleanpart = $part; + $cleanpart =~ s/\W/_/g; + my $cleanid = $id; + $cleanid =~ s/\W/_/g; + my ($map,$resid,$res)=&Apache::lonnet::decode_symb($symb); + my $container; + if ($map =~ /^uploaded/) { + (my $prefix,$container) = ($map =~ m{^uploaded/[^/]+/[^/]+/(default|supplemental)_?([^.]*)\.(?:sequence|page)$}); + if (length($container) > 10) { + $container = substr($container,-10,10); + } + if ($container ne '') { + $container = $prefix.'_'.$container; + } else { + $container = $prefix; + } + } else { + ($container) = ($map =~ m{(.+)\.(?:sequence|page)$}); + $container =~ s/\W/_/g; + if (length($container) > 255) { + $container = substr($container,0,254); + } + } + my $subdir = 'essayresponse'; + my %crsdesc = &Apache::lonnet::coursedescription($crsid); + foreach my $item ($crsdesc{'domain'},$crsdesc{'num'},$container,$resid,$cleanpart,$cleanid) { + if ($item ne '') { + $subdir .= '/'.$item; + } + } $Apache::lonhomework::results{"resource.$part.$id.uploadedurl"}= &Apache::lonnet::userfileupload('HWFILE'.$jspart.'_'.$id,undef, - 'essayresponse'); - &Apache::lonnet::delenv($env{'form.HWFILE'.$jspart.'_'.$id}); + $subdir); + delete($env{'form.HWFILE'.$jspart.'_'.$id}); } } elsif ($which eq 'portfiles' && $Apache::lonhomework::history{"resource.$part.$id.$which"}) { @@ -345,9 +396,9 @@ 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}); + delete($env{'form.HWFILE'.$jspart.'_'.$id.'.filename'}); + delete($env{'form.HWFILE'.$jspart.'_'.$id.'.mimetype'}); + delete($env{'form.HWFILE'.$jspart.'_'.$id}); } @@ -433,4 +484,4 @@ described at http://www.lon-capa.org. =back -=cut \ No newline at end of file +=cut