version 1.447, 2007/10/09 09:16:04
|
version 1.465, 2007/10/26 00:27:55
|
Line 35 use Apache::loncommon;
|
Line 35 use Apache::loncommon;
|
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
use Apache::lonhomework; |
use Apache::lonhomework; |
|
use Apache::lonpickcode; |
use Apache::loncoursedata; |
use Apache::loncoursedata; |
use Apache::lonmsg(); |
use Apache::lonmsg(); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
Line 56 my %first_bubble_line = (); # First bubb
|
Line 57 my %first_bubble_line = (); # First bubb
|
|
|
|
|
sub save_bubble_lines { |
sub save_bubble_lines { |
|
|
foreach my $line (keys(%bubble_lines_per_response)) { |
foreach my $line (keys(%bubble_lines_per_response)) { |
$env{"form.scantron.bubblelines.$line"} = $bubble_lines_per_response{$line}; |
$env{"form.scantron.bubblelines.$line"} = $bubble_lines_per_response{$line}; |
$env{"form.scantron.first_bubble_line.$line"} = |
$env{"form.scantron.first_bubble_line.$line"} = |
Line 84 sub restore_bubble_lines {
|
Line 84 sub restore_bubble_lines {
|
sub get_response_bubbles { |
sub get_response_bubbles { |
my ($parsed_line, $response) = @_; |
my ($parsed_line, $response) = @_; |
|
|
my $bubble_line = $first_bubble_line{$response}; |
|
my $bubble_lines= $bubble_linse_per_response{$response}; |
my $bubble_line = $first_bubble_line{$response-1} +1; |
|
my $bubble_lines= $bubble_lines_per_response{$response-1}; |
|
|
my $selected = ""; |
my $selected = ""; |
|
|
for (my $bline = 0; $bline < $bubble_lines; $bline++) { |
for (my $bline = 0; $bline < $bubble_lines; $bline++) { |
$selected .= $$parsed_line{"scantron.$bubble_line.answer"}; |
$selected .= $$parsed_line{"scantron.$bubble_line.answer"}.":"; |
$bubble_line++; |
$bubble_line++; |
} |
} |
return $selected; |
return $selected; |
Line 473 COMMONJSFUNCTIONS
|
Line 475 COMMONJSFUNCTIONS
|
#--- Dumps the class list with usernames,list of sections, |
#--- Dumps the class list with usernames,list of sections, |
#--- section, ids and fullnames for each user. |
#--- section, ids and fullnames for each user. |
sub getclasslist { |
sub getclasslist { |
my ($getsec,$filterlist) = @_; |
my ($getsec,$filterlist,$getgroup) = @_; |
my @getsec; |
my @getsec; |
|
my @getgroup; |
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); |
my $stu_status = join(':',&Apache::loncommon::get_env_multiple('form.Status')); |
if (!ref($getsec)) { |
if (!ref($getsec)) { |
if ($getsec ne '' && $getsec ne 'all') { |
if ($getsec ne '' && $getsec ne 'all') { |
Line 484 sub getclasslist {
|
Line 487 sub getclasslist {
|
@getsec=@{$getsec}; |
@getsec=@{$getsec}; |
} |
} |
if (grep(/^all$/,@getsec)) { undef(@getsec); } |
if (grep(/^all$/,@getsec)) { undef(@getsec); } |
|
if (!ref($getgroup)) { |
|
if ($getgroup ne '' && $getgroup ne 'all') { |
|
@getgroup=($getgroup); |
|
} |
|
} else { |
|
@getgroup=@{$getgroup}; |
|
} |
|
if (grep(/^all$/,@getgroup)) { undef(@getgroup); } |
|
|
my $classlist=&Apache::loncoursedata::get_classlist(); |
my ($classlist,$keylist)=&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)); |
|
&Apache::loncoursedata::get_group_memberships($classlist,$keylist); |
# |
# |
my %sections; |
my %sections; |
my %fullnames; |
my %fullnames; |
Line 504 sub getclasslist {
|
Line 516 sub getclasslist {
|
$classlist->{$student}->[&Apache::loncoursedata::CL_FULLNAME()]; |
$classlist->{$student}->[&Apache::loncoursedata::CL_FULLNAME()]; |
my $status = |
my $status = |
$classlist->{$student}->[&Apache::loncoursedata::CL_STATUS()]; |
$classlist->{$student}->[&Apache::loncoursedata::CL_STATUS()]; |
|
my $group = |
|
$classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()]; |
# filter students according to status selected |
# filter students according to status selected |
if ($filterlist && (!($stu_status =~ /Any/))) { |
if ($filterlist && (!($stu_status =~ /Any/))) { |
if (!($stu_status =~ $status)) { |
if (!($stu_status =~ $status)) { |
delete ($classlist->{$student}); |
delete($classlist->{$student}); |
next; |
next; |
} |
} |
} |
} |
|
# filter students according to groups selected |
|
my @stu_groups = split(/,/,$group); |
|
if (@getgroup) { |
|
my $exclude = 1; |
|
foreach my $grp (@getgroup) { |
|
foreach my $stu_group (@stu_groups) { |
|
if ($stu_group eq $grp) { |
|
$exclude = 0; |
|
} |
|
} |
|
if (($grp eq 'none') && !$group) { |
|
$exclude = 0; |
|
} |
|
} |
|
if ($exclude) { |
|
delete($classlist->{$student}); |
|
} |
|
} |
$section = ($section ne '' ? $section : 'none'); |
$section = ($section ne '' ? $section : 'none'); |
if (&canview($section)) { |
if (&canview($section)) { |
if (!@getsec || grep(/^\Q$section\E$/,@getsec)) { |
if (!@getsec || grep(/^\Q$section\E$/,@getsec)) { |
$sections{$section}++; |
$sections{$section}++; |
$fullnames{$student}=$fullname; |
if ($classlist->{$student}) { |
|
$fullnames{$student}=$fullname; |
|
} |
} else { |
} else { |
delete($classlist->{$student}); |
delete($classlist->{$student}); |
} |
} |
Line 766 sub listStudents {
|
Line 800 sub listStudents {
|
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"}; |
my $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'}; |
my $getsec = $env{'form.section'} eq '' ? 'all' : $env{'form.section'}; |
|
my $getgroup = $env{'form.group'} eq '' ? 'all' : $env{'form.group'}; |
my $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'}; |
my $submitonly= $env{'form.submitonly'} eq '' ? 'all' : $env{'form.submitonly'}; |
|
|
my $viewgrade = $env{'form.showgrading'} eq 'yes' ? 'View/Grade/Regrade' : 'View'; |
my $viewgrade = $env{'form.showgrading'} eq 'yes' ? 'View/Grade/Regrade' : 'View'; |
$env{'form.probTitle'} = $env{'form.probTitle'} eq '' ? |
$env{'form.probTitle'} = $env{'form.probTitle'} eq '' ? |
&Apache::lonnet::gettitle($symb) : $env{'form.probTitle'}; |
&Apache::lonnet::gettitle($symb) : $env{'form.probTitle'}; |
Line 867 LISTJAVASCRIPT
|
Line 901 LISTJAVASCRIPT
|
'value="Next->" /> <br />'."\n"; |
'value="Next->" /> <br />'."\n"; |
$gradeTable.=&check_buttons(); |
$gradeTable.=&check_buttons(); |
$gradeTable.='<label><input type="checkbox" name="checkPlag" checked="checked" />Check For Plagiarism</label>'; |
$gradeTable.='<label><input type="checkbox" name="checkPlag" checked="checked" />Check For Plagiarism</label>'; |
my ($classlist, undef, $fullname) = &getclasslist($getsec,'1'); |
my ($classlist, undef, $fullname) = &getclasslist($getsec,'1',$getgroup); |
$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; |
Line 942 LISTJAVASCRIPT
|
Line 976 LISTJAVASCRIPT
|
|
|
$ctr++; |
$ctr++; |
my $section = $classlist->{$student}->[&Apache::loncoursedata::CL_SECTION()]; |
my $section = $classlist->{$student}->[&Apache::loncoursedata::CL_SECTION()]; |
|
my $group = $classlist->{$student}->[&Apache::loncoursedata::CL_GROUP()]; |
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="right">'.$ctr.' </td>'. |
$gradeTable.='<td align="right">'.$ctr.' </td>'. |
Line 950 LISTJAVASCRIPT
|
Line 984 LISTJAVASCRIPT
|
$student.':'.$$fullname{$student}.':::SECTION'.$section. |
$student.':'.$$fullname{$student}.':::SECTION'.$section. |
') " /> </label></td>'."\n".'<td>'. |
') " /> </label></td>'."\n".'<td>'. |
&nameUserString(undef,$$fullname{$student},$uname,$udom). |
&nameUserString(undef,$$fullname{$student},$uname,$udom). |
' '.$section.'</td>'."\n"; |
' '.$section.'/'.$group.'</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 1446 INNERJS
|
Line 1480 INNERJS
|
|
|
pDoc.write("<form action=\\"inactive\\" name=\\"msgcenter\\">"); |
pDoc.write("<form action=\\"inactive\\" name=\\"msgcenter\\">"); |
pDoc.write("<input value=\\""+usrctr+"\\" name=\\"usrctr\\" type=\\"hidden\\">"); |
pDoc.write("<input value=\\""+usrctr+"\\" name=\\"usrctr\\" type=\\"hidden\\">"); |
pDoc.write("<h3><span class=\\"LC_info\\"> Compose Message for \"+fullname+\"</span></h3><br /><br />"); |
pDoc.write("<h3><span class=\\"LC_info\\"> Compose Message for \"+fullname+\"<\\/span><\\/h3><br /><br />"); |
|
|
pDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">"); |
pDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">"); |
pDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">"); |
pDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">"); |
pDoc.write("<td><b>Type</b></td><td><b>Include</b></td><td><b>Message</td></tr>"); |
pDoc.write("<td><b>Type<\\/b><\\/td><td><b>Include<\\/b><\\/td><td><b>Message<\\/td><\\/tr>"); |
} |
} |
function displaySubject(msg,shwsel) { |
function displaySubject(msg,shwsel) { |
pDoc = pWin.document; |
pDoc = pWin.document; |
pDoc.write("<tr bgcolor=\\"#ffffdd\\">"); |
pDoc.write("<tr bgcolor=\\"#ffffdd\\">"); |
pDoc.write("<td>Subject</td>"); |
pDoc.write("<td>Subject<\\/td>"); |
pDoc.write("<td align=\\"center\\"><input name=\\"subchk\\" type=\\"checkbox\\"" +shwsel+"></td>"); |
pDoc.write("<td align=\\"center\\"><input name=\\"subchk\\" type=\\"checkbox\\"" +shwsel+"><\\/td>"); |
pDoc.write("<td><input name=\\"msgsub\\" type=\\"text\\" value=\\""+msg+"\\"size=\\"60\\" maxlength=\\"80\\"></td></tr>"); |
pDoc.write("<td><input name=\\"msgsub\\" type=\\"text\\" value=\\""+msg+"\\"size=\\"60\\" maxlength=\\"80\\"><\\/td><\\/tr>"); |
} |
} |
|
|
function displaySavedMsg(ctr,msg,shwsel) { |
function displaySavedMsg(ctr,msg,shwsel) { |
pDoc = pWin.document; |
pDoc = pWin.document; |
pDoc.write("<tr bgcolor=\\"#ffffdd\\">"); |
pDoc.write("<tr bgcolor=\\"#ffffdd\\">"); |
pDoc.write("<td align=\\"center\\">"+ctr+"</td>"); |
pDoc.write("<td align=\\"center\\">"+ctr+"<\\/td>"); |
pDoc.write("<td align=\\"center\\"><input name=\\"msgn"+ctr+"\\" type=\\"checkbox\\"" +shwsel+"></td>"); |
pDoc.write("<td align=\\"center\\"><input name=\\"msgn"+ctr+"\\" type=\\"checkbox\\"" +shwsel+"><\\/td>"); |
pDoc.write("<td><textarea name=\\"msg"+ctr+"\\" cols=\\"60\\" rows=\\"3\\">"+msg+"</textarea></td></tr>"); |
pDoc.write("<td><textarea name=\\"msg"+ctr+"\\" cols=\\"60\\" rows=\\"3\\">"+msg+"<\\/textarea><\\/td><\\/tr>"); |
} |
} |
|
|
function newMsg(newmsg,shwsel) { |
function newMsg(newmsg,shwsel) { |
pDoc = pWin.document; |
pDoc = pWin.document; |
pDoc.write("<tr bgcolor=\\"#ffffdd\\">"); |
pDoc.write("<tr bgcolor=\\"#ffffdd\\">"); |
pDoc.write("<td align=\\"center\\">New</td>"); |
pDoc.write("<td align=\\"center\\">New<\\/td>"); |
pDoc.write("<td align=\\"center\\"><input name=\\"newmsgchk\\" type=\\"checkbox\\"" +shwsel+"></td>"); |
pDoc.write("<td align=\\"center\\"><input name=\\"newmsgchk\\" type=\\"checkbox\\"" +shwsel+"><\\/td>"); |
pDoc.write("<td><textarea name=\\"newmsg\\" cols=\\"60\\" rows=\\"3\\" onchange=\\"javascript:this.form.newmsgchk.checked=true\\" >"+newmsg+"</textarea></td></tr>"); |
pDoc.write("<td><textarea name=\\"newmsg\\" cols=\\"60\\" rows=\\"3\\" onchange=\\"javascript:this.form.newmsgchk.checked=true\\" >"+newmsg+"<\\/textarea><\\/td><\\/tr>"); |
} |
} |
|
|
function msgTail() { |
function msgTail() { |
pDoc = pWin.document; |
pDoc = pWin.document; |
pDoc.write("</table>"); |
pDoc.write("<\\/table>"); |
pDoc.write("</td></tr></table> "); |
pDoc.write("<\\/td><\\/tr><\\/table> "); |
pDoc.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:checkInput()\\"> "); |
pDoc.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:checkInput()\\"> "); |
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('$end_page_msg_central'); |
pDoc.write('$end_page_msg_central'); |
pDoc.close(); |
pDoc.close(); |
} |
} |
Line 1531 INNERJS
|
Line 1565 INNERJS
|
hDoc.$docopen; |
hDoc.$docopen; |
hDoc.write('$start_page_highlight_central'); |
hDoc.write('$start_page_highlight_central'); |
hDoc.write("<form action=\\"inactive\\" name=\\"hlCenter\\">"); |
hDoc.write("<form action=\\"inactive\\" name=\\"hlCenter\\">"); |
hDoc.write("<h3><span class=\\"LC_info\\"> Keyword Highlight Options</span></h3><br /><br />"); |
hDoc.write("<h3><span class=\\"LC_info\\"> Keyword Highlight Options<\\/span><\\/h3><br /><br />"); |
|
|
hDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">"); |
hDoc.write("<table border=0 width=100%><tr><td bgcolor=\\"#777777\\">"); |
hDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">"); |
hDoc.write("<table border=0 width=100%><tr bgcolor=\\"#ddffff\\">"); |
hDoc.write("<td><b>Text Color</b></td><td><b>Font Size</b></td><td><b>Font Style</td></tr>"); |
hDoc.write("<td><b>Text Color<\\/b><\\/td><td><b>Font Size<\\/b><\\/td><td><b>Font Style<\\/td><\\/tr>"); |
} |
} |
|
|
function highlightbody(clrval,clrtxt,clrsel,szval,sztxt,szsel,syval,sytxt,sysel) { |
function highlightbody(clrval,clrtxt,clrsel,szval,sztxt,szsel,syval,sytxt,sysel) { |
var hDoc = hwdWin.document; |
var hDoc = hwdWin.document; |
hDoc.write("<tr bgcolor=\\"#ffffdd\\">"); |
hDoc.write("<tr bgcolor=\\"#ffffdd\\">"); |
hDoc.write("<td align=\\"left\\">"); |
hDoc.write("<td align=\\"left\\">"); |
hDoc.write("<input name=\\"kwdclr\\" type=\\"radio\\" value=\\""+clrval+"\\" "+clrsel+"> "+clrtxt+"</td>"); |
hDoc.write("<input name=\\"kwdclr\\" type=\\"radio\\" value=\\""+clrval+"\\" "+clrsel+"> "+clrtxt+"<\\/td>"); |
hDoc.write("<td align=\\"left\\">"); |
hDoc.write("<td align=\\"left\\">"); |
hDoc.write("<input name=\\"kwdsize\\" type=\\"radio\\" value=\\""+szval+"\\" "+szsel+"> "+sztxt+"</td>"); |
hDoc.write("<input name=\\"kwdsize\\" type=\\"radio\\" value=\\""+szval+"\\" "+szsel+"> "+sztxt+"<\\/td>"); |
hDoc.write("<td align=\\"left\\">"); |
hDoc.write("<td align=\\"left\\">"); |
hDoc.write("<input name=\\"kwdstyle\\" type=\\"radio\\" value=\\""+syval+"\\" "+sysel+"> "+sytxt+"</td>"); |
hDoc.write("<input name=\\"kwdstyle\\" type=\\"radio\\" value=\\""+syval+"\\" "+sysel+"> "+sytxt+"<\\/td>"); |
hDoc.write("</tr>"); |
hDoc.write("<\\/tr>"); |
} |
} |
|
|
function highlightend() { |
function highlightend() { |
var hDoc = hwdWin.document; |
var hDoc = hwdWin.document; |
hDoc.write("</table>"); |
hDoc.write("<\\/table>"); |
hDoc.write("</td></tr></table> "); |
hDoc.write("<\\/td><\\/tr><\\/table> "); |
hDoc.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:updateChoice(1)\\"> "); |
hDoc.write("<input type=\\"button\\" value=\\"Save\\" onClick=\\"javascript:updateChoice(1)\\"> "); |
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('$end_page_highlight_central'); |
hDoc.write('$end_page_highlight_central'); |
hDoc.close(); |
hDoc.close(); |
} |
} |
Line 1782 sub build_section_inputs {
|
Line 1816 sub build_section_inputs {
|
# --------------------------- show submissions of a student, option to grade |
# --------------------------- show submissions of a student, option to grade |
sub submission { |
sub submission { |
my ($request,$counter,$total) = @_; |
my ($request,$counter,$total) = @_; |
|
|
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? |
$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'}); |
Line 1927 KEYWORDS
|
Line 1960 KEYWORDS
|
|
|
# This is where output for one specific student would start |
# This is where output for one specific student would start |
my $bgcolor='#DDEEDD'; |
my $bgcolor='#DDEEDD'; |
if (int($counter/2) eq $counter) { $bgcolor='#DDDDEE'; } |
if ($counter%2) { $bgcolor='#DDDDEE'; } |
$request->print("\n\n". |
$request->print("\n\n". |
'<p><table border="2"><tr><th bgcolor="'.$bgcolor.'">'.$env{'form.fullname'}.'</th></tr><tr><td bgcolor="'.$bgcolor.'">'); |
'<p><table border="2"><tr><th bgcolor="'.$bgcolor.'">'.$env{'form.fullname'}.'</th></tr><tr><td bgcolor="'.$bgcolor.'">'); |
|
|
Line 1957 KEYWORDS
|
Line 1990 KEYWORDS
|
'" value="'.$env{'form.fullname'}.'" />'."\n"; |
'" value="'.$env{'form.fullname'}.'" />'."\n"; |
|
|
# If any part of the problem is an essay-response (handgraded), then check for collaborators |
# If any part of the problem is an essay-response (handgraded), then check for collaborators |
my @col_fullnames; |
my $fullname; |
my ($classlist,$fullname); |
my $col_fullnames = []; |
if ($env{'form.handgrade'} eq 'yes') { |
if ($env{'form.handgrade'} eq 'yes') { |
($classlist,undef,$fullname) = &getclasslist('all','0'); |
(my $sub_result,$fullname,$col_fullnames)= |
for (keys (%$handgrade)) { |
&check_collaborators($symb,$uname,$udom,\%record,$handgrade, |
my $ncol = &Apache::lonnet::EXT('resource.'.$_. |
$counter); |
'.maxcollaborators', |
$result.=$sub_result; |
$symb,$udom,$uname); |
|
next if ($ncol <= 0); |
|
s/\_/\./g; |
|
next if ($record{'resource.'.$_.'.collaborators'} eq ''); |
|
my @goodcollaborators = (); |
|
my @badcollaborators = (); |
|
foreach (split(/,?\s+/,$record{'resource.'.$_.'.collaborators'})) { |
|
$_ =~ s/[\$\^\(\)]//g; |
|
next if ($_ eq ''); |
|
my ($co_name,$co_dom) = split /\@|:/,$_; |
|
$co_dom = $udom if (! defined($co_dom) || $co_dom =~ /^domain$/i); |
|
next if ($co_name eq $uname && $co_dom eq $udom); |
|
# Doing this grep allows 'fuzzy' specification |
|
my @Matches = grep /^$co_name:$co_dom$/i,keys %$classlist; |
|
if (! scalar(@Matches)) { |
|
push @badcollaborators,$_; |
|
} else { |
|
push @goodcollaborators, @Matches; |
|
} |
|
} |
|
if (scalar(@goodcollaborators) != 0) { |
|
$result.='<b>Collaborators: </b>'; |
|
foreach (@goodcollaborators) { |
|
my ($lastname,$givenn) = split(/,/,$$fullname{$_}); |
|
push @col_fullnames, $givenn.' '.$lastname; |
|
$result.=$$fullname{$_}.' '; |
|
} |
|
$result.='<br />'."\n"; |
|
my ($part)=split(/\./,$_); |
|
$result.='<input type="hidden" name="collaborator'.$counter. |
|
'" value="'.$part.':'.(join ':',@goodcollaborators).'" />'. |
|
"\n"; |
|
} |
|
if (scalar(@badcollaborators) > 0) { |
|
$result.='<table border="0"><tr bgcolor="#ffbbbb"><td>'; |
|
$result.='This student has submitted '; |
|
$result.=(scalar(@badcollaborators) == 1) ? 'an invalid collaborator' : 'invalid collaborators'; |
|
$result .= ': '.join(', ',@badcollaborators); |
|
$result .= '</td></tr></table>'; |
|
} |
|
if (scalar(@badcollaborators > $ncol)) { |
|
$result .= '<table border="0"><tr bgcolor="#ffbbbb"><td>'; |
|
$result .= 'This student has submitted too many '. |
|
'collaborators. Maximum is '.$ncol.'.'; |
|
$result .= '</td></tr></table>'; |
|
} |
|
} |
|
} |
} |
$request->print($result."\n"); |
$request->print($result."\n"); |
|
|
Line 2146 KEYWORDS
|
Line 2132 KEYWORDS
|
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; |
if (scalar(@col_fullnames) > 0) { |
if (scalar(@$col_fullnames) > 0) { |
my $lastone = pop @col_fullnames; |
my $lastone = pop(@$col_fullnames); |
$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='<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'). |
'/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n". |
'/mailbkgrd.gif" width="14" height="10" name="mailicon'.$counter.'" />'."\n". |
Line 2233 KEYWORDS
|
Line 2219 KEYWORDS
|
return ''; |
return ''; |
} |
} |
|
|
|
sub check_collaborators { |
|
my ($symb,$uname,$udom,$record,$handgrade,$counter) = @_; |
|
my ($result,@col_fullnames); |
|
my ($classlist,undef,$fullname) = &getclasslist('all','0'); |
|
foreach my $part (keys(%$handgrade)) { |
|
my $ncol = &Apache::lonnet::EXT('resource.'.$part. |
|
'.maxcollaborators', |
|
$symb,$udom,$uname); |
|
next if ($ncol <= 0); |
|
$part =~ s/\_/\./g; |
|
next if ($record->{'resource.'.$part.'.collaborators'} eq ''); |
|
my (@good_collaborators, @bad_collaborators); |
|
foreach my $possible_collaborator |
|
(split(/,?\s+/,$record->{'resource.'.$part.'.collaborators'})) { |
|
$possible_collaborator =~ s/[\$\^\(\)]//g; |
|
next if ($possible_collaborator eq ''); |
|
my ($co_name,$co_dom) = split(/\@|:/,$possible_collaborator); |
|
$co_dom = $udom if (! defined($co_dom) || $co_dom =~ /^domain$/i); |
|
next if ($co_name eq $uname && $co_dom eq $udom); |
|
# Doing this grep allows 'fuzzy' specification |
|
my @matches = grep(/^\Q$co_name\E:\Q$co_dom\E$/i, |
|
keys(%$classlist)); |
|
if (! scalar(@matches)) { |
|
push(@bad_collaborators, $possible_collaborator); |
|
} else { |
|
push(@good_collaborators, @matches); |
|
} |
|
} |
|
if (scalar(@good_collaborators) != 0) { |
|
$result.='<b>Collaborators: </b>'; |
|
foreach my $name (@good_collaborators) { |
|
my ($lastname,$givenn) = split(/,/,$$fullname{$name}); |
|
push(@col_fullnames, $givenn.' '.$lastname); |
|
$result.=$fullname->{$name}.' '; |
|
} |
|
$result.='<br />'."\n"; |
|
my ($part)=split(/\./,$_); |
|
$result.='<input type="hidden" name="collaborator'.$counter. |
|
'" value="'.$part.':'.(join ':',@good_collaborators).'" />'. |
|
"\n"; |
|
} |
|
if (scalar(@bad_collaborators) > 0) { |
|
$result.='<div class="LC_error">'; |
|
$result.=&mt('This student has submitted [quant,_1,invalid collaborator]: [_2]',scalar(@bad_collaborators),join(', ',@bad_collaborators)); |
|
$result .= '</div>'; |
|
} |
|
if (scalar(@bad_collaborators > $ncol)) { |
|
$result .= '<div class="LC_error">'; |
|
$result .= &mt('This student has submitted too many '. |
|
'collaborators. Maximum is [_1].',$ncol); |
|
$result .= '</div>'; |
|
} |
|
} |
|
return ($result,$fullname,\@col_fullnames); |
|
} |
|
|
#--- Retrieve the last submission for all the parts |
#--- Retrieve the last submission for all the parts |
sub get_last_submission { |
sub get_last_submission { |
my ($returnhash)=@_; |
my ($returnhash)=@_; |
Line 3879 sub csvuploadassign {
|
Line 3921 sub csvuploadassign {
|
if ($wgt) { |
if ($wgt) { |
$entries{$fields{$dest}}=~s/\s//g; |
$entries{$fields{$dest}}=~s/\s//g; |
my $pcr=$entries{$fields{$dest}} / $wgt; |
my $pcr=$entries{$fields{$dest}} / $wgt; |
my $award='correct_by_override'; |
my $award=($pcr == 0) ? 'incorrect_by_override' |
|
: 'correct_by_override'; |
$grades{"resource.$part.awarded"}=$pcr; |
$grades{"resource.$part.awarded"}=$pcr; |
$grades{"resource.$part.solved"}=$award; |
$grades{"resource.$part.solved"}=$award; |
$points{$part}=1; |
$points{$part}=1; |
Line 4860 SCANTRONFORM
|
Line 4903 SCANTRONFORM
|
</tr> |
</tr> |
SCANTRONFORM |
SCANTRONFORM |
|
|
$r->print(<<SCANTRONFORM); |
$r->print('<tr><td bgcolor="#777777">'); |
</table> |
&Apache::lonpickcode::code_list($r,2); |
$grading_menu_button |
$r->print('</td></tr></table>'); |
SCANTRONFORM |
$r->print($grading_menu_button); |
|
|
return |
return |
} |
} |
|
|
Line 5236 sub scantron_parse_scanline {
|
Line 5278 sub scantron_parse_scanline {
|
|| (&occurence_count($currentquest, "[A-Z]") > 1)) { |
|| (&occurence_count($currentquest, "[A-Z]") > 1)) { |
push(@{$record{'scantron.doubleerror'}},$questnum); |
push(@{$record{'scantron.doubleerror'}},$questnum); |
for (my $ans = 0; $ans < $answers_needed; $ans++) { |
for (my $ans = 0; $ans < $answers_needed; $ans++) { |
$record{"scantron.$ansnum.answer"}=''; |
my $bubble = substr($currentquest, $ans, 1); |
|
if ($bubble =~ /[A-Z]/ ) { |
|
$record{"scantron.$ansnum.answer"} = $bubble; |
|
} else { |
|
$record{"scantron.$ansnum.answer"}=''; |
|
} |
$ansnum++; |
$ansnum++; |
} |
} |
|
|
Line 5271 sub scantron_parse_scanline {
|
Line 5318 sub scantron_parse_scanline {
|
|| (&occurence_count($currentquest, '\d') > 1)) { |
|| (&occurence_count($currentquest, '\d') > 1)) { |
push(@{$record{'scantron.doubleerror'}},$questnum); |
push(@{$record{'scantron.doubleerror'}},$questnum); |
for (my $ans = 0; $ans < $answers_needed; $ans++) { |
for (my $ans = 0; $ans < $answers_needed; $ans++) { |
$record{"scantron.$ansnum.answer"}=''; |
my $bubble = substr($currentquest, $ans, 1); |
|
if ($bubble =~ /\d/) { |
|
$record{"scantron.$ansnum.answer"} = $alphabet[$bubble]; |
|
} else { |
|
$record{"scantron.$ansnum.answer"}=' '; |
|
} |
$ansnum++; |
$ansnum++; |
} |
} |
|
|
Line 5318 sub scantron_parse_scanline {
|
Line 5370 sub scantron_parse_scanline {
|
} |
} |
} elsif (scalar(@array) lt 2) { |
} elsif (scalar(@array) lt 2) { |
|
|
my $location = [length($array[0])]; |
my $location = length($array[0]); |
my $line_num = $location / $$scantron_config{'Qlength'}; |
my $line_num = $location / $$scantron_config{'Qlength'}; |
my $bubble = $alphabet[$location % $$scantron_config{'Qlength'}]; |
my $bubble = $alphabet[$location % $$scantron_config{'Qlength'}]; |
|
|
Line 5341 sub scantron_parse_scanline {
|
Line 5393 sub scantron_parse_scanline {
|
|
|
my $first_answer = $ansnum; |
my $first_answer = $ansnum; |
for (my $ans =0; $ans < $answers_needed; $ans++) { |
for (my $ans =0; $ans < $answers_needed; $ans++) { |
$record{"scantron.$ansnum.answer"} = ''; |
my $item = $first_answer+$ans; |
$ans++; |
$record{"scantron.$item.answer"} = ''; |
} |
} |
|
|
my @ans=@array; |
my @ans=@array; |
my $i=length($ans[0]);shift(@ans); |
my $i=0; |
|
my $increment = 0; |
while ($#ans) { |
while ($#ans) { |
$i+=length($ans[0])+1; |
$i+=length($ans[0]) + $increment; |
my $line = $i/$$scantron_config{'Qlength'} + $first_answer; |
my $line = int($i/$$scantron_config{'Qlength'} + $first_answer); |
my $bubble = $i%$$scantron_config{'Qlength'}; |
my $bubble = $i%$$scantron_config{'Qlength'}; |
|
|
$record{"scantron.$line.answer"}.=$alphabet[$bubble]; |
$record{"scantron.$line.answer"}.=$alphabet[$bubble]; |
shift(@ans); |
shift(@ans); |
|
$increment = 1; |
} |
} |
|
$ansnum += $answers_needed; |
} |
} |
} |
} |
} |
} |
Line 5716 SCANTRONFORM
|
Line 5770 SCANTRONFORM
|
while (defined($env{"form.scantron.bubblelines.$line"})) { |
while (defined($env{"form.scantron.bubblelines.$line"})) { |
my $chunk = |
my $chunk = |
'<input type="hidden" name="scantron.bubblelines.'.$line.'" value="'.$env{"form.scantron.bubblelines.$line"}.'" />'."\n"; |
'<input type="hidden" name="scantron.bubblelines.'.$line.'" value="'.$env{"form.scantron.bubblelines.$line"}.'" />'."\n"; |
$chunk += |
$chunk .= |
'<input type="hidden" name="scantron.first_bubble_line.'.$line'." value="'.$env{"form.scantron.first_bubble_line.$line"}.'" />'."\n"; |
'<input type="hidden" name="scantron.first_bubble_line.'.$line.'" value="'.$env{"form.scantron.first_bubble_line.$line"}.'" />'."\n"; |
$result .= $chunk; |
$result .= $chunk; |
$line++; |
$line++; |
} |
} |
Line 5779 sub scantron_validate_file {
|
Line 5833 sub scantron_validate_file {
|
} |
} |
my $currentphase=$env{'form.validatepass'}; |
my $currentphase=$env{'form.validatepass'}; |
|
|
|
|
my $stop=0; |
my $stop=0; |
while (!$stop && $currentphase < scalar(@validate_phases)) { |
while (!$stop && $currentphase < scalar(@validate_phases)) { |
$r->print("<p> Validating ".$validate_phases[$currentphase]."</p>"); |
$r->print("<p> Validating ".$validate_phases[$currentphase]."</p>"); |
Line 6289 sub scantron_validate_ID {
|
Line 6344 sub scantron_validate_ID {
|
sub scantron_get_correction { |
sub scantron_get_correction { |
my ($r,$i,$scan_record,$scan_config,$line,$error,$arg)=@_; |
my ($r,$i,$scan_record,$scan_config,$line,$error,$arg)=@_; |
|
|
#FIXME in the case of a duplicated ID the previous line, probaly need |
#FIXME in the case of a duplicated ID the previous line, probably need |
#to show both the current line and the previous one and allow skipping |
#to show both the current line and the previous one and allow skipping |
#the previous one or the current one |
#the previous one or the current one |
|
|
Line 6388 ENDSCRIPT
|
Line 6443 ENDSCRIPT
|
$r->print($message); |
$r->print($message); |
$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 = &get_response_bubbles($scan_record, $question); |
my $selected = &get_response_bubbles($scan_record, $question); |
|
my @select_array = split(/:/,$selected); |
&scantron_bubble_selector($r,$scan_config,$question, |
&scantron_bubble_selector($r,$scan_config,$question, |
split('',$selected)); |
@select_array); |
} |
} |
} 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 6401 ENDSCRIPT
|
Line 6456 ENDSCRIPT
|
$r->print('<input type="hidden" name="scantron_questions" value="'. |
$r->print('<input type="hidden" name="scantron_questions" value="'. |
join(',',@{$arg}).'" />'); |
join(',',@{$arg}).'" />'); |
foreach my $question (@{$arg}) { |
foreach my $question (@{$arg}) { |
my $selected = &get_response_bubbles($scan_record, $quesion); |
my $selected = &get_response_bubbles($scan_record, $question); |
&scantron_bubble_selector($r,$scan_config,$question); |
&scantron_bubble_selector($r,$scan_config,$question); |
} |
} |
} else { |
} else { |
Line 6422 ENDSCRIPT
|
Line 6477 ENDSCRIPT
|
$r - Apache request object |
$r - Apache request object |
$scan_config - hash from &get_scantron_config() |
$scan_config - hash from &get_scantron_config() |
$quest - number of the bubble line to make a corrector for |
$quest - number of the bubble line to make a corrector for |
$selected - array of letters of previously selected bubbles |
$lines - array of answer lines. |
|
|
=cut |
=cut |
|
|
sub scantron_bubble_selector { |
sub scantron_bubble_selector { |
my ($r,$scan_config,$quest,@selected)=@_; |
my ($r,$scan_config,$quest,@lines)=@_; |
my $max=$$scan_config{'Qlength'}; |
my $max=$$scan_config{'Qlength'}; |
|
|
|
|
my $scmode=$$scan_config{'Qon'}; |
my $scmode=$$scan_config{'Qon'}; |
|
|
|
my $bubble_length = scalar(@lines); |
|
|
if ($scmode eq 'number' || $scmode eq 'letter') { $max=10; } |
|
|
|
|
if ($scmode eq 'number' || $scmode eq 'letter') { $max=10; } |
|
|
my $lines = $bubble_lines_per_response{$quest}; |
my $response = $quest-1; |
|
my $lines = $bubble_lines_per_response{$response}; |
|
|
my $total_lines = $lines*2; |
my $total_lines = $lines*2; |
my @alphabet=('A'..'Z'); |
my @alphabet=('A'..'Z'); |
Line 6446 sub scantron_bubble_selector {
|
Line 6504 sub scantron_bubble_selector {
|
if ($l != 0) { |
if ($l != 0) { |
$r->print('<tr>'); |
$r->print('<tr>'); |
} |
} |
|
my @selected = split(//,$lines[$l]); |
# 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++) { |
for (my $i=0;$i<$max;$i++) { |
$r->print("\n".'<td align="center">'); |
$r->print("\n".'<td align="center">'); |
if ($selected[0] eq $alphabet[$i]) { |
if ($selected[0] eq $alphabet[$i]) { |
Line 6700 sub scantron_validate_doublebubble {
|
Line 6754 sub scantron_validate_doublebubble {
|
=cut |
=cut |
|
|
sub scantron_get_maxbubble { |
sub scantron_get_maxbubble { |
|
|
if (defined($env{'form.scantron_maxbubble'}) && |
if (defined($env{'form.scantron_maxbubble'}) && |
$env{'form.scantron_maxbubble'}) { |
$env{'form.scantron_maxbubble'}) { |
&restore_bubble_lines(); |
&restore_bubble_lines(); |
Line 6743 sub scantron_get_maxbubble {
|
Line 6796 sub scantron_get_maxbubble {
|
|
|
|
|
foreach my $part_id (@{$analysis{'parts'}}) { |
foreach my $part_id (@{$analysis{'parts'}}) { |
my ($trash, $part) = split(/\./, $part_id); |
|
|
|
my $lines = $analysis{"$part_id.bubble_lines"}[0]; |
|
|
my $lines = $analysis{"$part_id.bubble_lines"};; |
|
|
# TODO - make this a persistent hash not an array. |
# TODO - make this a persistent hash not an array. |
|
|
Line 7151 sub grading_menu {
|
Line 7204 sub grading_menu {
|
my $probTitle = &Apache::lonnet::gettitle($symb); |
my $probTitle = &Apache::lonnet::gettitle($symb); |
my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle); |
my ($table,undef,$hdgrade) = &showResourceInfo($symb,$probTitle); |
|
|
# |
|
# Define menu data |
|
$env{'form.probTitle'} = &Apache::lonnet::gettitle($symb); |
|
my ($table) = &showResourceInfo($symb,$env{'form.probTitle'}); |
|
$request->print($table); |
$request->print($table); |
my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb), |
my %fields = ('symb'=>&Apache::lonenc::check_encrypt($symb), |
'handgrade'=>$hdgrade, |
'handgrade'=>$hdgrade, |
Line 7184 sub grading_menu {
|
Line 7233 sub grading_menu {
|
$fields{'command'} = 'scantron_selectphase'; |
$fields{'command'} = 'scantron_selectphase'; |
$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); |
$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); |
push (@menu, { url => $url, |
push (@menu, { url => $url, |
name => &mt('Grade Scantron Forms'), |
name => &mt('Grade/Manage Scantron Forms'), |
short_description => |
short_description => |
&mt('')}); |
&mt('')}); |
$fields{'command'} = 'verify'; |
$fields{'command'} = 'verify'; |
$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); |
$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); |
push (@menu, { url => "", |
push (@menu, { url => "", |
jscript => ' onClick="javascript:checkChoice2(document.forms.gradingMenu,\'5\',\'verify\')" ', |
|
name => &mt('Verify Receipt'), |
name => &mt('Verify Receipt'), |
short_description => |
short_description => |
&mt('')}); |
&mt('')}); |
$fields{'command'} = 'manage'; |
|
$url = &Apache::lonhtmlcommon::build_url('/adm/helper/resettimes.helper',\%fields); |
|
push (@menu, { url => $url, |
|
name => &mt('Manage Access Times'), |
|
short_description => |
|
&mt('')}); |
|
$fields{'command'} = 'view'; |
|
$url = &Apache::lonhtmlcommon::build_url('/adm/pickcode',\%fields); |
|
push (@menu, { url => $url, |
|
name => &mt('View Saved CODEs'), |
|
short_description => |
|
&mt('')}); |
|
|
|
# |
# |
# Create the menu |
# Create the menu |
my $Str; |
my $Str; |
Line 7228 sub grading_menu {
|
Line 7263 sub grading_menu {
|
$menudata->{'url'}.'" >'. |
$menudata->{'url'}.'" >'. |
$menudata->{'name'}."</a></h3>\n"; |
$menudata->{'name'}."</a></h3>\n"; |
} else { |
} else { |
$Str .=' <h3><a '. |
$Str .=' <h3><input type="button" value="Verify Receipt" '. |
$menudata->{'jscript'}. |
$menudata->{'jscript'}. |
' href="javascript:checkChoice2(document.forms.gradingMenu,\'5\',\'verify\')" >'. |
' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '. |
$menudata->{'name'}."</a></h3>\n"; |
' /></h3>'; |
$Str .= (' 'x8). |
$Str .= (' 'x8). |
' receipt: '.&Apache::lonnet::recprefix($env{'request.course.id'}). |
' receipt: '.&Apache::lonnet::recprefix($env{'request.course.id'}). |
'-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />'; |
'-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />'; |
Line 7252 sub grading_menu {
|
Line 7287 sub grading_menu {
|
cmdsave = 'submission'; |
cmdsave = 'submission'; |
} |
} |
formname.command.value = cmd; |
formname.command.value = cmd; |
formname.saveState.value = "saveCmd="+cmdsave+":saveSec="+pullDownSelection(formname.section)+ |
|
":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')) { |
formname.submit(); |
return false; |
} |
} else { |
if (val < 7) formname.submit(); |
formname.submit(); |
} |
} |
function checkChoice2(formname,val,cmdx) { |
|
if (val <= 2) { |
|
var cmd = radioSelection(formname.radioChoice); |
|
var cmdsave = cmd; |
|
} else { |
|
cmd = cmdx; |
|
cmdsave = 'submission'; |
|
} |
|
formname.command.value = cmd; |
|
if (val < 5) formname.submit(); |
|
if (val == 5) { |
|
if (!checkReceiptNo(formname,'notOK')) { return false;} |
|
formname.submit(); |
|
} |
} |
if (val < 7) formname.submit(); |
|
} |
} |
|
|
function checkReceiptNo(formname,nospace) { |
function checkReceiptNo(formname,nospace) { |
Line 7294 sub grading_menu {
|
Line 7313 sub grading_menu {
|
</script> |
</script> |
GRADINGMENUJS |
GRADINGMENUJS |
&commonJSfunctions($request); |
&commonJSfunctions($request); |
my $result='<h3> <span class="LC_info">Manual Grading/View Submission</span></h3>'; |
|
$result.=$table; |
|
my (undef,$sections) = &getclasslist('all','0'); |
|
my $savedState = &savedState(); |
|
my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'}); |
|
my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'}); |
|
my $saveSub = ($$savedState{'saveSub'} eq '' ? 'all' : $$savedState{'saveSub'}); |
|
my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'}); |
|
|
|
$result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\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="probTitle" value="'.$probTitle.'" ue="" />'."\n". |
|
'<input type="hidden" name="saveState" value="" />'."\n". |
|
'<input type="hidden" name="gradingMenu" value="1" />'."\n". |
|
'<input type="hidden" name="showgrading" value="yes" />'."\n"; |
|
|
|
$result.='<table width="100%" border="0"><tr><td bgcolor=#777777>'."\n". |
|
'<table width="100%" border="0"><tr bgcolor="#e6ffff"><td colspan="2">'."\n". |
|
' <b>Select a Grading/Viewing Option</b></td></tr>'."\n". |
|
'<tr bgcolor="#ffffe6" valign="top"><td>'."\n"; |
|
|
|
$result.='<table width="100%" border="0">'; |
|
$result.='<tr bgcolor="#ffffe6" valign="top">'."\n"; |
|
$result.='<td><b>'.&mt('Sections').'</b></td>'; |
|
# $result.='<td>Groups</td>'; |
|
$result.='<td><b>'.&mt('Access Status').'</td>'."\n"; |
|
$result.='</tr>'; |
|
$result.='<tr bgcolor="#ffffe6" valign="top"><td>'."\n". |
|
' <select name="section" multiple="multiple" size="3">'."\n"; |
|
if (ref($sections)) { |
|
foreach (sort (@$sections)) { |
|
$result.='<option value="'.$_.'" '. |
|
($saveSec eq $_ ? 'selected="selected"':'').'>'.$_.'</option>'."\n"; |
|
} |
|
} |
|
$result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="selected"' : ''). '>all</option></select> '; |
|
return $Str; |
return $Str; |
} |
} |
|
|
Line 7408 GRADINGMENUJS
|
Line 7390 GRADINGMENUJS
|
$result.='<td><b>'.&mt('Sections').'</b></td>'; |
$result.='<td><b>'.&mt('Sections').'</b></td>'; |
$result.='<td><b>'.&mt('Groups').'</b></td>'; |
$result.='<td><b>'.&mt('Groups').'</b></td>'; |
$result.='<td><b>'.&mt('Access Status').'</td>'."\n"; |
$result.='<td><b>'.&mt('Access Status').'</td>'."\n"; |
|
$result.='<td><b>'.&mt('Submission Status').'</td>'."\n"; |
$result.='</tr>'; |
$result.='</tr>'; |
$result.='<tr bgcolor="#ffffe6" valign="top"><td>'."\n". |
$result.='<tr bgcolor="#ffffe6" valign="top"><td>'."\n". |
' <select name="section" multiple="multiple" size="3">'."\n"; |
' <select name="section" multiple="multiple" size="3">'."\n"; |
Line 7423 GRADINGMENUJS
|
Line 7406 GRADINGMENUJS
|
$result.='</td><td>'."\n"; |
$result.='</td><td>'."\n"; |
$result.=&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,3,undef,'mult'); |
$result.=&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,3,undef,'mult'); |
|
|
$result.='</td></tr>'; |
$result.='</td>'; |
|
$result.='<td><select name="submitonly" size="3">'. |
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="3"><label>'. |
|
'<input type="radio" name="radioChoice" value="submission" '. |
|
($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '.'<b>'.&mt('Current Resource').':</b> '.&mt('For one or more students'). |
|
'</label> <select name="submitonly">'. |
|
'<option value="yes" '. |
'<option value="yes" '. |
($saveSub eq 'yes' ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>'. |
($saveSub eq 'yes' ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option>'. |
'<option value="queued" '. |
'<option value="queued" '. |
Line 7438 GRADINGMENUJS
|
Line 7417 GRADINGMENUJS
|
'<option value="incorrect" '. |
'<option value="incorrect" '. |
($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>'. |
($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option>'. |
'<option value="all" '. |
'<option value="all" '. |
($saveSub eq 'all' ? 'selected="selected"' : '').'>'.&mt('with any status').'</option></select></td></tr>'."\n"; |
($saveSub eq 'all' ? 'selected="selected"' : '').'>'.&mt('with any status').'</option></select></td></tr>'; |
|
|
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'. |
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="3"><label>'. |
|
'<input type="radio" name="radioChoice" value="submission" '. |
|
($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '.'<b>'.&mt('Current Resource').':</b> '.&mt('For one or more students'). |
|
'</label> </td></tr>'."\n"; |
|
|
|
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="3">'. |
'<label><input type="radio" name="radioChoice" value="viewgrades" '. |
'<label><input type="radio" name="radioChoice" value="viewgrades" '. |
($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '. |
($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '. |
'<b>Current Resource:</b> For all students in selected section or course</label></td></tr>'."\n"; |
'<b>Current Resource:</b> For all students in selected section or course</label></td></tr>'."\n"; |
|
|
$result.='<tr bgcolor="#ffffe6" valign="top"><td colspan="2">'. |
$result.='<tr bgcolor="#ffffe6"><td colspan="3"><br />'. |
'<label><input type="radio" name="radioChoice" value="pickStudentPage" '. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="Next->" />'. |
|
'</td></tr>'."\n"; |
|
|
|
|
|
$result.='<tr bgcolor="#ffffe6" valign="top"><td colspan="3">'. |
|
'<br /><label><input type="radio" name="radioChoice" value="pickStudentPage" '. |
($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '. |
($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '. |
'The <b>complete</b> set/page/sequence: For one student</label></td></tr>'."\n"; |
'The <b>complete</b> set/page/sequence/folder: For one student</label></td></tr>'."\n"; |
|
|
$result.='<tr bgcolor="#ffffe6"><td colspan="2"><br />'. |
$result.='<tr bgcolor="#ffffe6"><td colspan="3"><br />'. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="Next->" />'. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="Next->" />'. |
'</td></tr></table>'."\n"; |
'</td></tr></table>'."\n"; |
|
|
Line 7660 function sanitycheck() {
|
Line 7649 function sanitycheck() {
|
<input type="hidden" name="saveState" value="$env{'form.saveState'}" /> |
<input type="hidden" name="saveState" value="$env{'form.saveState'}" /> |
<input type="file" name="upfile" size="50" /> |
<input type="file" name="upfile" size="50" /> |
<br /><label>$type: $selectform</label> |
<br /><label>$type: $selectform</label> |
<br /><label>$attendance: <input type="radio" name="gradingmechanism" value="attendance" $checked{'attendance'} onClick="sanitycheck()" /></label> |
<br /><label><input type="radio" name="gradingmechanism" value="attendance" $checked{'attendance'} onClick="sanitycheck()" />$attendance </label> |
<br /><label>$personnel: <input type="radio" name="gradingmechanism" value="personnel" $checked{'personnel'} onClick="sanitycheck()" /></label> |
<br /><label><input type="radio" name="gradingmechanism" value="personnel" $checked{'personnel'} onClick="sanitycheck()" />$personnel</label> |
<br /><label>$specific: <input type="radio" name="gradingmechanism" value="specific" $checked{'specific'} onClick="sanitycheck()" /></label> |
<br /><label><input type="radio" name="gradingmechanism" value="specific" $checked{'specific'} onClick="sanitycheck()" />$specific </label> |
<input type="text" name="specificid" value="$env{'form.specificid'}" size="20" /> |
<input type="text" name="specificid" value="$env{'form.specificid'}" size="20" /> |
<input type="hidden" name="waschecked" value="$env{'form.gradingmechanism'}" /> |
<input type="hidden" name="waschecked" value="$env{'form.gradingmechanism'}" /> |
<br /><label>$pcorrect: <input type="text" name="pcorrect" size="4" value="$env{'form.pcorrect'}" onChange="sanitycheck()" /></label> |
<br /><label>$pcorrect: <input type="text" name="pcorrect" size="4" value="$env{'form.pcorrect'}" onChange="sanitycheck()" /></label> |
Line 7997 ENDHEADER
|
Line 7986 ENDHEADER
|
|
|
sub handler { |
sub handler { |
my $request=$_[0]; |
my $request=$_[0]; |
|
|
&reset_caches(); |
&reset_caches(); |
if ($env{'browser.mathml'}) { |
if ($env{'browser.mathml'}) { |
&Apache::loncommon::content_type($request,'text/xml'); |
&Apache::loncommon::content_type($request,'text/xml'); |
Line 8093 sub handler {
|
Line 8081 sub handler {
|
} elsif ($command eq 'csvuploadassign' && $perm{'mgr'} ) { |
} elsif ($command eq 'csvuploadassign' && $perm{'mgr'} ) { |
$request->print(&csvuploadassign($request)); |
$request->print(&csvuploadassign($request)); |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
&Apache::lonnet::logthis("Selecting pyhase"); |
|
$request->print(&scantron_selectphase($request)); |
$request->print(&scantron_selectphase($request)); |
} elsif ($command eq 'scantron_warning' && $perm{'mgr'}) { |
} elsif ($command eq 'scantron_warning' && $perm{'mgr'}) { |
$request->print(&scantron_do_warning($request)); |
$request->print(&scantron_do_warning($request)); |