--- loncom/homework/grades.pm 2006/09/22 21:16:14 1.302.2.7 +++ loncom/homework/grades.pm 2006/01/27 01:52:25 1.306 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.302.2.7 2006/09/22 21:16:14 albertel Exp $ +# $Id: grades.pm,v 1.306 2006/01/27 01:52:25 banghart Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1577,7 +1577,7 @@ sub submission { } my $overRideScore = $env{'form.overRideScore'} eq '' ? 'no' : $env{'form.overRideScore'}; - $request->print('
'."\n". + $request->print(''."\n". ''."\n". ''."\n". ''."\n". @@ -1807,9 +1807,14 @@ KEYWORDS } if (@files) { $lastsubonly.='
Like all files provided by users, this file may contain virusses
'; + my $file_counter = 0; foreach my $file (@files) { + $file_counter ++; &Apache::lonnet::allowuploaded('/adm/grades',$file); $lastsubonly.='
'.$file.''; + $lastsubonly.='Return commented document to student. '."\n"; + $lastsubonly.=''; + } $lastsubonly.='
'; } @@ -2040,6 +2045,16 @@ sub processHandGrade { } } } + if ($env{'form.returndoc1'}) { + # if multiple files are uploaded names will be 'returndoc2', 'returndoc3' + my $file_counter = 1; + while ($env{'form.returndoc'.$file_counter}) { + my $fname=$env{'form.returndoc'.$file_counter.'.filename'}; + $request->print("
".$fname." will be the uploaded file name"); + $request->print("Will upload document".$env{'form.returndocorig'.$file_counter}); + $file_counter ++; + } + } $ctr++; } } @@ -2248,7 +2263,7 @@ sub saveHandGrade { my $solvedstatus = $record{'resource.'.$new_part.'.solved'}; if ($aggtries > 0) { - &decrement_aggs($symb,$new_part,\%aggregate,$aggtries,$totaltries,$solvedstatus); + &decrement($symb,$new_part,\%aggregate,$aggtries,$totaltries,$solvedstatus); $aggregateflag = 1; } } elsif ($dropMenu eq '') { @@ -2288,7 +2303,10 @@ sub saveHandGrade { "$env{'user.name'}:$env{'user.domain'}"; } # unless problem has been graded, set flag to version the submitted files - unless ($record{'resource.'.$new_part.'.solved'} =~ /^correct_/ || $record{'resource.'.$new_part.'.solved'} eq 'incorrect_by_override') { + unless ($record{'resource.'.$new_part.'.solved'} =~ /^correct_/ || + $record{'resource.'.$new_part.'.solved'} eq 'incorrect_by_override' || + $dropMenu eq 'reset status') + { push (@v_flag,$new_part); } } @@ -2382,26 +2400,24 @@ sub get_last_resets { # ----------- Handles creating versions for portfolio files as answers sub version_portfiles { - my ($record, $parts_graded, $courseid, $symb, $domain, $stuname, $v_flag) = @_; + my ($record, $parts_graded, $courseid, $symb, $domain, $stu_name, $v_flag) = @_; my $version_parts = join('|',@$v_flag); my $parts = join('|', @$parts_graded); my $portfolio_root = &Apache::loncommon::propath($domain, - $stuname). + $stu_name). '/userfiles/portfolio'; foreach my $key (keys(%$record)) { my $new_portfiles; - if ($key =~ /^resource\.($version_parts)\./ && $key =~ /\.portfiles$/ ) { my @v_portfiles; my @portfiles = split(/,/,$$record{$key}); - &Apache::lonnet::logthis("should be unmarking and remarking $key",@portfiles); foreach my $file (@portfiles) { - &Apache::lonnet::unmark_as_readonly($domain,$stuname,[$symb,$env{'request.course.id'}],$file); + &Apache::lonnet::unmark_as_readonly($domain,$stu_name,[$symb,$env{'request.course.id'}],$file); my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*)$/); my $version = 0; my ($answer_name,$answer_ver,$answer_ext) = &file_name_version_ext($answer_file); - my @dir_list = &Apache::lonnet::dirlist($directory,$domain,$stuname,$portfolio_root); + my @dir_list = &Apache::lonnet::dirlist($directory,$domain,$stu_name,$portfolio_root); foreach my $row (@dir_list) { my ($file) = split(/\&/,$row,2); my ($file_name,$file_version,$file_ext) = @@ -2418,25 +2434,37 @@ sub version_portfiles { } } $version++; - $env{'form.copy'} = &Apache::lonnet::getfile("/uploaded/$domain/$stuname/portfolio$directory$answer_file"); - if($env{'form.copy'} eq '-1') { - &Apache::lonnet::logthis('problem getting file '.$directory.$answer_file); - } else { - my $new_answer = $answer_name.'.'.$version.'.'.$answer_ext; - my $copy_result = &Apache::lonnet::finishuserfileupload( - $stuname,$domain,'copy', - '/portfolio'.$directory.$new_answer); + my $new_answer = &version_selected_portfile($domain, $stu_name, $directory, $answer_file, $version); + if ($new_answer ne 'problem getting file') { push(@v_portfiles, $directory.$new_answer); - &Apache::lonnet::mark_as_readonly($domain,$stuname, - ['/portfolio'.$directory.$new_answer], - [$symb,$env{'request.course.id'},'graded']); + &Apache::lonnet::mark_as_readonly($domain,$stu_name, + ['/portfolio'.$directory.$new_answer], + [$symb,$env{'request.course.id'},'graded']); } + } $$record{$key} = join(',',@v_portfiles); } } return 'ok'; - +} + +sub version_selected_portfile { + my ($domain,$stu_name,$directory,$file_name,$version) = @_; + my ($answer_name,$answer_ver,$answer_ext) = + &file_name_version_ext($file_name); + my $new_answer; + $env{'form.copy'} = &Apache::lonnet::getfile("/uploaded/$domain/$stu_name/portfolio$directory$file_name"); + if($env{'form.copy'} eq '-1') { + &Apache::lonnet::logthis('problem getting file '.$file_name); + $new_answer = 'problem getting file'; + } else { + $new_answer = $answer_name.'.'.$version.'.'.$answer_ext; + my $copy_result = &Apache::lonnet::finishuserfileupload( + $stu_name,$domain,'copy', + '/portfolio'.$directory.$new_answer); + } + return ($new_answer); } sub file_name_version_ext { @@ -3291,13 +3319,8 @@ sub csvuploadmap { unshift(@fields,['none','']); $i=&Apache::loncommon::csv_samples_select_table($request,\@records, \@fields); - foreach my $rec (@records) { - my %temp = &Apache::loncommon::record_sep($rec); - if (%temp) { - $keyfields=join(',',sort(keys(%temp))); - last; - } - } + my %sone=&Apache::loncommon::record_sep($records[0]); + $keyfields=join(',',sort(keys(%sone))); } } &csvuploadmap_footer($request,$i,$keyfields); @@ -3459,7 +3482,7 @@ sub csvuploadassign { } $request->print("
Stored $countdone students\n"); if (@skipped) { - $request->print('

Skipped Students

'); + $request->print('Skipped Students

'); foreach my $student (@skipped) { $request->print("$student
\n"); } } if (@notallowed) { @@ -3679,7 +3702,7 @@ sub displayPage { if($curRes == $iterator->BEGIN_MAP) { $depth++; } if($curRes == $iterator->END_MAP) { $depth--; } - if (ref($curRes) && $curRes->is_problem()) { + if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { my $parts = $curRes->parts(); my $title = $curRes->compTitle(); my $symbx = $curRes->symb(); @@ -3876,7 +3899,7 @@ sub updateGradeByPage { if($curRes == $iterator->BEGIN_MAP) { $depth++; } if($curRes == $iterator->END_MAP) { $depth--; } - if (ref($curRes) && $curRes->is_problem()) { + if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { my $parts = $curRes->parts(); my $title = $curRes->compTitle(); my $symbx = $curRes->symb(); @@ -4063,11 +4086,11 @@ sub scantron_CODElist { sub scantron_CODEunique { my $result=' + value="Yes" checked="on" /> Yes + value="No" /> No '; return $result; } @@ -4517,29 +4540,21 @@ sub reset_skipping_status { &scantron_putfile(undef,$scan_data); } -sub start_skipping { +sub allow_skipping { my ($scan_data,$i)=@_; my %remembered=split(':',&scan_data($scan_data,'remember_skipping')); - if ($env{'form.scantron_options_redo'} =~ /^redo_/) { - $remembered{$i}=2; - } else { - $remembered{$i}=1; - } + delete($remembered{$i}); &scan_data($scan_data,'remember_skipping',join(':',%remembered)); } sub should_be_skipped { - my ($scanlines,$scan_data,$i)=@_; + my ($scan_data,$i)=@_; if ($env{'form.scantron_options_redo'} !~ /^redo_/) { # not redoing old skips - if ($scanlines->{'skipped'}[$i]) { return 1; } return 0; } my %remembered=split(':',&scan_data($scan_data,'remember_skipping')); - - if (exists($remembered{$i}) && $remembered{$i} != 2 ) { - return 0; - } + if (exists($remembered{$i})) { return 0; } return 1; } @@ -4551,7 +4566,7 @@ sub remember_current_skipped { $to_remember{$i}=1; } } - + &Apache::lonnet::logthis('remembering '.join(':',%to_remember)); &scan_data($scan_data,'remember_skipping',join(':',%to_remember)); &scantron_putfile(undef,$scan_data); } @@ -4656,6 +4671,7 @@ sub scantron_validate_file { } if ($env{'form.scantron_options_redo'} eq 'redo_skipped') { &remember_current_skipped(); + &scantron_remove_file('skipped'); $env{'form.scantron_options_redo'}='redo_skipped_ready'; } @@ -4818,8 +4834,8 @@ sub scantron_putfile { sub scantron_get_line { my ($scanlines,$scan_data,$i)=@_; - if (&should_be_skipped($scanlines,$scan_data,$i)) { return undef; } - #if ($scanlines->{'skipped'}[$i]) { return undef; } + if (&should_be_skipped($scan_data,$i)) { return undef; } + if ($scanlines->{'skipped'}[$i]) { return undef; } if ($scanlines->{'corrected'}[$i]) {return $scanlines->{'corrected'}[$i];} return $scanlines->{'orig'}[$i]; } @@ -4839,21 +4855,12 @@ sub scantron_put_line { my ($scanlines,$scan_data,$i,$newline,$skip)=@_; if ($skip) { $scanlines->{'skipped'}[$i]=$newline; - &start_skipping($scan_data,$i); + &allow_skipping($scan_data,$i); return; } $scanlines->{'corrected'}[$i]=$newline; } -sub scantron_clear_skip { - my ($scanlines,$scan_data,$i)=@_; - if (exists($scanlines->{'skipped'}[$i])) { - undef($scanlines->{'skipped'}[$i]); - return 1; - } - return 0; -} - sub scantron_validate_ID { my ($r,$currentphase) = @_; @@ -5297,10 +5304,6 @@ SCANTRONFORM ($uname,$udom)=split(/:/,$uname); &Apache::lonnet::delenv('form.counter'); &Apache::lonnet::appenv(%$scan_record); - - if (&scantron_clear_skip($scanlines,$scan_data,$i)) { - &scantron_putfile($scanlines,$scan_data); - } my $i=0; foreach my $resource (@resources) {