';
+ my $display_part=&get_display_part($partID,$symb);
+ $result.='
Part: '.$display_part.' '.
+ $resID.'
'.
+ '
Type: '.$responsetype.'
';
# '
Handgrade: '.$handgrade.'
';
+ }
}
$result.=''."\n";
return $result,$responseType,$hdgrade,$partlist,$handgrade;
@@ -589,7 +588,7 @@ sub verifyreceipt {
my $receipt = &Apache::lonnet::recprefix($courseid).'-'.
$env{'form.receipt'};
$receipt =~ s/[^\-\d]//g;
- my $symb = &Apache::lonnet::symbread();
+ my ($symb) = &get_symb($request);
my $title.='
Verifying Submission Receipt '.
$receipt.'
'."\n".
@@ -1470,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)' :
@@ -1493,10 +1493,10 @@ sub gradeBox {
my $increment = &get_increment();
$result.='
'."\n"; # display radio buttons in a nice table 10 across
while ($thisweight<=$wgt) {
- $result.= '
'.$$string[0];
} else {
my %seenparts;
- for my $part (sort keys(%$handgrade)) {
- my ($partid,$respid) = split(/_/,$part);
+ my @part_response_id = &flatten_responseType($responseType);
+ foreach my $part (@part_response_id) {
+ my ($partid,$respid) = @{ $part };
my $display_part=&get_display_part($partid,$symb);
if ($env{"form.$uname:$udom:$partid:submitted_by"}) {
if (exists($seenparts{$partid})) { next; }
@@ -1883,7 +1890,7 @@ KEYWORDS
}
foreach (@$string) {
my ($partid,$respid) = /^resource\.([^\.]*)\.([^\.]*)\.submission/;
- if ($part ne ($partid.'_'.$respid)) { next; }
+ if (join('_',@{$part}) ne ($partid.'_'.$respid)) { next; }
my ($ressub,$subval) = split(/:/,$_,2);
# Similarity check
my $similar='';
@@ -1903,7 +1910,7 @@ KEYWORDS
my $order=&get_order($partid,$respid,$symb,$uname,$udom);
if ($env{'form.lastSub'} eq 'lastonly' ||
($env{'form.lastSub'} eq 'hdgrade' &&
- $$handgrade{$part} eq 'yes')) {
+ $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) {
my $display_part=&get_display_part($partid,$symb);
$lastsubonly.='
Part: '.
$display_part.' ( ID '.$respid.
@@ -1993,8 +2000,10 @@ KEYWORDS
my %seen = ();
my @partlist;
my @gradePartRespid;
- for my $part_resp (sort(keys(%$handgrade))) {
- my ($partid,$respid) = split(/_/, $part_resp);
+ my @part_response_id = &flatten_responseType($responseType);
+ foreach my $part_response_id (@part_response_id) {
+ my ($partid,$respid) = @{ $part_response_id };
+ my $part_resp = join('_',@{ $part_response_id });
next if ($seen{$partid} > 0);
$seen{$partid}++;
next if ($$handgrade{$part_resp} =~ /:no$/ && $env{'form.lastSub'} =~ /^(hdgrade)$/);
@@ -2417,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,
@@ -2436,12 +2436,33 @@ 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';
my ($partlist,$handgrade,$responseType) = &response_type($symb);
- foreach my $part_resp (sort(keys(%$handgrade))) {
- my ($part_id, $resp_id) = split(/_/,$part_resp);
+
+ my @part_response_id = &flatten_responseType($responseType);
+ foreach my $part_response_id (@part_response_id) {
+ my ($part_id,$resp_id) = @{ $part_response_id };
+ my $part_resp = join('_',@{ $part_response_id });
if (($env{'form.'.$newflg.'_'.$part_resp.'_returndoc1'}) && ($new_part == $part_id)) {
# if multiple files are uploaded names will be 'returndoc2','returndoc3'
my $file_counter = 1;
@@ -2874,16 +2895,18 @@ sub viewgrades {
'
';
#radio buttons/text box for assigning points for a section or class.
#handles different parts of a problem
- my ($partlist,$handgrade) = &response_type($symb);
+ my ($partlist,$handgrade,$responseType) = &response_type($symb);
my %weight = ();
my $ctsparts = 0;
$result.='
';
my %seen = ();
- for (sort keys(%$handgrade)) {
- my ($partid,$respid) = split (/_/,$_,2);
+ my @part_response_id = &flatten_responseType($responseType);
+ foreach my $part_response_id (@part_response_id) {
+ my ($partid,$respid) = @{ $part_response_id };
+ my $part_resp = join('_',@{ $part_response_id });
next if $seen{$partid};
$seen{$partid}++;
- my $handgrade=$$handgrade{$_};
+ my $handgrade=$$handgrade{$part_resp};
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb);
$weight{$partid} = $wgt eq '' ? '1' : $wgt;
@@ -3759,6 +3782,9 @@ LISTJAVASCRIPT
''."\n".
''." \n";
+ $result.=' '.&mt('Use CODE:').' '.
+ ' '."\n";
+
$result.=' " /> '."\n";
@@ -3789,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";
@@ -3813,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++;
}
}
@@ -3851,6 +3878,11 @@ sub displayPage {
my $result='