--- loncom/homework/grades.pm 2002/06/24 21:05:12 1.30 +++ loncom/homework/grades.pm 2002/07/01 21:20:29 1.34 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.30 2002/06/24 21:05:12 ng Exp $ +# $Id: grades.pm,v 1.34 2002/07/01 21:20:29 ng Exp $ # # Copyright Michigan State University Board of Trustees # @@ -65,8 +65,8 @@ sub moreinfo { sub verifyreceipt { my $request=shift; my $courseid=$ENV{'request.course.id'}; - my $cdom=$ENV{"course.$courseid.domain"}; - my $cnum=$ENV{"course.$courseid.num"}; +# my $cdom=$ENV{"course.$courseid.domain"}; +# my $cnum=$ENV{"course.$courseid.num"}; my $receipt=unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}).'-'. $ENV{'form.receipt'}; $receipt=~s/[^\-\d]//g; @@ -77,8 +77,8 @@ sub verifyreceipt { if ((&Apache::lonnet::allowed('mgr',$courseid)) && ($symb)) { $request->print('
'.$matches." match%s
",$matches <= 1 ? '' : 'es'); +# needs to print who is matched } return ''; } -sub receiptInput { - my ($request) = shift; - my $cdom=$ENV{"course.$ENV{'request.course.id'}.domain"}; - my $cnum=$ENV{"course.$ENV{'request.course.id'}.num"}; - my $hostver=unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}); - $request->print(<
-
"; - my (%classlist) = &getclasslist($cdom,$cnum,'0'); - foreach my $student ( sort(@{ $classlist{'allids'} }) ) { + my ($classlist) = &getclasslist('all','0'); + foreach my $student ( sort(@{ $$classlist{'all'} }) ) { my ($posname,$posdomain) = split(/:/,$student); if ($posname =~ $name) { $name=$posname; $domain=$posdomain; last; } } @@ -200,20 +215,27 @@ sub finduser { } sub getclasslist { - my ($coursedomain,$coursenum,$hideexpired) = @_; + my ($getsec,$hideexpired) = @_; + my ($coursedomain,$coursenum) = split(/_/,$ENV{'request.course.id'}); my %classlist=&Apache::lonnet::dump('classlist',$coursedomain,$coursenum); my $now = time; + my (@holdsec,@sections); foreach my $student (keys(%classlist)) { my ($end,$start)=split(/:/,$classlist{$student}); # still a student? if (($hideexpired) && ($end) && ($end < $now)) { - #print "Skipping:$name:$end:$now \n"; next; } - #print "record=$record "; - push( @{ $classlist{'allids'} }, $student); + my ($unam,$udom) = split(/:/,$student,2); + my $section = &Apache::lonnet::usection($udom,$unam,$ENV{'request.course.id'}); + push @holdsec,$section; + push (@{ $classlist{$getsec} }, $student) if ($getsec eq 'all' or $getsec == $section); + } + my %seen = (); + foreach my $item (@holdsec) { + push (@sections, $item) unless $seen{$item}++; } - return (%classlist); + return (\%classlist,\@sections); } sub getpartlist { @@ -234,60 +256,46 @@ sub viewstudentgrade { my $cellclr = '"#ffffdd"'; my ($username,$domain) = split(/:/,$student); - my (@requests) = ('lastname','firstname','middlename','generation'); - my (%name) = &Apache::lonnet::get('environment',\@requests,$domain,$username); + my $fullname = &get_fullname($username,$domain); my %record=&Apache::lonnet::restore($symb,$courseid,$domain,$username); - my $fullname=$name{'lastname'}.$name{'generation'}; - if ($fullname =~ /[^\s]+/) { $fullname.=', '; } - $fullname.=$name{'firstname'}.' '.$name{'middlename'}; $result.=" $username | $fullname | $domain | \n";
foreach my $part (@parts) {
my ($temp,$part,$type)=split(/_/,$part);
- #print "resource.$part.$type = ".$record{"resource.$part.$type"}." \n"; - if ($type eq 'awarded') { - my $score=$record{"resource.$part.$type"}; - $result.=" \n";
- } elsif ($type eq 'tries') {
- my $score=$record{"resource.$part.$type"};
- $result.=" | \n"
+ my $score=$record{"resource.$part.$type"};
+ if ($type eq 'awarded' || $type eq 'tries') {
+ $result.=' | '."\n";
} elsif ($type eq 'solved') {
- my $score=$record{"resource.$part.$type"};
+ my ($status,$foo)=split(/_/,$score,2);
$result.=" | \n";
}
}
$result.=' | "; my $result =''; - my ($stuname,$domain) = split(/:/,$student); - my %record=&Apache::lonnet::restore($symb,$courseid,$domain,$stuname); - my %newrecord; foreach my $part (@parts) { my ($temp,$part,$type)=split(/_/,$part); my $oldscore=$record{"resource.$part.$type"}; my $newscore=$ENV{"form.GRADE.$student.$part.$type"}; + print "old=$oldscore:new=$newscore: "; if ($type eq 'solved') { my $update=0; if ($newscore eq 'nothing' ) { @@ -298,10 +306,11 @@ sub setstudentgrade { } elsif ($oldscore !~ m/^$newscore/) { $update=1; $result.="Updating $stuname to $newscore \n"; - if ($newscore eq 'correct') { $newscore = 'correct_by_override'; } + if ($newscore eq 'correct') { $newscore = 'correct_by_override'; } if ($newscore eq 'incorrect') { $newscore = 'incorrect_by_override'; } - if ($newscore eq 'excused') { $newscore = 'excused'; } - if ($newscore eq 'ungraded') { $newscore = 'ungraded_attempted'; } + if ($newscore eq 'excused') { $newscore = 'excused'; } + if ($newscore eq 'ungraded') { $newscore = 'ungraded_attempted'; } + if ($newscore eq 'partial') { $newscore = 'correct_partially_by_override'; } } else { #$result.="$stuname:$part:$type:unchanged $oldscore to $newscore: \n"; } @@ -316,89 +325,329 @@ sub setstudentgrade { } } if ( scalar(keys(%newrecord)) > 0 ) { - $newrecord{"resource.regrader"}="$ENV{'user.name'}:$ENV{'user.domain'}"; - &Apache::lonnet::cstore(\%newrecord,$symb,$courseid,$domain,$stuname); + $newrecord{'resource.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; + print "grader=$newrecord{'resource.regrader'}: records "; + while (my ($k,$v) = each %newrecord) { + print "k=$k:v=$v: \n"; + } +# &Apache::lonnet::cstore(\%newrecord,$symb,$courseid,$domain,$stuname); $result.="Stored away ".scalar(keys(%newrecord))." elements. \n"; } return $result; } +# +# --------------------------- show submissions of a student, option to grade -------- sub submission { - my ($request) = @_; - my $url=$ENV{'form.url'}; - $url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; + my ($request,$counter,$total) = @_; + + if ($counter == 0) { + $request->print(< Submission Record'); + } - my $result='Submission Record'; - $result.='
|