--- loncom/homework/grades.pm 2002/05/24 21:45:22 1.27 +++ loncom/homework/grades.pm 2002/06/20 22:04:21 1.29 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.27 2002/05/24 21:45:22 albertel Exp $ +# $Id: grades.pm,v 1.29 2002/06/20 22:04:21 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -94,7 +94,7 @@ sub listStudents { my $cnum=$ENV{"course.$ENV{'request.course.id'}.num"}; my $hostver=unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}); $request->print(<Verify a Submission Receipt Issued by this Server +

Verify a Submission Receipt Issued by this Server

$hostver- @@ -110,9 +110,11 @@ ENDHEADER } $request->print(< -

Show Student Submissions on Assessment

- - +

Show Student Submissions on Assessment

+ +
UsernameDomainName 
+ + ENDTABLEST my (%classlist) = &getclasslist($cdom,$cnum,'0'); foreach my $student ( sort(@{ $classlist{'allids'} }) ) { @@ -125,11 +127,11 @@ ENDTABLEST my ($tmp) = keys(%name); if ($tmp !~ /^(con_lost|error|no_such_host)/i) { $fullname=$name{'lastname'}.$name{'generation'}; - if ($fullname =~ /[^\s]+/) { $fullname.=','; } + if ($fullname =~ /[^\s]+/) { $fullname.=', '; } $fullname.=$name{'firstname'}.' '.$name{'middlename'}; } if ( $Apache::grades::viewgrades eq 'F' ) { - $request->print("\n".''."'."'); + $request->print(''); +# $request->print(''); } } - $request->print('
UsernameNameDomain 
$sname$sdom$fullname". + $request->print("\n".'
$sname$fullname$sdom". ''); if ($ENV{'form.url'}) { $request->print( @@ -144,13 +146,16 @@ ENDTABLEST $request->print( ''); $request->print( + ''); + $request->print( ''); $request->print( ''); - $request->print('
'); + $request->print('
'); } @@ -207,23 +212,28 @@ sub viewstudentgrade { my ($url,$symb,$courseid,$student,@parts) = @_; my $result =''; my $cellclr = '"#ffffdd"'; - my ($stuname,$domain) = split(/:/,$student); + my ($username,$domain) = split(/:/,$student); - my %record=&Apache::lonnet::restore($symb,$courseid,$domain,$stuname); + my (@requests) = ('lastname','firstname','middlename','generation'); + my (%name) = &Apache::lonnet::get('environment',\@requests,$domain,$username); + 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.="$stuname$domain\n"; + $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"; + $result.="\n"; } elsif ($type eq 'tries') { my $score=$record{"resource.$part.$type"}; - $result.="\n" + $result.="\n" } elsif ($type eq 'solved') { my $score=$record{"resource.$part.$type"}; - $result.="\n"; if ($score =~ /^correct/) { $result.="\n\n\n\n\n"; } elsif ($score =~ /^incorrect/) { @@ -238,7 +248,7 @@ sub viewstudentgrade { $result.="\n"; } } - $result.=''; + $result.=''; return $result; } #FIXME need to look at the meatdata spec on what type of data to accept and provide an @@ -311,7 +321,8 @@ sub submission { if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; } my $answer=&Apache::loncommon::get_previous_attempt($symb,$uname,$udom, $ENV{'request.course.id'}); - my $result="

Submission Record

$uname:$udom for $url
".$answer; + my $result='

Submission Record

'; + $result.='Username : '.$uname.'
Fullname : '.$ENV{'form.fullname'}.'
Domain : '.$udom.'
Resource : '.$url.'
'.$answer; my $rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom, $ENV{'request.course.id'}); $result.="Student's view of the problem:
$rendered
Correct answer:
"; @@ -332,29 +343,53 @@ sub get_symb_and_url { return ($symb,$url); } +sub view_edit_entire_class_form { + my ($symb,$url)=@_; + my $result.='
'."\n". + ''."\n". + ''."\n". + ''."\n". + ''."\n". + '
'."\n"; + return $result; +} + +sub show_grading_menu_form { + my ($symb,$url)=@_; + my $result.='
'."\n". + ''."\n". + ''."\n". + ''."\n". + ''."\n". + '
'."\n"; + return $result; +} + sub gradingmenu { my ($request) = @_; my ($symb,$url)=&get_symb_and_url($request); if (!$symb) {return '';} - my $result='

Select a grading method


'; - $result.='
'."\n". - ''."\n". - ''."\n". - ''."\n". - ''."\n". - '
'; + + my $result='

 Select a Grading Method


'; + $result.='
'."\n"; + $result.=''."\n"; + $result.='
'."\n"; + $result.=' Resource : '.$url.'
'."\n"; + $result.=&view_edit_entire_class_form($symb,$url); $result.='
'."\n". ''."\n". ''."\n". ''."\n". ''."\n". - '
'; + ''."\n"; $result.='
'."\n". ''."\n". ''."\n". ''."\n". ''."\n". - '
'; + ''."\n"; + $result.='
'."\n"; + $result.='
'."\n"; return $result; } @@ -373,9 +408,9 @@ sub viewgrades { my $cellclr = '"#ffffcc"'; #get list of parts for this problem - my (@parts) = &getpartlist($url); + my (@parts) = sort(&getpartlist($url)); - $request->print ("

Manual Grading

"); + $request->print ("

Manual Grading

"); #start the form $result = '
'."\n". @@ -383,21 +418,21 @@ sub viewgrades { ''."\n". ''."\n". ''."\n". - '
'."\n". + '
'."\n". ''."\n". - ''."\n"; - foreach my $part (sort(@parts)) { + ''."\n"; + foreach my $part (@parts) { my $display=&Apache::lonnet::metadata($url,$part.'.display'); if (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); } - $result.=''."\n"; + $result.=''."\n"; } - $result.=""; + $result.=''; #get info for each student foreach my $student ( sort(@{ $classlist{'allids'} }) ) { $result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'},$student,@parts); } $result.='
UserIdDomain
UsernameNameDomain'.$display.''.$display.'
'; - + $result.=&show_grading_menu_form($symb,$url); return $result; } @@ -640,21 +675,44 @@ sub csvuploadassign { } } $request->print('

Assigning Grades

'); - &Apache::lonhomework::showhash(('1'=>\@keyfields)); - &Apache::lonhomework::showhash(%fields); my $courseid=$ENV{'request.course.id'}; my $cdom=$ENV{"course.$courseid.domain"}; my $cnum=$ENV{"course.$courseid.num"}; my (%classlist) = &getclasslist($cdom,$cnum,'1'); - foreach my $student ( sort(@{ $classlist{'allids'} }) ) { - my %newhash; - foreach my $grade (@gradedata) { - my %entries=&Apache::loncommon::record_sep($grade); - foreach my $dest (keys(%fields)) { - - } + my @skipped; + my $countdone=0; + foreach my $grade (@gradedata) { + my %entries=&Apache::loncommon::record_sep($grade); + my $username=$entries{$fields{'username'}}; + my $domain=$entries{$fields{'domain'}}; + if (!exists($classlist{"$username:$domain"})) { + push(@skipped,"$username:$domain"); + next; } + my %grades; + foreach my $dest (keys(%fields)) { + if ($dest eq 'username' || $dest eq 'domain') { next; } + if ($entries{$fields{$dest}} eq '') { next; } + my $store_key=$dest; + $store_key=~s/^stores/resource/; + $store_key=~s/_/\./g; + $grades{$store_key}=$entries{$fields{$dest}}; + } + $grades{"resource.regrader"}="$ENV{'user.name'}:$ENV{'user.domain'}"; + &Apache::lonnet::cstore(\%grades,$symb,$ENV{'request.course.id'}, + $domain,$username); + $request->print('.'); + $request->rflush(); + $countdone++; + } + $request->print("
Stored $countdone students\n"); + if (@skipped) { + $request->print('
Skipped Students
'); + foreach my $student (@skipped) { $request->print("
$student"); } } + $request->print(&view_edit_entire_class_form($symb,$url)); + $request->print(&show_grading_menu_form($symb,$url)); + return ''; } sub send_header { @@ -677,8 +735,6 @@ sub send_footer { sub handler { my $request=$_[0]; - if ( $ENV{'user.name'} eq 'albertel' ) {$Apache::lonxml::debug=1;} else {$Apache::lonxml::debug=0;} - if ($ENV{'browser.mathml'}) { $request->content_type('text/xml'); } else { @@ -724,7 +780,7 @@ sub handler { } } } else { - &Apache::lonhomework::showhashsubset(\%ENV,'^form'); + #&Apache::lonhomework::showhashsubset(\%ENV,'^form'); $Apache::grades::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}); if ($command eq 'submission') { &listStudents($request) if ($ENV{'form.student'} eq '');