version 1.416, 2007/06/17 02:11:44
|
version 1.422, 2007/07/19 09:52:59
|
Line 93 sub get_symb {
|
Line 93 sub get_symb {
|
return (); |
return (); |
} |
} |
} |
} |
|
&Apache::lonenc::check_decrypt(\$symb); |
return ($symb); |
return ($symb); |
} |
} |
|
|
Line 492 sub jscriptNform {
|
Line 493 sub jscriptNform {
|
' }'."\n". |
' }'."\n". |
'</script>'."\n"; |
'</script>'."\n"; |
$jscript.= '<form action="/adm/grades" method="post" name="onestudent">'."\n". |
$jscript.= '<form action="/adm/grades" method="post" name="onestudent">'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\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="Status" value="'.$env{'form.Status'}.'" />'."\n". |
Line 617 sub verifyreceipt {
|
Line 618 sub verifyreceipt {
|
if ($receipt eq &Apache::lonnet::ireceipt($uname,$udom,$courseid,$symb,$part)) { |
if ($receipt eq &Apache::lonnet::ireceipt($uname,$udom,$courseid,$symb,$part)) { |
$contents.='<tr bgcolor="#ffffe6"><td> '."\n". |
$contents.='<tr bgcolor="#ffffe6"><td> '."\n". |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'\')"; TARGET=_self>'.$$fullname{$_}.'</a> </td>'."\n". |
'\');" target="_self">'.$$fullname{$_}.'</a> </td>'."\n". |
'<td> '.$uname.' </td>'. |
'<td> '.$uname.' </td>'. |
'<td> '.$udom.' </td>'; |
'<td> '.$udom.' </td>'; |
if ($receiptparts) { |
if ($receiptparts) { |
Line 742 LISTJAVASCRIPT
|
Line 743 LISTJAVASCRIPT
|
'<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". |
'<input type="hidden" name="probTitle" value="'.$env{'form.probTitle'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$env{'form.probTitle'}.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n". |
'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n"; |
'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n"; |
|
|
if (exists($env{'form.gradingMenu'}) && exists($env{'form.Status'})) { |
if (exists($env{'form.gradingMenu'}) && exists($env{'form.Status'})) { |
Line 1751 sub submission {
|
Line 1752 sub submission {
|
'<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="studentNo" value="" />'."\n". |
'<input type="hidden" name="gradeOpt" value="" />'."\n". |
'<input type="hidden" name="gradeOpt" value="" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\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="vAns" value="'.$env{'form.vAns'}.'" />'."\n". |
Line 1792 sub submission {
|
Line 1793 sub submission {
|
# |
# |
$request->print(<<KEYWORDS); |
$request->print(<<KEYWORDS); |
<b>Keyword Options:</b> |
<b>Keyword Options:</b> |
<a href="javascript:keywords(document.SCORE)"; 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 /> |
KEYWORDS |
KEYWORDS |
# |
# |
# Load the other essays for similarity check |
# Load the other essays for similarity check |
Line 1921 KEYWORDS
|
Line 1922 KEYWORDS
|
' <b>Collaborative submission by:</b> '. |
' <b>Collaborative submission by:</b> '. |
'<a href="javascript:viewSubmitter(\''. |
'<a href="javascript:viewSubmitter(\''. |
$env{"form.$uname:$udom:$partid:submitted_by"}. |
$env{"form.$uname:$udom:$partid:submitted_by"}. |
'\')"; TARGET=_self>'. |
'\');" target="_self">'. |
$$fullname{$env{"form.$uname:$udom:$partid:submitted_by"}}.'</a><br />'; |
$$fullname{$env{"form.$uname:$udom:$partid:submitted_by"}}.'</a><br />'; |
$request->print($submitby); |
$request->print($submitby); |
next; |
next; |
Line 1999 KEYWORDS
|
Line 2000 KEYWORDS
|
if ($env{'form.showgrading'} eq '' || (!&canmodify($usec))) { |
if ($env{'form.showgrading'} eq '' || (!&canmodify($usec))) { |
my $toGrade.='<input type="button" value="Grade Student" '. |
my $toGrade.='<input type="button" value="Grade Student" '. |
'onClick="javascript:checksubmit(this.form,\'Grade Student\',\'' |
'onClick="javascript:checksubmit(this.form,\'Grade Student\',\'' |
.$counter.'\');" TARGET=_self> '."\n" if (&canmodify($usec)); |
.$counter.'\');" target="_self" /> '."\n" if (&canmodify($usec)); |
$toGrade.='</td></tr></table></td></tr></table>'."\n"; |
$toGrade.='</td></tr></table></td></tr></table>'."\n"; |
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)) { |
Line 2023 KEYWORDS
|
Line 2024 KEYWORDS
|
$result='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
$result='<input type="hidden" name="includemsg'.$counter.'" value="" />'."\n". |
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
'<input type="hidden" name="newmsg'.$counter.'" value="" />'."\n"; |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
$result.=' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
',\''.$msgfor.'\')"; TARGET=_self>'. |
',\''.$msgfor.'\');" target="_self">'. |
&mt('Compose message to student').(scalar(@col_fullnames) >= 1 ? 's' : '').'</a><label> ('. |
&mt('Compose message to student').(scalar(@col_fullnames) >= 1 ? 's' : '').'</a><label> ('. |
&mt('incl. grades').' <input type="checkbox" name="withgrades'.$counter.'" /></label>)'. |
&mt('incl. grades').' <input type="checkbox" name="withgrades'.$counter.'" /></label>)'. |
'<img src="'.$request->dir_config('lonIconsURL'). |
'<img src="'.$request->dir_config('lonIconsURL'). |
Line 2075 KEYWORDS
|
Line 2076 KEYWORDS
|
my $endform='<table border="0"><tr><td>'."\n"; |
my $endform='<table border="0"><tr><td>'."\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"; |
my $ntstu ='<select name="NTSTU">'. |
my $ntstu ='<select name="NTSTU">'. |
'<option>1</option><option>2</option>'. |
'<option>1</option><option>2</option>'. |
'<option>3</option><option>5</option>'. |
'<option>3</option><option>5</option>'. |
Line 2084 KEYWORDS
|
Line 2085 KEYWORDS
|
$ntstu =~ s/<option>$nsel</<option selected="selected">$nsel</; |
$ntstu =~ s/<option>$nsel</<option selected="selected">$nsel</; |
$endform.=$ntstu.'student(s) '; |
$endform.=$ntstu.'student(s) '; |
$endform.='<input type="button" value="Previous" '. |
$endform.='<input type="button" value="Previous" '. |
'onClick="javascript:checksubmit(this.form,\'Previous\');" TARGET=_self> '."\n". |
'onClick="javascript:checksubmit(this.form,\'Previous\');" target="_self" /> '."\n". |
'<input type="button" value="Next" '. |
'<input type="button" value="Next" '. |
'onClick="javascript:checksubmit(this.form,\'Next\');" TARGET=_self> '; |
'onClick="javascript:checksubmit(this.form,\'Next\');" target="_self" /> '; |
$endform.='(Next and Previous (student) do not save the scores.)'."\n" ; |
$endform.='(Next and Previous (student) do not save the scores.)'."\n" ; |
$endform.="<input type='hidden' value='".&get_increment(). |
$endform.="<input type='hidden' value='".&get_increment(). |
"' name='increment' />"; |
"' name='increment' />"; |
Line 2168 sub processHandGrade {
|
Line 2169 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 $restitle = &Apache::lonnet::gettitle($symb); |
my $encrypturl=&Apache::lonnet::EXT('resource.0.encrypturl', |
my ($feedurl,$showsymb) = |
$symb,$udom,$uname); |
&get_feedurl_and_symb($symb,$uname,$udom); |
my ($feedurl,$baseurl,$showsymb,$messagetail); |
my $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'); } |
Line 2192 sub processHandGrade {
|
Line 2185 sub processHandGrade {
|
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; |
$messagetail = " for <a href=\"". |
$messagetail = " for <a href=\"". |
$baseurl."?symb=$showsymb\">$env{'form.probTitle'}</a>"; |
$feedurl."?symb=$showsymb\">$env{'form.probTitle'}</a>"; |
} |
} |
$msgstatus = |
$msgstatus = |
&Apache::lonmsg::user_normal_msg($uname,$udom,$subject, |
&Apache::lonmsg::user_normal_msg($uname,$udom,$subject, |
$message.$messagetail, |
$message.$messagetail, |
undef,$baseurl,undef, |
undef,$feedurl,undef, |
undef,undef,$showsymb, |
undef,undef,$showsymb, |
$restitle); |
$restitle); |
$request->print('<br />'.&mt('Sending message to [_1]:[_2]',$uname,$udom).': '. |
$request->print('<br />'.&mt('Sending message to [_1]:[_2]',$uname,$udom).': '. |
Line 2214 sub processHandGrade {
|
Line 2207 sub processHandGrade {
|
if ($errorflag eq 'not_allowed') { |
if ($errorflag eq 'not_allowed') { |
$request->print("<span class=\"LC_error\">".&mt('Not allowed to modify grades for [_1]',"$collaborator:$udom")."</span>"); |
$request->print("<span class=\"LC_error\">".&mt('Not allowed to modify grades for [_1]',"$collaborator:$udom")."</span>"); |
next; |
next; |
} else { |
} elsif ($message ne '') { |
if ($message ne '') { |
my ($baseurl,$showsymb) = |
$encrypturl= |
&get_feedurl_and_symb($symb,$collaborator, |
&Apache::lonnet::EXT('resource.0.encrypturl', |
$udom); |
$symb,$udom,$collaborator); |
if ($env{'form.withgrades'.$ctr}) { |
if ($encrypturl =~ /^yes$/i) { |
$messagetail = " for <a href=\"". |
$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>"; |
$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); |
|
} |
} |
|
$msgstatus = |
|
&Apache::lonmsg::user_normal_msg($collaborator,$udom,$subject,$message.$messagetail,undef,$baseurl,undef,undef,undef,$showsymb,$restitle); |
} |
} |
} |
} |
} |
} |
Line 2587 sub handback_files {
|
Line 2570 sub handback_files {
|
$message .= "<strong>".&Apache::lonnet::gettitle($symb)."</strong><br />"; |
$message .= "<strong>".&Apache::lonnet::gettitle($symb)."</strong><br />"; |
$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 ($feedurl,$showsymb) = |
my $feedurl = &Apache::lonnet::clutter($url); |
&get_feedurl_and_symb($symb,$domain,$stuname); |
my $encrypturl=&Apache::lonnet::EXT('resource.0.encrypturl', |
|
$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 $restitle = &Apache::lonnet::gettitle($symb); |
my $msgstatus = |
my $msgstatus = |
&Apache::lonmsg::user_normal_msg($stuname,$domain,$subject. |
&Apache::lonmsg::user_normal_msg($stuname,$domain,$subject. |
' (File Returned) ['.$restitle.']',$message,undef, |
' (File Returned) ['.$restitle.']',$message,undef, |
$baseurl,undef,undef,undef,$showsymb,$restitle); |
$feedurl,undef,undef,undef,$showsymb,$restitle); |
} |
} |
} |
} |
return; |
return; |
} |
} |
|
|
|
sub get_feedurl_and_symb { |
|
my ($symb,$uname,$udom) = @_; |
|
my (undef,undef,$url) = &Apache::lonnet::decode_symb($symb); |
|
$url = &Apache::lonnet::clutter($url); |
|
my $encrypturl=&Apache::lonnet::EXT('resource.0.encrypturl', |
|
$symb,$udom,$uname); |
|
if ($encrypturl =~ /^yes$/i) { |
|
&Apache::lonenc::encrypted(\$url,1); |
|
&Apache::lonenc::encrypted(\$symb,1); |
|
} |
|
return ($url,$symb); |
|
} |
|
|
sub get_submitted_files { |
sub get_submitted_files { |
my ($udom,$uname,$partid,$respid,$record) = @_; |
my ($udom,$uname,$partid,$respid,$record) = @_; |
my @files; |
my @files; |
Line 2969 sub viewgrades {
|
Line 2955 sub viewgrades {
|
|
|
#beginning of class grading form |
#beginning of class grading form |
$result.= '<form action="/adm/grades" method="post" name="classgrade">'."\n". |
$result.= '<form action="/adm/grades" method="post" name="classgrade">'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n". |
'<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". |
Line 3036 sub viewgrades {
|
Line 3022 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="Revert to Default" '. |
$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 |
#header of table |
#header of table |
Line 3087 sub viewgrades {
|
Line 3073 sub viewgrades {
|
$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="Save" '. |
$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); |
$result='<span class="LC_warning">There are no students in section "'.$env{'form.section'}. |
$result='<span class="LC_warning">There are no students in section "'.$env{'form.section'}. |
Line 3107 sub viewstudentgrade {
|
Line 3093 sub viewstudentgrade {
|
'<input type="hidden" name="ctr'.($ctr-1).'" value="'.$student.'" />'. |
'<input type="hidden" name="ctr'.($ctr-1).'" value="'.$student.'" />'. |
"\n".$ctr.' </td><td> '. |
"\n".$ctr.' </td><td> '. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'\')"; TARGET=_self>'.$fullname.'</a> '. |
'\');" target="_self">'.$fullname.'</a> '. |
'<span class="LC_internal_info">('.$uname.($env{'user.domain'} eq $udom ? '' : ':'.$udom).')</span></td>'."\n"; |
'<span class="LC_internal_info">('.$uname.($env{'user.domain'} eq $udom ? '' : ':'.$udom).')</span></td>'."\n"; |
$student=~s/:/_/; # colon doen't work in javascript for names |
$student=~s/:/_/; # colon doen't work in javascript for names |
foreach my $apart (@$parts) { |
foreach my $apart (@$parts) { |
Line 3471 sub csvuploadmap_header {
|
Line 3457 sub csvuploadmap_header {
|
my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); |
my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); |
my $checked=(($env{'form.noFirstLine'})?' checked="checked"':''); |
my $checked=(($env{'form.noFirstLine'})?' checked="checked"':''); |
my $ignore=&mt('Ignore First Line'); |
my $ignore=&mt('Ignore First Line'); |
|
$symb = &Apache::lonenc::check_encrypt($symb); |
$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"> |
<h3><span class="LC_info">Uploading Class Grades</span></h3> |
<h3><span class="LC_info">Uploading Class Grades</span></h3> |
Line 3565 sub upcsvScores_form {
|
Line 3552 sub upcsvScores_form {
|
my $upload=&mt("Upload Scores"); |
my $upload=&mt("Upload Scores"); |
my $upfile_select=&Apache::loncommon::upfile_select_html(); |
my $upfile_select=&Apache::loncommon::upfile_select_html(); |
my $ignore=&mt('Ignore First Line'); |
my $ignore=&mt('Ignore First Line'); |
|
$symb = &Apache::lonenc::check_encrypt($symb); |
$result.=<<ENDUPFORM; |
$result.=<<ENDUPFORM; |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload"> |
<input type="hidden" name="symb" value="$symb" /> |
<input type="hidden" name="symb" value="$symb" /> |
Line 3873 LISTJAVASCRIPT
|
Line 3861 LISTJAVASCRIPT
|
$result.='<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
$result.='<input type="hidden" name="section" value="'.$getsec.'" />'."\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="command" value="displayPage" />'."\n". |
'<input type="hidden" name="command" value="displayPage" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($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>'. |
$result.=' <b>'.&mt('Use CODE:').' </b>'. |
Line 3997 sub displayPage {
|
Line 3985 sub displayPage {
|
'<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="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n". |
'<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"; |
|
|
Line 4366 sub updateGradeByPage {
|
Line 4354 sub updateGradeByPage {
|
# |
# |
#------ start of section for handling grading by page/sequence --------- |
#------ start of section for handling grading by page/sequence --------- |
|
|
|
# Create the hidden field entries used to hold context/default values. |
|
|
sub defaultFormData { |
sub defaultFormData { |
my ($symb)=@_; |
my ($symb)=@_; |
return ' |
return ' |
<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\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"; |
} |
} |
|
|
|
# Make a drop down of the sequences |
|
|
sub getSequenceDropDown { |
sub getSequenceDropDown { |
my ($request,$symb)=@_; |
my ($request,$symb)=@_; |
my $result='<select name="selectpage">'."\n"; |
my $result='<select name="selectpage">'."\n"; |
Line 4391 sub getSequenceDropDown {
|
Line 4383 sub getSequenceDropDown {
|
return $result; |
return $result; |
} |
} |
|
|
|
# Returns a list of the scantron files that have been uploaded to date. |
|
|
sub scantron_filenames { |
sub scantron_filenames { |
my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cname=$env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cname=$env{'course.'.$env{'request.course.id'}.'.num'}; |
Line 4406 sub scantron_filenames {
|
Line 4400 sub scantron_filenames {
|
return @possiblenames; |
return @possiblenames; |
} |
} |
|
|
|
# Returns the html required for a drop-down list of scantron |
|
# files that have been uploaded. |
|
|
sub scantron_uploads { |
sub scantron_uploads { |
my ($file2grade) = @_; |
my ($file2grade) = @_; |
my $result= '<select name="scantron_selectfile">'; |
my $result= '<select name="scantron_selectfile">'; |
Line 4417 sub scantron_uploads {
|
Line 4414 sub scantron_uploads {
|
return $result; |
return $result; |
} |
} |
|
|
|
# Returns the html for a drop down list of the scantron formats in the |
|
# scantronformat.tab file. |
|
|
sub scantron_scantab { |
sub scantron_scantab { |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
my $result='<select name="scantron_format">'."\n"; |
my $result='<select name="scantron_format">'."\n"; |
Line 4431 sub scantron_scantab {
|
Line 4431 sub scantron_scantab {
|
return $result; |
return $result; |
} |
} |
|
|
|
# Returns the html for the options in the |
|
# saved codes dropdown. |
|
|
sub scantron_CODElist { |
sub scantron_CODElist { |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
Line 4445 sub scantron_CODElist {
|
Line 4448 sub scantron_CODElist {
|
return $namechoice; |
return $namechoice; |
} |
} |
|
|
|
# Returns the HTML for "Each CODE to be used once" radio. |
|
|
sub scantron_CODEunique { |
sub scantron_CODEunique { |
my $result='<span style="white-space: nowrap;"> |
my $result='<span style="white-space: nowrap;"> |
<label><input type="radio" name="scantron_CODEunique" |
<label><input type="radio" name="scantron_CODEunique" |
Line 4456 sub scantron_CODEunique {
|
Line 4461 sub scantron_CODEunique {
|
</span>'; |
</span>'; |
return $result; |
return $result; |
} |
} |
|
# |
|
# Display the first scantron file selection form. |
|
# Paramters: |
|
# r - The apache request object |
|
# file2grade - The name of the scantron file to be graded(?). |
|
|
sub scantron_selectphase { |
sub scantron_selectphase { |
my ($r,$file2grade) = @_; |
my ($r,$file2grade) = @_; |
Line 4471 sub scantron_selectphase {
|
Line 4481 sub scantron_selectphase {
|
my $result; |
my $result; |
#FIXME allow instructor to be able to download the scantron file |
#FIXME allow instructor to be able to download the scantron file |
# and to upload it, |
# and to upload it, |
|
|
|
# Chunk of form to prompt for a file to grade and how: |
|
|
$result.= <<SCANTRONFORM; |
$result.= <<SCANTRONFORM; |
<table width="100%" border="0"> |
<table width="100%" border="0"> |
<tr> |
<tr> |
Line 4523 SCANTRONFORM
|
Line 4536 SCANTRONFORM
|
if (&Apache::lonnet::allowed('usc',$env{'request.role.domain'}) || |
if (&Apache::lonnet::allowed('usc',$env{'request.role.domain'}) || |
&Apache::lonnet::allowed('usc',$env{'request.course.id'})) { |
&Apache::lonnet::allowed('usc',$env{'request.course.id'})) { |
|
|
|
# Chunk of form to prompt for a scantron file upload. |
|
|
$r->print(<<SCANTRONFORM); |
$r->print(<<SCANTRONFORM); |
<tr> |
<tr> |
<td bgcolor="#777777"> |
<td bgcolor="#777777"> |
Line 4568 UPLOAD
|
Line 4583 UPLOAD
|
</tr> |
</tr> |
SCANTRONFORM |
SCANTRONFORM |
} |
} |
|
|
|
# Chunk of the form that prompts to view a scoring office file, |
|
# corrected file, skipped records in a file. |
|
|
$r->print(<<SCANTRONFORM); |
$r->print(<<SCANTRONFORM); |
<tr> |
<tr> |
<form action='/adm/grades' name='scantron_download'> |
<form action='/adm/grades' name='scantron_download'> |
Line 4602 SCANTRONFORM
|
Line 4621 SCANTRONFORM
|
return |
return |
} |
} |
|
|
|
# Parse and return the scantron configuration line selected as a |
|
# hash of configuration file fields. |
|
# |
|
# Parameters: |
|
# which - the name of the configuration to parse from the file. |
|
# If the named configuration is not in the file, an empty |
|
# hash is returned. |
|
|
sub get_scantron_config { |
sub get_scantron_config { |
my ($which) = @_; |
my ($which) = @_; |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
Line 4634 sub get_scantron_config {
|
Line 4661 sub get_scantron_config {
|
return %config; |
return %config; |
} |
} |
|
|
|
# creates a hash keyed by student id that conains |
|
# the corresponding student username:domain. |
|
# Parameters: |
|
# reference to the class list hash. This is a hash |
|
# keyed by student name:domain whose elements are references |
|
# to arrays containng various chunks of information |
|
# about the student. (See loncoursedata for more info). |
|
# |
|
# |
sub username_to_idmap { |
sub username_to_idmap { |
my ($classlist)= @_; |
my ($classlist)= @_; |
my %idmap; |
my %idmap; |
Line 4643 sub username_to_idmap {
|
Line 4679 sub username_to_idmap {
|
} |
} |
return %idmap; |
return %idmap; |
} |
} |
|
# |
|
# Make a correction in a scantron line? |
|
# Parameters: |
|
# scantron_config - Format of the scantron file |
|
# scan_data - Hash of line by line info about the scan(?). |
|
# line - Scantron line to edit? |
|
# whichline |
|
# field |
|
# args - Keyword/value hash of additional parameters. |
|
# |
|
|
sub scantron_fixup_scanline { |
sub scantron_fixup_scanline { |
my ($scantron_config,$scan_data,$line,$whichline,$field,$args)=@_; |
my ($scantron_config,$scan_data,$line,$whichline,$field,$args)=@_; |
|
# |
|
# ID field, args->{'newid'} is the new value of the ID field. |
|
# |
if ($field eq 'ID') { |
if ($field eq 'ID') { |
if (length($args->{'newid'}) > $$scantron_config{'IDlength'}) { |
if (length($args->{'newid'}) > $$scantron_config{'IDlength'}) { |
return ($line,1,'New value too large'); |
return ($line,1,'New value too large'); |
Line 4660 sub scantron_fixup_scanline {
|
Line 4709 sub scantron_fixup_scanline {
|
&scan_data($scan_data,"$whichline.user", |
&scan_data($scan_data,"$whichline.user", |
$args->{'username'}.':'.$args->{'domain'}); |
$args->{'username'}.':'.$args->{'domain'}); |
} |
} |
|
# CODE Field, |
|
# args->{CODE_ignore_dup} is true if duplicates should be ignored. |
|
# args->{CODE} is new code or 'use_unfound' if an unfound code should |
|
# be used as is? |
|
# |
} elsif ($field eq 'CODE') { |
} elsif ($field eq 'CODE') { |
if ($args->{'CODE_ignore_dup'}) { |
if ($args->{'CODE_ignore_dup'}) { |
&scan_data($scan_data,"$whichline.CODE_ignore_dup",'1'); |
&scan_data($scan_data,"$whichline.CODE_ignore_dup",'1'); |
Line 4675 sub scantron_fixup_scanline {
|
Line 4729 sub scantron_fixup_scanline {
|
substr($line,$$scantron_config{'CODEstart'}-1, |
substr($line,$$scantron_config{'CODEstart'}-1, |
$$scantron_config{'CODElength'})=$args->{'CODE'}; |
$$scantron_config{'CODElength'})=$args->{'CODE'}; |
} |
} |
|
# |
|
# Edit the answer field. |
|
# args->{'response'} - new answer or 'none' if blank. |
|
# args->{'question'} - the question (number?)?. |
|
# |
} elsif ($field eq 'answer') { |
} elsif ($field eq 'answer') { |
my $length=$scantron_config->{'Qlength'}; |
my $length=$scantron_config->{'Qlength'}; |
my $off=$scantron_config->{'Qoff'}; |
my $off=$scantron_config->{'Qoff'}; |
Line 4701 sub scantron_fixup_scanline {
|
Line 4760 sub scantron_fixup_scanline {
|
} |
} |
return $line; |
return $line; |
} |
} |
|
# Edit or look up an item in the scan_data hash. |
|
# Parameters: |
|
# scan_data - The hash. |
|
# key - shorthand of the key to edit (actual key is |
|
# scatronfilename_key. |
|
# data - New value of the hash entry. |
|
# delete - If defined, the entry is removed from the table. |
|
# Returns: |
|
# The new value of the hash table field (undefined if deleted). |
|
# |
sub scan_data { |
sub scan_data { |
my ($scan_data,$key,$value,$delete)=@_; |
my ($scan_data,$key,$value,$delete)=@_; |
my $filename=$env{'form.scantron_selectfile'}; |
my $filename=$env{'form.scantron_selectfile'}; |
Line 4711 sub scan_data {
|
Line 4779 sub scan_data {
|
if ($delete) { delete($scan_data->{$filename.'_'.$key}); } |
if ($delete) { delete($scan_data->{$filename.'_'.$key}); } |
return $scan_data->{$filename.'_'.$key}; |
return $scan_data->{$filename.'_'.$key}; |
} |
} |
|
# |
|
# Decode a line on the uploaded scantron file: |
|
# Arguments: |
|
# line - The text of the scantron file line to process |
|
# whichline - Line number(?) |
|
# scantron_config - Hash describing the format of the scantron lines. |
|
# scan_data - Hash being built up of the entire scantron file. |
|
# justHeader - True if should not process question answers but only |
|
# the stuff to the left of the answers. |
|
# Returns: |
|
# Hash of data from the line? |
|
# |
sub scantron_parse_scanline { |
sub scantron_parse_scanline { |
my ($line,$whichline,$scantron_config,$scan_data,$justHeader)=@_; |
my ($line,$whichline,$scantron_config,$scan_data,$justHeader)=@_; |
my %record; |
my %record; |
my $questions=substr($line,$$scantron_config{'Qstart'}-1); |
my $questions=substr($line,$$scantron_config{'Qstart'}-1); # Answers |
my $data=substr($line,0,$$scantron_config{'Qstart'}-1); |
my $data=substr($line,0,$$scantron_config{'Qstart'}-1); # earlier stuff |
if (!($$scantron_config{'CODElocation'} eq 0 || |
if (!($$scantron_config{'CODElocation'} eq 0 || |
$$scantron_config{'CODElocation'} eq 'none')) { |
$$scantron_config{'CODElocation'} eq 'none')) { |
if ($$scantron_config{'CODElocation'} < 0 || |
if ($$scantron_config{'CODElocation'} < 0 || |
Line 5468 ENDSCRIPT
|
Line 5547 ENDSCRIPT
|
$r->print("<p>Please indicate which bubble should be used for grading</p>"); |
$r->print("<p>Please indicate which bubble should be used for grading</p>"); |
foreach my $question (@{$arg}) { |
foreach my $question (@{$arg}) { |
my $selected=$$scan_record{"scantron.$question.answer"}; |
my $selected=$$scan_record{"scantron.$question.answer"}; |
&scantron_bubble_selector($r,$scan_config,$question,split('',$selected)); |
&scantron_bubble_selector($r,$scan_config,$question, |
|
split('',$selected)); |
} |
} |
} elsif ($error eq 'missingbubble') { |
} elsif ($error eq 'missingbubble') { |
$r->print("<p>There have been <b>no</b> bubbles scanned for some question(s)</p>\n"); |
$r->print("<p>There have been <b>no</b> bubbles scanned for some question(s)</p>\n"); |
Line 5487 ENDSCRIPT
|
Line 5567 ENDSCRIPT
|
$r->print("\n</li></ul>"); |
$r->print("\n</li></ul>"); |
|
|
} |
} |
|
# |
|
# Ask the grader to select the actual bubble |
|
# |
|
# Arguments: |
|
# r - Apache request. |
|
# scan_config - Hash of the scantron format selected. |
|
# quest - Question being evaluated |
|
# selected - array of selected bubbles |
|
# lines - if present, number of bubble lines in questions. |
sub scantron_bubble_selector { |
sub scantron_bubble_selector { |
my ($r,$scan_config,$quest,@selected)=@_; |
my ($r,$scan_config,$quest,@selected, $lines)=@_; |
my $max=$$scan_config{'Qlength'}; |
my $max=$$scan_config{'Qlength'}; |
|
|
my $scmode=$$scan_config{'Qon'}; |
my $scmode=$$scan_config{'Qon'}; |
if ($scmode eq 'number' || $scmode eq 'letter') { $max=10; } |
if ($scmode eq 'number' || $scmode eq 'letter') { $max=10; } |
|
|
my @alphabet=('A'..'Z'); |
|
$r->print("<table border='1'><tr><td rowspan='2'>$quest</td>"); |
if (!defined($lines)) { |
for (my $i=0;$i<$max+1;$i++) { |
$lines = 1; |
$r->print("\n".'<td align="center">'); |
|
if ($selected[0] eq $alphabet[$i]) { $r->print('X'); shift(@selected) } |
|
else { $r->print(' '); } |
|
$r->print('</td>'); |
|
} |
|
$r->print('</tr><tr>'); |
|
for (my $i=0;$i<$max;$i++) { |
|
$r->print("\n". |
|
'<td><label><input type="radio" name="scantron_correct_Q_'. |
|
$quest.'" value="'.$i.'" />'.$alphabet[$i]."</label></td>"); |
|
} |
} |
$r->print('<td><label><input type="radio" name="scantron_correct_Q_'. |
my $total_lines = $lines*2; |
|
my @alphabet=('A'..'Z'); |
|
$r->print("<table border='1'><tr><td rowspan='".$total_lines."'>$quest</td>"); |
|
|
|
for (my $l = 0; $l < $lines; $l++) { |
|
if ($l != 0) { |
|
$r->print('<tr>'); |
|
} |
|
|
|
# FIXME: This loop probably has to be considerably more clever for |
|
# multiline bubbles: User can multibubble by having bubbles in |
|
# several lines. User can skip lines legitimately etc. etc. |
|
|
|
for (my $i=0;$i<$max;$i++) { |
|
$r->print("\n".'<td align="center">'); |
|
if ($selected[0] eq $alphabet[$i]) { |
|
$r->print('X'); |
|
shift(@selected) ; |
|
} else { |
|
$r->print(' '); |
|
} |
|
$r->print('</td>'); |
|
|
|
} |
|
|
|
if ($l == 0) { |
|
my $lspan = $total_lines * 2; # 2 table rows per bubble line. |
|
|
|
$r->print('<td rowspan='.$lspan.'><label><input type="radio" name="scantron_correct_Q_'. |
$quest.'" value="none" /> No bubble </label></td>'); |
$quest.'" value="none" /> No bubble </label></td>'); |
$r->print('</tr></table>'); |
|
|
} |
|
|
|
$r->print('</tr><tr>'); |
|
|
|
# FIXME: This may have to be a bit more clever for |
|
# multiline questions (different values e.g..). |
|
|
|
for (my $i=0;$i<$max;$i++) { |
|
$r->print("\n". |
|
'<td><label><input type="radio" name="scantron_correct_Q_'. |
|
$quest.'" value="'.$i.'" />'.$alphabet[$i]."</label></td>"); |
|
} |
|
$r->print('</tr>'); |
|
|
|
|
|
} |
|
$r->print('</table>'); |
} |
} |
|
|
sub num_matches { |
sub num_matches { |
Line 5938 DOWNLOAD
|
Line 6061 DOWNLOAD
|
sub show_grading_menu_form { |
sub show_grading_menu_form { |
my ($symb)=@_; |
my ($symb)=@_; |
my $result.='<br /><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="'.&Apache::lonenc::check_encrypt($symb).'" />'."\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="command" value="gradingmenu" />'."\n". |
'<input type="hidden" name="command" value="gradingmenu" />'."\n". |
'<input type="submit" name="submit" value="Grading Menu" />'."\n". |
'<input type="submit" name="submit" value="Grading Menu" />'."\n". |
Line 6013 GRADINGMENUJS
|
Line 6136 GRADINGMENUJS
|
my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'}); |
my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'}); |
|
|
$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="'.&Apache::lonenc::check_encrypt($symb).'" />'."\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". |
Line 6145 sub gather_clicker_ids {
|
Line 6268 sub gather_clicker_ids {
|
(&Apache::lonnet::userenvironment($domain,$username,'clickers'))[1]; |
(&Apache::lonnet::userenvironment($domain,$username,'clickers'))[1]; |
foreach my $id (split(/\,/,$clickers)) { |
foreach my $id (split(/\,/,$clickers)) { |
$id=~s/^[\#0]+//; |
$id=~s/^[\#0]+//; |
|
$id=~s/[\-\:]//g; |
if (exists($clicker_ids{$id})) { |
if (exists($clicker_ids{$id})) { |
$clicker_ids{$id}.=','.$username.':'.$domain; |
$clicker_ids{$id}.=','.$username.':'.$domain; |
} else { |
} else { |
Line 6167 sub gather_adv_clicker_ids {
|
Line 6291 sub gather_adv_clicker_ids {
|
(&Apache::lonnet::userenvironment($pudom,$puname,'clickers'))[1]; |
(&Apache::lonnet::userenvironment($pudom,$puname,'clickers'))[1]; |
foreach my $id (split(/\,/,$clickers)) { |
foreach my $id (split(/\,/,$clickers)) { |
$id=~s/^[\#0]+//; |
$id=~s/^[\#0]+//; |
|
$id=~s/[\-\:]//g; |
if (exists($clicker_ids{$id})) { |
if (exists($clicker_ids{$id})) { |
$clicker_ids{$id}.=','.$puname.':'.$pudom; |
$clicker_ids{$id}.=','.$puname.':'.$pudom; |
} else { |
} else { |
Line 6223 sub process_clicker {
|
Line 6348 sub process_clicker {
|
my $pcorrect=&mt("Percentage points for correct solution"); |
my $pcorrect=&mt("Percentage points for correct solution"); |
my $pincorrect=&mt("Percentage points for incorrect solution"); |
my $pincorrect=&mt("Percentage points for incorrect solution"); |
my $selectform=&Apache::loncommon::select_form($env{'form.upfiletype'},'upfiletype', |
my $selectform=&Apache::loncommon::select_form($env{'form.upfiletype'},'upfiletype', |
('iclicker' => 'i>clicker')); |
('iclicker' => 'i>clicker', |
|
'interwrite' => 'interwrite PRS')); |
|
$symb = &Apache::lonenc::check_encrypt($symb); |
$result.=<<ENDUPFORM; |
$result.=<<ENDUPFORM; |
<script type="text/javascript"> |
<script type="text/javascript"> |
function sanitycheck() { |
function sanitycheck() { |
Line 6312 sub process_clicker_file {
|
Line 6438 sub process_clicker_file {
|
$correct_id=~tr/a-z/A-Z/; |
$correct_id=~tr/a-z/A-Z/; |
$correct_id=~s/\s//gs; |
$correct_id=~s/\s//gs; |
$correct_id=~s/^[\#0]+//; |
$correct_id=~s/^[\#0]+//; |
|
$correct_id=~s/[\-\:]//g; |
if ($correct_id) { |
if ($correct_id) { |
$correct_ids{$correct_id}='specified'; |
$correct_ids{$correct_id}='specified'; |
} |
} |
Line 6349 sub process_clicker_file {
|
Line 6476 sub process_clicker_file {
|
# Were able to get all the info needed, now analyze the file |
# Were able to get all the info needed, now analyze the file |
|
|
$result.=&Apache::loncommon::studentbrowser_javascript(); |
$result.=&Apache::loncommon::studentbrowser_javascript(); |
|
$symb = &Apache::lonenc::check_encrypt($symb); |
my $heading=&mt('Scanning clicker file'); |
my $heading=&mt('Scanning clicker file'); |
$result.=(<<ENDHEADER); |
$result.=(<<ENDHEADER); |
<br /><table width="100%" border="0"><tr><td bgcolor="#777777"> |
<br /><table width="100%" border="0"><tr><td bgcolor="#777777"> |
Line 6370 ENDHEADER
|
Line 6498 ENDHEADER
|
if ($env{'form.upfiletype'} eq 'iclicker') { |
if ($env{'form.upfiletype'} eq 'iclicker') { |
($errormsg,$number)=&iclicker_eval(\@questiontitles,\%responses); |
($errormsg,$number)=&iclicker_eval(\@questiontitles,\%responses); |
} |
} |
|
if ($env{'form.upfiletype'} eq 'interwrite') { |
|
($errormsg,$number)=&interwrite_eval(\@questiontitles,\%responses); |
|
} |
$result.='<br />'.&mt('Found [_1] question(s)',$number).'<br />'. |
$result.='<br />'.&mt('Found [_1] question(s)',$number).'<br />'. |
'<input type="hidden" name="number" value="'.$number.'" />'. |
'<input type="hidden" name="number" value="'.$number.'" />'. |
&mt('Awarding [_1] percent for correct and [_2] percent for incorrect responses', |
&mt('Awarding [_1] percent for correct and [_2] percent for incorrect responses', |
Line 6449 sub iclicker_eval {
|
Line 6580 sub iclicker_eval {
|
return ($errormsg,$number); |
return ($errormsg,$number); |
} |
} |
|
|
|
sub interwrite_eval { |
|
my ($questiontitles,$responses)=@_; |
|
my $number=0; |
|
my $errormsg=''; |
|
my $skipline=1; |
|
my $questionnumber=0; |
|
my %idresponses=(); |
|
foreach my $line (split(/[\n\r]/,$env{'form.upfile'})) { |
|
my %components=&Apache::loncommon::record_sep($line); |
|
my @entries=map {$components{$_}} (sort(keys(%components))); |
|
if ($entries[1] eq 'Time') { $skipline=0; next; } |
|
if ($entries[1] eq 'Response') { $skipline=1; } |
|
next if $skipline; |
|
if ($entries[0]!=$questionnumber) { |
|
$questionnumber=$entries[0]; |
|
$$questiontitles[$number]=&mt('Question [_1]',$questionnumber); |
|
$number++; |
|
} |
|
my $id=$entries[4]; |
|
$id=~s/^[\#0]+//; |
|
$id=~s/^v\d*\://i; |
|
$id=~s/[\-\:]//g; |
|
$idresponses{$id}[$number]=$entries[6]; |
|
} |
|
foreach my $id (keys %idresponses) { |
|
$$responses{$id}=join(',',@{$idresponses{$id}}); |
|
$$responses{$id}=~s/^\s*\,//; |
|
} |
|
return ($errormsg,$number); |
|
} |
|
|
sub assign_clicker_grades { |
sub assign_clicker_grades { |
my ($r)=@_; |
my ($r)=@_; |
my ($symb)=&get_symb($r); |
my ($symb)=&get_symb($r); |
Line 6501 ENDHEADER
|
Line 6663 ENDHEADER
|
my $pincorrect=$env{'form.pincorrect'}; |
my $pincorrect=$env{'form.pincorrect'}; |
my $storecount=0; |
my $storecount=0; |
foreach my $key (keys(%env)) { |
foreach my $key (keys(%env)) { |
|
my $user=''; |
if ($key=~/^form\.student\:(.*)$/) { |
if ($key=~/^form\.student\:(.*)$/) { |
my $user=$1; |
$user=$1; |
|
} |
|
if ($key=~/^form\.unknown\:(.*)$/) { |
|
my $id=$1; |
|
if (($env{'form.uname'.$id}) && ($env{'form.udom'.$id})) { |
|
$user=$env{'form.uname'.$id}.':'.$env{'form.udom'.$id}; |
|
} |
|
} |
|
if ($user) { |
my @answer=split(/\,/,$env{$key}); |
my @answer=split(/\,/,$env{$key}); |
my $sum=0; |
my $sum=0; |
for (my $i=0;$i<$number;$i++) { |
for (my $i=0;$i<$number;$i++) { |