version 1.379, 2006/10/13 21:53:34
|
version 1.391, 2007/03/13 18:59:56
|
Line 39 use Apache::loncoursedata;
|
Line 39 use Apache::loncoursedata;
|
use Apache::lonmsg(); |
use Apache::lonmsg(); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use Apache::lonenc; |
use String::Similarity; |
use String::Similarity; |
use lib '/home/httpd/lib/perl'; |
use lib '/home/httpd/lib/perl'; |
use LONCAPA; |
use LONCAPA; |
Line 598 sub verifyreceipt {
|
Line 599 sub verifyreceipt {
|
my (undef,undef,$fullname) = &getclasslist('all','0'); |
my (undef,undef,$fullname) = &getclasslist('all','0'); |
|
|
my $receiptparts=0; |
my $receiptparts=0; |
if ($env{"course.$courseid.receiptalg"} eq 'receipt2') { $receiptparts=1; } |
if ($env{"course.$courseid.receiptalg"} eq 'receipt2' || |
|
$env{"course.$courseid.receiptalg"} eq 'receipt3') { $receiptparts=1; } |
my $parts=['0']; |
my $parts=['0']; |
if ($receiptparts) { ($parts)=&response_type($symb); } |
if ($receiptparts) { ($parts)=&response_type($symb); } |
foreach (sort |
foreach (sort |
Line 1469 sub get_increment {
|
Line 1471 sub get_increment {
|
#--- displays the grading box, used in essay type problem and grading by page/sequence |
#--- displays the grading box, used in essay type problem and grading by page/sequence |
sub gradeBox { |
sub gradeBox { |
my ($request,$symb,$uname,$udom,$counter,$partid,$record) = @_; |
my ($request,$symb,$uname,$udom,$counter,$partid,$record) = @_; |
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL'). |
my $checkIcon = '<img alt="'.&mt('Check Mark'). |
|
'" src="'.$request->dir_config('lonIconsURL'). |
'/check.gif" height="16" border="0" />'; |
'/check.gif" height="16" border="0" />'; |
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb,$udom,$uname); |
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb,$udom,$uname); |
my $wgtmsg = ($wgt > 0 ? '(problem weight)' : |
my $wgtmsg = ($wgt > 0 ? '(problem weight)' : |
Line 1492 sub gradeBox {
|
Line 1495 sub gradeBox {
|
my $increment = &get_increment(); |
my $increment = &get_increment(); |
$result.='<table border="0"><tr>'."\n"; # display radio buttons in a nice table 10 across |
$result.='<table border="0"><tr>'."\n"; # display radio buttons in a nice table 10 across |
while ($thisweight<=$wgt) { |
while ($thisweight<=$wgt) { |
$result.= '<td><nobr><label><input type="radio" name="RADVAL'.$counter.'_'.$partid.'" '. |
$result.= '<td><span style="white-space: nowrap;"><label><input type="radio" name="RADVAL'.$counter.'_'.$partid.'" '. |
'onclick="javascript:writeBox(this.form,\''.$counter.'_'.$partid.'\','. |
'onclick="javascript:writeBox(this.form,\''.$counter.'_'.$partid.'\','. |
$thisweight.')" value="'.$thisweight.'" '. |
$thisweight.')" value="'.$thisweight.'" '. |
($score eq $thisweight ? 'checked':'').' /> '.$thisweight."</label></nobr></td>\n"; |
($score eq $thisweight ? 'checked':'').' /> '.$thisweight."</label></span></td>\n"; |
$result.=(($ctr+1)%10 == 0 ? '</tr><tr>' : ''); |
$result.=(($ctr+1)%10 == 0 ? '</tr><tr>' : ''); |
$thisweight += $increment; |
$thisweight += $increment; |
$ctr++; |
$ctr++; |
Line 1512 sub gradeBox {
|
Line 1515 sub gradeBox {
|
$result.='<select name="GD_SEL'.$counter.'_'.$partid.'" '. |
$result.='<select name="GD_SEL'.$counter.'_'.$partid.'" '. |
'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>'; |
'<option selected="on">excused</option>'; |
} else { |
} else { |
$result.='<option selected="on"> </option>'. |
$result.='<option selected="on"></option>'. |
'<option>excused</option>'; |
'<option>excused</option>'; |
} |
} |
$result.='<option>reset status</option></select>'."\n"; |
$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". |
'<input type="hidden" name="solved'.$counter.'_'.$partid.'" value="'. |
'<input type="hidden" name="solved'.$counter.'_'.$partid.'" value="'. |
Line 1569 sub handback_box {
|
Line 1572 sub handback_box {
|
} |
} |
|
|
sub show_problem { |
sub show_problem { |
my ($request,$symb,$uname,$udom,$removeform,$viewon,$mode) = @_; |
my ($request,$symb,$uname,$udom,$removeform,$viewon,$mode,$form) = @_; |
my $rendered; |
my $rendered; |
|
my %form = ((ref($form) eq 'HASH')? %{$form} : ()); |
&Apache::lonxml::remember_problem_counter(); |
&Apache::lonxml::remember_problem_counter(); |
if ($mode eq 'both' or $mode eq 'text') { |
if ($mode eq 'both' or $mode eq 'text') { |
$rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom, |
$rendered=&Apache::loncommon::get_student_view($symb,$uname,$udom, |
$env{'request.course.id'}); |
$env{'request.course.id'}, |
|
undef,\%form); |
} |
} |
if ($removeform) { |
if ($removeform) { |
$rendered=~s|<form(.*?)>||g; |
$rendered=~s|<form(.*?)>||g; |
Line 1584 sub show_problem {
|
Line 1589 sub show_problem {
|
my $companswer; |
my $companswer; |
if ($mode eq 'both' or $mode eq 'answer') { |
if ($mode eq 'both' or $mode eq 'answer') { |
&Apache::lonxml::restore_problem_counter(); |
&Apache::lonxml::restore_problem_counter(); |
$companswer=&Apache::loncommon::get_student_answers($symb,$uname,$udom, |
$companswer= |
$env{'request.course.id'}); |
&Apache::loncommon::get_student_answers($symb,$uname,$udom, |
|
$env{'request.course.id'}, |
|
%form); |
} |
} |
if ($removeform) { |
if ($removeform) { |
$companswer=~s|<form(.*?)>||g; |
$companswer=~s|<form(.*?)>||g; |
Line 1640 sub submission {
|
Line 1647 sub submission {
|
if (!$env{'form.vProb'}) { $env{'form.vProb'} = 'yes'; } |
if (!$env{'form.vProb'}) { $env{'form.vProb'} = 'yes'; } |
if (!$env{'form.vAns'}) { $env{'form.vAns'} = 'yes'; } |
if (!$env{'form.vAns'}) { $env{'form.vAns'} = 'yes'; } |
my $last = ($env{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $last = ($env{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $checkIcon = '<img src="'.$request->dir_config('lonIconsURL'). |
my $checkIcon = '<img alt="'.&mt('Check Mark'). |
|
'" src="'.$request->dir_config('lonIconsURL'). |
'/check.gif" height="16" border="0" />'; |
'/check.gif" height="16" border="0" />'; |
|
|
# header info |
# header info |
Line 1752 KEYWORDS
|
Line 1760 KEYWORDS
|
# Load the other essays for similarity check |
# Load the other essays for similarity check |
# |
# |
my (undef,undef,$essayurl) = &Apache::lonnet::decode_symb($symb); |
my (undef,undef,$essayurl) = &Apache::lonnet::decode_symb($symb); |
my ($adom,$aname,$apath)=($essayurl=~/^(\w+)\/(\w+)\/(.*)$/); |
my ($adom,$aname,$apath)=($essayurl=~/^($LONCAPA::domain_re)\/($LONCAPA::username_re)\/(.*)$/); |
$apath=&escape($apath); |
$apath=&escape($apath); |
$apath=~s/\W/\_/gs; |
$apath=~s/\W/\_/gs; |
%oldessays=&Apache::lonnet::dump('nohist_essay_'.$apath,$adom,$aname); |
%oldessays=&Apache::lonnet::dump('nohist_essay_'.$apath,$adom,$aname); |
Line 2110 sub processHandGrade {
|
Line 2118 sub processHandGrade {
|
} |
} |
my $includemsg = $env{'form.includemsg'.$ctr}; |
my $includemsg = $env{'form.includemsg'.$ctr}; |
my ($subject,$message,$msgstatus) = ('','',''); |
my ($subject,$message,$msgstatus) = ('','',''); |
|
my $restitle = &Apache::lonnet::gettitle($symb); |
|
my $encrypturl=&Apache::lonnet::EXT('resource.0.encrypturl', |
|
$symb,$udom,$uname); |
|
my ($feedurl,$baseurl,$showsymb,$messagetail); |
|
$feedurl = &Apache::lonnet::clutter($url); |
|
if ($encrypturl =~ /^yes$/i) { |
|
$baseurl = &Apache::lonenc::encrypted($feedurl,1); |
|
$showsymb = &Apache::lonenc::encrypted($symb,1); |
|
} else { |
|
$baseurl = $feedurl; |
|
$showsymb = $symb; |
|
} |
if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) { |
if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) { |
$subject = $env{'form.msgsub'} if ($includemsg =~ /msgsub/); |
$subject = $env{'form.msgsub'} if ($includemsg =~ /msgsub/); |
unless ($subject=~/\w/) { $subject=&mt('Grading Feedback'); } |
unless ($subject=~/\w/) { $subject=&mt('Grading Feedback'); } |
$subject.=' ['.&Apache::lonnet::declutter($url).']'; |
$subject.=' ['.$restitle.']'; |
my (@msgnum) = split(/,/,$includemsg); |
my (@msgnum) = split(/,/,$includemsg); |
foreach (@msgnum) { |
foreach (@msgnum) { |
$message.=$env{'form.'.$_} if ($_ =~ /savemsg|newmsg/ && $_ ne ''); |
$message.=$env{'form.'.$_} if ($_ =~ /savemsg|newmsg/ && $_ ne ''); |
Line 2121 sub processHandGrade {
|
Line 2141 sub processHandGrade {
|
$message =&Apache::lonfeedback::clear_out_html($message); |
$message =&Apache::lonfeedback::clear_out_html($message); |
if ($env{'form.withgrades'.$ctr}) { |
if ($env{'form.withgrades'.$ctr}) { |
$message.="\n\nPoint".($pts > 1 ? 's':'').' awarded = '.$pts.' out of '.$wgt; |
$message.="\n\nPoint".($pts > 1 ? 's':'').' awarded = '.$pts.' out of '.$wgt; |
$message.=" for <a href=\"". |
$messagetail = " for <a href=\"". |
&Apache::lonnet::clutter($url). |
$baseurl."?symb=$showsymb\">$env{'form.probTitle'}</a>"; |
"?symb=$symb\">$env{'form.probTitle'}</a>"; |
} |
} |
$msgstatus = |
$msgstatus = &Apache::lonmsg::user_normal_msg($uname,$udom, |
&Apache::lonmsg::user_normal_msg($uname,$udom,$subject, |
$subject, |
$message.$messagetail, |
$message); |
undef,$baseurl,undef, |
$request->print('<br />'.&mt('Sending message to [_1]@[_2]',$uname,$udom).': '. |
undef,undef,$showsymb, |
|
$restitle); |
|
$request->print('<br />'.&mt('Sending message to [_1]:[_2]',$uname,$udom).': '. |
$msgstatus); |
$msgstatus); |
} |
} |
if ($env{'form.collaborator'.$ctr}) { |
if ($env{'form.collaborator'.$ctr}) { |
Line 2144 sub processHandGrade {
|
Line 2166 sub processHandGrade {
|
next; |
next; |
} else { |
} else { |
if ($message ne '') { |
if ($message ne '') { |
$msgstatus = &Apache::lonmsg::user_normal_msg($collaborator,$udom,$subject,$message); |
$encrypturl= |
|
&Apache::lonnet::EXT('resource.0.encrypturl', |
|
$symb,$udom,$collaborator); |
|
if ($encrypturl =~ /^yes$/i) { |
|
$baseurl = &Apache::lonenc::encrypted($feedurl,1); |
|
$showsymb = &Apache::lonenc::encrypted($symb,1); |
|
} else { |
|
$baseurl = $feedurl; |
|
$showsymb = $symb; |
|
} |
|
if ($env{'form.withgrades'.$ctr}) { |
|
$messagetail = " for <a href=\"". |
|
$baseurl."?symb=$showsymb\">$env{'form.probTitle'}</a>"; |
|
|
|
} |
|
$msgstatus = |
|
&Apache::lonmsg::user_normal_msg($collaborator,$udom,$subject,$message.$messagetail,undef,$baseurl,undef,undef,undef,$showsymb,$restitle); |
} |
} |
} |
} |
} |
} |
Line 2420 sub saveHandGrade {
|
Line 2458 sub saveHandGrade {
|
} |
} |
&Apache::lonnet::cstore(\%newrecord,$symb, |
&Apache::lonnet::cstore(\%newrecord,$symb, |
$env{'request.course.id'},$domain,$stuname); |
$env{'request.course.id'},$domain,$stuname); |
my @ungraded_parts; |
&check_and_remove_from_queue(\@parts,\%record,\%newrecord,$symb, |
foreach my $part (@parts) { |
$cdom,$cnum,$domain,$stuname); |
if ( !defined($record{'resource.'.$part.'.awarded'}) |
|
&& !defined($newrecord{'resource.'.$part.'.awarded'}) ) { |
|
push(@ungraded_parts, $part); |
|
} |
|
} |
|
if ( !@ungraded_parts ) { |
|
&Apache::bridgetask::remove_from_queue('gradingqueue',$symb,$cdom, |
|
$cnum,$domain,$stuname); |
|
} |
|
} |
} |
if ($aggregateflag) { |
if ($aggregateflag) { |
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, |
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, |
Line 2439 sub saveHandGrade {
|
Line 2468 sub saveHandGrade {
|
return ('',$pts,$wgt); |
return ('',$pts,$wgt); |
} |
} |
|
|
|
sub check_and_remove_from_queue { |
|
my ($parts,$record,$newrecord,$symb,$cdom,$cnum,$domain,$stuname) = @_; |
|
my @ungraded_parts; |
|
foreach my $part (@{$parts}) { |
|
if ( $record->{ 'resource.'.$part.'.awarded'} eq '' |
|
&& $record->{ 'resource.'.$part.'.solved' } ne 'excused' |
|
&& $newrecord->{'resource.'.$part.'.awarded'} eq '' |
|
&& $newrecord->{'resource.'.$part.'.solved' } ne 'excused' |
|
) { |
|
push(@ungraded_parts, $part); |
|
} |
|
} |
|
if ( !@ungraded_parts ) { |
|
&Apache::bridgetask::remove_from_queue('gradingqueue',$symb,$cdom, |
|
$cnum,$domain,$stuname); |
|
} |
|
} |
|
|
sub handback_files { |
sub handback_files { |
my ($request,$symb,$stuname,$domain,$newflg,$new_part,$newrecord) = @_; |
my ($request,$symb,$stuname,$domain,$newflg,$new_part,$newrecord) = @_; |
my $portfolio_root = &propath($domain,$stuname).'/userfiles/portfolio'; |
my $portfolio_root = &propath($domain,$stuname).'/userfiles/portfolio'; |
Line 2491 sub handback_files {
|
Line 2538 sub handback_files {
|
$message .= ' The returned file(s) are named: '. $file_msg; |
$message .= ' The returned file(s) are named: '. $file_msg; |
$message .= " and can be found in your portfolio space."; |
$message .= " and can be found in your portfolio space."; |
my $url = (&Apache::lonnet::decode_symb($symb))[2]; |
my $url = (&Apache::lonnet::decode_symb($symb))[2]; |
$url = &Apache::lonnet::declutter($url); |
my $feedurl = &Apache::lonnet::clutter($url); |
my $msgstatus = &Apache::lonmsg::user_normal_msg($stuname,$domain, |
my $encrypturl=&Apache::lonnet::EXT('resource.0.encrypturl', |
$subject.' (File Returned) ['.$url.']',$message); |
$symb,$domain,$stuname); |
|
my ($baseurl,$showsymb); |
|
if ($encrypturl =~ /^yes$/i) { |
|
$baseurl = &Apache::lonenc::encrypted($feedurl,1); |
|
$showsymb = &Apache::lonenc::encrypted($symb,1); |
|
} else { |
|
$baseurl = $feedurl; |
|
$showsymb = $symb; |
|
} |
|
my $restitle = &Apache::lonnet::gettitle($symb); |
|
my $msgstatus = |
|
&Apache::lonmsg::user_normal_msg($stuname,$domain,$subject. |
|
' (File Returned) ['.$restitle.']',$message,undef, |
|
$baseurl,undef,undef,undef,$showsymb,$restitle); |
} |
} |
} |
} |
return; |
return; |
Line 2926 sub viewgrades {
|
Line 2985 sub viewgrades {
|
} |
} |
$result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n". |
$result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n". |
'<input type="hidden" name="totalparts" value="'.$ctsparts.'" />'; |
'<input type="hidden" name="totalparts" value="'.$ctsparts.'" />'; |
$result.='<input type="button" value="Reset" '. |
$result.='<input type="button" value="Revert to Default" '. |
'onClick="javascript:resetEntry('.$ctsparts.');" TARGET=_self>'; |
'onClick="javascript:resetEntry('.$ctsparts.');" TARGET=_self>'; |
|
|
#table listing all the students in a section/class |
#table listing all the students in a section/class |
Line 3767 LISTJAVASCRIPT
|
Line 3826 LISTJAVASCRIPT
|
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="saveState" value="'.$env{'form.saveState'}.'" />'."<br />\n"; |
'<input type="hidden" name="saveState" value="'.$env{'form.saveState'}.'" />'."<br />\n"; |
|
|
|
$result.=' <b>'.&mt('Use CODE:').' </b>'. |
|
'<input type="text" name="CODE" value="" /><br />'."\n"; |
|
|
$result.=' <input type="button" '. |
$result.=' <input type="button" '. |
'onClick="javascript:checkPickOne(this.form);"value="Next->" /><br />'."\n"; |
'onClick="javascript:checkPickOne(this.form);"value="Next->" /><br />'."\n"; |
|
|
Line 3797 LISTJAVASCRIPT
|
Line 3859 LISTJAVASCRIPT
|
$studentTable.=($ptr%2 == 0 ? '</td></tr>' : ''); |
$studentTable.=($ptr%2 == 0 ? '</td></tr>' : ''); |
$ptr++; |
$ptr++; |
} |
} |
$studentTable.='</td><td> </td><td> ' if ($ptr%2 == 0); |
$studentTable.='</td><td> </td><td> </td></tr>' if ($ptr%2 == 0); |
$studentTable.='</td></tr></table></td></tr></table>'."\n"; |
$studentTable.='</table></td></tr></table>'."\n"; |
$studentTable.='<input type="button" '. |
$studentTable.='<input type="button" '. |
'onClick="javascript:checkPickOne(this.form);"value="Next->" /></form>'."\n"; |
'onClick="javascript:checkPickOne(this.form);"value="Next->" /></form>'."\n"; |
|
|
Line 3821 sub getSymbMap {
|
Line 3883 sub getSymbMap {
|
1,0,1); |
1,0,1); |
for my $sequence ($navmap->getById('0.0'), @sequences) { |
for my $sequence ($navmap->getById('0.0'), @sequences) { |
if ($navmap->hasResource($sequence, sub { shift->is_problem(); }, 0) ) { |
if ($navmap->hasResource($sequence, sub { shift->is_problem(); }, 0) ) { |
my $title = $minder.'.'.$sequence->compTitle(); |
my $title = $minder.'.'. |
push @titles, $title; # minder in case two titles are identical |
&HTML::Entities::encode($sequence->compTitle(),'"\'&'); |
$symbx{$title} = $sequence->symb(); |
push(@titles, $title); # minder in case two titles are identical |
|
$symbx{$title} = &HTML::Entities::encode($sequence->symb(),'"\'&'); |
$minder++; |
$minder++; |
} |
} |
} |
} |
Line 3859 sub displayPage {
|
Line 3922 sub displayPage {
|
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: '.&nameUserString(undef,$$fullname{$env{'form.student'}},$uname,$udom). |
$result.='<h3> Student: '.&nameUserString(undef,$$fullname{$env{'form.student'}},$uname,$udom). |
'</h3>'."\n"; |
'</h3>'."\n"; |
|
if (&Apache::lonnet::validCODE($env{'form.CODE'})) { |
|
$result.='<h3> CODE: '.$env{'form.CODE'}.'</h3>'."\n"; |
|
} else { |
|
delete($env{'form.CODE'}); |
|
} |
&sub_page_js($request); |
&sub_page_js($request); |
$request->print($result); |
$request->print($result); |
|
|
Line 3883 sub displayPage {
|
Line 3951 sub displayPage {
|
'<input type="hidden" name="overRideScore" value="no" />'."\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'). |
if (defined($env{'form.CODE'})) { |
|
$studentTable.= |
|
'<input type="hidden" name="CODE" value="'.$env{'form.CODE'}.'" />'."\n"; |
|
} |
|
my $checkIcon = '<img alt="'.&mt('Check Mark'). |
|
'" src="'.$request->dir_config('lonIconsURL'). |
'/check.gif" height="16" border="0" />'; |
'/check.gif" height="16" border="0" />'; |
|
|
$studentTable.=' <b>Note:</b> Problems graded correct by the computer are marked with a '.$checkIcon. |
$studentTable.=' <b>Note:</b> Problems graded correct by the computer are marked with a '.$checkIcon. |
Line 3901 sub displayPage {
|
Line 3974 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" >'.$prob. |
$studentTable.='<tr bgcolor="#ffffe6"><td align="center" valign="top" >'.$prob. |
(scalar(@{$parts}) == 1 ? '' : '<br />('.scalar(@{$parts}).' parts)').'</td>'; |
(scalar(@{$parts}) == 1 ? '' : '<br />('.scalar(@{$parts}).' parts)').'</td>'; |
$studentTable.='<td valign="top">'; |
$studentTable.='<td valign="top">'; |
|
my %form = ('CODE' => $env{'form.CODE'},); |
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'); |
undef,'both',\%form); |
} 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'},%form); |
$companswer =~ s|<form(.*?)>||g; |
$companswer =~ s|<form(.*?)>||g; |
$companswer =~ s|</form>||g; |
$companswer =~ s|</form>||g; |
# while ($companswer =~ /(<a href\=\"javascript:newWindow.*?Script Vars<\/a>)/s) { #<a href="javascript:newWindow</a> |
# while ($companswer =~ /(<a href\=\"javascript:newWindow.*?Script Vars<\/a>)/s) { #<a href="javascript:newWindow</a> |
Line 3963 sub displayPage {
|
Line 4037 sub displayPage {
|
$curRes = $iterator->next(); |
$curRes = $iterator->next(); |
} |
} |
|
|
$studentTable.='</td></tr></table></td></tr></table>'."\n". |
$studentTable.='</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.');" />'. |
'</form>'."\n"; |
'</form>'."\n"; |
$studentTable.=&show_grading_menu_form($symb); |
$studentTable.=&show_grading_menu_form($symb); |
$request->print($studentTable); |
$request->print($studentTable); |
Line 4125 sub updateGradeByPage {
|
Line 4199 sub updateGradeByPage {
|
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(); |
Line 4180 sub updateGradeByPage {
|
Line 4254 sub updateGradeByPage {
|
$displayPts[1].=' <b>Part:</b> '.$display_part.' = '. |
$displayPts[1].=' <b>Part:</b> '.$display_part.' = '. |
(($score eq 'excused') ? 'excused' : $newpts). |
(($score eq 'excused') ? 'excused' : $newpts). |
' <br />'; |
' <br />'; |
|
|
$question++; |
$question++; |
next if ($dropMenu eq 'reset status' || ($newpts == $oldpts && $score ne 'excused')); |
next if ($dropMenu eq 'reset status' || ($newpts eq $oldpts && $score ne 'excused')); |
|
|
$newrecord{'resource.'.$partid.'.awarded'} = $partial if $partial ne ''; |
$newrecord{'resource.'.$partid.'.awarded'} = $partial if $partial ne ''; |
$newrecord{'resource.'.$partid.'.solved'} = $score if $score ne ''; |
$newrecord{'resource.'.$partid.'.solved'} = $score if $score ne ''; |
Line 4192 sub updateGradeByPage {
|
Line 4265 sub updateGradeByPage {
|
$changeflag++; |
$changeflag++; |
} |
} |
if (scalar(keys(%newrecord)) > 0) { |
if (scalar(keys(%newrecord)) > 0) { |
|
my %record = |
|
&Apache::lonnet::restore($symbx,$env{'request.course.id'}, |
|
$udom,$uname); |
|
|
|
if (&Apache::lonnet::validCODE($env{'form.CODE'})) { |
|
$newrecord{'resource.CODE'} = $env{'form.CODE'}; |
|
} elsif (&Apache::lonnet::validCODE($record{'resource.CODE'})) { |
|
$newrecord{'resource.CODE'} = ''; |
|
} |
&Apache::lonnet::cstore(\%newrecord,$symbx,$env{'request.course.id'}, |
&Apache::lonnet::cstore(\%newrecord,$symbx,$env{'request.course.id'}, |
$udom,$uname); |
$udom,$uname); |
|
%record = &Apache::lonnet::restore($symbx, |
|
$env{'request.course.id'}, |
|
$udom,$uname); |
|
&check_and_remove_from_queue($parts,\%record,undef,$symbx, |
|
$cdom,$cnum,$udom,$uname); |
} |
} |
|
|
if ($aggregateflag) { |
if ($aggregateflag) { |
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, |
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
Line 4308 sub scantron_CODElist {
|
Line 4396 sub scantron_CODElist {
|
} |
} |
|
|
sub scantron_CODEunique { |
sub scantron_CODEunique { |
my $result='<nobr> |
my $result='<span style="white-space: nowrap;"> |
<label><input type="radio" name="scantron_CODEunique" |
<label><input type="radio" name="scantron_CODEunique" |
value="yes" checked="checked" /> Yes </label> |
value="yes" checked="checked" /> Yes </label> |
</nobr> |
</span> |
<nobr> |
<span style="white-space: nowrap;"> |
<label><input type="radio" name="scantron_CODEunique" |
<label><input type="radio" name="scantron_CODEunique" |
value="no" /> No </label> |
value="no" /> No </label> |
</nobr>'; |
</span>'; |
return $result; |
return $result; |
} |
} |
|
|
Line 4551 sub scantron_fixup_scanline {
|
Line 4639 sub scantron_fixup_scanline {
|
$answer=$alphabet[$args->{'response'}]; |
$answer=$alphabet[$args->{'response'}]; |
} elsif ($on eq 'number') { |
} elsif ($on eq 'number') { |
$answer=$args->{'response'}+1; |
$answer=$args->{'response'}+1; |
|
if ($answer == 10) { $answer = '0'; } |
} else { |
} else { |
substr($answer,$args->{'response'},1)=$on; |
substr($answer,$args->{'response'},1)=$on; |
} |
} |
Line 4621 sub scantron_parse_scanline {
|
Line 4710 sub scantron_parse_scanline {
|
|| $currentquest eq '*') { |
|| $currentquest eq '*') { |
push(@{$record{'scantron.doubleerror'}},$questnum); |
push(@{$record{'scantron.doubleerror'}},$questnum); |
$record{"scantron.$questnum.answer"}=''; |
$record{"scantron.$questnum.answer"}=''; |
} elsif (!$currentquest |
} elsif (!defined($currentquest) |
|| $currentquest eq $$scantron_config{'Qoff'} |
|| $currentquest eq $$scantron_config{'Qoff'} |
|| $currentquest !~ /^[A-Z]$/) { |
|| $currentquest !~ /^[A-Z]$/) { |
$record{"scantron.$questnum.answer"}=''; |
$record{"scantron.$questnum.answer"}=''; |
Line 4636 sub scantron_parse_scanline {
|
Line 4725 sub scantron_parse_scanline {
|
|| $currentquest eq '*') { |
|| $currentquest eq '*') { |
push(@{$record{'scantron.doubleerror'}},$questnum); |
push(@{$record{'scantron.doubleerror'}},$questnum); |
$record{"scantron.$questnum.answer"}=''; |
$record{"scantron.$questnum.answer"}=''; |
} elsif (!$currentquest |
} elsif (!defined($currentquest) |
|| $currentquest eq $$scantron_config{'Qoff'} |
|| $currentquest eq $$scantron_config{'Qoff'} |
|| $currentquest !~ /^\d$/) { |
|| $currentquest !~ /^\d$/) { |
$record{"scantron.$questnum.answer"}=''; |
$record{"scantron.$questnum.answer"}=''; |
if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { |
if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { |
push(@{$record{"scantron.missingerror"}},$questnum); |
push(@{$record{"scantron.missingerror"}},$questnum); |
Line 5626 SCANTRONFORM
|
Line 5715 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()); |
if (exists($scan_record->{'scantron.CODE'}) && |
if (exists($scan_record->{'scantron.CODE'}) |
$scan_record->{'scantron.CODE'}) { |
&& |
|
&Apache::lonnet::validCODE($scan_record->{'scantron.CODE'})) { |
$form{'CODE'}=$scan_record->{'scantron.CODE'}; |
$form{'CODE'}=$scan_record->{'scantron.CODE'}; |
} else { |
} else { |
$form{'CODE'}=''; |
$form{'CODE'}=''; |