version 1.130, 2003/08/06 19:32:18
|
version 1.145, 2003/10/28 23:20:03
|
Line 185 sub cleanRecord {
|
Line 185 sub cleanRecord {
|
$ENV{'form.kwstyle'} = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : ''; |
$ENV{'form.kwstyle'} = $keyhash{$loginuser.'_kwstyle'} ne '' ? $keyhash{$loginuser.'_kwstyle'} : ''; |
$ENV{'form.'.$symb} = 1; # so that we don't have to read it from disk for multiple sub of the same prob. |
$ENV{'form.'.$symb} = 1; # so that we don't have to read it from disk for multiple sub of the same prob. |
} |
} |
return '<br /><br /><blockquote>'.&keywords_highlight($answer).'</blockquote>'; |
return '<br /><br /><blockquote><pre>'.&keywords_highlight($answer).'</pre></blockquote>'; |
} |
} |
return $answer; |
return $answer; |
} |
} |
Line 218 sub commonJSfunctions {
|
Line 218 sub commonJSfunctions {
|
} |
} |
} |
} |
} else { |
} else { |
if (selectOne.selected) return selectOne.value; |
// only one value it must be the selected one |
|
return selectOne.value; |
} |
} |
} |
} |
</script> |
</script> |
Line 506 LISTJAVASCRIPT
|
Line 507 LISTJAVASCRIPT
|
my $checkhdgrade = ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked' : ''; |
my $checkhdgrade = ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked' : ''; |
my $checklastsub = $checkhdgrade eq '' ? 'checked' : ''; |
my $checklastsub = $checkhdgrade eq '' ? 'checked' : ''; |
my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'."\n". |
my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'."\n". |
' <b>View Problem Text: </b><input type="radio" name="vProb" value="no" checked /> no '."\n". |
' <b>View Problem Text: </b><input type="radio" name="vProb" value="no" checked="on" /> no '."\n". |
'<input type="radio" name="vProb" value="yes" /> one student '."\n". |
'<input type="radio" name="vProb" value="yes" /> one student '."\n". |
'<input type="radio" name="vProb" value="all" /> all students <br />'."\n". |
'<input type="radio" name="vProb" value="all" /> all students <br />'."\n". |
|
' <b>View Answer: </b><input type="radio" name="vAns" value="no" /> no '."\n". |
|
'<input type="radio" name="vAns" value="yes" /> one student '."\n". |
|
'<input type="radio" name="vAns" value="all" checked="on" /> all students <br />'."\n". |
' <b>Submissions: </b>'."\n"; |
' <b>Submissions: </b>'."\n"; |
if ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) { |
if ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) { |
$gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> essay part only'."\n"; |
$gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> essay part only'."\n"; |
Line 517 LISTJAVASCRIPT
|
Line 521 LISTJAVASCRIPT
|
my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'}; |
my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'}; |
$ENV{'form.Status'} = $saveStatus; |
$ENV{'form.Status'} = $saveStatus; |
|
|
$gradeTable.='<input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last sub only'."\n". |
$gradeTable.='<input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last submission only'."\n". |
'<input type="radio" name="lastSub" value="last" /> last sub & parts info'."\n". |
'<input type="radio" name="lastSub" value="last" /> last submission & parts info'."\n". |
'<input type="radio" name="lastSub" value="datesub" /> by dates and submissions'."\n". |
'<input type="radio" name="lastSub" value="datesub" /> by dates and submissions'."\n". |
'<input type="radio" name="lastSub" value="all" /> all details'."\n". |
'<input type="radio" name="lastSub" value="all" /> all details'."\n". |
'<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
'<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
Line 544 LISTJAVASCRIPT
|
Line 548 LISTJAVASCRIPT
|
$gradeTable.='<input type="button" '."\n". |
$gradeTable.='<input type="button" '."\n". |
'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n". |
'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n". |
'value="Next->" />'."\n"; |
'value="Next->" />'."\n"; |
|
$gradeTable.='<input type="checkbox" name="checkPlag" checked="on">Check For Plagiarism</input>'; |
my (undef, undef, $fullname) = &getclasslist($getsec,'1'); |
my (undef, undef, $fullname) = &getclasslist($getsec,'1'); |
$gradeTable.='<table border="0"><tr><td bgcolor="#777777">'. |
$gradeTable.='<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr bgcolor="#e6ffff">'; |
'<table border="0"><tr bgcolor="#e6ffff">'; |
Line 568 LISTJAVASCRIPT
|
Line 572 LISTJAVASCRIPT
|
my %status = (); |
my %status = (); |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
(%status) =&student_gradeStatus($url,$symb,$udom,$uname,$partlist); |
(%status) =&student_gradeStatus($url,$symb,$udom,$uname,$partlist); |
my $statusflg = ''; |
my $submitted = 0; |
|
my $graded = 1; |
foreach (keys(%status)) { |
foreach (keys(%status)) { |
$statusflg = 1 if ($status{$_} ne 'nothing'); |
$submitted = 1 if ($status{$_} ne 'nothing'); |
|
$graded = 0 if ($status{$_} =~ /^correct/); |
my ($foo,$partid,$foo1) = split(/\./,$_); |
my ($foo,$partid,$foo1) = split(/\./,$_); |
if ($status{'resource.'.$partid.'.submitted_by'} ne '') { |
if ($status{'resource.'.$partid.'.submitted_by'} ne '') { |
$statusflg = ''; |
$submitted = 0; |
$gradeTable.='<input type="hidden" name="'. |
$gradeTable.='<input type="hidden" name="'. |
$student.':submitted_by" value="'. |
$student.':submitted_by" value="'. |
$status{'resource.'.$partid.'.submitted_by'}.'" />'; |
$status{'resource.'.$partid.'.submitted_by'}.'" />'; |
} |
} |
} |
} |
next if ($statusflg eq '' && $submitonly eq 'yes'); |
next if (!$submitted && ($submitonly eq 'yes' || $submitonly eq 'graded')); |
|
next if (!$graded && $submitonly eq 'graded'); |
} |
} |
|
|
$ctr++; |
$ctr++; |
Line 621 LISTJAVASCRIPT
|
Line 628 LISTJAVASCRIPT
|
} else { |
} else { |
$gradeTable='<br /> <font color="red">'. |
$gradeTable='<br /> <font color="red">'. |
'No submissions found for this resource for any students. ('.$num_students. |
'No submissions found for this resource for any students. ('.$num_students. |
' checked for submissions</font><br />'; |
' checked for submissions)</font><br />'; |
} |
} |
} elsif ($ctr == 1) { |
} elsif ($ctr == 1) { |
$gradeTable =~ s/type=checkbox/type=checkbox checked/; |
$gradeTable =~ s/type=checkbox/type=checkbox checked/; |
Line 1195 sub gradeBox {
|
Line 1202 sub gradeBox {
|
} |
} |
|
|
sub show_problem { |
sub show_problem { |
my ($request,$symb,$uname,$udom,$removeform,$viewon) = @_; |
my ($request,$symb,$uname,$udom,$removeform,$viewon,$mode) = @_; |
my $rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom, |
my $rendered; |
$ENV{'request.course.id'}); |
if ($mode eq 'both' or $mode eq 'text') { |
|
$rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom, |
|
$ENV{'request.course.id'}); |
|
} |
if ($removeform) { |
if ($removeform) { |
$rendered=~s|<form(.*?)>||g; |
$rendered=~s|<form(.*?)>||g; |
$rendered=~s|</form>||g; |
$rendered=~s|</form>||g; |
$rendered=~s|name="submit"|name="would_have_been_submit"|g; |
$rendered=~s|name="submit"|name="would_have_been_submit"|g; |
} |
} |
my $companswer=&Apache::loncommon::get_student_answers($symb,$uname,$udom, |
my $companswer; |
$ENV{'request.course.id'}); |
if ($mode eq 'both' or $mode eq 'answer') { |
|
$companswer=&Apache::loncommon::get_student_answers($symb,$uname,$udom, |
|
$ENV{'request.course.id'}); |
|
} |
if ($removeform) { |
if ($removeform) { |
$companswer=~s|<form(.*?)>||g; |
$companswer=~s|<form(.*?)>||g; |
$companswer=~s|</form>||g; |
$companswer=~s|</form>||g; |
$rendered=~s|name="submit"|name="would_have_been_submit"|g; |
$companswer=~s|name="submit"|name="would_have_been_submit"|g; |
} |
} |
my $result.='<table border="0" width="100%"><tr><td bgcolor="#777777">'; |
my $result.='<table border="0" width="100%"><tr><td bgcolor="#777777">'; |
$result.='<table border="0" width="100%">'; |
$result.='<table border="0" width="100%">'; |
$result.='<tr><td bgcolor="#e6ffff"><b> View of the problem - '.$ENV{'form.fullname'}. |
if ($viewon) { |
'</b></td></tr>' if ($viewon); |
$result.='<tr><td bgcolor="#e6ffff"><b> '; |
$result.='<tr><td bgcolor="#ffffff">'.$rendered.'<br />'; |
if ($mode eq 'both' or $mode eq 'text') { |
$result.='<b>Correct answer:</b><br />'.$companswer; |
$result.='View of the problem - '; |
|
} else { |
|
$result.='Correct answer: '; |
|
} |
|
$result.=$ENV{'form.fullname'}.'</b></td></tr>'; |
|
} |
|
if ($mode eq 'both') { |
|
$result.='<tr><td bgcolor="#ffffff">'.$rendered.'<br />'; |
|
$result.='<b>Correct answer:</b><br />'.$companswer; |
|
} elsif ($mode eq 'text') { |
|
$result.='<tr><td bgcolor="#ffffff">'.$rendered; |
|
} elsif ($mode eq 'answer') { |
|
$result.='<tr><td bgcolor="#ffffff">'.$companswer; |
|
} |
$result.='</td></tr></table>'; |
$result.='</td></tr></table>'; |
$result.='</td></tr></table><br />'; |
$result.='</td></tr></table><br />'; |
return $result; |
return $result; |
Line 1264 sub submission {
|
Line 1290 sub submission {
|
|
|
# option to display problem, only once else it cause problems |
# option to display problem, only once else it cause problems |
# with the form later since the problem has a form. |
# with the form later since the problem has a form. |
if ($ENV{'form.vProb'} eq 'yes' or !$ENV{'form.vProb'}) { |
if ($ENV{'form.vProb'} eq 'yes' or $ENV{'form.vAns'} eq 'yes') { |
$request->print(&show_problem($request,$symb,$uname,$udom,0,1)); |
my $mode; |
|
if ($ENV{'form.vProb'} eq 'yes' && $ENV{'form.vAns'} eq 'yes') { |
|
$mode='both'; |
|
} elsif ($ENV{'form.vProb'} eq 'yes') { |
|
$mode='text'; |
|
} elsif ($ENV{'form.vAns'} eq 'yes') { |
|
$mode='answer'; |
|
} |
|
$request->print(&show_problem($request,$symb,$uname,$udom,0,1,$mode)); |
} |
} |
|
|
# kwclr is the only variable that is guaranteed to be non blank |
# kwclr is the only variable that is guaranteed to be non blank |
Line 1300 sub submission {
|
Line 1334 sub submission {
|
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="showgrading" value="'.$ENV{'form.showgrading'}.'" />'."\n". |
'<input type="hidden" name="showgrading" value="'.$ENV{'form.showgrading'}.'" />'."\n". |
'<input type="hidden" name="vProb" value="'.$ENV{'form.vProb'}.'" />'."\n". |
'<input type="hidden" name="vProb" value="'.$ENV{'form.vProb'}.'" />'."\n". |
|
'<input type="hidden" name="vAns" value="'.$ENV{'form.vAns'}.'" />'."\n". |
'<input type="hidden" name="lastSub" value="'.$ENV{'form.lastSub'}.'" />'."\n". |
'<input type="hidden" name="lastSub" value="'.$ENV{'form.lastSub'}.'" />'."\n". |
'<input type="hidden" name="section" value="'.$ENV{'form.section'}.'">'."\n". |
'<input type="hidden" name="section" value="'.$ENV{'form.section'}.'">'."\n". |
'<input type="hidden" name="submitonly" value="'.$ENV{'form.submitonly'}.'">'."\n". |
'<input type="hidden" name="submitonly" value="'.$ENV{'form.submitonly'}.'">'."\n". |
Line 1350 KEYWORDS
|
Line 1385 KEYWORDS
|
} |
} |
} |
} |
|
|
if ($ENV{'form.vProb'} eq 'all') { |
if ($ENV{'form.vProb'} eq 'all' or $ENV{'form.vAns'} eq 'all') { |
$request->print('<br /><br /><br />') if ($counter > 0); |
$request->print('<br /><br /><br />') if ($counter > 0); |
$request->print(&show_problem($request,$symb,$uname,$udom,1,1)); |
my $mode; |
|
if ($ENV{'form.vProb'} eq 'all' && $ENV{'form.vAns'} eq 'all') { |
|
$mode='both'; |
|
} elsif ($ENV{'form.vProb'} eq 'all' ) { |
|
$mode='text'; |
|
} elsif ($ENV{'form.vAns'} eq 'all') { |
|
$mode='answer'; |
|
} |
|
$request->print(&show_problem($request,$symb,$uname,$udom,1,1,$mode)); |
} |
} |
|
|
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
|
|
my ($partlist,$handgrade) = &response_type($url,$symb); |
my ($partlist,$handgrade) = &response_type($url,$symb); |
Line 1461 KEYWORDS
|
Line 1505 KEYWORDS
|
my ($ressub,$subval) = split(/:/,$_,2); |
my ($ressub,$subval) = split(/:/,$_,2); |
# Similarity check |
# Similarity check |
my $similar=''; |
my $similar=''; |
my ($oname,$odom,$ocrsid,$oessay,$osim)=&most_similar($uname,$udom,$subval); |
my $oname; |
if ($osim) { |
my $odom; |
$osim=int($osim*100.0); |
my $ocrsid; |
$similar='<hr /><h3><font color="#FF0000">Essay is '.$osim. |
my $oessay; |
'% similar to an essay by '.&Apache::loncommon::plainname($oname,$odom). |
my $osim; |
'</font></h3><blockquote><i>'. |
if($ENV{'form.checkPlag'}){ |
&keywords_highlight($oessay).'</i></blockquote><hr />'; |
($oname,$odom,$ocrsid,$oessay,$osim)=&most_similar($uname,$udom,$subval); |
|
if ($osim) { |
|
$osim=int($osim*100.0); |
|
$similar='<hr /><h3><font color="#FF0000">Essay is '.$osim. |
|
'% similar to an essay by '.&Apache::loncommon::plainname($oname,$odom). |
|
'</font></h3><blockquote><i>'. |
|
&keywords_highlight($oessay).'</i></blockquote><hr />'; |
|
} |
} |
} |
$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '. |
$lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part '. |
$partid.'</b> <font color="#999999">( ID '.$respid. |
$partid.'</b> <font color="#999999">( ID '.$respid. |
Line 1480 KEYWORDS
|
Line 1531 KEYWORDS
|
'this file may contain virusses</font><br />':''). |
'this file may contain virusses</font><br />':''). |
'<b>Submitted Answer: </b>'. |
'<b>Submitted Answer: </b>'. |
&cleanRecord($subval,$responsetype,$symb). |
&cleanRecord($subval,$responsetype,$symb). |
'<br /><br />'.$similar."\n" |
'<br /><br />'.$similar."\n" |
if ($ENV{'form.lastSub'} eq 'lastonly' || |
if ($ENV{'form.lastSub'} eq 'lastonly' || |
($ENV{'form.lastSub'} eq 'hdgrade' && |
($ENV{'form.lastSub'} eq 'hdgrade' && |
$$handgrade{$part} =~ /:yes$/)); |
$$handgrade{$part} =~ /:yes$/)); |
Line 1782 sub processHandGrade {
|
Line 1833 sub processHandGrade {
|
} |
} |
$ctr = 0; |
$ctr = 0; |
@parsedlist = reverse @parsedlist if ($button eq 'Previous'); |
@parsedlist = reverse @parsedlist if ($button eq 'Previous'); |
|
my ($partlist) = &response_type($url); |
foreach my $student (@parsedlist) { |
foreach my $student (@parsedlist) { |
|
my $submitonly=$ENV{'form.submitonly'}; |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
if ($ENV{'form.submitonly'} eq 'yes') { |
if ($submitonly =~ /^(yes|graded)$/) { |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
# my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
my $statusflg = ''; |
my %status=&student_gradeStatus($url,$symb,$udom,$uname,$partlist); |
foreach (split(/:/,$ENV{'form.gradePartRespid'})){ |
my $submitted = 0; |
$statusflg = 1 if (exists ($record{'resource.'.$_.'.submission'})); |
my $graded = 1; |
|
foreach (keys(%status)) { |
|
$submitted = 1 if ($status{$_} ne 'nothing'); |
|
$graded = 0 if ($status{$_} =~ /^correct/); |
|
my ($foo,$partid,$foo1) = split(/\./,$_); |
|
if ($status{'resource.'.$partid.'.submitted_by'} ne '') { |
|
$submitted = 0; |
|
} |
} |
} |
next if ($statusflg eq ''); |
next if (!$submitted && ($submitonly eq 'yes' || $submitonly eq 'graded')); |
|
next if (!$graded && $submitonly eq 'graded'); |
} |
} |
push @nextlist,$student if ($ctr < $ntstu); |
push @nextlist,$student if ($ctr < $ntstu); |
last if ($ctr == $ntstu); |
last if ($ctr == $ntstu); |
Line 2327 sub editgrades {
|
Line 2388 sub editgrades {
|
$newrecord{'resource.'.$_.'.awarded'} = 0; |
$newrecord{'resource.'.$_.'.awarded'} = 0; |
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$updateflag = 1; |
$updateflag = 1; |
|
} elsif (!($old_part eq $partial && $old_score eq $score)) { |
|
$updateflag = 1; |
|
$newrecord{'resource.'.$_.'.awarded'} = $partial if $partial ne ''; |
|
$newrecord{'resource.'.$_.'.solved'} = $score; |
|
$rec_update++; |
} |
} |
|
|
$line .= '<td align="center">'.$old_aw.' </td>'. |
$line .= '<td align="center">'.$old_aw.' </td>'. |
'<td align="center">'.$awarded. |
'<td align="center">'.$awarded. |
($score eq 'excused' ? $score : '').' </td>'; |
($score eq 'excused' ? $score : '').' </td>'; |
|
|
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=$_; |
my $partid=$_; |
foreach my $stores (@parts) { |
foreach my $stores (@parts) { |
Line 2510 to this page if the data selected is ins
|
Line 2570 to this page if the data selected is ins
|
$javascript |
$javascript |
</script> |
</script> |
ENDPICK |
ENDPICK |
$request->print(&show_grading_menu_form($symb,$url)); |
|
return ''; |
return ''; |
|
|
} |
} |
Line 2727 LISTJAVASCRIPT
|
Line 2786 LISTJAVASCRIPT
|
$result.='<form action="/adm/grades" method="post" name="displayPage">'."\n"; |
$result.='<form action="/adm/grades" method="post" name="displayPage">'."\n"; |
$result.=' <b>Problems from:</b> <select name="selectpage">'."\n"; |
$result.=' <b>Problems from:</b> <select name="selectpage">'."\n"; |
my ($titles,$symbx) = &getSymbMap($request); |
my ($titles,$symbx) = &getSymbMap($request); |
my ($curpage,$type,$mapId) = ($symb =~ /(.*?\.(page|sequence))___(\d+)___/); |
my ($curpage) =&Apache::lonnet::decode_symb($symb); |
|
# my ($curpage,$mapId) =&Apache::lonnet::decode_symb($symb); |
|
# my $type=($curpage =~ /\.(page|sequence)/); |
my $ctr=0; |
my $ctr=0; |
foreach (@$titles) { |
foreach (@$titles) { |
my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); |
my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); |
Line 2747 LISTJAVASCRIPT
|
Line 2808 LISTJAVASCRIPT
|
$result.='<input type="hidden" name="page" />'."\n". |
$result.='<input type="hidden" name="page" />'."\n". |
'<input type="hidden" name="title" />'."\n"; |
'<input type="hidden" name="title" />'."\n"; |
|
|
$result.=' <b>View Problems Text: </b><input type="radio" name="vProb" value="no" checked /> no '."\n". |
$result.=' <b>View Problems Text: </b><input type="radio" name="vProb" value="no" checked="on" /> no '."\n". |
'<input type="radio" name="vProb" value="yes" /> yes '."<br>\n"; |
'<input type="radio" name="vProb" value="yes" /> yes '."<br>\n"; |
|
|
$result.=' <b>Submission Details: </b>'. |
$result.=' <b>Submission Details: </b>'. |
Line 2799 LISTJAVASCRIPT
|
Line 2860 LISTJAVASCRIPT
|
|
|
sub getSymbMap { |
sub getSymbMap { |
my ($request) = @_; |
my ($request) = @_; |
my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', |
my $navmap = Apache::lonnavmaps::navmap->new(); |
$ENV{'request.course.fn'}.'_parms.db'); |
|
$navmap->init(); |
|
|
|
my %symbx = (); |
my %symbx = (); |
my @titles = (); |
my @titles = (); |
Line 2846 sub displayPage {
|
Line 2905 sub displayPage {
|
&sub_page_js($request); |
&sub_page_js($request); |
$request->print($result); |
$request->print($result); |
|
|
my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', |
my $navmap = Apache::lonnavmaps::navmap->new(); |
$ENV{'request.course.fn'}.'_parms.db',1, 1); |
my ($mapUrl, $id, $resUrl)=&Apache::lonnet::decode_symb($ENV{'form.page'}); |
my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'}); |
|
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
|
|
my $iterator = $navmap->getIterator($map->map_start(), |
my $iterator = $navmap->getIterator($map->map_start(), |
Line 2889 sub displayPage {
|
Line 2947 sub displayPage {
|
$studentTable.='<tr bgcolor="#ffffe6"><td align="center" valign="top" >'.$question. |
$studentTable.='<tr bgcolor="#ffffe6"><td align="center" valign="top" >'.$question. |
(scalar(@{$parts}) == 1 ? '' : '<br>('.scalar(@{$parts}).' parts)').'</td>'; |
(scalar(@{$parts}) == 1 ? '' : '<br>('.scalar(@{$parts}).' parts)').'</td>'; |
$studentTable.='<td valign="top">'; |
$studentTable.='<td valign="top">'; |
if ($ENV{'form.vProb'} eq 'yes') { |
if ($ENV{'form.vProb'} eq 'yes' ) { |
$studentTable.=&show_problem($request,$symbx,$uname,$udom,1); |
$studentTable.=&show_problem($request,$symbx,$uname,$udom,1, |
|
undef,'both'); |
} else { |
} else { |
my $companswer = &Apache::loncommon::get_student_answers($symbx,$uname,$udom,$ENV{'request.course.id'}); |
my $companswer = &Apache::loncommon::get_student_answers($symbx,$uname,$udom,$ENV{'request.course.id'}); |
$companswer =~ s|<form(.*?)>||g; |
$companswer =~ s|<form(.*?)>||g; |
Line 3009 sub updateGradeByPage {
|
Line 3068 sub updateGradeByPage {
|
|
|
$request->print($result); |
$request->print($result); |
|
|
my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', |
my $navmap = Apache::lonnavmaps::navmap->new(); |
$ENV{'request.course.fn'}.'_parms.db',1, 1); |
my ($mapUrl, $id, $resUrl) = &Apache::lonnet::decode_symb( $ENV{'form.page'}); |
my ($mapUrl, $id, $resUrl) = split(/___/, $ENV{'form.page'}); |
|
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
|
|
my $iterator = $navmap->getIterator($map->map_start(), |
my $iterator = $navmap->getIterator($map->map_start(), |
Line 3133 sub getSequenceDropDown {
|
Line 3191 sub getSequenceDropDown {
|
my ($request,$symb)=@_; |
my ($request,$symb)=@_; |
my $result='<select name="selectpage">'."\n"; |
my $result='<select name="selectpage">'."\n"; |
my ($titles,$symbx) = &getSymbMap($request); |
my ($titles,$symbx) = &getSymbMap($request); |
my ($curpage,$type,$mapId) = ($symb =~ /(.*?\.(page|sequence))___(\d+)___/); |
my ($curpage)=&Apache::lonnet::decode_symb($symb); |
my $ctr=0; |
my $ctr=0; |
foreach (@$titles) { |
foreach (@$titles) { |
my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); |
my ($minder,$showtitle) = ($_ =~ /(\d+)\.(.*)/); |
Line 3185 sub scantron_selectphase {
|
Line 3243 sub scantron_selectphase {
|
my $result; |
my $result; |
$result.= <<SCANTRONFORM; |
$result.= <<SCANTRONFORM; |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantro_process"> |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantro_process"> |
<input type="hidden" name="command" value="scantron_process" /> |
<input type="hidden" name="command" value="scantron_validate" /> |
$default_form_data |
$default_form_data |
<table width="100%" border="0"> |
<table width="100%" border="0"> |
<tr> |
<tr> |
Line 3215 sub scantron_selectphase {
|
Line 3273 sub scantron_selectphase {
|
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
<input type="submit" value="Submit" /> |
<input type="submit" value="Validate Scantron Records" /> |
</form> |
</form> |
$grading_menu_button |
$grading_menu_button |
SCANTRONFORM |
SCANTRONFORM |
Line 3297 sub scantron_parse_scanline {
|
Line 3355 sub scantron_parse_scanline {
|
} |
} |
|
|
sub scantron_add_delay { |
sub scantron_add_delay { |
|
my ($delayqueue,$scanline,$errormessage,$errorcode)=@_; |
|
Apache->request->print('add_delay_error '.$_[2] ); |
|
push(@$delayqueue, |
|
{'line' => $scanline, 'emsg' => $errormessage, |
|
'ecode' => $errorcode } |
|
); |
} |
} |
|
|
sub scantron_find_student { |
sub scantron_find_student { |
my ($scantron_record,$idmap)=@_; |
my ($scantron_record,$idmap)=@_; |
my $scanID=$$scantron_record{'scantron.ID'}; |
my $scanID=$$scantron_record{'scantron.ID'}; |
foreach my $id (keys(%$idmap)) { |
foreach my $id (keys(%$idmap)) { |
Apache->request->print('<pre>checking studnet -'.$id.'- againt -'.$scanID.'- </pre>'); |
#Apache->request->print('<pre>checking studnet -'.$id.'- againt -'.$scanID.'- </pre>'); |
if (lc($id) eq lc($scanID)) { Apache->request->print('success');return $$idmap{$id}; } |
if (lc($id) eq lc($scanID)) { |
|
#Apache->request->print('success'); |
|
return $$idmap{$id}; |
|
} |
} |
} |
return undef; |
return undef; |
} |
} |
Line 3317 sub scantron_filter {
|
Line 3384 sub scantron_filter {
|
return 0; |
return 0; |
} |
} |
|
|
|
#FIXME I think I am doing this in the wrong order, I think it would be |
|
#better to make a several passes analyzing all of the lines in the |
|
#file for common errors wrong/invalid PID/username duplicated |
|
#PID/username, missing bubbles, double bubbles, missing/invalid CODE |
|
#and then get the instructor to fix all of these errors, then grade |
|
#the corrected one, I'll still need to catch error conditions, but |
|
#maybe most will taken care even before we start |
|
|
|
sub scantron_validate_file { |
|
my ($r) = @_; |
|
} |
|
|
sub scantron_process_students { |
sub scantron_process_students { |
my ($r) = @_; |
my ($r) = @_; |
my (undef,undef,$sequence)=split(/___/,$ENV{'form.selectpage'}); |
my (undef,undef,$sequence)=&Apache::lonnet::decode_symb($ENV{'form.selectpage'}); |
my ($symb,$url)=&get_symb_and_url($r); |
my ($symb,$url)=&get_symb_and_url($r); |
if (!$symb) {return '';} |
if (!$symb) {return '';} |
my $default_form_data=&defaultFormData($symb,$url); |
my $default_form_data=&defaultFormData($symb,$url); |
Line 3329 sub scantron_process_students {
|
Line 3408 sub scantron_process_students {
|
my @scanlines=<$scanlines>; |
my @scanlines=<$scanlines>; |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my %idmap=&username_to_idmap($classlist); |
my %idmap=&username_to_idmap($classlist); |
my $navmap=Apache::lonnavmaps::navmap->new($ENV{'request.course.fn'}.'.db',$ENV{'request.course.fn'}.'_parms.db',1, 1); |
my $navmap=Apache::lonnavmaps::navmap->new(); |
my $map=$navmap->getResourceByUrl($sequence); |
my $map=$navmap->getResourceByUrl($sequence); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0); |
$r->print("geto ".scalar(@resources)."<br />"); |
# $r->print("geto ".scalar(@resources)."<br />"); |
my $result= <<SCANTRONFORM; |
my $result= <<SCANTRONFORM; |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantronupload"> |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="scantronupload"> |
<input type="hidden" name="command" value="scantron_configphase" /> |
<input type="hidden" name="command" value="scantron_configphase" /> |
Line 3341 SCANTRONFORM
|
Line 3420 SCANTRONFORM
|
$r->print($result); |
$r->print($result); |
|
|
my @delayqueue; |
my @delayqueue; |
my $totalcorrect; |
my %completedstudents; |
my $totalincorrect; |
|
|
|
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r, |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r, |
'Scantron Status','Scantron Progress',scalar(@scanlines)); |
'Scantron Status','Scantron Progress',scalar(@scanlines)); |
|
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state, |
|
'Processing first student'); |
|
my $start=&Time::HiRes::time(); |
foreach my $line (@scanlines) { |
foreach my $line (@scanlines) { |
my $studentcorrect; |
$r->print('<pre>line is'.$line.'</pre>'); |
my $studentincorrect; |
|
|
|
chomp($line); |
chomp($line); |
my $scan_record=&scantron_parse_scanline($line,\%scantron_config); |
my $scan_record=&scantron_parse_scanline($line,\%scantron_config); |
my ($uname,$udom); |
my ($uname,$udom); |
if ($uname=&scantron_find_student($scan_record,\%idmap)) { |
unless ($uname=&scantron_find_student($scan_record,\%idmap)) { |
&scantron_add_delay(\@delayqueue,$line, |
&scantron_add_delay(\@delayqueue,$line, |
'Unable to find a student that matches'); |
'Unable to find a student that matches',1); |
|
next; |
|
} |
|
if (exists $completedstudents{$uname}) { |
|
&scantron_add_delay(\@delayqueue,$line, |
|
'Student '.$uname.' has multiple sheets',2); |
|
next; |
} |
} |
$r->print('<pre>doing studnet'.$uname.'</pre>'); |
$r->print('<pre>doing studnet'.$uname.'</pre>'); |
($uname,$udom)=split(/:/,$uname); |
($uname,$udom)=split(/:/,$uname); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::appenv(%$scan_record); |
&Apache::lonnet::appenv(%$scan_record); |
# &Apache::lonhomework::showhash(%ENV); |
# &Apache::lonhomework::showhash(%ENV); |
$Apache::lonxml::debug=1; |
# $Apache::lonxml::debug=1; |
&Apache::lonxml::debug("line is $line"); |
# &Apache::lonxml::debug("line is $line"); |
|
|
my $i=0; |
my $i=0; |
foreach my $resource (@resources) { |
foreach my $resource (@resources) { |
Line 3375 SCANTRONFORM
|
Line 3461 SCANTRONFORM
|
'grade_domain' =>$udom, |
'grade_domain' =>$udom, |
'grade_courseid'=>$ENV{'request.course.id'}, |
'grade_courseid'=>$ENV{'request.course.id'}, |
'grade_symb' =>$resource->symb())); |
'grade_symb' =>$resource->symb())); |
my %score=&Apache::lonnet::restore($resource->symb(), |
# my %score=&Apache::lonnet::restore($resource->symb(), |
$ENV{'request.course.id'}, |
# $ENV{'request.course.id'}, |
$udom,$uname); |
# $udom,$uname); |
foreach my $part ($resource->{PARTS}) { |
# foreach my $part ($resource->{PARTS}) { |
if ($score{'resource.'.$part.'.solved'} =~ /^correct/) { |
# if ($score{'resource.'.$part.'.solved'} =~ /^correct/) { |
$studentcorrect++; |
# $studentcorrect++; |
$totalcorrect++; |
# $totalcorrect++; |
} else { |
# } else { |
$studentincorrect++; |
# $studentincorrect++; |
$totalincorrect++; |
# $totalincorrect++; |
} |
# } |
} |
# } |
$r->print('<pre>'. |
# $r->print('<pre>'. |
$resource->symb().'-'. |
# $resource->symb().'-'. |
$resource->src().'-'.'</pre>result is'.$result); |
# $resource->src().'-'.'</pre>result is'.$result); |
&Apache::lonhomework::showhash(%score); |
# &Apache::lonhomework::showhash(%score); |
# if ($i eq 3) {last;} |
# if ($i eq 3) {last;} |
} |
} |
|
$completedstudents{$uname}={'line'=>$line}; |
|
} continue { |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('form.counter'); |
&Apache::lonnet::delenv('scantron\.'); |
&Apache::lonnet::delenv('scantron\.'); |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
'last student Who got a '.$studentcorrect.' correct and '. |
'last student'); |
$studentincorrect.' incorrect. The class has gotten '. |
#last; |
$totalcorrect.' correct and '.$totalincorrect.' incorrect'); |
|
last; |
|
#FIXME |
#FIXME |
#get iterator for $sequence |
#get iterator for $sequence |
#foreach question 'submit' the students answer to the server |
#foreach question 'submit' the students answer to the server |
Line 3407 SCANTRONFORM
|
Line 3493 SCANTRONFORM
|
# generate data to pass back that includes grade recevied |
# generate data to pass back that includes grade recevied |
#} |
#} |
} |
} |
$Apache::lonxml::debug=0; |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
|
my $lasttime = &Time::HiRes::time()-$start; |
|
$r->print("<p>took $lasttime</p>"); |
|
|
|
#$Apache::lonxml::debug=0; |
foreach my $delay (@delayqueue) { |
foreach my $delay (@delayqueue) { |
#FIXME |
#FIXME |
#print out each delayed student with interface to select how |
#print out each delayed student with interface to select how |
Line 3474 sub gradingmenu {
|
Line 3564 sub gradingmenu {
|
} |
} |
formname.command.value = cmd; |
formname.command.value = cmd; |
formname.saveState.value = "saveCmd="+cmdsave+":saveSec="+pullDownSelection(formname.section)+ |
formname.saveState.value = "saveCmd="+cmdsave+":saveSec="+pullDownSelection(formname.section)+ |
":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status); |
":saveSub="+pullDownSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status); |
if (val < 5) formname.submit(); |
if (val < 5) formname.submit(); |
if (val == 5) { |
if (val == 5) { |
if (!checkReceiptNo(formname,'notOK')) { return false;} |
if (!checkReceiptNo(formname,'notOK')) { return false;} |
Line 3542 GRADINGMENUJS
|
Line 3632 GRADINGMENUJS
|
|
|
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'. |
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'. |
'<input type="radio" name="radioChoice" value="submission" '. |
'<input type="radio" name="radioChoice" value="submission" '. |
($saveCmd eq 'submission' ? 'checked' : '').'> '.'<b>Current Resource:</b> For one or more students'. |
($saveCmd eq 'submission' ? 'checked' : '').'> '.'<b>Current Resource:</b> For one or more students '. |
'<br /> -->For students with '. |
'<select name="submitonly">'. |
'<input type="radio" name="submitonly" value="yes" '. |
'<option value="yes" '. |
($saveSub eq 'yes' ? 'checked' : '').' /> submissions or '. |
($saveSub eq 'yes' ? 'selected="on"' : '').'>with submissions</option>'. |
'<input type="radio" name="submitonly" value="all" '. |
'<option value="graded" '. |
($saveSub eq 'all' ? 'checked' : '').' /> for all</td></tr>'."\n"; |
($saveSub eq 'graded' ? 'selected="on"' : '').'>with ungraded submissions</option>'. |
|
'<option value="all" '. |
|
($saveSub eq 'all' ? 'selected="on"' : '').'>with any status</option></select></td></tr>'."\n"; |
|
|
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'. |
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'. |
'<input type="radio" name="radioChoice" value="viewgrades" '. |
'<input type="radio" name="radioChoice" value="viewgrades" '. |
Line 3593 sub handler {
|
Line 3685 sub handler {
|
|
|
undef(%perm); |
undef(%perm); |
if ($ENV{'browser.mathml'}) { |
if ($ENV{'browser.mathml'}) { |
$request->content_type('text/xml'); |
&Apache::loncommon::content_type($request,'text/xml'); |
} else { |
} else { |
$request->content_type('text/html'); |
&Apache::loncommon::content_type($request,'text/html'); |
} |
} |
$request->send_http_header; |
$request->send_http_header; |
return '' if $request->header_only; |
return '' if $request->header_only; |
Line 3605 sub handler {
|
Line 3697 sub handler {
|
my $command=$ENV{'form.command'}; |
my $command=$ENV{'form.command'}; |
if (!$url) { |
if (!$url) { |
my ($temp1,$temp2); |
my ($temp1,$temp2); |
($temp1,$temp2,$ENV{'form.url'})=split(/___/,$symb); |
($temp1,$temp2,$ENV{'form.url'})=&Apache::lonnet::decode_symb($symb); |
$url = $ENV{'form.url'}; |
$url = $ENV{'form.url'}; |
} |
} |
&send_header($request); |
&send_header($request); |
Line 3618 sub handler {
|
Line 3710 sub handler {
|
my ($tsymb,$tuname,$tudom,$tcrsid)= |
my ($tsymb,$tuname,$tudom,$tcrsid)= |
&Apache::lonnet::checkin($token); |
&Apache::lonnet::checkin($token); |
if ($tsymb) { |
if ($tsymb) { |
my ($map,$id,$url)=split(/\_\_\_/,$tsymb); |
my ($map,$id,$url)=&Apache::lonnet::decode_symb($tsymb); |
if (&Apache::lonnet::allowed('mgr',$tcrsid)) { |
if (&Apache::lonnet::allowed('mgr',$tcrsid)) { |
$request->print(&Apache::lonnet::ssi_body('/res/'.$url, |
$request->print(&Apache::lonnet::ssi_body('/res/'.$url, |
('grade_username' => $tuname, |
('grade_username' => $tuname, |
Line 3690 sub handler {
|
Line 3782 sub handler {
|
} |
} |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
$request->print(&scantron_selectphase($request)); |
$request->print(&scantron_selectphase($request)); |
|
} elsif ($command eq 'scantron_validate' && $perm{'mgr'}) { |
|
$request->print(&scantron_validate_file($request)); |
} elsif ($command eq 'scantron_process' && $perm{'mgr'}) { |
} elsif ($command eq 'scantron_process' && $perm{'mgr'}) { |
$request->print(&scantron_process_students($request)); |
$request->print(&scantron_process_students($request)); |
} elsif ($command) { |
} elsif ($command) { |