--- loncom/homework/grades.pm 2006/10/13 21:53:34 1.379
+++ loncom/homework/grades.pm 2006/11/03 20:04:08 1.383
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.379 2006/10/13 21:53:34 albertel Exp $
+# $Id: grades.pm,v 1.383 2006/11/03 20:04:08 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1469,7 +1469,8 @@ sub get_increment {
#--- displays the grading box, used in essay type problem and grading by page/sequence
sub gradeBox {
my ($request,$symb,$uname,$udom,$counter,$partid,$record) = @_;
- my $checkIcon = ' ';
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb,$udom,$uname);
my $wgtmsg = ($wgt > 0 ? '(problem weight)' :
@@ -1492,10 +1493,10 @@ sub gradeBox {
my $increment = &get_increment();
$result.='
'."\n"; # display radio buttons in a nice table 10 across
while ($thisweight<=$wgt) {
- $result.= ' '.$thisweight." \n";
+ ($score eq $thisweight ? 'checked':'').' /> '.$thisweight."\n";
$result.=(($ctr+1)%10 == 0 ? ' ' : '');
$thisweight += $increment;
$ctr++;
@@ -1512,14 +1513,14 @@ sub gradeBox {
$result.=''."\n";
if ($$record{'resource.'.$partid.'.solved'} eq 'excused') {
- $result.=' '.
+ $result.=' '.
'excused ';
} else {
- $result.=' '.
+ $result.=' '.
'excused ';
}
$result.='reset status '."\n";
- $result.="  \n";
+ $result.=" \n";
$result.=' '."\n".
' '."\n".
' dir_config('lonIconsURL').
+ my $checkIcon = ' ';
# header info
@@ -2420,17 +2426,8 @@ sub saveHandGrade {
}
&Apache::lonnet::cstore(\%newrecord,$symb,
$env{'request.course.id'},$domain,$stuname);
- my @ungraded_parts;
- foreach my $part (@parts) {
- if ( !defined($record{'resource.'.$part.'.awarded'})
- && !defined($newrecord{'resource.'.$part.'.awarded'}) ) {
- push(@ungraded_parts, $part);
- }
- }
- if ( !@ungraded_parts ) {
- &Apache::bridgetask::remove_from_queue('gradingqueue',$symb,$cdom,
- $cnum,$domain,$stuname);
- }
+ &check_and_remove_from_queue(\@parts,\%record,\%newrecord,$symb,
+ $cdom,$cnum,$domain,$stuname);
}
if ($aggregateflag) {
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate,
@@ -2439,6 +2436,24 @@ sub saveHandGrade {
return ('',$pts,$wgt);
}
+sub check_and_remove_from_queue {
+ my ($parts,$record,$newrecord,$symb,$cdom,$cnum,$domain,$stuname) = @_;
+ my @ungraded_parts;
+ foreach my $part (@{$parts}) {
+ if ( $record->{ 'resource.'.$part.'.awarded'} eq ''
+ && $record->{ 'resource.'.$part.'.solved' } ne 'excused'
+ && $newrecord->{'resource.'.$part.'.awarded'} eq ''
+ && $newrecord->{'resource.'.$part.'.solved' } ne 'excused'
+ ) {
+ push(@ungraded_parts, $part);
+ }
+ }
+ if ( !@ungraded_parts ) {
+ &Apache::bridgetask::remove_from_queue('gradingqueue',$symb,$cdom,
+ $cnum,$domain,$stuname);
+ }
+}
+
sub handback_files {
my ($request,$symb,$stuname,$domain,$newflg,$new_part,$newrecord) = @_;
my $portfolio_root = &propath($domain,$stuname).'/userfiles/portfolio';
@@ -3767,6 +3782,9 @@ LISTJAVASCRIPT
' '."\n".
' '." \n";
+ $result.=' '.&mt('Use CODE:').' '.
+ ' '."\n";
+
$result.=' " /> '."\n";
@@ -3797,8 +3815,8 @@ LISTJAVASCRIPT
$studentTable.=($ptr%2 == 0 ? ' ' : '');
$ptr++;
}
- $studentTable.=' ' if ($ptr%2 == 0);
- $studentTable.='
'."\n";
+ $studentTable.=' ' if ($ptr%2 == 0);
+ $studentTable.=''."\n";
$studentTable.=' " />'."\n";
@@ -3821,9 +3839,10 @@ sub getSymbMap {
1,0,1);
for my $sequence ($navmap->getById('0.0'), @sequences) {
if ($navmap->hasResource($sequence, sub { shift->is_problem(); }, 0) ) {
- my $title = $minder.'.'.$sequence->compTitle();
- push @titles, $title; # minder in case two titles are identical
- $symbx{$title} = $sequence->symb();
+ my $title = $minder.'.'.
+ &HTML::Entities::encode($sequence->compTitle(),'"\'&');
+ push(@titles, $title); # minder in case two titles are identical
+ $symbx{$title} = &HTML::Entities::encode($sequence->symb(),'"\'&');
$minder++;
}
}
@@ -3859,6 +3878,11 @@ sub displayPage {
my $result=' '.$env{'form.title'}.' ';
$result.=' Student: '.&nameUserString(undef,$$fullname{$env{'form.student'}},$uname,$udom).
' '."\n";
+ if (&Apache::lonnet::validCODE($env{'form.CODE'})) {
+ $result.=' CODE: '.$env{'form.CODE'}.' '."\n";
+ } else {
+ delete($env{'form.CODE'});
+ }
&sub_page_js($request);
$request->print($result);
@@ -3883,7 +3907,12 @@ sub displayPage {
' '."\n".
' '."\n";
- my $checkIcon = ' '."\n";
+ }
+ my $checkIcon = ' ';
$studentTable.=' Note: Problems graded correct by the computer are marked with a '.$checkIcon.
@@ -3908,11 +3937,12 @@ sub displayPage {
$studentTable.=''.$prob.
(scalar(@{$parts}) == 1 ? '' : ' ('.scalar(@{$parts}).' parts)').' ';
$studentTable.='';
+ my %form = ('CODE' => $env{'form.CODE'},);
if ($env{'form.vProb'} eq 'yes' ) {
$studentTable.=&show_problem($request,$symbx,$uname,$udom,1,
- undef,'both');
+ undef,'both',\%form);
} else {
- my $companswer = &Apache::loncommon::get_student_answers($symbx,$uname,$udom,$env{'request.course.id'});
+ my $companswer = &Apache::loncommon::get_student_answers($symbx,$uname,$udom,$env{'request.course.id'},%form);
$companswer =~ s|||g;
# while ($companswer =~ /()/s) { # '."\n".
' '.
+ 'onClick="javascript:checkSubmitPage(this.form,'.$question.');" />'.
''."\n";
$studentTable.=&show_grading_menu_form($symb);
$request->print($studentTable);
@@ -4180,9 +4210,8 @@ sub updateGradeByPage {
$displayPts[1].=' Part: '.$display_part.' = '.
(($score eq 'excused') ? 'excused' : $newpts).
' ';
-
$question++;
- next if ($dropMenu eq 'reset status' || ($newpts == $oldpts && $score ne 'excused'));
+ next if ($dropMenu eq 'reset status' || ($newpts eq $oldpts && $score ne 'excused'));
$newrecord{'resource.'.$partid.'.awarded'} = $partial if $partial ne '';
$newrecord{'resource.'.$partid.'.solved'} = $score if $score ne '';
@@ -4192,9 +4221,24 @@ sub updateGradeByPage {
$changeflag++;
}
if (scalar(keys(%newrecord)) > 0) {
+ my %record =
+ &Apache::lonnet::restore($symbx,$env{'request.course.id'},
+ $udom,$uname);
+
+ if (&Apache::lonnet::validCODE($env{'form.CODE'})) {
+ $newrecord{'resource.CODE'} = $env{'form.CODE'};
+ } elsif (&Apache::lonnet::validCODE($record{'resource.CODE'})) {
+ $newrecord{'resource.CODE'} = '';
+ }
&Apache::lonnet::cstore(\%newrecord,$symbx,$env{'request.course.id'},
$udom,$uname);
+ %record = &Apache::lonnet::restore($symbx,
+ $env{'request.course.id'},
+ $udom,$uname);
+ &check_and_remove_from_queue($parts,\%record,undef,$symbx,
+ $cdom,$cnum,$udom,$uname);
}
+
if ($aggregateflag) {
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate,
$env{'course.'.$env{'request.course.id'}.'.domain'},
@@ -4308,14 +4352,14 @@ sub scantron_CODElist {
}
sub scantron_CODEunique {
- my $result='
+ my $result='
Yes
-
-
+
+
No
- ';
+ ';
return $result;
}
@@ -5626,8 +5670,9 @@ SCANTRONFORM
'grade_domain' =>$udom,
'grade_courseid'=>$env{'request.course.id'},
'grade_symb' =>$resource->symb());
- if (exists($scan_record->{'scantron.CODE'}) &&
- $scan_record->{'scantron.CODE'}) {
+ if (exists($scan_record->{'scantron.CODE'})
+ &&
+ &Apache::lonnet::validCODE($scan_record->{'scantron.CODE'})) {
$form{'CODE'}=$scan_record->{'scantron.CODE'};
} else {
$form{'CODE'}='';