version 1.119, 2003/07/18 20:14:35
|
version 1.150, 2003/11/07 19:10:51
|
Line 33
|
Line 33
|
# June-August H.K. Ng |
# June-August H.K. Ng |
# Year 2003 |
# Year 2003 |
# February, March H.K. Ng |
# February, March H.K. Ng |
|
# July, H. K. Ng |
# |
# |
|
|
package Apache::grades; |
package Apache::grades; |
Line 54 my %perm=();
|
Line 55 my %perm=();
|
|
|
# ----- These first few routines are general use routines.---- |
# ----- These first few routines are general use routines.---- |
# |
# |
# --- Retrieve the parts that matches stores_\d+ from the metadata file.--- |
# --- Retrieve the parts from the metadata file.--- |
sub getpartlist { |
sub getpartlist { |
my ($url) = @_; |
my ($url,$symb) = @_; |
my @parts =(); |
my $partorder = &Apache::lonnet::metadata($url, 'partorder'); |
my (@metakeys) = split(/,/,&Apache::lonnet::metadata($url,'keys')); |
my @parts; |
foreach my $key (@metakeys) { |
if ($partorder) { |
if ( $key =~ m/stores_(\w+)_.*/) { |
for my $part (split (/,/,$partorder)) { |
push(@parts,$key); |
if (!&Apache::loncommon::check_if_partid_hidden($part,$symb)) { |
|
push(@parts, $part); |
|
} |
|
} |
|
} else { |
|
my $metadata = &Apache::lonnet::metadata($url, 'packages'); |
|
foreach (split(/\,/,$metadata)) { |
|
if ($_ =~ /^part_(.*)$/) { |
|
if (!&Apache::loncommon::check_if_partid_hidden($1,$symb)) { |
|
push(@parts, $1); |
|
} |
|
} |
} |
} |
} |
} |
return @parts; |
my @stores; |
|
foreach my $part (@parts) { |
|
my (@metakeys) = split(/,/,&Apache::lonnet::metadata($url,'keys')); |
|
foreach my $key (@metakeys) { |
|
if ($key =~ m/^stores_\Q$part\E_/) { push(@stores,$key); } |
|
} |
|
} |
|
return @stores; |
} |
} |
|
|
# --- Get the symbolic name of a problem and the url |
# --- Get the symbolic name of a problem and the url |
Line 95 sub get_fullname {
|
Line 114 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 { |
my ($url) = shift; |
my ($url,$symb) = shift; |
|
$symb=($ENV{'form.symb'} ne '' ? $ENV{'form.symb'} : (&Apache::lonnet::symbread($url))) if ($symb eq ''); |
my $allkeys = &Apache::lonnet::metadata($url,'keys'); |
my $allkeys = &Apache::lonnet::metadata($url,'keys'); |
my %seen = (); |
my %seen = (); |
my (@partlist,%handgrade); |
my (@partlist,%handgrade,%responseType); |
foreach (split(/,/,&Apache::lonnet::metadata($url,'packages'))) { |
foreach (split(/,/,&Apache::lonnet::metadata($url,'packages'))) { |
if (/^\w+response_\w+.*/) { |
if (/^\w+response_.*/) { |
my ($responsetype,$part) = split(/_/,$_,2); |
my ($responsetype,$part) = split(/_/,$_,2); |
my ($partid,$respid) = split(/_/,$part); |
my ($partid,$respid) = split(/_/,$part); |
|
if (&Apache::loncommon::check_if_partid_hidden($partid,$symb)) { |
|
next; |
|
} |
$responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!! |
$responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!! |
$handgrade{$part} = $responsetype.':'.($allkeys =~ /parameter_$part\_handgrade/ ? 'yes' : 'no'); |
my ($value) = &Apache::lonnet::EXT('resource.'.$part.'.handgrade',$symb); |
|
$handgrade{$part} = ($value eq 'yes' ? 'yes' : 'no'); |
|
if (!exists($responseType{$partid})) { $responseType{$partid}={}; } |
|
$responseType{$partid}->{$respid}=$responsetype; |
next if ($seen{$partid} > 0); |
next if ($seen{$partid} > 0); |
$seen{$partid}++; |
$seen{$partid}++; |
push @partlist,$partid; |
push @partlist,$partid; |
} |
} |
} |
} |
return \@partlist,\%handgrade; |
return \@partlist,\%handgrade,\%responseType; |
} |
} |
|
|
#--- Show resource title |
#--- Show resource title |
Line 122 sub showResourceInfo {
|
Line 160 sub showResourceInfo {
|
my ($url,$probTitle) = @_; |
my ($url,$probTitle) = @_; |
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,$responseType) = &response_type($url); |
my ($resptype,$hdgrade)=('','no'); |
my %resptype = (); |
for (sort keys(%$handgrade)) { |
my $hdgrade='no'; |
my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); |
for my $part_resID (sort keys(%$handgrade)) { |
$resptype = $responsetype; |
my $handgrade=$$handgrade{$part_resID}; |
|
my ($partID,$resID) = split(/_/,$part_resID); |
|
my $responsetype = $responseType->{$partID}->{$resID}; |
$hdgrade = $handgrade if ($handgrade eq 'yes'); |
$hdgrade = $handgrade if ($handgrade eq 'yes'); |
$result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'. |
$result.='<tr><td><b>Part </b>'.$partID.' <font color="#999999">'. |
|
$resID.'</font></td>'. |
'<td><b>Type: </b>'.$responsetype.'</td></tr>'; |
'<td><b>Type: </b>'.$responsetype.'</td></tr>'; |
# '<td><b>Handgrade: </b>'.$handgrade.'</td></tr>'; |
# '<td><b>Handgrade: </b>'.$handgrade.'</td></tr>'; |
} |
} |
$result.='</table>'."\n"; |
$result.='</table>'."\n"; |
return $result,$resptype,$hdgrade,$partlist,$handgrade; |
return $result,$responseType,$hdgrade,$partlist,$handgrade; |
} |
} |
|
|
|
|
|
sub get_order { |
|
my ($partid,$respid,$symb,$uname,$udom)=@_; |
|
my (undef,undef,$url)=&Apache::lonnet::decode_symb($symb); |
|
$url=&Apache::lonnet::clutter($url); |
|
my $subresult=&Apache::lonnet::ssi($url, |
|
('grade_target' => 'analyze'), |
|
('grade_domain' => $udom), |
|
('grade_symb' => $symb), |
|
('grade_courseid' => |
|
$ENV{'request.course.id'}), |
|
('grade_username' => $uname)); |
|
(undef,$subresult)=split(/_HASH_REF__/,$subresult,2); |
|
my %analyze=&Apache::lonnet::str2hash($subresult); |
|
return ($analyze{"$partid.$respid.shown"}); |
|
} |
#--- Clean response type for display |
#--- Clean response type for display |
#--- Currently filters option response type only. |
#--- Currently filters option/rank/radiobutton/match/essay response types only. |
sub cleanRecord { |
sub cleanRecord { |
my ($answer,$response) = @_; |
my ($answer,$response,$symb,$partid,$respid,$record,$order,$version) = @_; |
if ($response eq 'option') { |
my $grayFont = '<font color="#999999">'; |
my (@IDs,@ans); |
if ($response =~ /^(option|rank)$/) { |
foreach (split(/\&/,&Apache::lonnet::unescape($answer))) { |
my %answer=&Apache::lonnet::str2hash($answer); |
my ($optionID,$ans) = split(/=/); |
my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"}); |
push @IDs,$optionID.'</font>'; |
my ($toprow,$bottomrow); |
push @ans,$ans; |
foreach my $foil (@$order) { |
} |
if ($grading{$foil} == 1) { |
my $grayFont = '<font color="#999999">'; |
$toprow.='<td><b>'.$answer{$foil}.' </b></td>'; |
return '<table border="1">'. |
} else { |
'<tr valign="top"><td>Answer</td><td>'. |
$toprow.='<td><i>'.$answer{$foil}.' </i></td>'; |
(join '</td><td>',@ans).'</td></tr>'. |
} |
'<tr valign="top"><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont. |
$bottomrow.='<td>'.$grayFont.$foil.'</font> </td>'; |
(join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'. |
} |
'</table>'; |
return '<blockquote><table border="1">'. |
|
'<tr valign="top"><td>Answer</td>'.$toprow.'</tr>'. |
|
'<tr valign="top"><td>'.$grayFont.'Option ID</font></td>'. |
|
$grayFont.$bottomrow.'</tr>'.'</table></blockquote>'; |
|
} elsif ($response eq 'match') { |
|
my %answer=&Apache::lonnet::str2hash($answer); |
|
my %grading=&Apache::lonnet::str2hash($record->{$version."resource.$partid.$respid.submissiongrading"}); |
|
my @items=&Apache::lonnet::str2array($record->{$version."resource.$partid.$respid.submissionitems"}); |
|
my ($toprow,$middlerow,$bottomrow); |
|
foreach my $foil (@$order) { |
|
my $item=shift(@items); |
|
if ($grading{$foil} == 1) { |
|
$toprow.='<td><b>'.$item.' </b></td>'; |
|
$middlerow.='<td><b>'.$grayFont.$answer{$foil}.' </font></b></td>'; |
|
} else { |
|
$toprow.='<td><i>'.$item.' </i></td>'; |
|
$middlerow.='<td><i>'.$grayFont.$answer{$foil}.' </font></i></td>'; |
|
} |
|
$bottomrow.='<td>'.$grayFont.$foil.'</font> </td>'; |
|
} |
|
return '<blockquote><table border="1">'. |
|
'<tr valign="top"><td>Answer</td>'.$toprow.'</tr>'. |
|
'<tr valign="top"><td>'.$grayFont.'Item ID</font></td>'. |
|
$middlerow.'</tr>'. |
|
'<tr valign="top"><td>'.$grayFont.'Option ID</font></td>'. |
|
$bottomrow.'</tr>'.'</table></blockquote>'; |
|
} elsif ($response eq 'radiobutton') { |
|
my %answer=&Apache::lonnet::str2hash($answer); |
|
my ($toprow,$bottomrow); |
|
my $correct=($order->[0])+1; |
|
for (my $i=1;$i<=$#$order;$i++) { |
|
my $foil=$order->[$i]; |
|
if (exists($answer{$foil})) { |
|
if ($i == $correct) { |
|
$toprow.='<td><b>true</b></td>'; |
|
} else { |
|
$toprow.='<td><i>true</i></td>'; |
|
} |
|
} else { |
|
$toprow.='<td>false</td>'; |
|
} |
|
$bottomrow.='<td>'.$grayFont.$foil.'</font> </td>'; |
|
} |
|
return '<blockquote><table border="1">'. |
|
'<tr valign="top"><td>Answer</td>'.$toprow.'</tr>'. |
|
'<tr valign="top"><td>'.$grayFont.'Option ID</font></td>'. |
|
$grayFont.$bottomrow.'</tr>'.'</table></blockquote>'; |
|
} elsif ($response eq 'essay') { |
|
if (! exists ($ENV{'form.'.$symb})) { |
|
my (%keyhash) = &Apache::lonnet::dump('nohist_handgrade', |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
|
|
my $loginuser = $ENV{'user.name'}.':'.$ENV{'user.domain'}; |
|
$ENV{'form.keywords'} = $keyhash{$symb.'_keywords'} ne '' ? $keyhash{$symb.'_keywords'} : ''; |
|
$ENV{'form.kwclr'} = $keyhash{$loginuser.'_kwclr'} ne '' ? $keyhash{$loginuser.'_kwclr'} : 'red'; |
|
$ENV{'form.kwsize'} = $keyhash{$loginuser.'_kwsize'} ne '' ? $keyhash{$loginuser.'_kwsize'} : '0'; |
|
$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. |
|
} |
|
return '<br /><br /><blockquote><pre>'.&keywords_highlight($answer).'</pre></blockquote>'; |
} |
} |
return $answer; |
return $answer; |
} |
} |
Line 186 sub commonJSfunctions {
|
Line 303 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 197 COMMONJSFUNCTIONS
|
Line 315 COMMONJSFUNCTIONS
|
#--- section, ids and fullnames for each user. |
#--- section, ids and fullnames for each user. |
sub getclasslist { |
sub getclasslist { |
my ($getsec,$filterlist) = @_; |
my ($getsec,$filterlist) = @_; |
|
$getsec = $getsec eq '' ? 'all' : $getsec; |
my $classlist=&Apache::loncoursedata::get_classlist(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
# Bail out if we were unable to get the classlist |
# Bail out if we were unable to get the classlist |
return if (! defined($classlist)); |
return if (! defined($classlist)); |
Line 277 sub student_gradeStatus {
|
Line 396 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 303 sub jscriptNform {
|
Line 422 sub jscriptNform {
|
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n". |
|
'<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n". |
'<input type="hidden" name="command" value="submission" />'."\n". |
'<input type="hidden" name="command" value="submission" />'."\n". |
'<input type="hidden" name="student" value="" />'."\n". |
'<input type="hidden" name="student" value="" />'."\n". |
'<input type="hidden" name="userdom" value="" />'."\n". |
'<input type="hidden" name="userdom" value="" />'."\n". |
Line 430 sub listStudents {
|
Line 550 sub listStudents {
|
my $result='<h3><font color="#339933"> '.$viewgrade. |
my $result='<h3><font color="#339933"> '.$viewgrade. |
' Submissions for a Student or a Group of Students</font></h3>'; |
' Submissions for a Student or a Group of Students</font></h3>'; |
|
|
my ($table,$resptype,$hdgrade,$partlist,$handgrade) = &showResourceInfo($url,$ENV{'form.probTitle'}); |
my ($table,undef,$hdgrade,$partlist,$handgrade) = &showResourceInfo($url,$ENV{'form.probTitle'}); |
$result.=$table; |
$result.=$table; |
|
|
$request->print(<<LISTJAVASCRIPT); |
$request->print(<<LISTJAVASCRIPT); |
Line 452 sub listStudents {
|
Line 572 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 472 LISTJAVASCRIPT
|
Line 592 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 483 LISTJAVASCRIPT
|
Line 606 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="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". |
'<input type="hidden" name="submitonly" value="'.$submitonly.'" />'."\n". |
'<input type="hidden" name="submitonly" value="'.$submitonly.'" />'."\n". |
'<input type="hidden" name="response" value="'.$ENV{'form.response'}.'" />'."\n". |
|
'<input type="hidden" name="handgrade" value="'.$ENV{'form.handgrade'}.'" /><br />'."\n". |
'<input type="hidden" name="handgrade" value="'.$ENV{'form.handgrade'}.'" /><br />'."\n". |
'<input type="hidden" name="showgrading" value="'.$ENV{'form.showgrading'}.'" /><br />'."\n". |
'<input type="hidden" name="showgrading" value="'.$ENV{'form.showgrading'}.'" /><br />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
Line 497 LISTJAVASCRIPT
|
Line 620 LISTJAVASCRIPT
|
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n"; |
'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n"; |
|
|
$gradeTable.='<b>Student Status:</b> '. |
if (exists($ENV{'form.gradingMenu'}) && exists($ENV{'form.Status'})) { |
&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'<br />'; |
$gradeTable.='<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n"; |
|
} else { |
|
$gradeTable.='<b>Student Status:</b> '. |
|
&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 530 LISTJAVASCRIPT
|
Line 657 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; |
|
my ($part)=split(/\./,$partid); |
$gradeTable.='<input type="hidden" name="'. |
$gradeTable.='<input type="hidden" name="'. |
$student.':submitted_by" value="'. |
$student.':'.$part.':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++; |
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 558 LISTJAVASCRIPT
|
Line 689 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 574 LISTJAVASCRIPT
|
Line 706 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 582 LISTJAVASCRIPT
|
Line 714 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 623 sub sub_page_js {
|
Line 755 sub sub_page_js {
|
$request->print(<<SUBJAVASCRIPT); |
$request->print(<<SUBJAVASCRIPT); |
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
function updateRadio(formname,id,weight) { |
function updateRadio(formname,id,weight) { |
var gradeBox = eval("formname.GD_BOX"+id); |
var gradeBox = formname["GD_BOX"+id]; |
var radioButton = eval("formname.RADVAL"+id); |
var radioButton = formname["RADVAL"+id]; |
var oldpts = eval("formname.oldpts"+id+".value"); |
var oldpts = formname["oldpts"+id].value; |
var pts = checkSolved(formname,id) == 'update' ? gradeBox.value : oldpts; |
var pts = checkSolved(formname,id) == 'update' ? gradeBox.value : oldpts; |
gradeBox.value = pts; |
gradeBox.value = pts; |
var resetbox = false; |
var resetbox = false; |
Line 647 sub sub_page_js {
|
Line 779 sub sub_page_js {
|
var resp = confirm("You entered a value ("+pts+ |
var resp = confirm("You entered a value ("+pts+ |
") greater than the weight for the part. Accept?"); |
") greater than the weight for the part. Accept?"); |
if (resp == false) { |
if (resp == false) { |
gradeBox.value = ""; |
gradeBox.value = oldpts; |
return; |
return; |
} |
} |
} |
} |
Line 659 sub sub_page_js {
|
Line 791 sub sub_page_js {
|
} |
} |
} |
} |
updateSelect(formname,id); |
updateSelect(formname,id); |
var stores = eval("formname.stores"+id); |
formname["stores"+id].value = "0"; |
stores.value = "0"; |
|
} |
} |
|
|
function writeBox(formname,id,pts) { |
function writeBox(formname,id,pts) { |
var gradeBox = eval("formname.GD_BOX"+id); |
var gradeBox = formname["GD_BOX"+id]; |
if (checkSolved(formname,id) == 'update') { |
if (checkSolved(formname,id) == 'update') { |
gradeBox.value = pts; |
gradeBox.value = pts; |
} else { |
} else { |
var oldpts = eval("formname.oldpts"+id+".value"); |
var oldpts = formname["oldpts"+id].value; |
gradeBox.value = oldpts; |
gradeBox.value = oldpts; |
var radioButton = eval("formname.RADVAL"+id); |
var radioButton = formname["RADVAL"+id]; |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
if (i == oldpts) { |
if (i == oldpts) { |
Line 678 sub sub_page_js {
|
Line 809 sub sub_page_js {
|
} |
} |
} |
} |
} |
} |
var stores = eval("formname.stores"+id); |
formname["stores"+id].value = "0"; |
stores.value = "0"; |
|
updateSelect(formname,id); |
updateSelect(formname,id); |
return; |
return; |
} |
} |
Line 689 sub sub_page_js {
|
Line 819 sub sub_page_js {
|
updateSelect(formname,id); |
updateSelect(formname,id); |
return; |
return; |
} |
} |
gradeSelect = eval("formname.GD_SEL"+id); |
gradeSelect = formname["GD_SEL"+id]; |
for (var i=0; i<gradeSelect.length; i++) { |
for (var i=0; i<gradeSelect.length; i++) { |
if (gradeSelect[i].selected) { |
if (gradeSelect[i].selected) { |
var selectx=i; |
var selectx=i; |
} |
} |
} |
} |
var stores = eval("formname.stores"+id); |
var stores = formname["stores"+id]; |
if (selectx == stores.value) { return }; |
if (selectx == stores.value) { return }; |
var gradeBox = eval("formname.GD_BOX"+id); |
var gradeBox = formname["GD_BOX"+id]; |
gradeBox.value = ""; |
gradeBox.value = ""; |
var radioButton = eval("formname.RADVAL"+id); |
var radioButton = formname["RADVAL"+id]; |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
} |
} |
Line 707 sub sub_page_js {
|
Line 837 sub sub_page_js {
|
} |
} |
|
|
function checkSolved(formname,id) { |
function checkSolved(formname,id) { |
if (eval("formname.solved"+id+".value") == "correct_by_student") { |
if (formname["solved"+id].value == "correct_by_student" && formname.overRideScore.value == 'no') { |
var reply = confirm("This problem has been graded correct by the computer. Do you want to change the score?"); |
var reply = confirm("This problem has been graded correct by the computer. Do you want to change the score?"); |
if (!reply) {return "noupdate";} |
if (!reply) {return "noupdate";} |
|
formname.overRideScore.value = 'yes'; |
} |
} |
return "update"; |
return "update"; |
} |
} |
|
|
function updateSelect(formname,id) { |
function updateSelect(formname,id) { |
var gradeSelect = eval("formname.GD_SEL"+id); |
formname["GD_SEL"+id][0].selected = true; |
gradeSelect[0].selected = true; |
|
return; |
return; |
} |
} |
|
|
//=========== Check that a point is assigned for all the parts (essay grading only) ============ |
//=========== Check that a point is assigned for all the parts ============ |
function checksubmit(formname,val,total,parttot) { |
function checksubmit(formname,val,total,parttot) { |
document.SCORE.gradeOpt.value = val; |
formname.gradeOpt.value = val; |
if (val == "Save & Next") { |
if (val == "Save & Next") { |
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 = eval("formname.partid"+i+"_"+j+".value"); |
var partid = formname["partid"+i+"_"+j].value; |
var selopt = eval("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 = eval("formname.GD_BOX"+i+"_"+partid+".value"); |
|
if (points == "") { |
if (points == "") { |
var name = eval("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) { |
eval("formname.GD_BOX"+i+"_"+partid+".focus()"); |
formname["GD_BOX"+i+"_"+partid].focus(); |
return false; |
return false; |
} |
} |
} |
} |
Line 744 sub sub_page_js {
|
Line 875 sub sub_page_js {
|
} |
} |
|
|
} |
} |
|
if (val == "Grade Student") { |
|
formname.showgrading.value = "yes"; |
|
if (formname.Status.value == "") { |
|
formname.Status.value = "Active"; |
|
} |
|
formname.studentNo.value = total; |
|
} |
formname.submit(); |
formname.submit(); |
} |
} |
|
|
Line 752 sub sub_page_js {
|
Line 890 sub sub_page_js {
|
noscore = new Array(100); |
noscore = new Array(100); |
var ptr = 0; |
var ptr = 0; |
for (i=1;i<total;i++) { |
for (i=1;i<total;i++) { |
var partid = eval("formname.q_"+i+".value"); |
var partid = formname["q_"+i].value; |
var selopt = eval("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 = eval("formname.GD_BOX"+i+"_"+partid+".value"); |
var status = formname["solved"+i+"_"+partid].value; |
var status = eval("formname.solved"+i+"_"+partid+".value"); |
|
if (points == "" && status != "correct_by_student") { |
if (points == "" && status != "correct_by_student") { |
noscore[ptr] = i; |
noscore[ptr] = i; |
ptr++; |
ptr++; |
Line 797 sub sub_page_kw_js {
|
Line 934 sub sub_page_kw_js {
|
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
|
|
//===================== Show list of keywords ==================== |
//===================== Show list of keywords ==================== |
function keywords(keyform) { |
function keywords(formname) { |
var nret = prompt("Keywords list, separated by a space. Add/delete to list if desired.",keyform.value); |
var nret = prompt("Keywords list, separated by a space. Add/delete to list if desired.",formname.keywords.value); |
if (nret==null) return; |
if (nret==null) return; |
keyform.value = nret; |
formname.keywords.value = nret; |
|
|
document.SCORE.refresh.value = "on"; |
if (formname.keywords.value != "") { |
if (document.SCORE.keywords.value != "") { |
formname.refresh.value = "on"; |
document.SCORE.submit(); |
formname.submit(); |
} |
} |
return; |
return; |
} |
} |
Line 830 sub sub_page_kw_js {
|
Line 967 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 850 sub sub_page_kw_js {
|
Line 986 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 = eval("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" } |
displaySubject(subject,shwsel); |
subject = (document.SCORE.shownSub.value == 0 ? checkEntities(subject) : subject); |
|
displaySubject(checkEntities(subject),shwsel); |
for (var i=1; i<=Nmsg; i++) { |
for (var i=1; i<=Nmsg; i++) { |
var testpt = "savemsg"+i+","; |
var testmsg = "savemsg"+i+","; |
re = /testpt/; |
re = new RegExp(testmsg,"g"); |
shwsel = ""; |
shwsel = ""; |
if (re.test(msgchk)) { shwsel = "checked" } |
if (re.test(msgchk)) { shwsel = "checked" } |
var message = eval("document.SCORE.savemsg"+i+".value"); |
var message = document.SCORE["savemsg"+i].value; |
displaySavedMsg(i,message,shwsel); |
message = (document.SCORE["shownOnce"+i].value == 0 ? checkEntities(message) : message); |
|
displaySavedMsg(i,message,shwsel); //I do not get it. w/o checkEntities on saved messages, |
|
//any < is already converted to <, etc. However, only once!! |
} |
} |
newmsg = eval("document.SCORE.newmsg"+usrctr+".value"); |
newmsg = document.SCORE["newmsg"+usrctr].value; |
shwsel = ""; |
shwsel = ""; |
re = /newmsg/; |
re = /newmsg/; |
if (re.test(msgchk)) { shwsel = "checked" } |
if (re.test(msgchk)) { shwsel = "checked" } |
Line 873 sub sub_page_kw_js {
|
Line 1011 sub sub_page_kw_js {
|
return; |
return; |
} |
} |
|
|
|
function checkEntities(strx) { |
|
if (strx.length == 0) return strx; |
|
var orgStr = ["&", "<", ">", '"']; |
|
var newStr = ["&", "<", ">", """]; |
|
var counter = 0; |
|
while (counter < 4) { |
|
strx = strReplace(strx,orgStr[counter],newStr[counter]); |
|
counter++; |
|
} |
|
return strx; |
|
} |
|
|
|
function strReplace(strx, orgStr, newStr) { |
|
return strx.split(orgStr).join(newStr); |
|
} |
|
|
function savedMsgHeader(Nmsg,usrctr,fullname) { |
function savedMsgHeader(Nmsg,usrctr,fullname) { |
var height = 70*Nmsg+250; |
var height = 70*Nmsg+250; |
var scrollbar = "no"; |
var scrollbar = "no"; |
Line 880 sub sub_page_kw_js {
|
Line 1034 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 889 sub sub_page_kw_js {
|
Line 1042 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>"); |
|
|
pDoc.write("<script language=javascript>"); |
pDoc.write("<script language=javascript>"); |
pDoc.write("function checkInput() {"); |
pDoc.write("function checkInput() {"); |
pDoc.write(" opener.document.SCORE.msgsub.value = document.msgcenter.msgsub.value;"); |
pDoc.write(" opener.document.SCORE.msgsub.value = opener.checkEntities(document.msgcenter.msgsub.value);"); |
pDoc.write(" var nmsg = opener.document.SCORE.savemsgN.value;"); |
pDoc.write(" var nmsg = opener.document.SCORE.savemsgN.value;"); |
pDoc.write(" var usrctr = document.msgcenter.usrctr.value;"); |
pDoc.write(" var usrctr = document.msgcenter.usrctr.value;"); |
pDoc.write(" var newval = eval(\\"opener.document.SCORE.newmsg\\"+usrctr);"); |
pDoc.write(" var newval = opener.document.SCORE[\\"newmsg\\"+usrctr];"); |
pDoc.write(" newval.value = document.msgcenter.newmsg.value;"); |
pDoc.write(" newval.value = opener.checkEntities(document.msgcenter.newmsg.value);"); |
|
|
pDoc.write(" var msgchk = \\"\\";"); |
pDoc.write(" var msgchk = \\"\\";"); |
pDoc.write(" if (document.msgcenter.subchk.checked) {"); |
pDoc.write(" if (document.msgcenter.subchk.checked) {"); |
Line 906 sub sub_page_kw_js {
|
Line 1060 sub sub_page_kw_js {
|
pDoc.write(" }"); |
pDoc.write(" }"); |
pDoc.write(" var includemsg = 0;"); |
pDoc.write(" var includemsg = 0;"); |
pDoc.write(" for (var i=1; i<=nmsg; i++) {"); |
pDoc.write(" for (var i=1; i<=nmsg; i++) {"); |
pDoc.write(" var opnmsg = eval(\\"opener.document.SCORE.savemsg\\"+i);"); |
pDoc.write(" var opnmsg = opener.document.SCORE[\\"savemsg\\"+i];"); |
pDoc.write(" var frmmsg = eval(\\"document.msgcenter.msg\\"+i);"); |
pDoc.write(" var frmmsg = document.msgcenter[\\"msg\\"+i];"); |
pDoc.write(" opnmsg.value = frmmsg.value;"); |
pDoc.write(" opnmsg.value = opener.checkEntities(frmmsg.value);"); |
pDoc.write(" var chkbox = eval(\\"document.msgcenter.msgn\\"+i);"); |
pDoc.write(" var showflg = opener.document.SCORE[\\"shownOnce\\"+i];"); |
|
pDoc.write(" showflg.value = \\"1\\";"); |
|
pDoc.write(" var chkbox = document.msgcenter[\\"msgn\\"+i];"); |
pDoc.write(" if (chkbox.checked) {"); |
pDoc.write(" if (chkbox.checked) {"); |
pDoc.write(" msgchk += \\"savemsg\\"+i+\\",\\";"); |
pDoc.write(" msgchk += \\"savemsg\\"+i+\\",\\";"); |
pDoc.write(" includemsg = 1;"); |
pDoc.write(" includemsg = 1;"); |
Line 919 sub sub_page_kw_js {
|
Line 1075 sub sub_page_kw_js {
|
pDoc.write(" msgchk += \\"newmsg\\"+usrctr;"); |
pDoc.write(" msgchk += \\"newmsg\\"+usrctr;"); |
pDoc.write(" includemsg = 1;"); |
pDoc.write(" includemsg = 1;"); |
pDoc.write(" }"); |
pDoc.write(" }"); |
pDoc.write(" imgformname = eval(\\"opener.document.SCORE.mailicon\\"+usrctr);"); |
pDoc.write(" imgformname = opener.document.SCORE[\\"mailicon\\"+usrctr];"); |
pDoc.write(" imgformname.src = \\"$iconpath/\\"+((includemsg) ? \\"mailto.gif\\" : \\"mailbkgrd.gif\\");"); |
pDoc.write(" imgformname.src = \\"$iconpath/\\"+((includemsg) ? \\"mailto.gif\\" : \\"mailbkgrd.gif\\");"); |
pDoc.write(" var includemsg = eval(\\"opener.document.SCORE.includemsg\\"+usrctr);"); |
pDoc.write(" var includemsg = opener.document.SCORE[\\"includemsg\\"+usrctr];"); |
pDoc.write(" includemsg.value = msgchk;"); |
pDoc.write(" includemsg.value = msgchk;"); |
|
|
pDoc.write(" self.close()"); |
pDoc.write(" self.close()"); |
Line 973 sub sub_page_kw_js {
|
Line 1129 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 1016 sub sub_page_kw_js {
|
Line 1173 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 1064 sub sub_page_kw_js {
|
Line 1222 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 1113 sub gradeBox {
|
Line 1272 sub gradeBox {
|
'onChange="javascript:clearRadBox(this.form,\''.$counter.'_'.$partid.'\')" >'."\n"; |
'onChange="javascript:clearRadBox(this.form,\''.$counter.'_'.$partid.'\')" >'."\n"; |
if ($$record{'resource.'.$partid.'.solved'} eq 'excused') { |
if ($$record{'resource.'.$partid.'.solved'} eq 'excused') { |
$result.='<option> </option>'. |
$result.='<option> </option>'. |
'<option selected="on">excused</option></select>'."\n"; |
'<option selected="on">excused</option>'; |
} else { |
} else { |
$result.='<option selected="on"> </option>'. |
$result.='<option selected="on"> </option>'. |
'<option>excused</option></select>'."\n"; |
'<option>excused</option>'; |
} |
} |
|
$result.='<option>reset status</option></select>'."\n"; |
$result.="  \n"; |
$result.="  \n"; |
$result.='<input type="hidden" name="stores'.$counter.'_'.$partid.'" value="" />'."\n". |
$result.='<input type="hidden" name="stores'.$counter.'_'.$partid.'" value="" />'."\n". |
'<input type="hidden" name="oldpts'.$counter.'_'.$partid.'" value="'.$score.'" />'."\n". |
'<input type="hidden" name="oldpts'.$counter.'_'.$partid.'" value="'.$score.'" />'."\n". |
Line 1128 sub gradeBox {
|
Line 1288 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 1160 sub submission {
|
Line 1339 sub submission {
|
|
|
(my $url=$ENV{'form.url'})=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; |
(my $url=$ENV{'form.url'})=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; |
my ($uname,$udom) = ($ENV{'form.student'},$ENV{'form.userdom'}); |
my ($uname,$udom) = ($ENV{'form.student'},$ENV{'form.userdom'}); |
|
$udom = ($udom eq '' ? $ENV{'user.domain'} : $udom); #has form.userdom changed for a student? |
my $usec = &Apache::lonnet::getsection($udom,$uname,$ENV{'request.course.id'}); |
my $usec = &Apache::lonnet::getsection($udom,$uname,$ENV{'request.course.id'}); |
$ENV{'form.fullname'} = &get_fullname ($uname,$udom) if $ENV{'form.fullname'} eq ''; |
$ENV{'form.fullname'} = &get_fullname ($uname,$udom) if $ENV{'form.fullname'} eq ''; |
|
|
Line 1173 sub submission {
|
Line 1353 sub submission {
|
return; |
return; |
} |
} |
|
|
|
$ENV{'form.lastSub'} = ($ENV{'form.lastSub'} eq '' ? 'datesub' : $ENV{'form.lastSub'}); |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
|
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL'). |
|
'/check.gif" height="16" border="0" />'; |
|
|
# header info |
# header info |
if ($counter == 0) { |
if ($counter == 0) { |
Line 1186 sub submission {
|
Line 1369 sub submission {
|
'<font size=+1> <b>Resource: </b>'.$ENV{'form.probTitle'}.'</font>'."\n"); |
'<font size=+1> <b>Resource: </b>'.$ENV{'form.probTitle'}.'</font>'."\n"); |
|
|
if ($ENV{'form.handgrade'} eq 'no') { |
if ($ENV{'form.handgrade'} eq 'no') { |
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL'). |
|
'/check.gif" height="16" border="0" />'; |
|
my $checkMark='<br /><br /> <b>Note:</b> Part(s) graded correct by the computer is marked with a '. |
my $checkMark='<br /><br /> <b>Note:</b> Part(s) graded correct by the computer is marked with a '. |
$checkIcon.' symbol.'."\n"; |
$checkIcon.' symbol.'."\n"; |
$request->print($checkMark); |
$request->print($checkMark); |
Line 1195 sub submission {
|
Line 1376 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 1215 sub submission {
|
Line 1404 sub submission {
|
$ENV{'form.msgsub'} = $keyhash{$symb.'_subject'} ne '' ? |
$ENV{'form.msgsub'} = $keyhash{$symb.'_subject'} ne '' ? |
$keyhash{$symb.'_subject'} : $ENV{'form.probTitle'}; |
$keyhash{$symb.'_subject'} : $ENV{'form.probTitle'}; |
$ENV{'form.savemsgN'} = $keyhash{$symb.'_savemsgN'} ne '' ? $keyhash{$symb.'_savemsgN'} : '0'; |
$ENV{'form.savemsgN'} = $keyhash{$symb.'_savemsgN'} ne '' ? $keyhash{$symb.'_savemsgN'} : '0'; |
|
|
} |
} |
|
my $overRideScore = $ENV{'form.overRideScore'} eq '' ? 'no' : $ENV{'form.overRideScore'}; |
|
|
$request->print('<form action="/adm/grades" method="post" name="SCORE">'."\n". |
$request->print('<form action="/adm/grades" method="post" name="SCORE">'."\n". |
'<input type="hidden" name="command" value="handgrade" />'."\n". |
'<input type="hidden" name="command" value="handgrade" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n". |
'<input type="hidden" name="Status" value="'.$ENV{'form.Status'}.'" />'."\n". |
|
'<input type="hidden" name="overRideScore" value="'.$overRideScore.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n". |
'<input type="hidden" name="refresh" value="off" />'."\n". |
'<input type="hidden" name="refresh" value="off" />'."\n". |
|
'<input type="hidden" name="studentNo" value="" />'."\n". |
|
'<input type="hidden" name="gradeOpt" value="" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<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". |
'<input type="hidden" name="response" value="'.$ENV{'form.response'}.'">'."\n". |
|
'<input type="hidden" name="handgrade" value="'.$ENV{'form.handgrade'}.'">'."\n". |
'<input type="hidden" name="handgrade" value="'.$ENV{'form.handgrade'}.'">'."\n". |
'<input type="hidden" name="keywords" value="'.$ENV{'form.keywords'}.'" />'."\n". |
|
'<input type="hidden" name="kwclr" value="'.$ENV{'form.kwclr'}.'" />'."\n". |
|
'<input type="hidden" name="kwsize" value="'.$ENV{'form.kwsize'}.'" />'."\n". |
|
'<input type="hidden" name="kwstyle" value="'.$ENV{'form.kwstyle'}.'" />'."\n". |
|
'<input type="hidden" name="msgsub" value="'.$ENV{'form.msgsub'}.'" />'."\n". |
|
'<input type="hidden" name="savemsgN" value="'.$ENV{'form.savemsgN'}.'" />'."\n". |
|
'<input type="hidden" name="NCT"'. |
'<input type="hidden" name="NCT"'. |
' value="'.($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : $total+1).'" />'."\n"); |
' value="'.($ENV{'form.NTSTU'} ne '' ? $ENV{'form.NTSTU'} : $total+1).'" />'."\n"); |
|
if ($ENV{'form.handgrade'} eq 'yes') { |
|
$request->print('<input type="hidden" name="keywords" value="'.$ENV{'form.keywords'}.'" />'."\n". |
|
'<input type="hidden" name="kwclr" value="'.$ENV{'form.kwclr'}.'" />'."\n". |
|
'<input type="hidden" name="kwsize" value="'.$ENV{'form.kwsize'}.'" />'."\n". |
|
'<input type="hidden" name="kwstyle" value="'.$ENV{'form.kwstyle'}.'" />'."\n". |
|
'<input type="hidden" name="msgsub" value="'.$ENV{'form.msgsub'}.'" />'."\n". |
|
'<input type="hidden" name="shownSub" value="0" />'."\n". |
|
'<input type="hidden" name="savemsgN" value="'.$ENV{'form.savemsgN'}.'" />'."\n"); |
|
} |
|
|
my ($cts,$prnmsg) = (1,''); |
my ($cts,$prnmsg) = (1,''); |
while ($cts <= $ENV{'form.savemsgN'}) { |
while ($cts <= $ENV{'form.savemsgN'}) { |
$prnmsg.='<input type="hidden" name="savemsg'.$cts.'" value="'. |
$prnmsg.='<input type="hidden" name="savemsg'.$cts.'" value="'. |
($keyhash{$symb.'_savemsg'.$cts} eq '' ? |
(!exists($keyhash{$symb.'_savemsg'.$cts}) ? |
&Apache::lonfeedback::clear_out_html($ENV{'form.savemsg'.$cts}) : |
&Apache::lonfeedback::clear_out_html($ENV{'form.savemsg'.$cts}) : |
&Apache::lonfeedback::clear_out_html($keyhash{$symb.'_savemsg'.$cts})). |
&Apache::lonfeedback::clear_out_html($keyhash{$symb.'_savemsg'.$cts})). |
'" />'."\n"; |
'" />'."\n". |
|
'<input type="hidden" name="shownOnce'.$cts.'" value="0" />'."\n"; |
$cts++; |
$cts++; |
} |
} |
$request->print($prnmsg); |
$request->print($prnmsg); |
Line 1259 sub submission {
|
Line 1455 sub submission {
|
# |
# |
$request->print(<<KEYWORDS); |
$request->print(<<KEYWORDS); |
<b>Keyword Options:</b> |
<b>Keyword Options:</b> |
<a href="javascript:keywords(document.SCORE.keywords)"; TARGET=_self>List</a> |
<a href="javascript:keywords(document.SCORE)"; TARGET=_self>List</a> |
<a href="#" onMouseDown="javascript:getSel(); return false" |
<a href="#" onMouseDown="javascript:getSel(); return false" |
CLASS="page">Paste Selection to List</a> |
CLASS="page">Paste Selection to List</a> |
<a href="javascript:kwhighlight()"; TARGET=_self>Highlight Attribute</a><br /><br /> |
<a href="javascript:kwhighlight()"; TARGET=_self>Highlight Attribute</a><br /><br /> |
Line 1275 KEYWORDS
|
Line 1471 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); |
|
|
my ($partlist,$handgrade,$responseType) = &response_type($url,$symb); |
|
|
# Display student info |
# Display student info |
$request->print(($counter == 0 ? '' : '<br />')); |
$request->print(($counter == 0 ? '' : '<br />')); |
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 1330 KEYWORDS
|
Line 1533 KEYWORDS
|
$result.=$$fullname{$_}.' '; |
$result.=$$fullname{$_}.' '; |
} |
} |
$result.='<br />'."\n"; |
$result.='<br />'."\n"; |
|
my ($part)=split(/\./,$_); |
$result.='<input type="hidden" name="collaborator'.$counter. |
$result.='<input type="hidden" name="collaborator'.$counter. |
'" value="'.(join ':',@goodcollaborators).'" />'."\n"; |
'" value="'.$part.':'.(join ':',@goodcollaborators).'" />'. |
|
"\n"; |
} |
} |
if (scalar(@badcollaborators) > 0) { |
if (scalar(@badcollaborators) > 0) { |
$result.='<table border="0"><tr bgcolor="#ffbbbb"><td>'; |
$result.='<table border="0"><tr bgcolor="#ffbbbb"><td>'; |
Line 1357 KEYWORDS
|
Line 1562 KEYWORDS
|
# (3) Last submission plus the parts info |
# (3) Last submission plus the parts info |
# (4) The whole record for this student |
# (4) The whole record for this student |
if ($ENV{'form.lastSub'} =~ /^(lastonly|hdgrade)$/) { |
if ($ENV{'form.lastSub'} =~ /^(lastonly|hdgrade)$/) { |
if ($ENV{'form.'.$uname.':'.$udom.':submitted_by'}) { |
my ($string,$timestamp)= &get_last_submission(\%record); |
my $submitby=''. |
|
'<b>Collaborative submission by: </b>'. |
|
'<a href="javascript:viewSubmitter(\''. |
|
$ENV{'form.'.$uname.':'.$udom.':submitted_by'}. |
|
'\')"; TARGET=_self>'. |
|
$$fullname{$ENV{'form.'.$uname.':'.$udom.':submitted_by'}}.'</a>'; |
|
$request->print($submitby); |
|
} else { |
|
my ($string,$timestamp)= &get_last_submission (\%record); |
|
my $lastsubonly=''. |
my $lastsubonly=''. |
($$timestamp eq '' ? '' : '<b>Date Submitted:</b> '. |
($$timestamp eq '' ? '' : '<b>Date Submitted:</b> '. |
$$timestamp)."</td></tr>\n"; |
$$timestamp)."</td></tr>\n"; |
if ($$timestamp eq '') { |
if ($$timestamp eq '') { |
$lastsubonly.='<tr><td bgcolor="#ffffe6">'.$$string[0]; |
$lastsubonly.='<tr><td bgcolor="#ffffe6">'.$$string[0]; |
} else { |
} else { |
|
my %seenparts; |
for my $part (sort keys(%$handgrade)) { |
for my $part (sort keys(%$handgrade)) { |
my ($responsetype,$foo) = split(/:/,$$handgrade{$part}); |
|
my ($partid,$respid) = split(/_/,$part); |
my ($partid,$respid) = split(/_/,$part); |
|
if ($ENV{"form.$uname:$udom:$partid:submitted_by"}) { |
|
if (exists($seenparts{$partid})) { next; } |
|
$seenparts{$partid}=1; |
|
my $submitby='<b>Part '.$partid. |
|
' Collaborative submission by: </b>'. |
|
'<a href="javascript:viewSubmitter(\''. |
|
$ENV{"form.$uname:$udom:$partid:submitted_by"}. |
|
'\')"; TARGET=_self>'. |
|
$$fullname{$ENV{"form.$uname:$udom:$partid:submitted_by"}}.'</a><br />'; |
|
$request->print($submitby); |
|
next; |
|
} |
|
my $responsetype = $responseType->{$partid}->{$respid}; |
if (!exists($record{'resource.'.$partid.'.'.$respid.'.submission'})) { |
if (!exists($record{'resource.'.$partid.'.'.$respid.'.submission'})) { |
$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. |
' )</font> Nothing submitted<br /><br />'; |
' )</font> '. |
|
'<font color="red">Nothing submitted - no attempts</font><br /><br />'; |
} else { |
} else { |
foreach (@$string) { |
foreach (@$string) { |
my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/; |
my ($partid,$respid) = /^resource\.([^\.]*)\.([^\.]*)\.submission/; |
if ($part eq ($partid.'_'.$respid)) { |
if ($part eq ($partid.'_'.$respid)) { |
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 />'; |
|
} |
} |
} |
|
my $order=&get_order($partid,$respid,$symb,$uname,$udom); |
$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. |
' )</font> '. |
' )</font> '. |
Line 1404 KEYWORDS
|
Line 1622 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,$partid,$respid,\%record,$order). |
&cleanRecord(&keywords_highlight($subval),$responsetype). |
'<br /><br />'.$similar."\n" |
($responsetype =~ /^(essay|option)$/ ? '</blockquote><br />' : |
|
'<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} eq 'yes')); |
} |
} |
} |
} |
} |
} |
Line 1419 KEYWORDS
|
Line 1635 KEYWORDS
|
} |
} |
$lastsubonly.='</td></tr><tr bgcolor="#ffffff"><td>'."\n"; |
$lastsubonly.='</td></tr><tr bgcolor="#ffffff"><td>'."\n"; |
$request->print($lastsubonly); |
$request->print($lastsubonly); |
} |
} elsif ($ENV{'form.lastSub'} eq 'datesub') { |
} else { |
my (undef,$responseType,undef,$parts) = &showResourceInfo($url); |
|
$request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom)); |
|
} elsif ($ENV{'form.lastSub'} =~ /^(last|all)$/) { |
$request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom, |
$request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom, |
$ENV{'request.course.id'}, |
$ENV{'request.course.id'}, |
$last,'.submission', |
$last,'.submission', |
'Apache::grades::keywords_highlight')); |
'Apache::grades::keywords_highlight')); |
} |
} |
|
|
|
$request->print('<input type="hidden" name="unamedom'.$counter.'" value="'.$uname.':' |
|
.$udom.'" />'."\n"); |
|
|
# return if view submission with no grading option |
# return if view submission with no grading option |
if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) { |
if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) { |
$request->print('</td></tr></table></td></tr></table></form>'."\n"); |
my $toGrade.='<input type="button" value="Grade Student" '. |
$request->print(&show_grading_menu_form($symb,$url)) |
'onClick="javascript:checksubmit(this.form,\'Grade Student\',\'' |
|
.$counter.'\');" TARGET=_self> '."\n" if (&canmodify($usec)); |
|
$toGrade.='</td></tr></table></td></tr></table></form>'."\n"; |
|
$toGrade.=&show_grading_menu_form($symb,$url) |
if (($ENV{'form.command'} eq 'submission') || |
if (($ENV{'form.command'} eq 'submission') || |
($ENV{'form.command'} eq 'processGroup' && $counter == $total)); |
($ENV{'form.command'} eq 'processGroup' && $counter == $total)); |
|
$request = print($toGrade); |
return; |
return; |
} |
} |
|
|
$result='<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n". |
# essay grading message center |
'<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
|
'<input type="hidden" name="unamedom'.$counter.'" value="'.$uname.':' |
|
.$udom.'" />'."\n"; |
|
# essay grading options |
|
if ($ENV{'form.handgrade'} eq 'yes') { |
if ($ENV{'form.handgrade'} eq 'yes') { |
my ($lastname,$givenn) = split(/,/,$ENV{'form.fullname'}); |
my ($lastname,$givenn) = split(/,/,$ENV{'form.fullname'}); |
my $msgfor = $givenn.' '.$lastname; |
my $msgfor = $givenn.' '.$lastname; |
Line 1449 KEYWORDS
|
Line 1670 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". |
|
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
',\''.$msgfor.'\')"; TARGET=_self>'. |
',\''.$msgfor.'\')"; TARGET=_self>'. |
'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> '. |
'Compose Message to student'.(scalar(@col_fullnames) >= 1 ? 's' : '').'</a> '. |
Line 1457 KEYWORDS
|
Line 1679 KEYWORDS
|
'/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n". |
'/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n". |
'<br /> (Message will be sent when you click on Save & Next below.)'."\n" |
'<br /> (Message will be sent when you click on Save & Next below.)'."\n" |
if ($ENV{'form.handgrade'} eq 'yes'); |
if ($ENV{'form.handgrade'} eq 'yes'); |
|
$request->print($result); |
} |
} |
$request->print($result); |
|
|
|
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 1483 KEYWORDS
|
Line 1709 KEYWORDS
|
|
|
# print end of form |
# print end of form |
if ($counter == $total) { |
if ($counter == $total) { |
my $endform='<table border="0"><tr><td>'. |
my $endform='<table border="0"><tr><td>'."\n"; |
'<input type="hidden" name="gradeOpt" value="" />'."\n"; |
|
$endform.='<input type="button" value="Save & Next" '. |
$endform.='<input type="button" value="Save & Next" '. |
'onClick="javascript:checksubmit(this.form,\'Save & Next\','. |
'onClick="javascript:checksubmit(this.form,\'Save & Next\','. |
$total.','.scalar(@partlist).');" TARGET=_self> '."\n"; |
$total.','.scalar(@partlist).');" TARGET=_self> '."\n"; |
Line 1495 KEYWORDS
|
Line 1720 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 1529 sub get_last_submission {
|
Line 1754 sub get_last_submission {
|
} |
} |
} |
} |
} |
} |
@string = $string[0] eq '' ? 'Nothing submitted - no attempts.' : @string; |
@string = $string[0] eq '' ? '<font color="red">Nothing submitted - no attempts.</font>' : @string; |
return \@string,\$timestamp; |
return \@string,\$timestamp; |
} |
} |
|
|
Line 1554 sub processHandGrade {
|
Line 1779 sub processHandGrade {
|
my $button = $ENV{'form.gradeOpt'}; |
my $button = $ENV{'form.gradeOpt'}; |
my $ngrade = $ENV{'form.NCT'}; |
my $ngrade = $ENV{'form.NCT'}; |
my $ntstu = $ENV{'form.NTSTU'}; |
my $ntstu = $ENV{'form.NTSTU'}; |
|
|
if ($button eq 'Save & Next') { |
if ($button eq 'Save & Next') { |
my $ctr = 0; |
my $ctr = 0; |
while ($ctr < $ngrade) { |
while ($ctr < $ngrade) { |
Line 1586 sub processHandGrade {
|
Line 1810 sub processHandGrade {
|
$ENV{'form.msgsub'},$message); |
$ENV{'form.msgsub'},$message); |
} |
} |
if ($ENV{'form.collaborator'.$ctr}) { |
if ($ENV{'form.collaborator'.$ctr}) { |
my (@collaborators) = split(/:/,$ENV{'form.collaborator'.$ctr}); |
&Apache::lonnet::logthis('collab '.(join(':',@{ $ENV{'form.collaborator'.$ctr} }))); |
foreach (@collaborators) { |
my @collabstrs; |
my ($errorflag,$pts,$wgt) = |
if (ref($ENV{'form.collaborator'.$ctr}) eq 'ARRAY') { |
&saveHandGrade($request,$url,$symb,$_,$udom,$ctr,$ENV{'form.unamedom'.$ctr}); |
@collabstrs=@{$ENV{'form.collaborator'.$ctr}}; |
if ($errorflag eq 'not_allowed') { |
} else { |
$request->print("<font color=\"red\">Not allowed to modify grades for $_:$udom</font>"); |
@collabstrs=$ENV{'form.collaborator'.$ctr}; |
next; |
} |
} else { |
foreach my $collabstr (@collabstrs) { |
if ($message ne '') { |
my ($part,@collaborators) = split(/:/,$collabstr); |
$msgstatus = &Apache::lonmsg::user_normal_msg ($_,$udom, |
foreach (@collaborators) { |
$ENV{'form.msgsub'}, |
my ($errorflag,$pts,$wgt) = |
$message); |
&saveHandGrade($request,$url,$symb,$_,$udom,$ctr, |
|
$ENV{'form.unamedom'.$ctr},$part); |
|
if ($errorflag eq 'not_allowed') { |
|
$request->print("<font color=\"red\">Not allowed to modify grades for $_:$udom</font>"); |
|
next; |
|
} else { |
|
if ($message ne '') { |
|
$msgstatus = &Apache::lonmsg::user_normal_msg($_,$udom,$ENV{'form.msgsub'},$message); |
|
} |
|
|
} |
} |
} |
} |
} |
} |
Line 1648 sub processHandGrade {
|
Line 1881 sub processHandGrade {
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
} |
} |
# Called by Save & Refresh from Highlight Attribute Window |
# Called by Save & Refresh from Highlight Attribute Window |
# my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'0'); |
|
my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1'); |
my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1'); |
if ($ENV{'form.refresh'} eq 'on') { |
if ($ENV{'form.refresh'} eq 'on') { |
my ($ctr,$total) = (0,0); |
my ($ctr,$total) = (0,0); |
Line 1668 sub processHandGrade {
|
Line 1900 sub processHandGrade {
|
return ''; |
return ''; |
} |
} |
|
|
|
# Go directly to grade student - from submission or link from chart page |
|
if ($button eq 'Grade Student') { |
|
(undef,undef,$ENV{'form.handgrade'},undef,undef) = &showResourceInfo($url); |
|
my $processUser = $ENV{'form.unamedom'.$ENV{'form.studentNo'}}; |
|
($ENV{'form.student'},$ENV{'form.userdom'}) = split(/:/,$processUser); |
|
$ENV{'form.fullname'} = $$fullname{$processUser}; |
|
&submission($request,0,0); |
|
return ''; |
|
} |
|
|
# Get the next/previous one or group of students |
# Get the next/previous one or group of students |
my $firststu = $ENV{'form.unamedom0'}; |
my $firststu = $ENV{'form.unamedom0'}; |
my $laststu = $ENV{'form.unamedom'.($ngrade-1)}; |
my $laststu = $ENV{'form.unamedom'.($ngrade-1)}; |
Line 1691 sub processHandGrade {
|
Line 1933 sub processHandGrade {
|
} |
} |
} |
} |
$ctr = 0; |
$ctr = 0; |
my ($partlist,$handgrade) = &response_type($ENV{'form.url'}); |
|
@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 (%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 %status=&student_gradeStatus($url,$symb,$udom,$uname,$partlist); |
|
my $submitted = 0; |
|
my $graded = 1; |
foreach (keys(%status)) { |
foreach (keys(%status)) { |
$statusflg = 1 if ($status{$_} ne 'nothing'); |
$submitted = 1 if ($status{$_} ne 'nothing'); |
my ($foo,$partid,$foo1) = split(/\./); |
$graded = 0 if ($status{$_} =~ /^correct/); |
$statusflg = '' if ($status{'resource.'.$partid.'.submitted_by'} ne ''); |
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); |
$ctr++; |
$ctr++; |
} |
} |
|
|
Line 1732 sub processHandGrade {
|
Line 1982 sub processHandGrade {
|
|
|
#---- Save the score and award for each student, if changed |
#---- Save the score and award for each student, if changed |
sub saveHandGrade { |
sub saveHandGrade { |
my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter) = @_; |
my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter,$part) = @_; |
my $usec = &Apache::lonnet::getsection($domain,$stuname, |
my $usec = &Apache::lonnet::getsection($domain,$stuname, |
$ENV{'request.course.id'}); |
$ENV{'request.course.id'}); |
if (!&canmodify($usec)) { return('not_allowed'); } |
if (!&canmodify($usec)) { return('not_allowed'); } |
Line 1740 sub saveHandGrade {
|
Line 1990 sub saveHandGrade {
|
my %newrecord = (); |
my %newrecord = (); |
my ($pts,$wgt) = ('',''); |
my ($pts,$wgt) = ('',''); |
foreach (split(/:/,$ENV{'form.partlist'.$newflg})) { |
foreach (split(/:/,$ENV{'form.partlist'.$newflg})) { |
if ($ENV{'form.GD_SEL'.$newflg.'_'.$_} eq 'excused') { |
&Apache::lonnet::logthis("-$submitter-$stuname-$part-$_"); |
|
#collaborator may vary for different parts |
|
if ($submitter && $_ ne $part) { next; } |
|
my $dropMenu = $ENV{'form.GD_SEL'.$newflg.'_'.$_}; |
|
if ($dropMenu eq 'excused') { |
if ($record{'resource.'.$_.'.solved'} ne 'excused') { |
if ($record{'resource.'.$_.'.solved'} ne 'excused') { |
$newrecord{'resource.'.$_.'.solved'} = 'excused'; |
$newrecord{'resource.'.$_.'.solved'} = 'excused'; |
if (exists($record{'resource.'.$_.'.awarded'})) { |
if (exists($record{'resource.'.$_.'.awarded'})) { |
$newrecord{'resource.'.$_.'.awarded'} = ''; |
$newrecord{'resource.'.$_.'.awarded'} = ''; |
} |
} |
|
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
} |
} |
} else { |
} elsif ($dropMenu eq 'reset status' |
|
&& exists($record{'resource.'.$_.'.solved'})) { #don't bother if no old records -> no attempts |
|
$newrecord{'resource.'.$_.'.tries'} = 0; |
|
$newrecord{'resource.'.$_.'.solved'} = ''; |
|
$newrecord{'resource.'.$_.'.award'} = ''; |
|
$newrecord{'resource.'.$_.'.awarded'} = 0; |
|
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
|
} elsif ($dropMenu eq '') { |
$pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? |
$pts = ($ENV{'form.GD_BOX'.$newflg.'_'.$_} ne '' ? |
$ENV{'form.GD_BOX'.$newflg.'_'.$_} : |
$ENV{'form.GD_BOX'.$newflg.'_'.$_} : |
$ENV{'form.RADVAL'.$newflg.'_'.$_}); |
$ENV{'form.RADVAL'.$newflg.'_'.$_}); |
Line 1766 sub saveHandGrade {
|
Line 2028 sub saveHandGrade {
|
$newrecord{$reckey} = 'correct_by_override' |
$newrecord{$reckey} = 'correct_by_override' |
if ($record{$reckey} ne 'correct_by_override'); |
if ($record{$reckey} ne 'correct_by_override'); |
} |
} |
|
|
$newrecord{'resource.'.$_.'.submitted_by'} = $submitter |
$newrecord{'resource.'.$_.'.submitted_by'} = $submitter |
if ($submitter && ($record{'resource.'.$_.'.submitted_by'} ne $submitter)); |
if ($submitter && ($record{'resource.'.$_.'.submitted_by'} ne $submitter)); |
$newrecord{'resource.'.$_.'regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
} |
} |
} |
} |
|
|
Line 1790 sub viewgrades_js {
|
Line 2053 sub viewgrades_js {
|
$request->print(<<VIEWJAVASCRIPT); |
$request->print(<<VIEWJAVASCRIPT); |
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
function writePoint(partid,weight,point) { |
function writePoint(partid,weight,point) { |
var radioButton = eval("document.classgrade.RADVAL_"+partid); |
var radioButton = document.classgrade["RADVAL_"+partid]; |
var textbox = eval("document.classgrade.TEXTVAL_"+partid); |
var textbox = document.classgrade["TEXTVAL_"+partid]; |
if (point == "textval") { |
if (point == "textval") { |
var point = eval("document.classgrade.TEXTVAL_"+partid+".value"); |
point = document.classgrade["TEXTVAL_"+partid].value; |
if (isNaN(point) || parseFloat(point) < 0) { |
if (isNaN(point) || parseFloat(point) < 0) { |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
var resetbox = false; |
var resetbox = false; |
Line 1824 sub viewgrades_js {
|
Line 2087 sub viewgrades_js {
|
} |
} |
|
|
} else { |
} else { |
textbox.value = point; |
textbox.value = parseFloat(point); |
} |
} |
for (i=0;i<document.classgrade.total.value;i++) { |
for (i=0;i<document.classgrade.total.value;i++) { |
var user = eval("document.classgrade.ctr"+i+".value"); |
var user = document.classgrade["ctr"+i].value; |
var scorename = eval("document.classgrade.GD_"+user+ |
var scorename = document.classgrade["GD_"+user+"_"+partid+"_awarded"]; |
"_"+partid+"_awarded"); |
var saveval = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value; |
var saveval = eval("document.classgrade.GD_"+user+ |
var selname = document.classgrade["GD_"+user+"_"+partid+"_solved"]; |
"_"+partid+"_solved_s.value"); |
|
var selname = eval("document.classgrade.GD_"+user+"_"+partid+"_solved"); |
|
if (saveval != "correct") { |
if (saveval != "correct") { |
scorename.value = point; |
scorename.value = point; |
if (selname[0].selected != true) { |
if (selname[0].selected != true) { |
Line 1840 sub viewgrades_js {
|
Line 2101 sub viewgrades_js {
|
} |
} |
} |
} |
} |
} |
var selval = eval("document.classgrade.SELVAL_"+partid); |
document.classgrade["SELVAL_"+partid][0].selected = true; |
selval[0].selected = true; |
|
} |
} |
|
|
function writeRadText(partid,weight) { |
function writeRadText(partid,weight) { |
var selval = eval("document.classgrade.SELVAL_"+partid); |
var selval = document.classgrade["SELVAL_"+partid]; |
var radioButton = eval("document.classgrade.RADVAL_"+partid); |
var radioButton = document.classgrade["RADVAL_"+partid]; |
var textbox = eval("document.classgrade.TEXTVAL_"+partid); |
var textbox = document.classgrade["TEXTVAL_"+partid]; |
if (selval[1].selected) { |
if (selval[1].selected || selval[2].selected) { |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
|
|
Line 1856 sub viewgrades_js {
|
Line 2116 sub viewgrades_js {
|
textbox.value = ""; |
textbox.value = ""; |
|
|
for (i=0;i<document.classgrade.total.value;i++) { |
for (i=0;i<document.classgrade.total.value;i++) { |
var user = eval("document.classgrade.ctr"+i+".value"); |
var user = document.classgrade["ctr"+i].value; |
var scorename = eval("document.classgrade.GD_"+user+ |
var scorename = document.classgrade["GD_"+user+"_"+partid+"_awarded"]; |
"_"+partid+"_awarded"); |
var saveval = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value; |
var saveval = eval("document.classgrade.GD_"+user+ |
var selname = document.classgrade["GD_"+user+"_"+partid+"_solved"]; |
"_"+partid+"_solved_s.value"); |
|
var selname = eval("document.classgrade.GD_"+user+ |
|
"_"+partid+"_solved"); |
|
if (saveval != "correct") { |
if (saveval != "correct") { |
scorename.value = ""; |
scorename.value = ""; |
selname[1].selected = true; |
if (selval[1].selected) { |
|
selname[1].selected = true; |
|
} else { |
|
selname[2].selected = true; |
|
if (Number(document.classgrade["GD_"+user+"_"+partid+"_tries"].value)) |
|
{document.classgrade["GD_"+user+"_"+partid+"_tries"].value = '0';} |
|
} |
} |
} |
} |
} |
} else { |
} else { |
for (i=0;i<document.classgrade.total.value;i++) { |
for (i=0;i<document.classgrade.total.value;i++) { |
var user = eval("document.classgrade.ctr"+i+".value"); |
var user = document.classgrade["ctr"+i].value; |
var scorename = eval("document.classgrade.GD_"+user+ |
var scorename = document.classgrade["GD_"+user+"_"+partid+"_awarded"]; |
"_"+partid+"_awarded"); |
var saveval = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value; |
var saveval = eval("document.classgrade.GD_"+user+ |
var selname = document.classgrade["GD_"+user+"_"+partid+"_solved"]; |
"_"+partid+"_solved_s.value"); |
|
var selname = eval("document.classgrade.GD_"+user+ |
|
"_"+partid+"_solved"); |
|
if (saveval != "correct") { |
if (saveval != "correct") { |
scorename.value = eval("document.classgrade.GD_"+user+ |
scorename.value = document.classgrade["GD_"+user+"_"+partid+"_awarded_s"].value; |
"_"+partid+"_awarded_s.value");; |
|
selname[0].selected = true; |
selname[0].selected = true; |
} |
} |
} |
} |
Line 1887 sub viewgrades_js {
|
Line 2146 sub viewgrades_js {
|
} |
} |
|
|
function changeSelect(partid,user) { |
function changeSelect(partid,user) { |
var selval = eval("document.classgrade.GD_"+user+'_'+partid+"_solved"); |
var selval = document.classgrade["GD_"+user+'_'+partid+"_solved"]; |
var textbox = eval("document.classgrade.GD_"+user+'_'+partid+"_awarded"); |
var textbox = document.classgrade["GD_"+user+'_'+partid+"_awarded"]; |
var point = textbox.value; |
var point = textbox.value; |
var weight = eval("document.classgrade.weight_"+partid+".value"); |
var weight = document.classgrade["weight_"+partid].value; |
|
|
if (isNaN(point) || parseFloat(point) < 0) { |
if (isNaN(point) || parseFloat(point) < 0) { |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
Line 1909 sub viewgrades_js {
|
Line 2168 sub viewgrades_js {
|
} |
} |
|
|
function changeOneScore(partid,user) { |
function changeOneScore(partid,user) { |
var selval = eval("document.classgrade.GD_"+user+'_'+partid+"_solved"); |
var selval = document.classgrade["GD_"+user+'_'+partid+"_solved"]; |
if (selval[1].selected) { |
if (selval[1].selected || selval[2].selected) { |
var boxval = eval("document.classgrade.GD_"+user+'_'+partid+"_awarded"); |
document.classgrade["GD_"+user+'_'+partid+"_awarded"].value = ""; |
boxval.value = ""; |
if (selval[2].selected) { |
|
document.classgrade["GD_"+user+'_'+partid+"_tries"].value = "0"; |
|
} |
} |
} |
} |
} |
|
|
function resetEntry(numpart) { |
function resetEntry(numpart) { |
for (ctpart=0;ctpart<numpart;ctpart++) { |
for (ctpart=0;ctpart<numpart;ctpart++) { |
var partid = eval("document.classgrade.partid_"+ctpart+".value"); |
var partid = document.classgrade["partid_"+ctpart].value; |
var radioButton = eval("document.classgrade.RADVAL_"+partid); |
var radioButton = document.classgrade["RADVAL_"+partid]; |
var textbox = eval("document.classgrade.TEXTVAL_"+partid); |
var textbox = document.classgrade["TEXTVAL_"+partid]; |
var selval = eval("document.classgrade.SELVAL_"+partid); |
var selval = document.classgrade["SELVAL_"+partid]; |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
|
|
Line 1930 sub viewgrades_js {
|
Line 2191 sub viewgrades_js {
|
selval[0].selected = true; |
selval[0].selected = true; |
|
|
for (i=0;i<document.classgrade.total.value;i++) { |
for (i=0;i<document.classgrade.total.value;i++) { |
var user = eval("document.classgrade.ctr"+i+".value"); |
var user = document.classgrade["ctr"+i].value; |
var resetscore = eval("document.classgrade.GD_"+user+ |
var resetscore = document.classgrade["GD_"+user+"_"+partid+"_awarded"]; |
"_"+partid+"_awarded"); |
resetscore.value = document.classgrade["GD_"+user+"_"+partid+"_awarded_s"].value; |
resetscore.value = eval("document.classgrade.GD_"+user+ |
var resettries = document.classgrade["GD_"+user+"_"+partid+"_tries"]; |
"_"+partid+"_awarded_s.value"); |
resettries.value = document.classgrade["GD_"+user+"_"+partid+"_tries_s"].value; |
|
var saveselval = document.classgrade["GD_"+user+"_"+partid+"_solved_s"].value; |
var saveselval = eval("document.classgrade.GD_"+user+ |
var selname = document.classgrade["GD_"+user+"_"+partid+"_solved"]; |
"_"+partid+"_solved_s.value"); |
|
|
|
var selname = eval("document.classgrade.GD_"+user+"_"+partid+"_solved"); |
|
if (saveselval == "excused") { |
if (saveselval == "excused") { |
if (selname[1].selected == false) { selname[1].selected = true;} |
if (selname[1].selected == false) { selname[1].selected = true;} |
} else { |
} else { |
Line 1973 sub viewgrades {
|
Line 2231 sub viewgrades {
|
'<input type="hidden" name="command" value="editgrades" />'."\n". |
'<input type="hidden" name="command" value="editgrades" />'."\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="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\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. |
#handles different parts of a problem |
#handles different parts of a problem |
my ($partlist,$handgrade) = &response_type($ENV{'form.url'}); |
my ($partlist,$handgrade) = &response_type($url,$symb); |
my %weight = (); |
my %weight = (); |
my $ctsparts = 0; |
my $ctsparts = 0; |
$result.='<table border="0">'; |
$result.='<table border="0">'; |
Line 1996 sub viewgrades {
|
Line 2256 sub viewgrades {
|
my ($partid,$respid) = split (/_/,$_,2); |
my ($partid,$respid) = split (/_/,$_,2); |
next if $seen{$partid}; |
next if $seen{$partid}; |
$seen{$partid}++; |
$seen{$partid}++; |
my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); |
my $handgrade=$$handgrade{$_}; |
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb); |
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb); |
$weight{$partid} = $wgt eq '' ? '1' : $wgt; |
$weight{$partid} = $wgt eq '' ? '1' : $wgt; |
|
|
Line 2023 sub viewgrades {
|
Line 2283 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>reset status</option></select></td></tr>'."\n"; |
$ctsparts++; |
$ctsparts++; |
} |
} |
$result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n". |
$result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n". |
Line 2033 sub viewgrades {
|
Line 2294 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,$symb)); |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
next if ($display =~ /Number of Attempts/); |
$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 2068 sub viewgrades {
|
Line 2322 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 2087 sub viewgrades {
|
Line 2341 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 2111 sub viewstudentgrade {
|
Line 2365 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"; |
$result.= (($status eq 'excused') ? '<option> </option><option selected="on">excused</option>' |
$optsel = '<option> </option><option selected="on">excused</option>'."\n" |
: '<option selected="on"> </option><option>excused</option>')."\n"; |
if ($status eq 'excused'); |
$result.='<option>reset status</option>'; |
$result.=$optsel; |
$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.'" />'. |
"\n"; |
# "\n"; |
$result.='<td align="middle"><input type="text" name="'. |
# $result.='<td align="middle"><input type="text" name="'. |
'GD_'.$student.'_'.$part.'_'.$type.'" '. |
# 'GD_'.$student.'_'.$part.'_'.$type.'" '. |
'value="'.$score.'" size="4" /></td>'."\n"; |
# 'value="'.$score.'" size="4" /></td>'."\n"; |
|
} |
} |
} |
} |
$result.='</tr>'; |
$result.='</tr>'; |
Line 2142 sub editgrades {
|
Line 2395 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 2160 sub editgrades {
|
Line 2415 sub editgrades {
|
my %columns = (); |
my %columns = (); |
my ($i,$ctr,$count,$rec_update) = (0,0,0,0); |
my ($i,$ctr,$count,$rec_update) = (0,0,0,0); |
|
|
my (@parts) = sort(&getpartlist($url)); |
my (@parts) = sort(&getpartlist($url,$symb)); |
my $header; |
my $header; |
while ($ctr < $ENV{'form.totalparts'}) { |
while ($ctr < $ENV{'form.totalparts'}) { |
my $partid = $ENV{'form.partid_'.$ctr}; |
my $partid = $ENV{'form.partid_'.$ctr}; |
Line 2178 sub editgrades {
|
Line 2433 sub editgrades {
|
if ($type eq 'awarded' || $type eq 'solved') { next; } |
if ($type eq 'awarded' || $type eq 'solved') { next; } |
my $display=&Apache::lonnet::metadata($url,$stores.'.display'); |
my $display=&Apache::lonnet::metadata($url,$stores.'.display'); |
$display =~ s/\[Part: (\w)+\]//; |
$display =~ s/\[Part: (\w)+\]//; |
$header .= '<td align="center"> <b>Old</b> '.$display.' </td>'. |
$display =~ s/Number of Attempts/Tries/; |
'<td align="center"> <b>New</b> '.$display.' </td>'; |
$header .= '<td align="center"> <b>Old '.$display.'</b> </td>'. |
|
'<td align="center"> <b>New '.$display.'</b> </td>'; |
$columns{$partid}+=2; |
$columns{$partid}+=2; |
} |
} |
} |
} |
Line 2193 sub editgrades {
|
Line 2449 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 2201 sub editgrades {
|
Line 2458 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 2227 sub editgrades {
|
Line 2482 sub editgrades {
|
} elsif ($partial == 0) { |
} elsif ($partial == 0) { |
$score = 'incorrect_by_override'; |
$score = 'incorrect_by_override'; |
} |
} |
$score = 'excused' if (($ENV{'form.GD_'.$user.'_'.$_.'_solved'} eq 'excused') && |
my $dropMenu = $ENV{'form.GD_'.$user.'_'.$_.'_solved'}; |
($score ne 'excused')); |
$score = 'excused' if (($dropMenu eq 'excused') && ($score ne 'excused')); |
$line .= '<td align="center">'.$old_aw.' </td>'. |
|
'<td align="center">'.$awarded. |
|
($score eq 'excused' ? $score : '').' </td>'; |
|
|
|
if (!($old_part eq $partial && $old_score eq $score)) { |
if ($dropMenu eq 'reset status' && |
|
$old_score ne '') { # ignore if no previous attempts => nothing to reset |
|
$newrecord{'resource.'.$_.'.tries'} = 0; |
|
$newrecord{'resource.'.$_.'.solved'} = ''; |
|
$newrecord{'resource.'.$_.'.award'} = ''; |
|
$newrecord{'resource.'.$_.'.awarded'} = 0; |
|
$newrecord{'resource.'.$_.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
|
$updateflag = 1; |
|
} elsif (!($old_part eq $partial && $old_score eq $score)) { |
$updateflag = 1; |
$updateflag = 1; |
$newrecord{'resource.'.$_.'.awarded'} = $partial if $partial ne ''; |
$newrecord{'resource.'.$_.'.awarded'} = $partial if $partial ne ''; |
$newrecord{'resource.'.$_.'.solved'} = $score; |
$newrecord{'resource.'.$_.'.solved'} = $score; |
$rec_update++; |
$rec_update++; |
} |
} |
|
|
|
$line .= '<td align="center">'.$old_aw.' </td>'. |
|
'<td align="center">'.$awarded. |
|
($score eq 'excused' ? $score : '').' </td>'; |
|
|
|
|
my $partid=$_; |
my $partid=$_; |
foreach my $stores (@parts) { |
foreach my $stores (@parts) { |
my ($part,$type) = &split_part_type($stores); |
my ($part,$type) = &split_part_type($stores); |
Line 2249 sub editgrades {
|
Line 2514 sub editgrades {
|
my $awarded = $ENV{'form.GD_'.$user.'_'.$part.'_'.$type}; |
my $awarded = $ENV{'form.GD_'.$user.'_'.$part.'_'.$type}; |
if ($awarded ne '' && $awarded ne $old_aw) { |
if ($awarded ne '' && $awarded ne $old_aw) { |
$newrecord{'resource.'.$part.'.'.$type}= $awarded; |
$newrecord{'resource.'.$part.'.'.$type}= $awarded; |
$newrecord{'resource.'.$part.'regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$newrecord{'resource.'.$part.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$updateflag=1; |
$updateflag=1; |
} |
} |
$line .= '<td align="center">'.$old_aw.' </td>'. |
$line .= '<td align="center">'.$old_aw.' </td>'. |
Line 2261 sub editgrades {
|
Line 2526 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); |
my $msg = '<b>Number of records updated = '.$rec_update. |
my $msg = '<br /><b>Number of records updated = '.$rec_update. |
' for '.$count.' student'.($count <= 1 ? '' : 's').'.</b><br />'. |
' for '.$count.' student'.($count <= 1 ? '' : 's').'.</b><br />'. |
'<b>Total number of students = '.$ENV{'form.total'}.'</b><br />'; |
'<b>Total number of students = '.$ENV{'form.total'}.'</b><br />'; |
return $title.$msg.$result; |
return $title.$msg.$result; |
Line 2378 sub csvuploadmap_header {
|
Line 2646 sub csvuploadmap_header {
|
$javascript=&csvupload_javascript_forward_associate(); |
$javascript=&csvupload_javascript_forward_associate(); |
} |
} |
|
|
my ($result,$resptype,$hdgrade,$partlist,$handgrade) = &showResourceInfo($url,$ENV{'form.probTitle'}); |
my ($result) = &showResourceInfo($url,$ENV{'form.probTitle'}); |
|
|
$request->print(<<ENDPICK); |
$request->print(<<ENDPICK); |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
Line 2407 to this page if the data selected is ins
|
Line 2675 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 ''; |
|
|
} |
} |
|
|
sub csvupload_fields { |
sub csvupload_fields { |
my ($url) = @_; |
my ($url,$symb) = @_; |
my (@parts) = &getpartlist($url); |
my (@parts) = &getpartlist($url,$symb); |
my @fields=(['username','Student Username'],['domain','Student Domain']); |
my @fields=(['username','Student Username'],['domain','Student Domain']); |
foreach my $part (sort(@parts)) { |
foreach my $part (sort(@parts)) { |
my @datum; |
my @datum; |
Line 2497 sub csvuploadmap {
|
Line 2764 sub csvuploadmap {
|
&csvuploadmap_header($request,$symb,$url,$datatoken,$#records+1); |
&csvuploadmap_header($request,$symb,$url,$datatoken,$#records+1); |
my ($i,$keyfields); |
my ($i,$keyfields); |
if (@records) { |
if (@records) { |
my @fields=&csvupload_fields($url); |
my @fields=&csvupload_fields($url,$symb); |
|
|
if ($ENV{'form.upfile_associate'} eq 'reverse') { |
if ($ENV{'form.upfile_associate'} eq 'reverse') { |
&Apache::loncommon::csv_print_samples($request,\@records); |
&Apache::loncommon::csv_print_samples($request,\@records); |
Line 2590 sub csvuploadassign {
|
Line 2857 sub csvuploadassign {
|
# |
# |
#------------------------------------------------------------------- |
#------------------------------------------------------------------- |
# |
# |
#-------------- Next few routines handles grading by page/sequence |
#-------------- Next few routines handle grading by page/sequence |
# |
# |
#--- Select a page/sequence and a student to grade |
#--- Select a page/sequence and a student to grade |
sub pickStudentPage { |
sub pickStudentPage { |
Line 2604 function checkPickOne(formname) {
|
Line 2871 function checkPickOne(formname) {
|
alert("Please select the student you wish to grade."); |
alert("Please select the student you wish to grade."); |
return; |
return; |
} |
} |
var ptr = pullDownSelection(formname.selectpage); |
ptr = pullDownSelection(formname.selectpage); |
formname.page.value = eval("formname.page"+ptr+".value"); |
formname.page.value = formname["page"+ptr].value; |
formname.title.value = eval("formname.title"+ptr+".value"); |
formname.title.value = formname["title"+ptr].value; |
formname.submit(); |
formname.submit(); |
} |
} |
|
|
Line 2624 LISTJAVASCRIPT
|
Line 2891 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 2644 LISTJAVASCRIPT
|
Line 2913 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>'. |
'<input type="radio" name="lastSub" value="none" /> none'."\n". |
'<input type="radio" name="lastSub" value="none" /> none'."\n". |
'<input type="radio" name="lastSub" value="datesub" checked /> dates and submissions'."\n". |
'<input type="radio" name="lastSub" value="datesub" checked /> 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"; |
|
|
$result.='<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
$result.='<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
Line 2660 LISTJAVASCRIPT
|
Line 2929 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 2697 LISTJAVASCRIPT
|
Line 2965 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 2739 sub displayPage {
|
Line 3005 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 2755 sub displayPage {
|
Line 3019 sub displayPage {
|
|
|
my $studentTable='<form action="/adm/grades" method="post" name="gradePage">'."\n". |
my $studentTable='<form action="/adm/grades" method="post" name="gradePage">'."\n". |
'<input type="hidden" name="command" value="gradeByPage" />'."\n". |
'<input type="hidden" name="command" value="gradeByPage" />'."\n". |
|
'<input type="hidden" name="fullname" value="'.$$fullname{$ENV{'form.student'}}.'" />'."\n". |
'<input type="hidden" name="student" value="'.$ENV{'form.student'}.'" />'."\n". |
'<input type="hidden" name="student" value="'.$ENV{'form.student'}.'" />'."\n". |
'<input type="hidden" name="page" value="'.$pageTitle.'" />'."\n". |
'<input type="hidden" name="page" value="'.$pageTitle.'" />'."\n". |
'<input type="hidden" name="title" value="'.$ENV{'form.title'}.'" />'."\n". |
'<input type="hidden" name="title" value="'.$ENV{'form.title'}.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
|
'<input type="hidden" name="overRideScore" value="no" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n"; |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n"; |
|
|
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL'). |
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL'). |
Line 2779 sub displayPage {
|
Line 3045 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()) { |
my $parts = $curRes->parts(); |
my $parts = $curRes->parts(); |
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
my $symbx = $curRes->symb(); |
my $symbx = $curRes->symb(); |
$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 2801 sub displayPage {
|
Line 3068 sub displayPage {
|
} |
} |
|
|
my %record = &Apache::lonnet::restore($symbx,$ENV{'request.course.id'},$udom,$uname); |
my %record = &Apache::lonnet::restore($symbx,$ENV{'request.course.id'},$udom,$uname); |
|
|
if ($ENV{'form.lastSub'} eq 'datesub') { |
if ($ENV{'form.lastSub'} eq 'datesub') { |
if ($record{'version'} eq '') { |
if ($record{'version'} eq '') { |
$studentTable.='<br /> <font color="red">No recorded submission for this problem</font><br />'; |
$studentTable.='<br /> <font color="red">No recorded submission for this problem</font><br />'; |
} else { |
} else { |
my %responseType = (); |
my %responseType = (); |
foreach my $partid (@{$parts}) { |
foreach my $partid (@{$parts}) { |
$responseType{$partid} = $curRes->responseType($partid); |
my @responseIds =$curRes->responseIds($partid); |
|
my @responseType =$curRes->responseType($partid); |
|
my %responseIds; |
|
for (my $i=0;$i<=$#responseIds;$i++) { |
|
$responseIds{$responseIds[$i]}=$responseType[$i]; |
|
} |
|
$responseType{$partid} = \%responseIds; |
} |
} |
$studentTable.= &displaySubByDates(\%record,$parts,\%responseType,$checkIcon); |
$studentTable.= &displaySubByDates($symbx,\%record,$parts,\%responseType,$checkIcon,$uname,$udom); |
|
|
} |
} |
} elsif ($ENV{'form.lastSub'} eq 'all') { |
} elsif ($ENV{'form.lastSub'} eq 'all') { |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
Line 2834 sub displayPage {
|
Line 3109 sub displayPage {
|
$navmap->untieHashes(); |
$navmap->untieHashes(); |
|
|
$studentTable.='</td></tr></table></td></tr></table>'."\n". |
$studentTable.='</td></tr></table></td></tr></table>'."\n". |
' <input type="button" value="Save" '. |
'<input type="button" value="Save" '. |
'onClick="javascript:checkSubmitPage(this.form,'.$question.');" TARGET=_self />'. |
'onClick="javascript:checkSubmitPage(this.form,'.$question.');" TARGET=_self />'. |
'</form>'."\n"; |
'</form>'."\n"; |
$studentTable.=&show_grading_menu_form($symb,$url); |
$studentTable.=&show_grading_menu_form($symb,$url); |
Line 2844 sub displayPage {
|
Line 3119 sub displayPage {
|
} |
} |
|
|
sub displaySubByDates { |
sub displaySubByDates { |
my ($record,$parts,$responseType,$checkIcon) = @_; |
my ($symb,$record,$parts,$responseType,$checkIcon,$uname,$udom) = @_; |
my $studentTable='<table border="0" width="100%"><tr><td bgcolor="#777777">'. |
my $studentTable='<table border="0" width="100%"><tr><td bgcolor="#777777">'. |
'<table border="0" width="100%"><tr bgcolor="#e6ffff">'. |
'<table border="0" width="100%"><tr bgcolor="#e6ffff">'. |
'<td><b>Date/Time</b></td>'. |
'<td><b>Date/Time</b></td>'. |
Line 2852 sub displaySubByDates {
|
Line 3127 sub displaySubByDates {
|
'<td><b>Status </b></td></tr>'; |
'<td><b>Status </b></td></tr>'; |
my ($version); |
my ($version); |
my %mark; |
my %mark; |
|
my %orders; |
$mark{'correct_by_student'} = $checkIcon; |
$mark{'correct_by_student'} = $checkIcon; |
|
if (!exists($$record{'1:timestamp'})) { |
|
return '<br /> <font color="red">Nothing submitted - no attempts</font><br />'; |
|
} |
for ($version=1;$version<=$$record{'version'};$version++) { |
for ($version=1;$version<=$$record{'version'};$version++) { |
my $timestamp = scalar(localtime($$record{$version.':timestamp'})); |
my $timestamp = scalar(localtime($$record{$version.':timestamp'})); |
$studentTable.='<tr bgcolor="#ffffff" valign="top"><td>'.$timestamp.'</td>'; |
$studentTable.='<tr bgcolor="#ffffff" valign="top"><td>'.$timestamp.'</td>'; |
my @versionKeys = split(/\:/,$$record{$version.':keys'}); |
my @versionKeys = split(/\:/,$$record{$version.':keys'}); |
my @displaySub = (); |
my @displaySub = (); |
foreach my $partid (@{$parts}) { |
foreach my $partid (@{$parts}) { |
my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys; |
my @matchKey = sort(grep /^resource\.\Q$partid\E\..*?\.submission$/,@versionKeys); |
next if ($$record{"$version:resource.$partid.solved"} eq ''); |
# next if ($$record{"$version:resource.$partid.solved"} eq ''); |
$displaySub[0].=(exists $$record{$version.':'.$matchKey[0]}) ? |
foreach my $matchKey (@matchKey) { |
'<b>Part '.$partid.' '. |
if (exists $$record{$version.':'.$matchKey}) { |
($$record{"$version:resource.$partid.tries"} eq '' ? 'Trial not counted' : |
my ($responseId)=($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/); |
'Trial '.$$record{"$version:resource.$partid.tries"}).'</b> '. |
$displaySub[0].='<b>Part '.$partid.' '; |
&cleanRecord($$record{$version.':'.$matchKey[0]},$$responseType{$partid}).'<br />' : ''; |
$displaySub[0].='<font color="#999999">(ID '. |
$displaySub[1].=(exists $$record{"$version:resource.$partid.award"}) ? |
$responseId.')</font> '; |
'<b>Part '.$partid.'</b> '. |
if ($$record{"$version:resource.$partid.tries"} eq '') { |
lc($$record{"$version:resource.$partid.award"}).' '. |
$displaySub[0].='Trial not counted'; |
$mark{$$record{"$version:resource.$partid.solved"}}.'<br />' : ''; |
} else { |
# $$record{"$version:resource.$partid.solved"}.'<br />' : ''; |
$displaySub[0].='Trial '. |
$displaySub[2].=(exists $$record{"$version:resource.$partid.regrader"}) ? |
$$record{"$version:resource.$partid.tries"}; |
$$record{"$version:resource.$partid.regrader"}.' (<b>Part:</b> '.$partid.')' : ''; |
} |
} |
my $responseType=$responseType->{$partid}->{$responseId}; |
$displaySub[2].=(exists $$record{"$version:resource.regrader"}) ? |
if (!exists($orders{$partid})) { $orders{$partid}={}; } |
$$record{"$version:resource.regrader"} : ''; |
if (!exists($orders{$partid}->{$responseId})) { |
$studentTable.='<td>'.$displaySub[0].' </td><td>'.$displaySub[1]. |
$orders{$partid}->{$responseId}= |
($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' </td></tr>'; |
&get_order($partid,$responseId,$symb,$uname,$udom); |
|
} |
|
$displaySub[0].='</b> '. |
|
&cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:").'<br />'; |
|
} |
|
} |
|
if (exists $$record{"$version:resource.$partid.award"}) { |
|
$displaySub[1].='<b>Part '.$partid.'</b> '. |
|
lc($$record{"$version:resource.$partid.award"}).' '. |
|
$mark{$$record{"$version:resource.$partid.solved"}}. |
|
'<br />'; |
|
} |
|
if (exists $$record{"$version:resource.$partid.regrader"}) { |
|
$displaySub[2].=$$record{"$version:resource.$partid.regrader"}. |
|
' (<b>Part:</b> '.$partid.')'; |
|
} |
|
} |
|
# needed because old essay regrader has not parts info |
|
if (exists $$record{"$version:resource.regrader"}) { |
|
$displaySub[2].=$$record{"$version:resource.regrader"}; |
|
} |
|
$studentTable.='<td>'.$displaySub[0].' </td><td>'.$displaySub[1]; |
|
if ($displaySub[2]) { |
|
$studentTable.='Manually graded by '.$displaySub[2]; |
|
} |
|
$studentTable.=' </td></tr>'; |
|
|
} |
} |
$studentTable.='</table></td></tr></table>'; |
$studentTable.='</table></td></tr></table>'; |
return $studentTable; |
return $studentTable; |
Line 2899 sub updateGradeByPage {
|
Line 3204 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: '.$$fullname{$ENV{'form.student'}}. |
$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 2914 sub updateGradeByPage {
|
Line 3218 sub updateGradeByPage {
|
|
|
my $studentTable='<table border="0"><tr><td bgcolor="#777777">'. |
my $studentTable='<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<td align="center"><b> No </b></td>'. |
'<td align="center"><b> Prob. </b></td>'. |
'<td><b> Title </b></td>'. |
'<td><b> Title </b></td>'. |
'<td><b> Previous Score </b></td>'. |
'<td><b> Previous Score </b></td>'. |
'<td><b> New Score </b></td></tr>'; |
'<td><b> New Score </b></td></tr>'; |
Line 2946 sub updateGradeByPage {
|
Line 3250 sub updateGradeByPage {
|
my $score; |
my $score; |
if ($partial > 0) { |
if ($partial > 0) { |
$score = 'correct_by_override'; |
$score = 'correct_by_override'; |
} elsif ($partial == 0) { |
} elsif ($newpts ne '') { #empty is taken as 0 |
$score = 'incorrect_by_override'; |
$score = 'incorrect_by_override'; |
} |
} |
if ($ENV{'form.GD_SEL'.$question.'_'.$partid} eq 'excused') { |
my $dropMenu = $ENV{'form.GD_SEL'.$question.'_'.$partid}; |
|
if ($dropMenu eq 'excused') { |
$partial = ''; |
$partial = ''; |
$score = 'excused'; |
$score = 'excused'; |
|
} elsif ($dropMenu eq 'reset status' |
|
&& $ENV{'form.solved'.$question.'_'.$partid} ne '') { #update only if previous record exists |
|
$newrecord{'resource.'.$partid.'.tries'} = 0; |
|
$newrecord{'resource.'.$partid.'.solved'} = ''; |
|
$newrecord{'resource.'.$partid.'.award'} = ''; |
|
$newrecord{'resource.'.$partid.'.awarded'} = 0; |
|
$newrecord{'resource.'.$partid.'.regrader'} = "$ENV{'user.name'}:$ENV{'user.domain'}"; |
|
$changeflag++; |
|
$newpts = ''; |
} |
} |
|
|
my $oldstatus = $ENV{'form.solved'.$question.'_'.$partid}; |
my $oldstatus = $ENV{'form.solved'.$question.'_'.$partid}; |
$displayPts[0].=' <b>Part</b> '.$partid.' = '. |
$displayPts[0].=' <b>Part</b> '.$partid.' = '. |
(($oldstatus eq 'excused') ? 'excused' : $oldpts). |
(($oldstatus eq 'excused') ? 'excused' : $oldpts). |
' <br>'; |
' <br>'; |
$displayPts[1].=' <b>Part</b> '.$partid.' = '. |
$displayPts[1].=' <b>Part</b> '.$partid.' = '. |
($oldstatus eq 'correct_by_student' ? $oldpts : |
(($score eq 'excused') ? 'excused' : $newpts). |
(($score eq 'excused') ? 'excused' : $newpts)). |
|
' <br>'; |
' <br>'; |
|
|
$question++; |
$question++; |
if (($oldstatus eq 'correct_by_student') || |
next if ($dropMenu eq 'reset status' || ($newpts == $oldpts && $score ne 'excused')); |
($newpts eq $oldpts && $score eq $oldstatus)) |
|
{ |
|
next; |
|
} |
|
$newrecord{'resource.'.$partid.'.awarded'} = $partial if $partial ne ''; |
$newrecord{'resource.'.$partid.'.awarded'} = $partial if $partial ne ''; |
$newrecord{'resource.'.$partid.'.solved'} = $score; |
$newrecord{'resource.'.$partid.'.solved'} = $score if $score ne ''; |
$newrecord{'resource.'.$partid.'.regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$newrecord{'resource.'.$partid.'.regrader'} = "$ENV{'user.name'}:$ENV{'user.domain'}" |
|
if (scalar(keys(%newrecord)) > 0); |
|
|
$changeflag++; |
$changeflag++; |
} |
} |
Line 2978 sub updateGradeByPage {
|
Line 3290 sub updateGradeByPage {
|
&Apache::lonnet::cstore(\%newrecord,$symbx,$ENV{'request.course.id'}, |
&Apache::lonnet::cstore(\%newrecord,$symbx,$ENV{'request.course.id'}, |
$udom,$uname); |
$udom,$uname); |
} |
} |
|
|
$studentTable.='<td valign="top">'.$displayPts[0].'</td>'. |
$studentTable.='<td valign="top">'.$displayPts[0].'</td>'. |
'<td valign="top">'.$displayPts[1].'</td>'. |
'<td valign="top">'.$displayPts[1].'</td>'. |
'</tr>'; |
'</tr>'; |
Line 3019 sub getSequenceDropDown {
|
Line 3332 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 3071 sub scantron_selectphase {
|
Line 3384 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 3101 sub scantron_selectphase {
|
Line 3414 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 3183 sub scantron_parse_scanline {
|
Line 3496 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 3203 sub scantron_filter {
|
Line 3525 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 3215 sub scantron_process_students {
|
Line 3549 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 3227 SCANTRONFORM
|
Line 3561 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 3261 SCANTRONFORM
|
Line 3602 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 3293 SCANTRONFORM
|
Line 3634 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 3319 SCANTRONFORM
|
Line 3664 SCANTRONFORM
|
#--- Show a Grading Menu button - Calls the next routine --- |
#--- Show a Grading Menu button - Calls the next routine --- |
sub show_grading_menu_form { |
sub show_grading_menu_form { |
my ($symb,$url)=@_; |
my ($symb,$url)=@_; |
my $result.='<form action="/adm/grades" method="post">'."\n". |
my $result.='<br /><form action="/adm/grades" method="post">'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$ENV{'form.saveState'}.'" />'."\n". |
Line 3360 sub gradingmenu {
|
Line 3705 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 3385 sub gradingmenu {
|
Line 3730 sub gradingmenu {
|
GRADINGMENUJS |
GRADINGMENUJS |
&commonJSfunctions($request); |
&commonJSfunctions($request); |
my $result='<h3> <font color="#339933">Manual Grading/View Submission</font></h3>'; |
my $result='<h3> <font color="#339933">Manual Grading/View Submission</font></h3>'; |
my ($table,$resptype,$hdgrade) = &showResourceInfo($url,$probTitle); |
my ($table,undef,$hdgrade) = &showResourceInfo($url,$probTitle); |
$result.=$table; |
$result.=$table; |
my (undef,$sections) = &getclasslist('all','0'); |
my (undef,$sections) = &getclasslist('all','0'); |
my $savedState = &savedState(); |
my $savedState = &savedState(); |
Line 3397 GRADINGMENUJS
|
Line 3742 GRADINGMENUJS
|
$result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n". |
$result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="response" value="'.$resptype.'" />'."\n". |
|
'<input type="hidden" name="handgrade" value="'.$hdgrade.'" />'."\n". |
'<input type="hidden" name="handgrade" value="'.$hdgrade.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$probTitle.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$probTitle.'" />'."\n". |
'<input type="hidden" name="command" value="" />'."\n". |
'<input type="hidden" name="command" value="" />'."\n". |
'<input type="hidden" name="saveState" value="" />'."\n". |
'<input type="hidden" name="saveState" value="" />'."\n". |
|
'<input type="hidden" name="gradingMenu" value="1" />'."\n". |
'<input type="hidden" name="showgrading" value="yes" />'."\n"; |
'<input type="hidden" name="showgrading" value="yes" />'."\n"; |
|
|
$result.='<table width="100%" border=0><tr><td bgcolor=#777777>'."\n". |
$result.='<table width="100%" border=0><tr><td bgcolor=#777777>'."\n". |
Line 3428 GRADINGMENUJS
|
Line 3773 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 3446 GRADINGMENUJS
|
Line 3793 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 3479 sub handler {
|
Line 3826 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 3491 sub handler {
|
Line 3838 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 3504 sub handler {
|
Line 3851 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 3576 sub handler {
|
Line 3923 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) { |
Line 3595 sub send_header {
|
Line 3944 sub send_header {
|
#remotewindow.close(); |
#remotewindow.close(); |
#</script>"); |
#</script>"); |
$request->print(&Apache::loncommon::bodytag('Grading')); |
$request->print(&Apache::loncommon::bodytag('Grading')); |
|
foreach my $key (sort(keys(%ENV))) { |
|
if ($key =~ /^form\./) { |
|
Apache->request->print("$key => $ENV{$key} <br />"); |
|
} |
|
} |
} |
} |
|
|
sub send_footer { |
sub send_footer { |