version 1.125, 2003/07/25 20:35:40
|
version 1.143, 2003/10/08 18:25:18
|
Line 96 sub get_fullname {
|
Line 96 sub get_fullname {
|
return $fullname; |
return $fullname; |
} |
} |
|
|
|
#--- Format fullname, username:domain if different for display |
|
#--- Use anywhere where the student names are listed |
|
sub nameUserString { |
|
my ($type,$fullname,$uname,$udom) = @_; |
|
if ($type eq 'header') { |
|
return '<b> Fullname </b><font color="#999999">(Username)</font> '; |
|
} else { |
|
return ' '.$fullname.'<font color="#999999"> ('.$uname. |
|
($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').')</font>'; |
|
} |
|
} |
|
|
#--- Get the partlist and the response type for a given problem. --- |
#--- Get the partlist and the response type for a given problem. --- |
#--- Indicate if a response type is coded handgraded or not. --- |
#--- Indicate if a response type is coded handgraded or not. --- |
sub response_type { |
sub response_type { |
Line 109 sub response_type {
|
Line 121 sub response_type {
|
my ($responsetype,$part) = split(/_/,$_,2); |
my ($responsetype,$part) = split(/_/,$_,2); |
my ($partid,$respid) = split(/_/,$part); |
my ($partid,$respid) = split(/_/,$part); |
$responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!! |
$responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!! |
# my ($value) = &Apache::lonnet::EXT('resource.'.$part.'.handgrade',$symb); |
my ($value) = &Apache::lonnet::EXT('resource.'.$part.'.handgrade',$symb); |
# $handgrade{$part} = $responsetype.':'.($value eq 'yes' ? 'yes' : 'no'); #a bug $value is 'yes' regardless |
$handgrade{$part} = $responsetype.':'.($value eq 'yes' ? 'yes' : 'no'); |
$handgrade{$part} = $responsetype.':'.(($allkeys =~ /parameter_$part\_handgrade/) ? 'yes' : 'no'); |
|
next if ($seen{$partid} > 0); |
next if ($seen{$partid} > 0); |
$seen{$partid}++; |
$seen{$partid}++; |
push @partlist,$partid; |
push @partlist,$partid; |
Line 127 sub showResourceInfo {
|
Line 138 sub showResourceInfo {
|
my $result ='<table border="0">'. |
my $result ='<table border="0">'. |
'<tr><td colspan=3><font size=+1><b>Current Resource: </b>'.$probTitle.'</font></td></tr>'."\n"; |
'<tr><td colspan=3><font size=+1><b>Current Resource: </b>'.$probTitle.'</font></td></tr>'."\n"; |
my ($partlist,$handgrade) = &response_type($url); |
my ($partlist,$handgrade) = &response_type($url); |
my %resptype = (); #,$hdgrade)=('','no'); |
my %resptype = (); |
my $hdgrade='no'; |
my $hdgrade='no'; |
for (sort keys(%$handgrade)) { |
for (sort keys(%$handgrade)) { |
my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); |
my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); |
Line 154 sub cleanRecord {
|
Line 165 sub cleanRecord {
|
push @ans,$ans; |
push @ans,$ans; |
} |
} |
my $grayFont = '<font color="#999999">'; |
my $grayFont = '<font color="#999999">'; |
return '<table border="1">'. |
return '<blockquote><table border="1">'. |
'<tr valign="top"><td>Answer</td><td>'. |
'<tr valign="top"><td>Answer</td><td>'. |
(join '</td><td>',@ans).'</td></tr>'. |
(join '</td><td>',@ans).'</td></tr>'. |
'<tr valign="top"><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont. |
'<tr valign="top"><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont. |
(join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'. |
(join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'. |
'</table>'; |
'</table></blockquote>'; |
} |
} |
if ($response eq 'essay') { |
if ($response eq 'essay') { |
if (! exists ($ENV{'form.'.$symb})) { |
if (! exists ($ENV{'form.'.$symb})) { |
Line 174 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 &keywords_highlight($answer); |
return '<br /><br /><blockquote><pre>'.&keywords_highlight($answer).'</pre></blockquote>'; |
} |
} |
return $answer; |
return $answer; |
} |
} |
Line 207 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 299 sub student_gradeStatus {
|
Line 311 sub student_gradeStatus {
|
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 %partstatus = (); |
my %partstatus = (); |
foreach (@$partlist) { |
foreach (@$partlist) { |
my ($status,$foo) = split(/_/,$record{"resource.$_.solved"},2); |
my ($status,undef) = split(/_/,$record{"resource.$_.solved"},2); |
$status = 'nothing' if ($status eq ''); |
$status = 'nothing' if ($status eq ''); |
$partstatus{$_} = $status; |
$partstatus{$_} = $status; |
my $subkey = "resource.$_.submitted_by"; |
my $subkey = "resource.$_.submitted_by"; |
Line 475 sub listStudents {
|
Line 487 sub listStudents {
|
sense = "the student"; |
sense = "the student"; |
} |
} |
if (ctr == 0) { |
if (ctr == 0) { |
alert("Please select "+sense+" before clicking on the $viewgrade button."); |
alert("Please select "+sense+" before clicking on the Next button."); |
return false; |
return false; |
} |
} |
document.gradesub.submit(); |
document.gradesub.submit(); |
Line 506 LISTJAVASCRIPT
|
Line 518 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 527 LISTJAVASCRIPT
|
Line 539 LISTJAVASCRIPT
|
&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'<br />'; |
&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'<br />'; |
} |
} |
|
|
$gradeTable.='To '.lc($viewgrade).' a submission, click on the check box next to the student\'s name. Then '."\n". |
$gradeTable.='To '.lc($viewgrade).' a submission or a group of submissions, click on the check box(es) '. |
'click on the '.$viewgrade.' button. To view the submissions for a group of students, click'."\n". |
'next to the student\'s name(s). Then click on the Next button.<br />'."\n". |
' on the check boxes for the group of students.<br />'."\n". |
|
'<input type="hidden" name="command" value="processGroup" />'."\n"; |
'<input type="hidden" name="command" value="processGroup" />'."\n"; |
$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="'.$viewgrade.'" />'."\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">'; |
my $loop = 0; |
my $loop = 0; |
while ($loop < 2) { |
while ($loop < 2) { |
$gradeTable.='<td><b> Select </b></td><td><b> Fullname </b>'. |
$gradeTable.='<td><b> No.</b> </td><td><b> Select </b></td>'. |
'<font color="#999999">(Username)</font> </td>'; |
'<td>'.&nameUserString('header').'</td>'; |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
foreach (sort(@$partlist)) { |
foreach (sort(@$partlist)) { |
$gradeTable.='<td><b> Part '.(split(/_/))[0].' Status </b></td>'; |
$gradeTable.='<td><b> Part '.(split(/_/))[0].' Status </b></td>'; |
} |
} |
} |
} |
$loop++; |
$loop++; |
|
# $gradeTable.='<td></td>' if ($loop%2 ==1); |
} |
} |
$gradeTable.='</tr>'."\n"; |
$gradeTable.='</tr>'."\n"; |
|
|
Line 574 LISTJAVASCRIPT
|
Line 586 LISTJAVASCRIPT
|
$ctr++; |
$ctr++; |
if ( $perm{'vgr'} eq 'F' ) { |
if ( $perm{'vgr'} eq 'F' ) { |
$gradeTable.='<tr bgcolor="#ffffe6">' if ($ctr%2 ==1); |
$gradeTable.='<tr bgcolor="#ffffe6">' if ($ctr%2 ==1); |
$gradeTable.='<td align="center"><input type=checkbox name="stuinfo" value="'. |
$gradeTable.='<td align="right">'.$ctr.' </td>'. |
|
'<td align="center"><input type=checkbox name="stuinfo" value="'. |
$student.':'.$$fullname{$student}.' "></td>'."\n". |
$student.':'.$$fullname{$student}.' "></td>'."\n". |
'<td> '.$$fullname{$student}.' '."\n". |
'<td>'.&nameUserString(undef,$$fullname{$student},$uname,$udom).'</td>'."\n"; |
'<font color="#999999">('.$uname.')</font></td>'."\n"; |
|
|
|
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
foreach (sort keys(%status)) { |
foreach (sort keys(%status)) { |
Line 585 LISTJAVASCRIPT
|
Line 597 LISTJAVASCRIPT
|
$gradeTable.='<td align="middle"> '.$status{$_}.' </td>'."\n"; |
$gradeTable.='<td align="middle"> '.$status{$_}.' </td>'."\n"; |
} |
} |
} |
} |
|
# $gradeTable.='<td></td>' if ($ctr%2 ==1); |
$gradeTable.='</tr>'."\n" if ($ctr%2 ==0); |
$gradeTable.='</tr>'."\n" if ($ctr%2 ==0); |
} |
} |
} |
} |
if ($ctr%2 ==1) { |
if ($ctr%2 ==1) { |
$gradeTable.='<td> </td><td> </td>'; |
$gradeTable.='<td> </td><td> </td><td> </td>'; |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
foreach (@$partlist) { |
foreach (@$partlist) { |
$gradeTable.='<td> </td>'; |
$gradeTable.='<td> </td>'; |
Line 601 LISTJAVASCRIPT
|
Line 614 LISTJAVASCRIPT
|
$gradeTable.='</table></td></tr></table>'. |
$gradeTable.='</table></td></tr></table>'. |
'<input type="button" '. |
'<input type="button" '. |
'onClick="javascript:checkSelect(this.form.stuinfo);" '. |
'onClick="javascript:checkSelect(this.form.stuinfo);" '. |
'value="'.$viewgrade.'" /></form>'."\n"; |
'value="Next->" /></form>'."\n"; |
if ($ctr == 0) { |
if ($ctr == 0) { |
my $num_students=(scalar(keys(%$fullname))); |
my $num_students=(scalar(keys(%$fullname))); |
if ($num_students eq 0) { |
if ($num_students eq 0) { |
Line 752 sub sub_page_js {
|
Line 765 sub sub_page_js {
|
for (i=0;i<=total;i++) { |
for (i=0;i<=total;i++) { |
for (j=0;j<parttot;j++) { |
for (j=0;j<parttot;j++) { |
var partid = formname["partid"+i+"_"+j].value; |
var partid = formname["partid"+i+"_"+j].value; |
var selopt = formname["GD_SEL"+i+"_"+partid]; |
if (formname["GD_SEL"+i+"_"+partid][0].selected) { |
if (selopt[0].selected) { |
|
var points = formname["GD_BOX"+i+"_"+partid].value; |
var points = formname["GD_BOX"+i+"_"+partid].value; |
if (points == "") { |
if (points == "") { |
var name = formname["name"+i].value; |
var name = formname["name"+i].value; |
var resp = confirm("You did not assign a score for "+name+", part "+partid+". Continue?"); |
var studentID = (name != '' ? name : formname["unamedom"+i].value); |
|
var resp = confirm("You did not assign a score for "+studentID+ |
|
", part "+partid+". Continue?"); |
if (resp == false) { |
if (resp == false) { |
formname["GD_BOX"+i+"_"+partid].focus(); |
formname["GD_BOX"+i+"_"+partid].focus(); |
return false; |
return false; |
Line 785 sub sub_page_js {
|
Line 799 sub sub_page_js {
|
var ptr = 0; |
var ptr = 0; |
for (i=1;i<total;i++) { |
for (i=1;i<total;i++) { |
var partid = formname["q_"+i].value; |
var partid = formname["q_"+i].value; |
var selopt = formname["GD_SEL"+i+"_"+partid]; |
if (formname["GD_SEL"+i+"_"+partid][0].selected) { |
if (selopt[0].selected) { |
|
var points = formname["GD_BOX"+i+"_"+partid].value; |
var points = formname["GD_BOX"+i+"_"+partid].value; |
var status = formname["solved"+i+"_"+partid].value; |
var status = formname["solved"+i+"_"+partid].value; |
if (points == "" && status != "correct_by_student") { |
if (points == "" && status != "correct_by_student") { |
Line 834 sub sub_page_kw_js {
|
Line 847 sub sub_page_kw_js {
|
if (nret==null) return; |
if (nret==null) return; |
formname.keywords.value = nret; |
formname.keywords.value = nret; |
|
|
formname.refresh.value = "on"; |
|
if (formname.keywords.value != "") { |
if (formname.keywords.value != "") { |
|
formname.refresh.value = "on"; |
formname.submit(); |
formname.submit(); |
} |
} |
return; |
return; |
Line 862 sub sub_page_kw_js {
|
Line 875 sub sub_page_kw_js {
|
} |
} |
var nret = prompt("Add selection to keyword list? Edit if desired.",cleantxt); |
var nret = prompt("Add selection to keyword list? Edit if desired.",cleantxt); |
if (nret==null) return; |
if (nret==null) return; |
var curlist = document.SCORE.keywords.value; |
document.SCORE.keywords.value = document.SCORE.keywords.value+" "+nret; |
document.SCORE.keywords.value = curlist+" "+nret; |
|
document.SCORE.refresh.value = "on"; |
|
if (document.SCORE.keywords.value != "") { |
if (document.SCORE.keywords.value != "") { |
|
document.SCORE.refresh.value = "on"; |
document.SCORE.submit(); |
document.SCORE.submit(); |
} |
} |
return; |
return; |
Line 882 sub sub_page_kw_js {
|
Line 894 sub sub_page_kw_js {
|
var Nmsg = msgform.savemsgN.value; |
var Nmsg = msgform.savemsgN.value; |
savedMsgHeader(Nmsg,usrctr,fullname); |
savedMsgHeader(Nmsg,usrctr,fullname); |
var subject = msgform.msgsub.value; |
var subject = msgform.msgsub.value; |
var rtrchk = document.SCORE["includemsg"+usrctr]; |
var msgchk = document.SCORE["includemsg"+usrctr].value; |
var msgchk = rtrchk.value; |
|
re = /msgsub/; |
re = /msgsub/; |
var shwsel = ""; |
var shwsel = ""; |
if (re.test(msgchk)) { shwsel = "checked" } |
if (re.test(msgchk)) { shwsel = "checked" } |
Line 895 sub sub_page_kw_js {
|
Line 906 sub sub_page_kw_js {
|
shwsel = ""; |
shwsel = ""; |
if (re.test(msgchk)) { shwsel = "checked" } |
if (re.test(msgchk)) { shwsel = "checked" } |
var message = document.SCORE["savemsg"+i].value; |
var message = document.SCORE["savemsg"+i].value; |
var shownOnce = document.SCORE["shownOnce"+i].value; |
message = (document.SCORE["shownOnce"+i].value == 0 ? checkEntities(message) : message); |
message = (shownOnce == 0 ? checkEntities(message) : message); |
|
displaySavedMsg(i,message,shwsel); //I do not get it. w/o checkEntities on saved messages, |
displaySavedMsg(i,message,shwsel); //I do not get it. w/o checkEntities on saved messages, |
//any < is already converted to <, etc. However, only once!! |
//any < is already converted to <, etc. However, only once!! |
} |
} |
Line 932 sub sub_page_kw_js {
|
Line 942 sub sub_page_kw_js {
|
height = 600; |
height = 600; |
scrollbar = "yes"; |
scrollbar = "yes"; |
} |
} |
// if (window.pWin) {window.pWin.close(); window.pWin=null} |
|
var xpos = (screen.width-600)/2; |
var xpos = (screen.width-600)/2; |
xpos = (xpos < 0) ? '0' : xpos; |
xpos = (xpos < 0) ? '0' : xpos; |
var ypos = (screen.height-height)/2-30; |
var ypos = (screen.height-height)/2-30; |
Line 941 sub sub_page_kw_js {
|
Line 950 sub sub_page_kw_js {
|
pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height); |
pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height); |
pWin.focus(); |
pWin.focus(); |
pDoc = pWin.document; |
pDoc = pWin.document; |
|
pDoc.open('text/html','replace'); |
pDoc.write("<html><head>"); |
pDoc.write("<html><head>"); |
pDoc.write("<title>Message Central</title>"); |
pDoc.write("<title>Message Central</title>"); |
|
|
Line 1027 sub sub_page_kw_js {
|
Line 1037 sub sub_page_kw_js {
|
pDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>"); |
pDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>"); |
pDoc.write("</form>"); |
pDoc.write("</form>"); |
pDoc.write("</body></html>"); |
pDoc.write("</body></html>"); |
|
pDoc.close(); |
} |
} |
|
|
//====================== Script for keyword highlight options ============== |
//====================== Script for keyword highlight options ============== |
Line 1070 sub sub_page_kw_js {
|
Line 1081 sub sub_page_kw_js {
|
hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos); |
hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos); |
hwdWin.focus(); |
hwdWin.focus(); |
var hDoc = hwdWin.document; |
var hDoc = hwdWin.document; |
|
hDoc.open('text/html','replace'); |
hDoc.write("<html><head>"); |
hDoc.write("<html><head>"); |
hDoc.write("<title>Highlight Central</title>"); |
hDoc.write("<title>Highlight Central</title>"); |
|
|
Line 1118 sub sub_page_kw_js {
|
Line 1130 sub sub_page_kw_js {
|
hDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>"); |
hDoc.write("<input type=\\"button\\" value=\\"Cancel\\" onClick=\\"self.close()\\"><br><br>"); |
hDoc.write("</form>"); |
hDoc.write("</form>"); |
hDoc.write("</body></html>"); |
hDoc.write("</body></html>"); |
|
hDoc.close(); |
} |
} |
|
|
</script> |
</script> |
Line 1351 KEYWORDS
|
Line 1364 KEYWORDS
|
my $result='<table border="0" width=100%><tr><td bgcolor="#777777">'."\n". |
my $result='<table border="0" width=100%><tr><td bgcolor="#777777">'."\n". |
'<table border="0" width=100%><tr bgcolor="#edffff"><td>'."\n"; |
'<table border="0" width=100%><tr bgcolor="#edffff"><td>'."\n"; |
|
|
$result.='<b>Fullname: </b>'.$ENV{'form.fullname'}. |
$result.='<b>Fullname: </b>'.&nameUserString(undef,$ENV{'form.fullname'},$uname,$udom).'<br />'."\n"; |
'<font color="#999999"> Username: '.$uname. |
|
($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').'</font><br />'."\n"; |
|
$result.='<input type="hidden" name="name'.$counter. |
$result.='<input type="hidden" name="name'.$counter. |
'" value="'.$ENV{'form.fullname'}.'" />'."\n"; |
'" value="'.$ENV{'form.fullname'}.'" />'."\n"; |
|
|
Line 1451 KEYWORDS
|
Line 1462 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 1468 KEYWORDS
|
Line 1486 KEYWORDS
|
'"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '. |
'"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '. |
'<font color="red" size="1">Like all files provided by users, '. |
'<font color="red" size="1">Like all files provided by users, '. |
'this file may contain virusses</font><br />':''). |
'this file may contain virusses</font><br />':''). |
'<b>Submitted Answer: </b>'.($responsetype =~ /^(essay|option)$/ ? |
'<b>Submitted Answer: </b>'. |
'<blockquote>' : ''). |
|
&cleanRecord($subval,$responsetype,$symb). |
&cleanRecord($subval,$responsetype,$symb). |
($responsetype =~ /^(essay|option)$/ ? '</blockquote><br />' : |
'<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 1519 KEYWORDS
|
Line 1535 KEYWORDS
|
$msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.'; |
$msgfor .= ', '.(join ', ',@col_fullnames).' and '.$lastone.'.'; |
} |
} |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
# $result.='<tr><td bgcolor="#ffffff">'."\n". |
|
$result='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
$result='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
Line 1534 KEYWORDS
|
Line 1549 KEYWORDS
|
|
|
my %seen = (); |
my %seen = (); |
my @partlist; |
my @partlist; |
|
my @gradePartRespid; |
for (sort keys(%$handgrade)) { |
for (sort keys(%$handgrade)) { |
my ($partid,$respid) = split(/_/); |
my ($partid,$respid) = split(/_/); |
next if ($seen{$partid} > 0); |
next if ($seen{$partid} > 0); |
$seen{$partid}++; |
$seen{$partid}++; |
next if ($$handgrade{$_} =~ /:no$/ && $ENV{'form.lastSub'} =~ /^(hdgrade)$/); |
next if ($$handgrade{$_} =~ /:no$/ && $ENV{'form.lastSub'} =~ /^(hdgrade)$/); |
push @partlist,$partid; |
push @partlist,$partid; |
|
push @gradePartRespid,$partid.'.'.$respid; |
|
|
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); |
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); |
} |
} |
$result='<input type="hidden" name="partlist'.$counter. |
$result='<input type="hidden" name="partlist'.$counter. |
'" value="'.(join ":",@partlist).'" />'."\n"; |
'" value="'.(join ":",@partlist).'" />'."\n"; |
|
$result.='<input type="hidden" name="gradePartRespid'. |
|
'" value="'.(join ":",@gradePartRespid).'" />'."\n" if ($counter == 0); |
my $ctr = 0; |
my $ctr = 0; |
while ($ctr < scalar(@partlist)) { |
while ($ctr < scalar(@partlist)) { |
$result.='<input type="hidden" name="partid'.$counter.'_'.$ctr.'" value="'. |
$result.='<input type="hidden" name="partid'.$counter.'_'.$ctr.'" value="'. |
Line 1566 KEYWORDS
|
Line 1585 KEYWORDS
|
my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1'); |
my $nsel = ($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : '1'); |
$ntstu =~ s/<option>$nsel</<option selected="on">$nsel</; |
$ntstu =~ s/<option>$nsel</<option selected="on">$nsel</; |
$endform.=$ntstu.'student(s) '; |
$endform.=$ntstu.'student(s) '; |
$endform.='<input type="button" value="Next" '. |
$endform.='<input type="button" value="Previous" '. |
'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '."\n". |
'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> '."\n". |
'<input type="button" value="Previous" '. |
'<input type="button" value="Next" '. |
'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> '; |
'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '; |
$endform.='(Next and Previous do not save the scores.)'."\n" ; |
$endform.='(Next and Previous (student) do not save the scores.)'."\n" ; |
$endform.='</td><tr></table></form>'; |
$endform.='</td><tr></table></form>'; |
$endform.=&show_grading_menu_form($symb,$url); |
$endform.=&show_grading_menu_form($symb,$url); |
$request->print($endform); |
$request->print($endform); |
Line 1770 sub processHandGrade {
|
Line 1789 sub processHandGrade {
|
} |
} |
} |
} |
$ctr = 0; |
$ctr = 0; |
my ($partlist,$handgrade) = &response_type($ENV{'form.url'},$symb); |
|
@parsedlist = reverse @parsedlist if ($button eq 'Previous'); |
@parsedlist = reverse @parsedlist if ($button eq 'Previous'); |
foreach my $student (@parsedlist) { |
foreach my $student (@parsedlist) { |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
if ($ENV{'form.submitonly'} eq 'yes') { |
if ($ENV{'form.submitonly'} eq 'yes') { |
my (%status) = &student_gradeStatus($ENV{'form.url'},$symb,$udom,$uname,$partlist) ; |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$udom,$uname); |
my $statusflg = ''; |
my $statusflg = ''; |
foreach (keys(%status)) { |
foreach (split(/:/,$ENV{'form.gradePartRespid'})){ |
$statusflg = 1 if ($status{$_} ne 'nothing'); |
$statusflg = 1 if (exists ($record{'resource.'.$_.'.submission'})); |
my ($foo,$partid,$foo1) = split(/\./); |
|
$statusflg = '' if ($status{'resource.'.$partid.'.submitted_by'} ne ''); |
|
} |
} |
next if ($statusflg eq ''); |
next if ($statusflg eq ''); |
} |
} |
push @nextlist,$student if ($ctr < $ntstu); |
push @nextlist,$student if ($ctr < $ntstu); |
|
last if ($ctr == $ntstu); |
$ctr++; |
$ctr++; |
} |
} |
|
|
Line 2059 sub viewgrades {
|
Line 2076 sub viewgrades {
|
'<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n". |
'<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n"; |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n"; |
|
|
$result.='<h3>Assign Common Grade To '; |
my $sectionClass; |
if ($ENV{'form.section'} eq 'all') { |
if ($ENV{'form.section'} eq 'all') { |
$result.='Class </h3>'; |
$sectionClass='Class </h3>'; |
} elsif ($ENV{'form.section'} eq 'no') { |
} elsif ($ENV{'form.section'} eq 'no') { |
$result.='Students in no Section </h3>'; |
$sectionClass='Students in no Section </h3>'; |
} else { |
} else { |
$result.='Students in Section '.$ENV{'form.section'}.'</h3>'; |
$sectionClass='Students in Section '.$ENV{'form.section'}.'</h3>'; |
} |
} |
|
$result.='<h3>Assign Common Grade To '.$sectionClass; |
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
'<table border=0><tr bgcolor="#ffffdd"><td>'; |
'<table border=0><tr bgcolor="#ffffdd"><td>'; |
#radio buttons/text box for assigning points for a section or class. |
#radio buttons/text box for assigning points for a section or class. |
Line 2107 sub viewgrades {
|
Line 2125 sub viewgrades {
|
'onChange="javascript:writeRadText(\''.$partid.'\','. |
'onChange="javascript:writeRadText(\''.$partid.'\','. |
$weight{$partid}.')"> '. |
$weight{$partid}.')"> '. |
'<option selected="on"> </option>'. |
'<option selected="on"> </option>'. |
# '<option>excused</option></select></td></tr>'."\n"; |
|
'<option>excused</option>'. |
'<option>excused</option>'. |
'<option>reset status</option></select></td></tr>'."\n"; |
'<option>reset status</option></select></td></tr>'."\n"; |
$ctsparts++; |
$ctsparts++; |
Line 2119 sub viewgrades {
|
Line 2136 sub viewgrades {
|
|
|
#table listing all the students in a section/class |
#table listing all the students in a section/class |
#header of table |
#header of table |
$result.= '<h3>Assign Grade to Specific Students in '; |
$result.= '<h3>Assign Grade to Specific Students in '.$sectionClass; |
if ($ENV{'form.section'} eq 'all') { |
|
$result.='the Class </h3>'; |
|
} elsif ($ENV{'form.section'} eq 'no') { |
|
$result.='no Section </h3>'; |
|
} else { |
|
$result.='Section '.$ENV{'form.section'}.'</h3>'; |
|
} |
|
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
'<table border=0><tr bgcolor="#deffff">'. |
'<table border=0><tr bgcolor="#deffff"><td> <b>No.</b> </td>'. |
'<td><b>Fullname</b> <font color="#999999">(Username)</font></td>'."\n"; |
'<td>'.&nameUserString('header')."</td>\n"; |
my (@parts) = sort(&getpartlist($url)); |
my (@parts) = sort(&getpartlist($url)); |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
$display =~ s/^Number of Attempts/Tries/; # makes the column narrower |
$display =~ s|^Number of Attempts|Tries<br />|; # makes the column narrower |
if (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); } |
if (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); } |
if ($display =~ /^Partial Credit Factor/) { |
if ($display =~ /^Partial Credit Factor/) { |
my ($partid) = &split_part_type($part); |
my ($partid) = &split_part_type($part); |
Line 2154 sub viewgrades {
|
Line 2164 sub viewgrades {
|
my $uname = $_; |
my $uname = $_; |
$uname=~s/:/_/; |
$uname=~s/:/_/; |
$result.='<input type="hidden" name="ctr'.$ctr.'" value="'.$uname.'" />'."\n"; |
$result.='<input type="hidden" name="ctr'.$ctr.'" value="'.$uname.'" />'."\n"; |
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'}, |
|
$_,$$fullname{$_},\@parts,\%weight); |
|
$ctr++; |
$ctr++; |
|
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'}, |
|
$_,$$fullname{$_},\@parts,\%weight,$ctr); |
} |
} |
$result.='</table></td></tr></table>'; |
$result.='</table></td></tr></table>'; |
$result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n"; |
$result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n"; |
$result.='<input type="button" value="Submit Changes" '. |
$result.='<input type="button" value="Save" '. |
'onClick="javascript:submit();" TARGET=_self /></form>'."\n"; |
'onClick="javascript:submit();" TARGET=_self /></form>'."\n"; |
if (scalar(%$fullname) eq 0) { |
if (scalar(%$fullname) eq 0) { |
my $colspan=3+scalar(@parts); |
my $colspan=3+scalar(@parts); |
Line 2173 sub viewgrades {
|
Line 2183 sub viewgrades {
|
|
|
#--- call by previous routine to display each student |
#--- call by previous routine to display each student |
sub viewstudentgrade { |
sub viewstudentgrade { |
my ($url,$symb,$courseid,$student,$fullname,$parts,$weight) = @_; |
my ($url,$symb,$courseid,$student,$fullname,$parts,$weight,$ctr) = @_; |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
$student=~s/:/_/; |
$student=~s/:/_/; |
my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname); |
my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname); |
my $result='<tr bgcolor="#ffffdd"><td>'. |
my $result='<tr bgcolor="#ffffdd"><td align="right">'.$ctr.' </td><td> '. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'\')"; TARGET=_self>'.$fullname.'</a> '. |
'\')"; TARGET=_self>'.$fullname.'</a> '. |
'<font color="#999999">('.$uname.($ENV{'user.domain'} eq $udom ? '' : ':'.$udom).')</font></td>'."\n"; |
'<font color="#999999">('.$uname.($ENV{'user.domain'} eq $udom ? '' : ':'.$udom).')</font></td>'."\n"; |
Line 2197 sub viewstudentgrade {
|
Line 2207 sub viewstudentgrade {
|
$status = 'nothing' if ($status eq ''); |
$status = 'nothing' if ($status eq ''); |
$result.='<input type="hidden" name="'.'GD_'.$student.'_'. |
$result.='<input type="hidden" name="'.'GD_'.$student.'_'. |
$part.'_solved_s" value="'.$status.'" />'."\n"; |
$part.'_solved_s" value="'.$status.'" />'."\n"; |
$result.='<td align="middle"><select name="'. |
$result.='<td align="middle"> <select name="'. |
'GD_'.$student.'_'.$part.'_solved" '. |
'GD_'.$student.'_'.$part.'_solved" '. |
'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n"; |
'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n"; |
# my $optsel = '<option selected="on"> </option><option>excused</option>'."\n"; |
|
# $optsel = '<option> </option><option selected="on">excused</option>'."\n" |
|
# if ($status eq 'excused'); |
|
# $result.=$optsel; |
|
$result.= (($status eq 'excused') ? '<option> </option><option selected="on">excused</option>' |
$result.= (($status eq 'excused') ? '<option> </option><option selected="on">excused</option>' |
: '<option selected="on"> </option><option>excused</option>')."\n"; |
: '<option selected="on"> </option><option>excused</option>')."\n"; |
$result.='<option>reset status</option>'; |
$result.='<option>reset status</option>'; |
$result.="</select></td>\n"; |
$result.="</select> </td>\n"; |
} else { |
} else { |
$result.='<input type="hidden" name="'. |
$result.='<input type="hidden" name="'. |
'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'. |
'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'. |
Line 2231 sub editgrades {
|
Line 2237 sub editgrades {
|
my $title='<h3><font color="#339933">Current Grade Status</font></h3>'; |
my $title='<h3><font color="#339933">Current Grade Status</font></h3>'; |
$title.='<font size=+1><b>Current Resource: </b>'.$ENV{'form.probTitle'}.'</font><br />'."\n"; |
$title.='<font size=+1><b>Current Resource: </b>'.$ENV{'form.probTitle'}.'</font><br />'."\n"; |
$title.='<font size=+1><b>Section: </b>'.$ENV{'form.section'}.'</font>'."\n"; |
$title.='<font size=+1><b>Section: </b>'.$ENV{'form.section'}.'</font>'."\n"; |
|
|
my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n"; |
my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n"; |
$result.= '<table border="0"><tr bgcolor="#deffff">'. |
$result.= '<table border="0"><tr bgcolor="#deffff">'. |
'<td rowspan=2><b>Username</b></td><td rowspan=2><b>Domain</b></td><td rowspan=2><b>Fullname</b></td>'."\n"; |
'<td rowspan=2 valign="center"> <b>No.</b> </td>'. |
|
'<td rowspan=2 valign="center">'.&nameUserString('header')."</td>\n"; |
|
|
my %scoreptr = ( |
my %scoreptr = ( |
'correct' =>'correct_by_override', |
'correct' =>'correct_by_override', |
Line 2283 sub editgrades {
|
Line 2291 sub editgrades {
|
$result .= $header; |
$result .= $header; |
$result .= '</tr>'."\n"; |
$result .= '</tr>'."\n"; |
my $noupdate; |
my $noupdate; |
|
my ($updateCtr,$noupdateCtr) = (1,1); |
for ($i=0; $i<$ENV{'form.total'}; $i++) { |
for ($i=0; $i<$ENV{'form.total'}; $i++) { |
my $line; |
my $line; |
my $user = $ENV{'form.ctr'.$i}; |
my $user = $ENV{'form.ctr'.$i}; |
Line 2291 sub editgrades {
|
Line 2300 sub editgrades {
|
my ($uname,$udom)=split(/_/,$user); |
my ($uname,$udom)=split(/_/,$user); |
my %newrecord; |
my %newrecord; |
my $updateflag = 0; |
my $updateflag = 0; |
$line .= '<tr bgcolor="#ffffde"><td>'.$uname.' </td><td>'. |
$line .= '<td>'.&nameUserString(undef,$$fullname{$usercolon},$uname,$udom).'</td>'; |
$udom.' </td><td>'. |
|
$$fullname{$usercolon}.' </td>'; |
|
my $usec=$classlist->{"$uname:$udom"}[5]; |
my $usec=$classlist->{"$uname:$udom"}[5]; |
if (!&canmodify($usec)) { |
if (!&canmodify($usec)) { |
my $numcols=scalar(@partid)*(scalar(@parts)-1)*2; |
my $numcols=scalar(@partid)*4+2; |
$noupdate.=$line."<td colspan=\"$numcols\"><font color=\"red\">Not allowed to modify student</font></td></tr>"; |
$noupdate.=$line."<td colspan=\"$numcols\"><font color=\"red\">Not allowed to modify student</font></td></tr>"; |
next; |
next; |
} |
} |
Line 2322 sub editgrades {
|
Line 2329 sub editgrades {
|
|
|
if ($dropMenu eq 'reset status' && |
if ($dropMenu eq 'reset status' && |
$old_score ne '') { # ignore if no previous attempts => nothing to reset |
$old_score ne '') { # ignore if no previous attempts => nothing to reset |
print "reset status<br>"; |
|
$newrecord{'resource.'.$_.'.tries'} = 0; |
$newrecord{'resource.'.$_.'.tries'} = 0; |
$newrecord{'resource.'.$_.'.solved'} = ''; |
$newrecord{'resource.'.$_.'.solved'} = ''; |
$newrecord{'resource.'.$_.'.award'} = ''; |
$newrecord{'resource.'.$_.'.award'} = ''; |
$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 2363 sub editgrades {
|
Line 2368 sub editgrades {
|
$count++; |
$count++; |
&Apache::lonnet::cstore(\%newrecord,$symb,$ENV{'request.course.id'}, |
&Apache::lonnet::cstore(\%newrecord,$symb,$ENV{'request.course.id'}, |
$udom,$uname); |
$udom,$uname); |
$result.=$line; |
$result.='<tr bgcolor="#ffffde"><td align="right"> '.$updateCtr.' </td>'.$line; |
|
$updateCtr++; |
} else { |
} else { |
$noupdate.=$line; |
$noupdate.='<tr bgcolor="#ffffde"><td align="right"> '.$noupdateCtr.' </td>'.$line; |
|
$noupdateCtr++; |
} |
} |
} |
} |
if ($noupdate) { |
if ($noupdate) { |
my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3; |
# my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3; |
$result .= '<tr bgcolor="#ffffff"><td align="center" colspan="'.$numcols.'">No Changes Occured For the Students Below</td></tr>'.$noupdate; |
my $numcols=scalar(@partid)*4+2; |
|
$result .= '<tr bgcolor="#ffffff"><td align="center" colspan="'.$numcols.'">No Changes Occurred For the Students Below</td></tr>'.$noupdate; |
} |
} |
$result .= '</table></td></tr></table>'."\n". |
$result .= '</table></td></tr></table>'."\n". |
&show_grading_menu_form ($symb,$url); |
&show_grading_menu_form ($symb,$url); |
Line 2509 to this page if the data selected is ins
|
Line 2517 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 2726 LISTJAVASCRIPT
|
Line 2733 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 2762 LISTJAVASCRIPT
|
Line 2771 LISTJAVASCRIPT
|
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."<br />\n"; |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."<br />\n"; |
|
|
$result.=' <input type="button" '. |
$result.=' <input type="button" '. |
'onClick="javascript:checkPickOne(this.form);"value="Submit" /><br />'."\n"; |
'onClick="javascript:checkPickOne(this.form);"value="Next->" /><br />'."\n"; |
|
|
$request->print($result); |
$request->print($result); |
|
|
my $studentTable.=' <b>Select a student you wish to grade</b><br>'. |
my $studentTable.=' <b>Select a student you wish to grade and then click on the Next button.</b><br>'. |
'<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<td><b> Fullname <font color="#999999">(username)</font></b></td>'. |
'<td align="right"> <b>No.</b></td>'. |
'<td><b> Fullname <font color="#999999">(username)</font></b></td>'. |
'<td>'.&nameUserString('header').'</td>'. |
'<td><b> Fullname <font color="#999999">(username)</font></b></td>'. |
'<td align="right"> <b>No.</b></td>'. |
'<td><b> Fullname <font color="#999999">(username)</font></b></td></tr>'; |
'<td>'.&nameUserString('header').'</td></tr>'; |
|
|
my (undef,undef,$fullname) = &getclasslist($getsec,'1'); |
my (undef,undef,$fullname) = &getclasslist($getsec,'1'); |
my $ptr = 1; |
my $ptr = 1; |
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
$studentTable.=($ptr%4 == 1 ? '<tr bgcolor="#ffffe6"><td>' : '</td><td>'); |
$studentTable.=($ptr%2 == 1 ? '<tr bgcolor="#ffffe6">' : '</td>'); |
$studentTable.='<input type="radio" name="student" value="'.$student.'" /> '.$$fullname{$student}. |
$studentTable.='<td align="right">'.$ptr.' </td>'; |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font>'."\n"; |
$studentTable.='<td> <input type="radio" name="student" value="'.$student.'" /> ' |
$studentTable.=($ptr%4 == 0 ? '</td></tr>' : ''); |
.&nameUserString(undef,$$fullname{$student},$uname,$udom)."\n"; |
|
$studentTable.=($ptr%2 == 0 ? '</td></tr>' : ''); |
$ptr++; |
$ptr++; |
} |
} |
$studentTable.='</td><td> </td><td> </td><td> ' if ($ptr%4 == 2); |
$studentTable.='</td><td> </td><td> ' if ($ptr%2 == 0); |
$studentTable.='</td><td> </td><td> ' if ($ptr%4 == 3); |
|
$studentTable.='</td><td> ' if ($ptr%4 == 0); |
|
$studentTable.='</td></tr></table></td></tr></table>'."\n"; |
$studentTable.='</td></tr></table></td></tr></table>'."\n"; |
$studentTable.='<br /><input type="button" '. |
$studentTable.='<input type="button" '. |
'onClick="javascript:checkPickOne(this.form);"value="Submit" /></form>'."\n"; |
'onClick="javascript:checkPickOne(this.form);"value="Next->" /></form>'."\n"; |
|
|
$studentTable.=&show_grading_menu_form($symb,$url); |
$studentTable.=&show_grading_menu_form($symb,$url); |
$request->print($studentTable); |
$request->print($studentTable); |
Line 2799 LISTJAVASCRIPT
|
Line 2807 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 2841 sub displayPage {
|
Line 2847 sub displayPage {
|
return; |
return; |
} |
} |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
$result.='<h3> Student: '.$$fullname{$ENV{'form.student'}}. |
$result.='<h3> Student: '.&nameUserString(undef,$$fullname{$ENV{'form.student'}},$uname,$udom). |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
'</h3>'."\n"; |
|
|
&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 2883 sub displayPage {
|
Line 2887 sub displayPage {
|
if($curRes == $iterator->BEGIN_MAP) { $depth++; } |
if($curRes == $iterator->BEGIN_MAP) { $depth++; } |
if($curRes == $iterator->END_MAP) { $depth--; } |
if($curRes == $iterator->END_MAP) { $depth--; } |
|
|
# if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { |
|
if (ref($curRes) && $curRes->is_problem()) { |
if (ref($curRes) && $curRes->is_problem()) { |
my $parts = $curRes->parts(); |
my $parts = $curRes->parts(); |
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
Line 2982 sub displaySubByDates {
|
Line 2985 sub displaySubByDates {
|
$$record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : ''; |
$$record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : ''; |
} |
} |
$displaySub[2].=(exists $$record{"$version:resource.regrader"}) ? |
$displaySub[2].=(exists $$record{"$version:resource.regrader"}) ? |
$$record{"$version:resource.regrader"} : ''; |
$$record{"$version:resource.regrader"} : ''; # needed because old essay regrader has not parts info |
$studentTable.='<td>'.$displaySub[0].' </td><td>'.$displaySub[1]. |
$studentTable.='<td>'.$displaySub[0].' </td><td>'.$displaySub[1]. |
($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' </td></tr>'; |
($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' </td></tr>'; |
} |
} |
Line 3006 sub updateGradeByPage {
|
Line 3009 sub updateGradeByPage {
|
return; |
return; |
} |
} |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
$result.='<h3> Student: '.$ENV{'form.fullname'}. |
$result.='<h3> Student: '.&nameUserString(undef,$ENV{'form.fullname'},$uname,$udom). |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
'</h3>'."\n"; |
|
|
$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 3062 sub updateGradeByPage {
|
Line 3064 sub updateGradeByPage {
|
$score = 'excused'; |
$score = 'excused'; |
} elsif ($dropMenu eq 'reset status' |
} elsif ($dropMenu eq 'reset status' |
&& $ENV{'form.solved'.$question.'_'.$partid} ne '') { #update only if previous record exists |
&& $ENV{'form.solved'.$question.'_'.$partid} ne '') { #update only if previous record exists |
print "got to reset = $ENV{'form.solved'.$question.'_'.$partid}:<br>"; |
|
$newrecord{'resource.'.$partid.'.tries'} = 0; |
$newrecord{'resource.'.$partid.'.tries'} = 0; |
$newrecord{'resource.'.$partid.'.solved'} = ''; |
$newrecord{'resource.'.$partid.'.solved'} = ''; |
$newrecord{'resource.'.$partid.'.award'} = ''; |
$newrecord{'resource.'.$partid.'.award'} = ''; |
Line 3136 sub getSequenceDropDown {
|
Line 3137 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 3188 sub scantron_selectphase {
|
Line 3189 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 3218 sub scantron_selectphase {
|
Line 3219 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 3300 sub scantron_parse_scanline {
|
Line 3301 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 3320 sub scantron_filter {
|
Line 3330 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 3332 sub scantron_process_students {
|
Line 3354 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 3344 SCANTRONFORM
|
Line 3366 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 3378 SCANTRONFORM
|
Line 3407 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 3410 SCANTRONFORM
|
Line 3439 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 3563 GRADINGMENUJS
|
Line 3596 GRADINGMENUJS
|
'The <b>complete</b> set/page/sequence: For one student</td></tr>'."\n"; |
'The <b>complete</b> set/page/sequence: For one student</td></tr>'."\n"; |
|
|
$result.='<tr bgcolor="#ffffe6"><td><br />'. |
$result.='<tr bgcolor="#ffffe6"><td><br />'. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="View/Grade/Regrade" />'. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="Next->" />'. |
'</td></tr></table>'."\n"; |
'</td></tr></table>'."\n"; |
|
|
$result.='</td><td valign="top">'; |
$result.='</td><td valign="top">'; |
Line 3596 sub handler {
|
Line 3629 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 3608 sub handler {
|
Line 3641 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 3621 sub handler {
|
Line 3654 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 3693 sub handler {
|
Line 3726 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) { |