--- loncom/homework/grades.pm 2007/01/04 14:59:57 1.386 +++ loncom/homework/grades.pm 2007/04/25 00:16:51 1.396 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.386 2007/01/04 14:59:57 raeburn Exp $ +# $Id: grades.pm,v 1.396 2007/04/25 00:16:51 banghart Exp $ # # Copyright Michigan State University Board of Trustees # @@ -117,8 +117,12 @@ sub response_type { my $navmap = Apache::lonnavmaps::navmap->new(); my $res = $navmap->getBySymb($symb); my $partlist = $res->parts(); + my %vPart = + map { $_ => 1 } (&Apache::loncommon::get_env_multiple('form.vPart')); my (%response_types,%handgrade); foreach my $part (@{ $partlist }) { + next if (%vPart && !exists($vPart{$part})); + my @types = $res->responseType($part); my @ids = $res->responseIds($part); for (my $i=0; $i < scalar(@ids); $i++) { @@ -599,7 +603,8 @@ sub verifyreceipt { my (undef,undef,$fullname) = &getclasslist('all','0'); my $receiptparts=0; - if ($env{"course.$courseid.receiptalg"} eq 'receipt2') { $receiptparts=1; } + if ($env{"course.$courseid.receiptalg"} eq 'receipt2' || + $env{"course.$courseid.receiptalg"} eq 'receipt3') { $receiptparts=1; } my $parts=['0']; if ($receiptparts) { ($parts)=&response_type($symb); } foreach (sort @@ -948,8 +953,8 @@ sub processGroup { my @stuchecked = &Apache::loncommon::get_env_multiple('form.stuinfo'); my $total = scalar(@stuchecked)-1; - foreach (@stuchecked) { - my ($uname,$udom,$fullname) = split(/:/); + foreach my $student (@stuchecked) { + my ($uname,$udom,$fullname) = split(/:/,$student); $env{'form.student'} = $uname; $env{'form.userdom'} = $udom; $env{'form.fullname'} = $fullname; @@ -1621,6 +1626,41 @@ sub show_problem { $result.='
'; return $result; } +sub files_exist { + my ($r, $symb) = @_; + my $files_exist = 0; + my @students = &Apache::loncommon::get_env_multiple('form.stuinfo'); + foreach my $student (@students) { + my ($uname,$udom,$fullname) = split(/:/,$student); + my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$udom,$uname); + my ($string,$timestamp)= &get_last_submission(\%record); + foreach (@$string) { + my ($partid,$respid) = /^resource\.([^\.]*)\.([^\.]*)\.submission/; + my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record); + if (@$files) { + $files_exist = 1; + return $files_exist; + } + } + } + return $files_exist; +} +sub download_all_link { + my ($r,$symb) = @_; + my $all_students = + join("\n", &Apache::loncommon::get_env_multiple('form.stuinfo')); + + my $parts = + join("\n",&Apache::loncommon::get_env_multiple('form.vPart')); + + my $identifier = &Apache::loncommon::get_cgi_id(); + &Apache::lonnet::appenv('cgi.'.$identifier.'.students' => $all_students, + 'cgi.'.$identifier.'.symb' => $symb, + 'cgi.'.$identifier.'.parts' => $parts,); + $r->print(''. + &mt('Download All Submitted Documents').''); + return +} # --------------------------- show submissions of a student, option to grade sub submission { @@ -1656,7 +1696,9 @@ sub submission { &sub_page_kw_js($request) if ($env{'form.handgrade'} eq 'yes'); $env{'form.probTitle'} = $env{'form.probTitle'} eq '' ? &Apache::lonnet::gettitle($symb) : $env{'form.probTitle'}; - + if (&files_exist($request, $symb)) { + &download_all_link($request, $symb); + } $request->print('

 Submission Record

'."\n". ' Resource: '.$env{'form.probTitle'}.''."\n"); @@ -1867,6 +1909,9 @@ KEYWORDS my %seenparts; my @part_response_id = &flatten_responseType($responseType); foreach my $part (@part_response_id) { + next if ($env{'form.lastSub'} eq 'hdgrade' + && $$handgrade{$$part[0].'_'.$$part[1]} ne 'yes'); + my ($partid,$respid) = @{ $part }; my $display_part=&get_display_part($partid,$symb); if ($env{"form.$uname:$udom:$partid:submitted_by"}) { @@ -1913,8 +1958,8 @@ KEYWORDS ($env{'form.lastSub'} eq 'hdgrade' && $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) { my $display_part=&get_display_part($partid,$symb); - $lastsubonly.='Part: '. - $display_part.' ( ID '.$respid. + $lastsubonly.='Debug -'.'Part: '. + $display_part.' ( hhhh ID '.$respid. ' )   '; my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record); if (@$files) { @@ -2007,7 +2052,8 @@ KEYWORDS my $part_resp = join('_',@{ $part_response_id }); next if ($seen{$partid} > 0); $seen{$partid}++; - next if ($$handgrade{$part_resp} =~ /:no$/ && $env{'form.lastSub'} =~ /^(hdgrade)$/); + next if ($$handgrade{$part_resp} ne 'yes' + && $env{'form.lastSub'} eq 'hdgrade'); push @partlist,$partid; push @gradePartRespid,$partid.'.'.$respid; $request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); @@ -2125,6 +2171,9 @@ sub processHandGrade { if ($encrypturl =~ /^yes$/i) { $baseurl = &Apache::lonenc::encrypted($feedurl,1); $showsymb = &Apache::lonenc::encrypted($symb,1); + } else { + $baseurl = $feedurl; + $showsymb = $symb; } if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) { $subject = $env{'form.msgsub'} if ($includemsg =~ /msgsub/); @@ -2534,7 +2583,7 @@ sub handback_files { $message .= ' The returned file(s) are named: '. $file_msg; $message .= " and can be found in your portfolio space."; my $url = (&Apache::lonnet::decode_symb($symb))[2]; - my $feedurl = &Apache::lonnet::declutter($url); + my $feedurl = &Apache::lonnet::clutter($url); my $encrypturl=&Apache::lonnet::EXT('resource.0.encrypturl', $symb,$domain,$stuname); my ($baseurl,$showsymb); @@ -2981,7 +3030,7 @@ sub viewgrades { } $result.=''.''.''."\n". ''; - $result.=''; #table listing all the students in a section/class @@ -4635,6 +4684,7 @@ sub scantron_fixup_scanline { $answer=$alphabet[$args->{'response'}]; } elsif ($on eq 'number') { $answer=$args->{'response'}+1; + if ($answer == 10) { $answer = '0'; } } else { substr($answer,$args->{'response'},1)=$on; } @@ -4705,7 +4755,7 @@ sub scantron_parse_scanline { || $currentquest eq '*') { push(@{$record{'scantron.doubleerror'}},$questnum); $record{"scantron.$questnum.answer"}=''; - } elsif (!$currentquest + } elsif (!defined($currentquest) || $currentquest eq $$scantron_config{'Qoff'} || $currentquest !~ /^[A-Z]$/) { $record{"scantron.$questnum.answer"}=''; @@ -4720,9 +4770,9 @@ sub scantron_parse_scanline { || $currentquest eq '*') { push(@{$record{'scantron.doubleerror'}},$questnum); $record{"scantron.$questnum.answer"}=''; - } elsif (!$currentquest - || $currentquest eq $$scantron_config{'Qoff'} - || $currentquest !~ /^\d$/) { + } elsif (!defined($currentquest) + || $currentquest eq $$scantron_config{'Qoff'} + || $currentquest !~ /^\d$/) { $record{"scantron.$questnum.answer"}=''; if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { push(@{$record{"scantron.missingerror"}},$questnum);