--- loncom/homework/grades.pm 2005/04/07 07:03:23 1.258 +++ loncom/homework/grades.pm 2005/05/15 01:42:31 1.266 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.258 2005/04/07 07:03:23 albertel Exp $ +# $Id: grades.pm,v 1.266 2005/05/15 01:42:31 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2109,6 +2109,7 @@ sub processHandGrade { #---- Save the score and award for each student, if changed sub saveHandGrade { my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter,$part) = @_; + my @v_flag; my $usec = &Apache::lonnet::getsection($domain,$stuname, $env{'request.course.id'}); if (!&canmodify($usec)) { return('not_allowed'); } @@ -2116,45 +2117,45 @@ sub saveHandGrade { my @parts_graded; my %newrecord = (); my ($pts,$wgt) = ('',''); - foreach (split(/:/,$env{'form.partlist'.$newflg})) { + foreach my $new_part (split(/:/,$env{'form.partlist'.$newflg})) { #collaborator may vary for different parts - if ($submitter && $_ ne $part) { next; } - my $dropMenu = $env{'form.GD_SEL'.$newflg.'_'.$_}; + if ($submitter && $new_part ne $part) { next; } + my $dropMenu = $env{'form.GD_SEL'.$newflg.'_'.$new_part}; if ($dropMenu eq 'excused') { - if ($record{'resource.'.$_.'.solved'} ne 'excused') { - $newrecord{'resource.'.$_.'.solved'} = 'excused'; - if (exists($record{'resource.'.$_.'.awarded'})) { - $newrecord{'resource.'.$_.'.awarded'} = ''; + if ($record{'resource.'.$new_part.'.solved'} ne 'excused') { + $newrecord{'resource.'.$new_part.'.solved'} = 'excused'; + if (exists($record{'resource.'.$new_part.'.awarded'})) { + $newrecord{'resource.'.$new_part.'.awarded'} = ''; } - $newrecord{'resource.'.$_.'.regrader'}="$env{'user.name'}:$env{'user.domain'}"; + $newrecord{'resource.'.$new_part.'.regrader'}="$env{'user.name'}:$env{'user.domain'}"; } } elsif ($dropMenu eq 'reset status' - && exists($record{'resource.'.$_.'.solved'})) { #don't bother if no old records -> no attempts + && exists($record{'resource.'.$new_part.'.solved'})) { #don't bother if no old records -> no attempts foreach my $key (keys (%record)) { - if ($key=~/^resource\.\Q$_\E\./) { $newrecord{$key} = ''; } + if ($key=~/^resource\.\Q$new_part\E\./) { $newrecord{$key} = ''; } } - $newrecord{'resource.'.$_.'.regrader'}= + $newrecord{'resource.'.$new_part.'.regrader'}= "$env{'user.name'}:$env{'user.domain'}"; } elsif ($dropMenu eq '') { - $pts = ($env{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? - $env{'form.GD_BOX'.$newflg.'_'.$_} : - $env{'form.RADVAL'.$newflg.'_'.$_}); - if ($pts eq '' && $env{'form.GD_SEL'.$newflg.'_'.$_} eq '') { + $pts = ($env{'form.GD_BOX'.$newflg.'_'.$new_part} ne '' ? + $env{'form.GD_BOX'.$newflg.'_'.$new_part} : + $env{'form.RADVAL'.$newflg.'_'.$new_part}); + if ($pts eq '' && $env{'form.GD_SEL'.$newflg.'_'.$new_part} eq '') { next; } - $wgt = $env{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 : - $env{'form.WGT'.$newflg.'_'.$_}; + $wgt = $env{'form.WGT'.$newflg.'_'.$new_part} eq '' ? 1 : + $env{'form.WGT'.$newflg.'_'.$new_part}; my $partial= $pts/$wgt; - if ($partial eq $record{'resource.'.$_.'.awarded'}) { + if ($partial eq $record{'resource.'.$new_part.'.awarded'}) { #do not update score for part if not changed. next; } else { - push @parts_graded, $_; + push @parts_graded, $new_part; } - if ($record{'resource.'.$_.'.awarded'} ne $partial) { - $newrecord{'resource.'.$_.'.awarded'} = $partial; + if ($record{'resource.'.$new_part.'.awarded'} ne $partial) { + $newrecord{'resource.'.$new_part.'.awarded'} = $partial; } - my $reckey = 'resource.'.$_.'.solved'; + my $reckey = 'resource.'.$new_part.'.solved'; if ($partial == 0) { if ($record{$reckey} ne 'incorrect_by_override') { $newrecord{$reckey} = 'incorrect_by_override'; @@ -2165,15 +2166,21 @@ sub saveHandGrade { } } if ($submitter && - ($record{'resource.'.$_.'.submitted_by'} ne $submitter)) { - $newrecord{'resource.'.$_.'.submitted_by'} = $submitter; + ($record{'resource.'.$new_part.'.submitted_by'} ne $submitter)) { + $newrecord{'resource.'.$new_part.'.submitted_by'} = $submitter; } - $newrecord{'resource.'.$_.'.regrader'}= + $newrecord{'resource.'.$new_part.'.regrader'}= "$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') { + push (@v_flag,$new_part); + } } if (scalar(keys(%newrecord)) > 0) { - &version_portfiles(\%record, \@parts_graded, $env{'request.course.id'}, $symb, $domain, $stuname); + if (scalar(@v_flag)) { + &version_portfiles(\%record, \@parts_graded, $env{'request.course.id'}, $symb, $domain, $stuname, \@v_flag); + } &Apache::lonnet::cstore(\%newrecord,$symb, $env{'request.course.id'},$domain,$stuname); } @@ -2182,15 +2189,20 @@ sub saveHandGrade { # ----------- Handles creating versions for portfolio files as answers sub version_portfiles { - my ($record, $parts_graded, $courseid, $symb, $domain, $stuname) = @_; + my ($record, $parts_graded, $courseid, $symb, $domain, $stuname, $v_flag) = @_; + my $version_parts = join('|',@$v_flag); my $parts = join('|', @$parts_graded); my $portfolio_root = &Apache::loncommon::propath($domain, $stuname). '/userfiles/portfolio'; foreach my $key(keys %$record) { - if ($key =~ /^resource\.($parts)\./ && $key =~ /\.portfiles$/) { + 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"); foreach my $file (@portfiles) { + &Apache::lonnet::unmark_as_readonly($domain,$stuname,[$symb,$env{'request.course.id'}],$file); my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*$)/); my $version = 0; my @answer_file_parts = split(/\./, $answer_file); @@ -2212,20 +2224,22 @@ sub version_portfiles { } $version++; my $home_server = &Apache::lonnet::homeserver($stuname,$domain,undef); - $env{'form.copy'} = &Apache::lonnet::getfile("/uploaded/$domain/$stuname/$directory$answer_file"); - # $env{'form.copy.filename'}=''; - my $copy_result = &Apache::lonnet::finishuserfileupload($stuname,$domain,$home_server,'copy', + $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 $copy_result = &Apache::lonnet::finishuserfileupload($stuname,$domain,$home_server,'copy', '/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]); - &Apache::lonnet::logthis('copy result is '.$copy_result); - &Apache::lonnet::logthis('answer file is '.$answer_file. - ' becomes '.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]); - &Apache::lonnet::logthis('from dir list is '.$file_names[0].' has '.@file_name_parts.' parts'); + push(@v_portfiles, $answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]); + &Apache::lonnet::mark_as_readonly($domain,$stuname, + ['/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]], + [$symb,$env{'request.course.id'},'graded']); + } } - &Apache::lonnet::logthis('found key portfiles '.$key); - &Apache::lonnet::logthis('found value portfiles '.$$record{$key}); + $$record{$key} = join(',',@v_portfiles); } } - + return 'ok'; } @@ -2294,6 +2308,7 @@ sub viewgrades_js { function writeRadText(partid,weight) { var selval = document.classgrade["SELVAL_"+partid]; var radioButton = document.classgrade["RADVAL_"+partid]; + var override = document.classgrade["FORCE_"+partid].checked; var textbox = document.classgrade["TEXTVAL_"+partid]; if (selval[1].selected || selval[2].selected) { for (var i=0; i '. ''. ''. - ''."\n"; + ''. + ''."\n"; $ctsparts++; } $result.=''.''.''."\n". @@ -3771,7 +3787,7 @@ sub scantron_selectphase { - + @@ -4226,10 +4242,10 @@ sub scantron_do_warning { $r->print('

You have not selected a the format of the student\'s response data.

'); } } else { - my $warning=&scantron_warning_screen('Validate Records'); + my $warning=&scantron_warning_screen('Grading: Validate Records'); $r->print(< + STUFF }