version 1.90, 2008/11/10 13:18:19
|
version 1.91, 2008/11/16 02:46:25
|
Line 145 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 153 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 245 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 298 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', |