'.
''.
@@ -401,7 +379,7 @@ LISTJAVASCRIPT
$gradeTable.=' '."\n";
my $ctr = 0;
- foreach my $student (sort {$$fullname{$a} cmp $$fullname{$b} } keys %$fullname) {
+ foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
my ($uname,$udom) = split(/:/,$student);
my (%status) =&student_gradeStatus($url,$symb,$udom,$uname,$partlist);
my $statusflg = '';
@@ -478,91 +456,175 @@ sub sub_page_js {
my $request = shift;
$request->print(<
- function updateRadio(radioButton,formtextbox,formsel,scores,weight) {
- var pts = formtextbox.value;
- var resetbox =false;
- if (isNaN(pts) || pts < 0) {
- alert("A number equal or greater than 0 is expected. Entered value = "+pts);
- for (var i=0; i weight) {
+ var resp = confirm("You entered a value ("+pts+
+ ") greater than the weight for the part. Accept?");
+ if (resp == false) {
+ gradeBox.value = "";
+ return;
+ }
}
- return;
- }
- if (pts > weight) {
- var resp = confirm("You entered a value ("+pts+
- ") greater than the weight for the part. Accept?");
- if (resp == false) {
- formtextbox.value = "";
- return;
- }
+ for (var i=0; i
+SUBJAVASCRIPT
+}
- }
- document.SCORE.submit();
- }
+#--- javascript for essay type problem --
+sub sub_page_kw_js {
+ my $request = shift;
+ $request->print(<
//===================== Show list of keywords ====================
function keywords(keyform) {
@@ -697,21 +759,21 @@ sub sub_page_js {
pWin.document.write("");
pWin.document.write("Subject ");
pWin.document.write(" ");
- pWin.document.write(" ");
+ pWin.document.write(" ");
}
function displaySavedMsg(ctr,msg,shwsel) {
pWin.document.write("");
pWin.document.write(""+ctr+" ");
pWin.document.write(" ");
- pWin.document.write(" ");
+ pWin.document.write(" ");
}
function newMsg(newmsg,shwsel) {
pWin.document.write("");
pWin.document.write("New ");
pWin.document.write(" ");
- pWin.document.write(" ");
+ pWin.document.write(" ");
}
function msgTail() {
@@ -820,6 +882,90 @@ function displaySavedMsg(ctr,msg,shwsel)
SUBJAVASCRIPT
}
+#--- 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)' :
+ 'problem weight assigned by computer ');
+ $wgt = ($wgt > 0 ? $wgt : '1');
+ my $score = ($$record{'resource.'.$partid.'.awarded'} eq '' ?
+ '' : $$record{'resource.'.$partid.'.awarded'}*$wgt);
+ my $result=' '."\n";
+
+ $result.=''."\n";
+ return $result;
+}
+
+sub show_problem {
+ my ($request,$symb,$uname,$udom,$removeform,$viewon) = @_;
+ my $rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom,
+ $ENV{'request.course.id'});
+ if ($removeform) {
+ $rendered=~s|||g;
+ $rendered=~s|name="submit"|name="would_have_been_submit"|g;
+ }
+ my $companswer=&Apache::loncommon::get_student_answers($symb,$uname,$udom,
+ $ENV{'request.course.id'});
+ if ($removeform) {
+ $companswer=~s|||g;
+ $rendered=~s|name="submit"|name="would_have_been_submit"|g;
+ }
+ my $result.='';
+ $result.='';
+ $result.=' View of the problem - '.$ENV{'form.fullname'}.
+ ' ' if ($viewon);
+ $result.=''.$rendered.' ';
+ $result.='Correct answer: '.$companswer;
+ $result.='
';
+ $result.='
';
+ return $result;
+# $request->print($result);
+}
# --------------------------- show submissions of a student, option to grade
sub submission {
@@ -835,30 +981,20 @@ sub submission {
my $symb=($ENV{'form.symb'} ne '' ? $ENV{'form.symb'} : (&Apache::lonnet::symbread($url)));
if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; }
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : '');
- $ENV{'form.vProb'} = $ENV{'form.vProb'} ne '' ? $ENV{'form.vProb'} : 'yes';
- my ($classlist,$seclist,$ids,$stusec,$fullname);
+# $ENV{'form.vProb'} = $ENV{'form.vProb'} ne '' ? $ENV{'form.vProb'} : 'yes';
# header info
if ($counter == 0) {
&sub_page_js($request);
+ &sub_page_kw_js($request);
$request->print(' Submission Record '."\n".
- ' Resource: '.$url.' '."\n");
+ ' Problem: '.
+ &Apache::lonnet::metadata($url,'title').' '."\n");
# option to display problem, only once else it cause problems
# with the form later since the problem has a form.
- if ($ENV{'form.vProb'} eq 'yes') {
- my $rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom,
- $ENV{'request.course.id'});
- my $companswer=&Apache::loncommon::get_student_answers($symb,$uname,$udom,
- $ENV{'request.course.id'});
- my $result.='';
- $result.='';
- $result.=' View of the problem - '.$ENV{'form.fullname'}.
- ' '.$rendered.' ';
- $result.='Correct answer: '.$companswer;
- $result.='
';
- $result.='
';
- $request->print($result);
+ if ($ENV{'form.vProb'} eq 'yes' or !$ENV{'form.vProb'}) {
+ $request->print(&show_problem($request,$symb,$uname,$udom,0,1));
}
# kwclr is the only variable that is guaranteed to be non blank
@@ -921,6 +1057,11 @@ KEYWORDS
}
}
+ if ($ENV{'form.vProb'} eq 'all') {
+ $request->print(' ') if ($counter > 0);
+ $request->print(&show_problem($request,$symb,$uname,$udom,1,1));
+ }
+
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname);
my ($partlist,$handgrade) = &response_type($url);
@@ -937,49 +1078,61 @@ KEYWORDS
# If this is handgraded, then check for collaborators
my @col_fullnames;
+ my ($classlist,$fullname);
if ($ENV{'form.handgrade'} eq 'yes') {
my @col_list;
- ($classlist,$seclist,$ids,$stusec,$fullname) = &getclasslist('all','0');
+ ($classlist,undef,$fullname) = &getclasslist('all','0');
for (keys (%$handgrade)) {
my $ncol = &Apache::lonnet::EXT('resource.'.$_.
- '.maxcollaborators',$symb,$udom,$uname);
- if ($ncol > 0) {
- s/\_/\./g;
- if ($record{'resource.'.$_.'.collaborators'} ne '') {
- my (@collaborators) = split(/,?\s+/,
- $record{'resource.'.$_.'.collaborators'});
- my (@badcollaborators);
- if (scalar(@collaborators) != 0) {
- $result.='Collaborators: ';
- foreach my $collaborator (@collaborators) {
- $collaborator = $collaborator =~ /\@|:/ ?
- (split(/@|:/,$collaborator))[0] : $collaborator;
- next if ($collaborator eq $uname);
- if (!grep /^$collaborator:/i,keys %$classlist) {
- push @badcollaborators,$collaborator;
- next;
- }
- push @col_list, $collaborator;
- my ($lastname,$givenn) = split(/,/,$$fullname{$collaborator.':'.$udom});
- push @col_fullnames, $givenn.' '.$lastname;
- $result.=$$fullname{$collaborator.':'.$udom}.' ';
- }
- $result.=' '."\n";
- $result.=''.
- 'This student has submitted '.
- (scalar (@badcollaborators) > 1 ? '' : 'an').
- ' invalid collaborator'.(scalar (@badcollaborators) > 1 ? 's. ' : '. ').
- (join ', ',@badcollaborators).'
'
- if (scalar(@badcollaborators) > 0);
-
- $result.=''.
- 'This student has submitted too many collaborators. Maximum is '.
- $ncol.'.
' if (scalar(@collaborators) > $ncol);
- $result.=' '."\n";
- }
- }
- }
+ '.maxcollaborators',
+ $symb,$udom,$uname);
+ next if ($ncol <= 0);
+ s/\_/\./g;
+ next if ($record{'resource.'.$_.'.collaborators'} eq '');
+ my (@collaborators) = split(/,?\s+/,
+ $record{'resource.'.$_.'.collaborators'});
+ my (@badcollaborators);
+ if (scalar(@collaborators) != 0) {
+ $result.='Collaborators: ';
+ foreach my $collaborator (@collaborators) {
+ my ($co_name,$co_dom) = split /\@|:/,$collaborator;
+ $co_dom = $udom if (! defined($co_dom));
+ next if ($co_name eq $uname && $co_dom eq $udom);
+ # Doing this grep allows 'fuzzy' specification
+ my @Matches = grep /^$co_name:$co_dom/i,
+ keys %$classlist;
+ if (! scalar(@Matches)) {
+ push @badcollaborators,$collaborator;
+ next;
+ }
+ push @col_list, @Matches;
+ foreach (@Matches) {
+ my ($lastname,$givenn) = split(/,/,$$fullname{$_});
+ push @col_fullnames, $givenn.' '.$lastname;
+ $result.=$$fullname{$_}.' ';
+ }
+ }
+ $result.=' '."\n";
+ if (scalar(@badcollaborators) > 0) {
+ $result.='';
+ $result.='This student has submitted ';
+ if (scalar(@badcollaborators) == 1) {
+ $result .= 'an invalid collaborator';
+ } else {
+ $result .= 'invalid collaborators';
+ }
+ $result .= ': '.join(', ',@badcollaborators);
+
+ }
+ if (scalar(@collaborators > $ncol)) {
+ $result .= '';
+ $result .= 'This student has sumbitted too many '.
+ 'collaborators. Maximum is '.$ncol;
+ $result .= '
';
+ }
+ $result.=' '."\n";
+ }
}
}
$request->print($result."\n");
@@ -1002,7 +1155,7 @@ KEYWORDS
} else {
my ($string,$timestamp)=
&get_last_submission (%record);
- my $lastsubonly.=''.
+ my $lastsubonly=''.
($$timestamp eq '' ? '' : 'Date Submitted: '.
$$timestamp).'';
if ($$timestamp eq '') {
@@ -1015,7 +1168,12 @@ KEYWORDS
my ($ressub,$subval) = split(/:/,$_,2);
$lastsubonly.=' Part '.
$partid.' ( ID '.$respid.
- ' ) Answer: '.
+ ' ) '.
+ ($record{"resource.$partid.$respid.uploadedurl"}?
+ ' File uploaded by student Like all files provided by users, this file may contain virusses ':'').
+ 'Answer: '.
&keywords_highlight($subval).' '."\n"
if ($ENV{'form.lastSub'} eq 'lastonly' ||
($ENV{'form.lastSub'} eq 'hdgrade' &&
@@ -1067,48 +1225,10 @@ KEYWORDS
$seen{$partid}++;
next if ($$handgrade{$_} =~ /:no$/);
push @partlist,$partid;
- my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb,$udom,$uname);
- my $wgtmsg = ($wgt > 0 ? '(problem weight)' :
- 'problem weight assigned by computer ');
- $wgt = ($wgt > 0 ? $wgt : '1');
- my $score = ($record{'resource.'.$partid.'.awarded'} eq '' ?
- '' : $record{'resource.'.$partid.'.awarded'}*$wgt);
- $result=' ';
- $result.=''."\n";
- $request->print($result);
+# $request->print($result);
}
$result=' '."\n";
@@ -1126,7 +1246,7 @@ KEYWORDS
' '."\n";
if ($ENV{'form.handgrade'} eq 'yes') {
$endform.=' '."\n";
my $ntstu =''.
'1 2 '.
@@ -1139,9 +1259,9 @@ KEYWORDS
$endform.=' '."\n";
}
$endform.=' '."\n".
+ 'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '."\n".
' ';
+ 'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> ';
$endform.='(Next and Previous do not save the scores.)'."\n"
if ($ENV{'form.handgrade'} eq 'yes');
$endform.='
';
@@ -1161,9 +1281,9 @@ sub get_last_submission {
for ($version=1;$version<=$returnhash{'version'};$version++) {
foreach (sort(split(/\:/,$returnhash{$version.':keys'}))) {
$lasthash{$_}=$returnhash{$version.':'.$_};
- if ($returnhash{$version.':'.$_} =~ /(SUBMITTED|DRAFT)$/) {
+# if ($returnhash{$version.':'.$_} =~ /(SUBMITTED|DRAFT)$/) {
$timestamp = scalar(localtime($returnhash{$version.':timestamp'}));
- }
+# }
}
}
foreach ((keys %lasthash)) {
@@ -1187,8 +1307,13 @@ sub keywords_highlight {
(my $styleoff = $styleon) =~ s/\\<\//;
my @keylist = split(/[,\s+]/,$ENV{'form.keywords'});
foreach (@keylist) {
- $string =~ s/\b$_(\b|\.)/\$styleon$_$styleoff\<\/font\>/gi;
+ $string =~ s/\b\Q$_\E(\b|\.)/\$styleon$_$styleoff\<\/font\>/gi;
}
+ # This is not really the right place to do this, but I cannot find a
+ # better one at this time. So here we go - the m in the s:::mg causes
+ # ^ to match the beginning of a new line. So we replace(???) the beginning
+ # of the line with to make things formatted a little better.
+ $string =~ s:^: :mg;
return $string;
}
@@ -1206,10 +1331,14 @@ sub processHandGrade {
while ($ctr < $ngrade) {
my ($uname,$udom) = split(/:/,$ENV{'form.unamedom'.$ctr});
my ($errorflag) = &saveHandGrade($request,$url,$symb,$uname,$udom,$ctr);
+ if ($errorflag eq 'no_score') {
+ $ctr++;
+ next;
+ }
my $includemsg = $ENV{'form.includemsg'.$ctr};
my ($subject,$message,$msgstatus) = ('','','');
- if ($includemsg =~ /savemsg|new$ctr/) {
+ if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) {
$subject = $ENV{'form.msgsub'} if ($includemsg =~ /^msgsub/);
my (@msgnum) = split(/,/,$includemsg);
foreach (@msgnum) {
@@ -1297,10 +1426,10 @@ sub processHandGrade {
$laststu = $firststu if ($ctr > $ngrade);
}
- my ($classlist,$seclist,$ids,$stusec,$fullname) = &getclasslist($ENV{'form.section'},'0');
+ my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
my (@parsedlist,@nextlist);
my ($nextflg) = 0;
- foreach (sort {$$fullname{$a} cmp $$fullname{$b} } keys %$fullname) {
+ foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
if ($nextflg == 1 && $button =~ /Next$/) {
push @parsedlist,$_;
}
@@ -1359,12 +1488,17 @@ sub saveHandGrade {
my %newrecord;
foreach (split(/:/,$ENV{'form.partlist'.$newflg})) {
if ($ENV{'form.GD_SEL'.$newflg.'_'.$_} eq 'excused') {
- $newrecord{'resource.'.$_.'.solved'} = 'excused'
- if ($record{'resource.'.$_.'.solved'} ne 'excused');
+ if ($record{'resource.'.$_.'.solved'} ne 'excused') {
+ $newrecord{'resource.'.$_.'.solved'} = 'excused';
+ if (exists($record{'resource.'.$_.'.awarded'})) {
+ $newrecord{'resource.'.$_.'.awarded'} = '';
+ }
+ }
} else {
my $pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ?
$ENV{'form.GD_BOX'.$newflg.'_'.$_} :
$ENV{'form.RADVAL'.$newflg.'_'.$_});
+ return 'no_score' if ($pts eq '' && $ENV{'form.GD_SEL'.$newflg.'_'.$_} eq '');
my $wgt = $ENV{'form.WGT'.$newflg.'_'.$_} eq '' ? 1 :
$ENV{'form.WGT'.$newflg.'_'.$_};
my $partial= $pts/$wgt;
@@ -1441,10 +1575,10 @@ sub viewgrades_js {
for (i=0;iManual Grading ';
- $result.='Resource: '.$ENV{'form.url'}.' '."\n";
+ $result.='Problem: '.&Apache::lonnet::metadata($ENV{'form.url'},'title')
+ .' '."\n";
#view individual student submission form - called using Javascript viewOneStudent
$result.=&jscriptNform($url,$symb);
@@ -1608,7 +1743,7 @@ sub viewgrades {
$result.='';
$result.= ' or /'.
+ $partid.'" size="4" '.'onChange="javascript:writePoint(\''.
+ $partid.'\','.$weight{$partid}.',\'textval\')" /> /'.
$weight{$partid}.' (problem weight) '."\n";
$result.= ' '.
+ 'onChange="javascript:writeRadText(\''.$partid.'\','.
+ $weight{$partid}.')"> '.
' '.
'excused '."\n";
$ctsparts++;
@@ -1664,25 +1799,23 @@ sub viewgrades {
my (@parts) = sort(&getpartlist($url));
foreach my $part (@parts) {
my $display=&Apache::lonnet::metadata($url,$part.'.display');
- next if ($display =~ /^Number of Attempts/);
if (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); }
if ($display =~ /^Partial Credit Factor/) {
- $_ = $display;
- my ($partid) = /.*?(\d+).*/;
- $result.='Score Part '.$partid.' (weight = '.
+ my ($partid) = &split_part_type($part);
+ $result.=' Score Part '.$partid.' (weight = '.
$weight{$partid}.') '."\n";
next;
}
- $display =~ s/Problem Status/Grade Status /;
+ $display =~ s|Problem Status|Grade Status |;
$result.=''.$display.' '."\n";
}
$result.='';
#get info for each student
#list all the students - with points and grade status
- my ($classlist,$seclist,$ids,$stusec,$fullname) = &getclasslist($ENV{'form.section'},'0');
+ my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
my $ctr = 0;
- foreach (sort {$$fullname{$a} cmp $$fullname{$b} } keys %$fullname) {
+ foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) {
my ($uname,$udom) = split(/:/);
$result.=' '."\n";
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'},
@@ -1706,31 +1839,37 @@ sub viewstudentgrade {
''.$fullname.' '.
''.$uname.' '.$udom.' '."\n";
- foreach my $part (@$parts) {
- my ($temp,$part,$type)=split(/_/,$part);
+ foreach my $apart (@$parts) {
+ my ($part,$type) = &split_part_type($apart);
my $score=$record{"resource.$part.$type"};
- next if $type eq 'tries';
if ($type eq 'awarded') {
my $pts = $score eq '' ? '' : $score*$$weight{$part};
$result.=' '."\n";
+ 'GD_'.$uname.'_'.$part.'_awarded_s" value="'.$pts.'" />'."\n";
$result.=' '."\n";
} elsif ($type eq 'solved') {
my ($status,$foo)=split(/_/,$score,2);
$status = 'nothing' if ($status eq '');
- $result.=' '."\n";
+ $result.=' '."\n";
$result.=''."\n";
+ 'GD_'.$uname.'_'.$part.'_solved" '.
+ 'onChange="javascript:changeOneScore(\''.$part.'\',\''.$uname.'\')" >'."\n";
my $optsel = ' excused '."\n";
$optsel = ' excused '."\n"
if ($status eq 'excused');
$result.=$optsel;
$result.=" \n";
+ } else {
+ $result.=' '.
+ "\n";
+ $result.=' '."\n";
}
}
$result.='';
@@ -1745,7 +1884,8 @@ sub editgrades {
my $symb=$ENV{'form.symb'};
my $url =$ENV{'form.url'};
my $title='Current Grade Status ';
- $title.='Resource: '.$ENV{'form.url'}.' '."\n";
+ $title.='Problem: '.
+ &Apache::lonnet::metadata($ENV{'form.url'},'title').' '."\n";
$title.='Section: '.$ENV{'form.section'}.' '."\n";
$title.= &show_grading_menu_form ($symb,$url);
my $result= ''."\n";
@@ -1759,24 +1899,44 @@ sub editgrades {
'ungraded' =>'ungraded_attempted',
'nothing' => '',
);
- my ($classlist,$seclist,$ids,$stusec,$fullname) = &getclasslist($ENV{'form.section'},'0');
+ my ($classlist,undef,$fullname) = &getclasslist($ENV{'form.section'},'0');
my (@partid);
my %weight = ();
+ my %columns = ();
my ($i,$ctr,$count,$rec_update) = (0,0,0,0);
+
+ my (@parts) = sort(&getpartlist($url));
+ my $header;
while ($ctr < $ENV{'form.totalparts'}) {
my $partid = $ENV{'form.partid_'.$ctr};
push @partid,$partid;
$weight{$partid} = $ENV{'form.weight_'.$partid};
$ctr++;
- $result .= ' Part '.$partid.
- ' (Weight = '.$weight{$partid}.') ';
}
- $result .= '';
- foreach (@partid) {
- $result .= ' Old Score '.
+ foreach my $partid (@partid) {
+ $header .= ' Old Score '.
' New Score ';
+ $columns{$partid}=2;
+ foreach my $stores (@parts) {
+ my ($part,$type) = &split_part_type($stores);
+ if ($part !~ m/^\Q$partid\E/) { next;}
+ if ($type eq 'awarded' || $type eq 'solved') { next; }
+ my $display=&Apache::lonnet::metadata($url,$stores.'.display');
+ $display =~ s/\[Part: (\w)+\]//;
+ $header .= ' Old '.$display.' '.
+ ' New '.$display.' ';
+ $columns{$partid}+=2;
+ }
}
+ foreach my $partid (@partid) {
+ $result .= 'Part '.$partid.
+ ' (Weight = '.$weight{$partid}.') ';
+
+ }
+ $result .= ' ';
+ $result .= $header;
$result .= ' '."\n";
for ($i=0; $i<$ENV{'form.total'}; $i++) {
@@ -1784,38 +1944,54 @@ sub editgrades {
my %newrecord;
my $updateflag = 0;
my @userdom = grep /^$user:/,keys %$classlist;
- my ($foo,$udom) = split(/:/,$userdom[0]);
+ my (undef,$udom) = split(/:/,$userdom[0]);
$result .= ''.$user.' '.
$$fullname{$userdom[0]}.' ';
-
foreach (@partid) {
- my $old_aw = $ENV{'form.GD_'.$user.'_'.$_.'_aw_s'};
- my $old_part = $old_aw eq '' ? '' : $old_aw/$weight{$_};
- my $old_score = $scoreptr{$ENV{'form.GD_'.$user.'_'.$_.'_sv_s'}};
-
- my $awarded = $ENV{'form.GD_'.$user.'_'.$_.'_aw'};
- my $partial = $awarded eq '' ? '' : $awarded/$weight{$_};
+ my $old_aw = $ENV{'form.GD_'.$user.'_'.$_.'_awarded_s'};
+ my $old_part_pcr = $old_aw/($weight{$_} ne '0' ? $weight{$_}:1);
+ my $old_part = $old_aw eq '' ? '' : $old_part_pcr;
+ my $old_score = $scoreptr{$ENV{'form.GD_'.$user.'_'.$_.'_solved_s'}};
+
+ my $awarded = $ENV{'form.GD_'.$user.'_'.$_.'_awarded'};
+ my $pcr = $awarded/($weight{$_} ne '0' ? $weight{$_} : 1);
+ my $partial = $awarded eq '' ? '' : $pcr;
my $score;
if ($partial eq '') {
- $score = $scoreptr{$ENV{'form.GD_'.$user.'_'.$_.'_sv_s'}};
+ $score = $scoreptr{$ENV{'form.GD_'.$user.'_'.$_.'_solved_s'}};
} elsif ($partial > 0) {
$score = 'correct_by_override';
} elsif ($partial == 0) {
$score = 'incorrect_by_override';
}
- $score = 'excused' if (($ENV{'form.GD_'.$user.'_'.$_.'_sv'} eq 'excused') &&
+ $score = 'excused' if (($ENV{'form.GD_'.$user.'_'.$_.'_solved'} eq 'excused') &&
($score ne 'excused'));
$result .= ''.$old_aw.' '.
''.$awarded.
($score eq 'excused' ? $score : '').' ';
- next if ($old_part eq $partial && $old_score eq $score);
-
- $updateflag = 1;
- $newrecord{'resource.'.$_.'.awarded'} = $partial if $partial ne '';
- $newrecord{'resource.'.$_.'.solved'} = $score;
- $rec_update++;
+ if (!($old_part eq $partial && $old_score eq $score)) {
+ $updateflag = 1;
+ $newrecord{'resource.'.$_.'.awarded'} = $partial if $partial ne '';
+ $newrecord{'resource.'.$_.'.solved'} = $score;
+ $rec_update++;
+ }
+
+ my $partid=$_;
+ foreach my $stores (@parts) {
+ my ($part,$type) = &split_part_type($stores);
+ if ($part !~ m/^\Q$partid\E/) { next;}
+ if ($type eq 'awarded' || $type eq 'solved') { next; }
+ my $old_aw = $ENV{'form.GD_'.$user.'_'.$part.'_'.$type.'_s'};
+ my $awarded = $ENV{'form.GD_'.$user.'_'.$part.'_'.$type};
+ if ($awarded ne '' && $awarded ne $old_aw) {
+ $newrecord{'resource.'.$part.'.'.$type}= $awarded;
+ $updateflag=1;
+ }
+ $result .= ''.$old_aw.' '.
+ ''.$awarded.' ';
+ }
}
$result .= ' '."\n";
if ($updateflag) {
@@ -1831,6 +2007,15 @@ sub editgrades {
'Total number of students = '.$ENV{'form.total'}.' ';
return $title.$msg.$result;
}
+
+sub split_part_type {
+ my ($partstr) = @_;
+ my ($temp,@allparts)=split(/_/,$partstr);
+ my $type=pop(@allparts);
+ my $part=join('.',@allparts);
+ return ($part,$type);
+}
+
#------------- end of section for handling grading by section/class ---------
#
#----------------------------------------------------------------------------
@@ -1924,7 +2109,8 @@ sub csvuploadmap_header {
}
my $result='';
- $result.='Resource: '.$url.' ';
+ $result.='Problem: '.&Apache::lonnet::metadata($url,'title')
+ .' ';
my ($partlist,$handgrade) = &response_type($url);
my ($resptype,$hdgrade)=('','no');
for (sort keys(%$handgrade)) {
@@ -2108,7 +2294,8 @@ sub gradingmenu {
if (!$symb) {return '';}
my $result=' Select a Grading Method ';
$result.='';
- $result.='Resource: '.$url.' ';
+ $result.='Problem: '.
+ &Apache::lonnet::metadata($ENV{'form.url'},'title').' ';
my ($partlist,$handgrade) = &response_type($url);
my ($resptype,$hdgrade)=('','no');
for (sort keys(%$handgrade)) {
@@ -2123,6 +2310,7 @@ sub gradingmenu {
$result.=&view_edit_entire_class_form($symb,$url).' ';
$result.=&upcsvScores_form($symb,$url).' ';
$result.=&viewGradeaStu_form($symb,$url,$resptype,$hdgrade).' ';
+ $result.=&gradeByPage_form($symb,$url,$resptype,$hdgrade).' ';
$result.=&verifyReceipt_form($symb,$url)
if ((&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) && ($symb));
@@ -2132,7 +2320,7 @@ sub gradingmenu {
#--- Menu for grading a section or the whole class ---
sub view_edit_entire_class_form {
my ($symb,$url)=@_;
- my ($classlist,$sections) = &getclasslist('all','0');
+ my ($classlist,$sections,undef) = &getclasslist('all','0');
my $result.=''."\n";
$result.=''."\n";
$result.=' Grade Entire Section or Class '."\n";
@@ -2194,12 +2382,7 @@ sub viewGradeaStu_form {
my $result.=''."\n";
$result.=''."\n";
$result.=' ';
- if ($handgrade eq 'yes') {
- $result.="View/Grade ";
- } else {
- $result.="View ";
- }
- $result.='an Individual Student\'s Submission '."\n";
+ $result.=($handgrade eq 'yes' ? 'View/Grade' : 'View').' an Individual Student\'s Submission'."\n";
$result.=''."\n";
$result.='