version 1.100, 2003/06/18 17:37:46
|
version 1.117, 2003/07/16 19:28:08
|
Line 41 use Apache::style;
|
Line 41 use Apache::style;
|
use Apache::lonxml; |
use Apache::lonxml; |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon; |
use Apache::loncommon; |
|
use Apache::lonhtmlcommon; |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
use Apache::lonhomework; |
use Apache::lonhomework; |
use Apache::loncoursedata; |
use Apache::loncoursedata; |
Line 49 use Apache::Constants qw(:common);
|
Line 50 use Apache::Constants qw(:common);
|
use String::Similarity; |
use String::Similarity; |
|
|
my %oldessays=(); |
my %oldessays=(); |
|
my %perm=(); |
|
|
# ----- These first few routines are general use routines.---- |
# ----- These first few routines are general use routines.---- |
# |
# |
Line 128 sub getclasslist {
|
Line 130 sub getclasslist {
|
my (undef,undef,$end,$start,$id,$section,$fullname,$status)= |
my (undef,undef,$end,$start,$id,$section,$fullname,$status)= |
@{$classlist->{$_}}; |
@{$classlist->{$_}}; |
# filter students according to status selected |
# filter students according to status selected |
if ($filterlist && $ENV{'form.status'} ne 'Any') { |
if ($filterlist && $ENV{'form.Status'} ne 'Any') { |
if ($ENV{'form.status'} ne $status) { |
if ($ENV{'form.Status'} ne $status) { |
delete ($classlist->{$_}); |
delete ($classlist->{$_}); |
next; |
next; |
} |
} |
} |
} |
$section = ($section ne '' ? $section : 'no'); |
$section = ($section ne '' ? $section : 'no'); |
if ($getsec eq 'all' || $getsec eq $section) { |
if (&canview($section)) { |
$sections{$section}++; |
if ($getsec eq 'all' || $getsec eq $section) { |
$fullnames{$_}=$fullname; |
$sections{$section}++; |
} else { |
$fullnames{$_}=$fullname; |
delete($classlist->{$_}); |
} else { |
} |
delete($classlist->{$_}); |
|
} |
|
} else { |
|
delete($classlist->{$_}); |
|
} |
} |
} |
my %seen = (); |
my %seen = (); |
my @sections = sort(keys(%sections)); |
my @sections = sort(keys(%sections)); |
return ($classlist,\@sections,\%fullnames); |
return ($classlist,\@sections,\%fullnames); |
} |
} |
|
|
#find user domain |
sub canmodify { |
sub finduser { |
my ($sec)=@_; |
my ($name) = @_; |
if ($perm{'mgr'}) { |
my $domain = ''; |
if (!defined($perm{'mgr_section'})) { |
if ( $Apache::grades::viewgrades eq 'F' ) { |
# can modify whole class |
my %classlist=&Apache::lonnet::dump('classlist', |
return 1; |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
} else { |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
if ($sec eq $perm{'mgr_section'}) { |
my (@fields) = grep /^$name:/, keys %classlist; |
#can modify the requested section |
($name, $domain) = split(/:/,$fields[0]); |
return 1; |
return ($name,$domain); |
} else { |
} else { |
# can't modify the request section |
return ($ENV{'user.name'},$ENV{'user.domain'}); |
return 0; |
|
} |
|
} |
} |
} |
|
#can't modify |
|
return 0; |
} |
} |
|
|
#--- Prompts a user to enter a username. |
sub canview { |
sub moreinfo { |
my ($sec)=@_; |
my ($request,$reason) = @_; |
if ($perm{'vgr'}) { |
$request->print("Unable to process request: $reason"); |
if (!defined($perm{'vgr_section'})) { |
if ( $Apache::grades::viewgrades eq 'F' ) { |
# can modify whole class |
$request->print('<form action="/adm/grades" method="post">'."\n"); |
return 1; |
if ($ENV{'form.url'}) { |
} else { |
$request->print('<input type="hidden" name="url" value="'.$ENV{'form.url'}.'" />'."\n"); |
if ($sec eq $perm{'vgr_section'}) { |
} |
#can modify the requested section |
if ($ENV{'form.symb'}) { |
return 1; |
$request->print('<input type="hidden" name="symb" value="'.$ENV{'form.symb'}.'" />'."\n"); |
} else { |
} |
# can't modify the request section |
$request->print('<input type="hidden" name="command" value="'.$ENV{'form.command'}.'" />'."\n"); |
return 0; |
$request->print("Student:".'<input type="text" name="student" value="'.$ENV{'form.student'}.'" />'."<br />\n"); |
} |
$request->print("Domain:".'<input type="text" name="domain" value="'.$ENV{'user.domain'}.'" />'."<br />\n"); |
} |
$request->print('<input type="submit" name="submit" value="ReSubmit" />'."<br />\n"); |
|
$request->print('</form>'); |
|
} |
} |
return ''; |
#can't modify |
|
return 0; |
} |
} |
|
|
#--- Retrieve the grade status of a student for all the parts |
#--- Retrieve the grade status of a student for all the parts |
Line 359 sub listStudents {
|
Line 368 sub listStudents {
|
|
|
$request->print(<<LISTJAVASCRIPT); |
$request->print(<<LISTJAVASCRIPT); |
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
function checkSelect(checkBox) { |
function checkSelect(checkBox) { |
var ctr=0; |
var ctr=0; |
var sense=""; |
var sense=""; |
if (checkBox.length > 1) { |
if (checkBox.length > 1) { |
for (var i=0; i<checkBox.length; i++) { |
for (var i=0; i<checkBox.length; i++) { |
if (checkBox[i].checked) { |
if (checkBox[i].checked) { |
ctr++; |
ctr++; |
} |
} |
} |
} |
sense = "a student or group of students"; |
sense = "a student or group of students"; |
} else { |
} else { |
if (checkBox.checked) { |
if (checkBox.checked) { |
ctr = 1; |
ctr = 1; |
} |
} |
sense = "the student"; |
sense = "the student"; |
} |
} |
if (ctr == 0) { |
if (ctr == 0) { |
alert("Please select "+sense+" before clicking on the $viewgrade button."); |
alert("Please select "+sense+" before clicking on the $viewgrade button."); |
return false; |
return false; |
|
} |
|
document.gradesub.submit(); |
|
} |
|
|
|
function reLoadList(formname) { |
|
if (formname.saveStatusOld.value == pullDownSelection(formname.Status)) {return;} |
|
formname.command.value = 'submission'; |
|
formname.submit(); |
|
} |
|
|
|
function pullDownSelection(selectOne) { |
|
var selection=""; |
|
if (selectOne.length > 1) { |
|
for (var i=0; i<selectOne.length; i++) { |
|
if (selectOne[i].selected) { |
|
return selectOne[i].value; |
|
} |
|
} |
|
} else { |
|
if (selectOne.selected) return selectOne.value; |
|
} |
} |
} |
document.gradesub.submit(); |
|
} |
|
</script> |
</script> |
LISTJAVASCRIPT |
LISTJAVASCRIPT |
|
|
Line 390 LISTJAVASCRIPT
|
Line 418 LISTJAVASCRIPT
|
my $checklastsub = $ENV{'form.handgrade'} eq 'yes' ? '' : 'checked'; |
my $checklastsub = $ENV{'form.handgrade'} eq 'yes' ? '' : 'checked'; |
|
|
my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'."\n". |
my $gradeTable='<form action="/adm/grades" method="post" name="gradesub">'."\n". |
' <b>View Problem: </b><input type="radio" name="vProb" value="no" checked /> no '."\n". |
' <b>View Problem Text: </b><input type="radio" name="vProb" value="no" checked /> no '."\n". |
'<input type="radio" name="vProb" value="yes" /> one student '."\n". |
'<input type="radio" name="vProb" value="yes" /> one student '."\n". |
'<input type="radio" name="vProb" value="all" /> all students <br />'."\n". |
'<input type="radio" name="vProb" value="all" /> all students <br />'."\n". |
' <b>Submissions: </b>'."\n"; |
' <b>Submissions: </b>'."\n"; |
if ($ENV{'form.handgrade'} eq 'yes') { |
if ($ENV{'form.handgrade'} eq 'yes') { |
$gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> handgrade only'."\n"; |
$gradeTable.='<input type="radio" name="lastSub" value="hdgrade" '.$checkhdgrade.' /> handgrade only'."\n"; |
} |
} |
|
|
|
my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'}; |
|
$ENV{'form.Status'} = $saveStatus; |
|
|
$gradeTable.='<input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last sub only'."\n". |
$gradeTable.='<input type="radio" name="lastSub" value="lastonly" '.$checklastsub.' /> last sub only'."\n". |
'<input type="radio" name="lastSub" value="last" /> last sub & parts info'."\n". |
'<input type="radio" name="lastSub" value="last" /> last sub & parts info'."\n". |
'<input type="radio" name="lastSub" value="all" /> all details'."\n". |
'<input type="radio" name="lastSub" value="all" /> all details'."\n". |
Line 409 LISTJAVASCRIPT
|
Line 441 LISTJAVASCRIPT
|
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$ENV{'form.probTitle'}.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'To '.lc($viewgrade).' a submission, click on the check box next to the student\'s name. Then '."\n". |
'<input type="hidden" name="saveStatusOld" value="'.$saveStatus.'" />'."\n"; |
|
|
|
$gradeTable.='<b>Student Status:</b> '. |
|
&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'<br />'; |
|
|
|
$gradeTable.='To '.lc($viewgrade).' a submission, click on the check box next to the student\'s name. Then '."\n". |
'click on the '.$viewgrade.' button. To view the submissions for a group of students, click'."\n". |
'click on the '.$viewgrade.' button. To view the submissions for a group of students, click'."\n". |
' on the check boxes for the group of students.<br />'."\n". |
' on the check boxes for the group of students.<br />'."\n". |
'<input type="hidden" name="command" value="processGroup" />'."\n". |
'<input type="hidden" name="command" value="processGroup" />'."\n"; |
'<input type="button" '."\n". |
$gradeTable.='<input type="button" '."\n". |
'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n". |
'onClick="javascript:checkSelect(this.form.stuinfo);" '."\n". |
'value="'.$viewgrade.'" />'."\n"; |
'value="'.$viewgrade.'" />'."\n"; |
|
|
my (undef,undef,$fullname) = &getclasslist($getsec,$ENV{'form.showgrading'} eq 'yes' ? '1' : '0'); |
my (undef, undef, $fullname) = &getclasslist($getsec,'1'); |
|
|
$gradeTable.='<table border="0"><tr><td bgcolor="#777777">'. |
$gradeTable.='<table border="0"><tr><td bgcolor="#777777">'. |
'<table border="0"><tr bgcolor="#e6ffff">'. |
'<table border="0"><tr bgcolor="#e6ffff">'; |
'<td><b> Select </b></td><td><b> Fullname </b></td>'. |
my $loop = 0; |
'<td><b> Username </b></td><td><b> Domain </b></td>'; |
while ($loop < 2) { |
foreach (sort(@$partlist)) { |
$gradeTable.='<td><b> Select </b></td><td><b> Fullname </b>'. |
$gradeTable.='<td><b> Part '.(split(/_/))[0].' Status </b></td>'; |
'<font color="#999999">(Username)</font> </td>'; |
|
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
|
foreach (sort(@$partlist)) { |
|
$gradeTable.='<td><b> Part '.(split(/_/))[0].' Status </b></td>'; |
|
} |
|
} |
|
$loop++; |
} |
} |
$gradeTable.='</tr>'."\n"; |
$gradeTable.='</tr>'."\n"; |
|
|
my $ctr = 0; |
my $ctr = 0; |
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
foreach my $student (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
my (%status) =&student_gradeStatus($url,$symb,$udom,$uname,$partlist); |
my %status = (); |
my $statusflg = ''; |
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
foreach (keys(%status)) { |
(%status) =&student_gradeStatus($url,$symb,$udom,$uname,$partlist); |
$statusflg = 1 if ($status{$_} ne 'nothing'); |
my $statusflg = ''; |
my ($foo,$partid,$foo1) = split(/\./,$_); |
foreach (keys(%status)) { |
if ($status{'resource.'.$partid.'.submitted_by'} ne '') { |
$statusflg = 1 if ($status{$_} ne 'nothing'); |
$statusflg = ''; |
my ($foo,$partid,$foo1) = split(/\./,$_); |
$gradeTable.='<input type="hidden" name="'. |
if ($status{'resource.'.$partid.'.submitted_by'} ne '') { |
$student.':submitted_by" value="'. |
$statusflg = ''; |
$status{'resource.'.$partid.'.submitted_by'}.'" />'; |
$gradeTable.='<input type="hidden" name="'. |
|
$student.':submitted_by" value="'. |
|
$status{'resource.'.$partid.'.submitted_by'}.'" />'; |
|
} |
} |
} |
|
next if ($statusflg eq '' && $submitonly eq 'yes'); |
} |
} |
next if ($statusflg eq '' && $submitonly eq 'yes'); |
|
|
|
$ctr++; |
$ctr++; |
if ( $Apache::grades::viewgrades eq 'F' ) { |
if ( $perm{'vgr'} eq 'F' ) { |
$gradeTable.='<tr bgcolor="#ffffe6">'. |
$gradeTable.='<tr bgcolor="#ffffe6">' if ($ctr%2 ==1); |
'<td align="center"><input type=checkbox name="stuinfo" value="'. |
$gradeTable.='<td align="center"><input type=checkbox name="stuinfo" value="'. |
$student.':'.$$fullname{$student}.'"></td>'."\n". |
$student.':'.$$fullname{$student}.' "></td>'."\n". |
'<td> '.$$fullname{$student}.' </td>'."\n". |
'<td> '.$$fullname{$student}.' '."\n". |
'<td> '.$uname.' </td>'."\n". |
'<font color="#999999">('.$uname.')</font></td>'."\n"; |
'<td align="middle"> '.$udom.' </td>'."\n"; |
|
|
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
foreach (sort keys(%status)) { |
foreach (sort keys(%status)) { |
next if (/^resource.*?submitted_by$/); |
next if (/^resource.*?submitted_by$/); |
$gradeTable.='<td align="middle"> '.$status{$_}.' </td>'."\n"; |
$gradeTable.='<td align="middle"> '.$status{$_}.' </td>'."\n"; |
|
} |
} |
} |
$gradeTable.='</tr>'."\n"; |
$gradeTable.='</tr>'."\n" if ($ctr%2 ==0); |
} |
} |
} |
} |
|
if ($ctr%2 ==1) { |
|
$gradeTable.='<td> </td><td> </td>'; |
|
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') { |
|
foreach (@$partlist) { |
|
$gradeTable.='<td> </td>'; |
|
} |
|
} |
|
$gradeTable.='</tr>'; |
|
} |
|
|
$gradeTable.='</table></td></tr></table>'. |
$gradeTable.='</table></td></tr></table>'. |
'<input type="button" '. |
'<input type="button" '. |
'onClick="javascript:checkSelect(this.form.stuinfo);" '. |
'onClick="javascript:checkSelect(this.form.stuinfo);" '. |
Line 471 LISTJAVASCRIPT
|
Line 527 LISTJAVASCRIPT
|
$gradeTable='<br /> <font color="red">There are no students currently enrolled.</font>'; |
$gradeTable='<br /> <font color="red">There are no students currently enrolled.</font>'; |
} else { |
} else { |
$gradeTable='<br /> <font color="red">'. |
$gradeTable='<br /> <font color="red">'. |
'No submissions found for this resource for any students. ('.$num_students.' checked for submissions</font><br />'; |
'No submissions found for this resource for any students. ('.$num_students. |
|
' checked for submissions</font><br />'; |
} |
} |
} elsif ($ctr == 1) { |
} elsif ($ctr == 1) { |
$gradeTable =~ s/type=checkbox/type=checkbox checked/; |
$gradeTable =~ s/type=checkbox/type=checkbox checked/; |
Line 1050 sub submission {
|
Line 1107 sub submission {
|
|
|
(my $url=$ENV{'form.url'})=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; |
(my $url=$ENV{'form.url'})=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; |
my ($uname,$udom) = ($ENV{'form.student'},$ENV{'form.userdom'}); |
my ($uname,$udom) = ($ENV{'form.student'},$ENV{'form.userdom'}); |
($uname,$udom) = &finduser($uname) if $udom eq ''; |
my $usec = &Apache::lonnet::getsection($udom,$uname,$ENV{'request.course.id'}); |
$ENV{'form.fullname'} = &get_fullname ($uname,$udom) if $ENV{'form.fullname'} eq ''; |
$ENV{'form.fullname'} = &get_fullname ($uname,$udom) if $ENV{'form.fullname'} eq ''; |
|
|
my $symb=($ENV{'form.symb'} ne '' ? $ENV{'form.symb'} : (&Apache::lonnet::symbread($url))); |
my $symb=($ENV{'form.symb'} ne '' ? $ENV{'form.symb'} : (&Apache::lonnet::symbread($url))); |
if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; } |
if ($symb eq '') { $request->print("Unable to handle ambiguous references:$url:."); return ''; } |
|
|
|
if (!&canview($usec)) { |
|
$request->print('<font color="red">Unable to view requested student.('. |
|
$uname.$udom.$usec.$ENV{'request.course.id'}.')</font>'); |
|
$request->print(&show_grading_menu_form($symb,$url)); |
|
return; |
|
} |
|
|
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); |
|
|
# header info |
# header info |
Line 1162 KEYWORDS
|
Line 1227 KEYWORDS
|
'<table border="0" width=100%><tr bgcolor="#edffff"><td>'."\n"; |
'<table border="0" width=100%><tr bgcolor="#edffff"><td>'."\n"; |
|
|
$result.='<b>Fullname: </b>'.$ENV{'form.fullname'}. |
$result.='<b>Fullname: </b>'.$ENV{'form.fullname'}. |
'<font color="#999999"> Username: '.$uname.'</font>'. |
'<font color="#999999"> Username: '.$uname. |
'<font color="#999999"> Domain: '.$udom.'</font><br />'."\n"; |
($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').'</font><br />'."\n"; |
|
# '<font color="#999999"> Domain: '.$udom.'</font><br />'."\n"; |
$result.='<input type="hidden" name="name'.$counter. |
$result.='<input type="hidden" name="name'.$counter. |
'" value="'.$ENV{'form.fullname'}.'" />'."\n"; |
'" value="'.$ENV{'form.fullname'}.'" />'."\n"; |
|
|
# If this is handgraded, then check for collaborators |
# If this is an essay-response part(handgraded), then check for collaborators |
my @col_fullnames; |
my @col_fullnames; |
my ($classlist,$fullname); |
my ($classlist,$fullname); |
if ($ENV{'form.handgrade'} eq 'yes') { |
if ($ENV{'form.handgrade'} eq 'yes') { |
Line 1249 KEYWORDS
|
Line 1315 KEYWORDS
|
} else { |
} else { |
for my $part (sort keys(%$handgrade)) { |
for my $part (sort keys(%$handgrade)) { |
foreach (@$string) { |
foreach (@$string) { |
my ($partid,$respid) = /^resource\.(\d+)\.(\d+)\.submission/; |
my ($partid,$respid) = /^resource\.(\w+)\.(\w+)\.submission/; |
if ($part eq ($partid.'_'.$respid)) { |
if ($part eq ($partid.'_'.$respid)) { |
my ($ressub,$subval) = split(/:/,$_,2); |
my ($ressub,$subval) = split(/:/,$_,2); |
# Similarity check |
# Similarity check |
Line 1257 KEYWORDS
|
Line 1323 KEYWORDS
|
my ($oname,$odom,$ocrsid,$oessay,$osim)=&most_similar($uname,$udom,$subval); |
my ($oname,$odom,$ocrsid,$oessay,$osim)=&most_similar($uname,$udom,$subval); |
if ($osim) { |
if ($osim) { |
$osim=int($osim*100.0); |
$osim=int($osim*100.0); |
$similar='<hr /><h3><font color="#FF0000">Essay is '.$osim.'% similar to an essay by '.&Apache::loncommon::plainname($oname,$odom). |
$similar='<hr /><h3><font color="#FF0000">Essay is '.$osim. |
|
'% similar to an essay by '.&Apache::loncommon::plainname($oname,$odom). |
'</font></h3><blockquote><i>'. |
'</font></h3><blockquote><i>'. |
&keywords_highlight($oessay).'</i></blockquote><hr />'; |
&keywords_highlight($oessay).'</i></blockquote><hr />'; |
} |
} |
Line 1267 KEYWORDS
|
Line 1334 KEYWORDS
|
($record{"resource.$partid.$respid.uploadedurl"}? |
($record{"resource.$partid.$respid.uploadedurl"}? |
'<a href="'. |
'<a href="'. |
&Apache::lonnet::tokenwrapper($record{"resource.$partid.$respid.uploadedurl"}). |
&Apache::lonnet::tokenwrapper($record{"resource.$partid.$respid.uploadedurl"}). |
'"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> <font color="red" size="1">Like all files provided by users, this file may contain virusses</font><br />':''). |
'"><img src="/adm/lonIcons/unknown.gif" border=0"> File uploaded by student</a> '. |
|
'<font color="red" size="1">Like all files provided by users, '. |
|
'this file may contain virusses</font><br />':''). |
'<b>Answer: </b><blockquote>'. |
'<b>Answer: </b><blockquote>'. |
&keywords_highlight($subval).'</blockquote><br /> '.$similar.'</td></tr>'."\n" |
&keywords_highlight($subval).'</blockquote><br /> '.$similar.'</td></tr>'."\n" |
if ($ENV{'form.lastSub'} eq 'lastonly' || |
if ($ENV{'form.lastSub'} eq 'lastonly' || |
Line 1288 KEYWORDS
|
Line 1357 KEYWORDS
|
} |
} |
|
|
# return if view submission with no grading option |
# return if view submission with no grading option |
if ($ENV{'form.showgrading'} eq '') { |
# if ($ENV{'form.showgrading'} eq '' || (!&canmodify($usec))) { |
|
if (!&canmodify($usec)) { |
$request->print('</td></tr></table></td></tr></table></form>'."\n"); |
$request->print('</td></tr></table></td></tr></table></form>'."\n"); |
$request->print(&show_grading_menu_form($symb,$url)) |
$request->print(&show_grading_menu_form($symb,$url)) |
if (($ENV{'form.command'} eq 'submission') || |
if (($ENV{'form.command'} eq 'submission') || |
Line 1307 KEYWORDS
|
Line 1377 KEYWORDS
|
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 |
$msgfor =~ s/\'/\\'/g; #' stupid emacs - no! javascript |
$result.='<tr><td bgcolor="#ffffff">'."\n". |
$result.='<tr><td bgcolor="#ffffff">'."\n". |
' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
' <a href="javascript:msgCenter(document.SCORE,'.$counter. |
',\''.$msgfor.'\')"; TARGET=_self>'. |
',\''.$msgfor.'\')"; TARGET=_self>'. |
Line 1324 KEYWORDS
|
Line 1394 KEYWORDS
|
my ($partid,$respid) = split(/_/); |
my ($partid,$respid) = split(/_/); |
next if ($seen{$partid} > 0); |
next if ($seen{$partid} > 0); |
$seen{$partid}++; |
$seen{$partid}++; |
next if ($$handgrade{$_} =~ /:no$/); |
# next if ($$handgrade{$_} =~ /:no$/); |
push @partlist,$partid; |
push @partlist,$partid; |
|
|
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); |
$request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record)); |
Line 1432 sub processHandGrade {
|
Line 1502 sub processHandGrade {
|
$ctr++; |
$ctr++; |
next; |
next; |
} |
} |
|
if ($errorflag eq 'not_allowed') { |
|
$request->print("<font color=\"red\">Not allowed to modify grades for $uname:$udom</font>"); |
|
$ctr++; |
|
next; |
|
} |
my $includemsg = $ENV{'form.includemsg'.$ctr}; |
my $includemsg = $ENV{'form.includemsg'.$ctr}; |
my ($subject,$message,$msgstatus) = ('','',''); |
my ($subject,$message,$msgstatus) = ('','',''); |
if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) { |
if ($includemsg =~ /savemsg|newmsg\Q$ctr\E/) { |
Line 1451 sub processHandGrade {
|
Line 1526 sub processHandGrade {
|
if ($ENV{'form.collaborator'.$ctr}) { |
if ($ENV{'form.collaborator'.$ctr}) { |
my (@collaborators) = split(/:/,$ENV{'form.collaborator'.$ctr}); |
my (@collaborators) = split(/:/,$ENV{'form.collaborator'.$ctr}); |
foreach (@collaborators) { |
foreach (@collaborators) { |
&saveHandGrade($request,$url,$symb,$_,$udom,$ctr, |
my ($errorflag,$pts,$wgt) = &saveHandGrade($request,$url,$symb,$_,$udom,$ctr,$ENV{'form.unamedom'.$ctr}); |
$ENV{'form.unamedom'.$ctr}); |
if ($errorflag eq 'not_allowed') { |
if ($message ne '') { |
$request->print("<font color=\"red\">Not allowed to modify grades for $_:$udom</font>"); |
$msgstatus = &Apache::lonmsg::user_normal_msg ($_,$udom, |
next; |
$ENV{'form.msgsub'}, |
} else { |
$message); |
if ($message ne '') { |
|
$msgstatus = &Apache::lonmsg::user_normal_msg ($_,$udom, |
|
$ENV{'form.msgsub'}, |
|
$message); |
|
} |
} |
} |
} |
} |
} |
} |
Line 1589 sub processHandGrade {
|
Line 1668 sub processHandGrade {
|
#---- Save the score and award for each student, if changed |
#---- Save the score and award for each student, if changed |
sub saveHandGrade { |
sub saveHandGrade { |
my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter) = @_; |
my ($request,$url,$symb,$stuname,$domain,$newflg,$submitter) = @_; |
|
my $usec = &Apache::lonnet::getsection($domain,$stuname, |
|
$ENV{'request.course.id'}); |
|
if (!&canmodify($usec)) { return('not_allowed'); } |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$domain,$stuname); |
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$domain,$stuname); |
my %newrecord = (); |
my %newrecord = (); |
my ($pts,$wgt) = ('',''); |
my ($pts,$wgt) = ('',''); |
Line 1646 sub viewgrades_js {
|
Line 1728 sub viewgrades_js {
|
var textbox = eval("document.classgrade.TEXTVAL_"+partid); |
var textbox = eval("document.classgrade.TEXTVAL_"+partid); |
if (point == "textval") { |
if (point == "textval") { |
var point = eval("document.classgrade.TEXTVAL_"+partid+".value"); |
var point = eval("document.classgrade.TEXTVAL_"+partid+".value"); |
if (isNaN(point) || point < 0) { |
if (isNaN(point) || parseFloat(point) < 0) { |
alert("A number equal or greater than 0 is expected. Entered value = "+point); |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
var resetbox = false; |
var resetbox = false; |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
if (radioButton[i].checked) { |
if (radioButton[i].checked) { |
Line 1660 sub viewgrades_js {
|
Line 1742 sub viewgrades_js {
|
} |
} |
return; |
return; |
} |
} |
if (point > weight) { |
if (parseFloat(point) > parseFloat(weight)) { |
var resp = confirm("You entered a value ("+point+ |
var resp = confirm("You entered a value ("+parseFloat(point)+ |
") greater than the weight for the part. Accept?"); |
") greater than the weight for the part. Accept?"); |
if (resp == false) { |
if (resp == false) { |
textbox.value = ""; |
textbox.value = ""; |
Line 1670 sub viewgrades_js {
|
Line 1752 sub viewgrades_js {
|
} |
} |
for (var i=0; i<radioButton.length; i++) { |
for (var i=0; i<radioButton.length; i++) { |
radioButton[i].checked=false; |
radioButton[i].checked=false; |
if (point == i) { |
if (parseFloat(point) == i) { |
radioButton[i].checked=true; |
radioButton[i].checked=true; |
} |
} |
} |
} |
Line 1744 sub viewgrades_js {
|
Line 1826 sub viewgrades_js {
|
var point = textbox.value; |
var point = textbox.value; |
var weight = eval("document.classgrade.weight_"+partid+".value"); |
var weight = eval("document.classgrade.weight_"+partid+".value"); |
|
|
if (isNaN(point) || point < 0) { |
if (isNaN(point) || parseFloat(point) < 0) { |
alert("A number equal or greater than 0 is expected. Entered value = "+point); |
alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point)); |
textbox.value = ""; |
textbox.value = ""; |
return; |
return; |
} |
} |
if (point > weight) { |
if (parseFloat(point) > parseFloat(weight)) { |
var resp = confirm("You entered a value ("+point+ |
var resp = confirm("You entered a value ("+parseFloat(point)+ |
") greater than the weight of the part. Accept?"); |
") greater than the weight of the part. Accept?"); |
if (resp == false) { |
if (resp == false) { |
textbox.value = ""; |
textbox.value = ""; |
Line 1881 sub viewgrades {
|
Line 1963 sub viewgrades {
|
$result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n". |
$result.='</table>'.'</td></tr></table>'.'</td></tr></table>'."\n". |
'<input type="hidden" name="totalparts" value="'.$ctsparts.'" />'; |
'<input type="hidden" name="totalparts" value="'.$ctsparts.'" />'; |
$result.='<input type="button" value="Reset" '. |
$result.='<input type="button" value="Reset" '. |
'onClick="javascript:resetEntry('.$ctsparts.');" TARGET=_self> '; |
'onClick="javascript:resetEntry('.$ctsparts.');" TARGET=_self>'; |
$result.='<input type="button" value="Submit Changes" '. |
# $result.=' <input type="button" value="Submit Changes" name="subButton1'. |
'onClick="javascript:submit();" TARGET=_self />'."\n"; |
# 'onClick="javascript:submit();" TARGET=_self />'."\n"; |
|
|
#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 1897 sub viewgrades {
|
Line 1979 sub viewgrades {
|
} |
} |
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
$result.= '<table border=0><tr><td bgcolor="#777777">'."\n". |
'<table border=0><tr bgcolor="#deffff">'. |
'<table border=0><tr bgcolor="#deffff">'. |
'<td><b>Fullname</b></td><td><b>Username</b></td><td><b>Domain</b></td>'."\n"; |
'<td><b>Fullname</b> <font color="#999999">(Username)</font></td>'."\n"; |
my (@parts) = sort(&getpartlist($url)); |
my (@parts) = sort(&getpartlist($url)); |
foreach my $part (@parts) { |
foreach my $part (@parts) { |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
my $display=&Apache::lonnet::metadata($url,$part.'.display'); |
|
next if ($display =~ /Number of Attempts/); |
if (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); } |
if (!$display) { $display = &Apache::lonnet::metadata($url,$part.'.name'); } |
if ($display =~ /^Partial Credit Factor/) { |
if ($display =~ /^Partial Credit Factor/) { |
my ($partid) = &split_part_type($part); |
my ($partid) = &split_part_type($part); |
Line 1931 sub viewgrades {
|
Line 2014 sub viewgrades {
|
'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='<font color="red">There are no students in section "'.$ENV{'form.section'}.'" with enrollment status "'.$ENV{'form.status'}.'" to modify or grade.</font>'; |
$result='<font color="red">There are no students in section "'.$ENV{'form.section'}. |
|
'" with enrollment status "'.$ENV{'form.Status'}.'" to modify or grade.</font>'; |
} |
} |
$result.=&show_grading_menu_form($symb,$url); |
$result.=&show_grading_menu_form($symb,$url); |
return $result; |
return $result; |
Line 1945 sub viewstudentgrade {
|
Line 2029 sub viewstudentgrade {
|
my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname); |
my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname); |
my $result='<tr bgcolor="#ffffdd"><td>'. |
my $result='<tr bgcolor="#ffffdd"><td>'. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'\')"; TARGET=_self>'.$fullname.'</a>'. |
'\')"; TARGET=_self>'.$fullname.'</a> '. |
'</td><td>'.$uname.'</td><td align="middle">'.$udom.'</td>'."\n"; |
'<font color="#999999">('.$uname.($ENV{'user.domain'} eq $udom ? '' : ':'.$udom).')</font></td>'."\n"; |
foreach my $apart (@$parts) { |
foreach my $apart (@$parts) { |
my ($part,$type) = &split_part_type($apart); |
my ($part,$type) = &split_part_type($apart); |
my $score=$record{"resource.$part.$type"}; |
my $score=$record{"resource.$part.$type"}; |
Line 1971 sub viewstudentgrade {
|
Line 2055 sub viewstudentgrade {
|
if ($status eq 'excused'); |
if ($status eq 'excused'); |
$result.=$optsel; |
$result.=$optsel; |
$result.="</select></td>\n"; |
$result.="</select></td>\n"; |
} else { |
# } else { |
$result.='<input type="hidden" name="'. |
# $result.='<input type="hidden" name="'. |
'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'. |
# 'GD_'.$student.'_'.$part.'_'.$type.'_s" value="'.$score.'" />'. |
"\n"; |
# "\n"; |
$result.='<td align="middle"><input type="text" name="'. |
# $result.='<td align="middle"><input type="text" name="'. |
'GD_'.$student.'_'.$part.'_'.$type.'" '. |
# 'GD_'.$student.'_'.$part.'_'.$type.'" '. |
'value="'.$score.'" size="4" /></td>'."\n"; |
# 'value="'.$score.'" size="4" /></td>'."\n"; |
} |
} |
} |
} |
$result.='</tr>'; |
$result.='</tr>'; |
Line 2053 sub editgrades {
|
Line 2137 sub editgrades {
|
my ($uname,$udom)=split(/_/,$user); |
my ($uname,$udom)=split(/_/,$user); |
my %newrecord; |
my %newrecord; |
my $updateflag = 0; |
my $updateflag = 0; |
|
|
$line .= '<tr bgcolor="#ffffde"><td>'.$uname.' </td><td>'. |
$line .= '<tr bgcolor="#ffffde"><td>'.$uname.' </td><td>'. |
$udom.' </td><td>'. |
$udom.' </td><td>'. |
$$fullname{$usercolon}.' </td>'; |
$$fullname{$usercolon}.' </td>'; |
|
my $usec=$classlist->{"$uname:$udom"}[5]; |
|
if (!&canmodify($usec)) { |
|
my $numcols=scalar(@partid)*(scalar(@parts)-1)*2; |
|
$noupdate.=$line."<td colspan=\"$numcols\"><font color=\"red\">Not allowed to modify student</font></td></tr>"; |
|
next; |
|
} |
foreach (@partid) { |
foreach (@partid) { |
my $old_aw = $ENV{'form.GD_'.$user.'_'.$_.'_awarded_s'}; |
my $old_aw = $ENV{'form.GD_'.$user.'_'.$_.'_awarded_s'}; |
my $old_part_pcr = $old_aw/($weight{$_} ne '0' ? $weight{$_}:1); |
my $old_part_pcr = $old_aw/($weight{$_} ne '0' ? $weight{$_}:1); |
Line 2114 sub editgrades {
|
Line 2203 sub editgrades {
|
} |
} |
} |
} |
if ($noupdate) { |
if ($noupdate) { |
$result .= '<tr bgcolor="#ffffff"><td align="center" colspan="7">No Changes Occured For the Students Below</td></tr>'.$noupdate; |
my $numcols=(scalar(@partid)*(scalar(@parts)-1)*2)+3; |
|
$result .= '<tr bgcolor="#ffffff"><td align="center" colspan="'.$numcols.'">No Changes Occured For the Students Below</td></tr>'.$noupdate; |
} |
} |
$result .= '</table></td></tr></table>'."\n". |
$result .= '</table></td></tr></table>'."\n". |
&show_grading_menu_form ($symb,$url); |
&show_grading_menu_form ($symb,$url); |
Line 2317 CSVFORMJS
|
Line 2407 CSVFORMJS
|
$result.='<tr bgcolor=#ffffe6><td>'."\n"; |
$result.='<tr bgcolor=#ffffe6><td>'."\n"; |
my $upfile_select=&Apache::loncommon::upfile_select_html(); |
my $upfile_select=&Apache::loncommon::upfile_select_html(); |
$result.=<<ENDUPFORM; |
$result.=<<ENDUPFORM; |
<form method="post" enctype="multipart/form-data" action="/adm/grades" name="gradesupload" target="LONcatInfo"> |
<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" /> |
<input type="hidden" name="url" value="$url" /> |
<input type="hidden" name="url" value="$url" /> |
<input type="hidden" name="command" value="csvuploadmap" /> |
<input type="hidden" name="command" value="csvuploadmap" /> |
Line 2396 sub csvuploadassign {
|
Line 2486 sub csvuploadassign {
|
$request->print('<h3>Assigning Grades</h3>'); |
$request->print('<h3>Assigning Grades</h3>'); |
my $courseid=$ENV{'request.course.id'}; |
my $courseid=$ENV{'request.course.id'}; |
my ($classlist) = &getclasslist('all',0); |
my ($classlist) = &getclasslist('all',0); |
|
my @notallowed; |
my @skipped; |
my @skipped; |
my $countdone=0; |
my $countdone=0; |
foreach my $grade (@gradedata) { |
foreach my $grade (@gradedata) { |
Line 2406 sub csvuploadassign {
|
Line 2497 sub csvuploadassign {
|
push(@skipped,"$username:$domain"); |
push(@skipped,"$username:$domain"); |
next; |
next; |
} |
} |
|
my $usec=$classlist->{"$username:$domain"}[5]; |
|
if (!&canmodify($usec)) { |
|
push(@notallowed,"$username:$domain"); |
|
next; |
|
} |
my %grades; |
my %grades; |
foreach my $dest (keys(%fields)) { |
foreach my $dest (keys(%fields)) { |
if ($dest eq 'username' || $dest eq 'domain') { next; } |
if ($dest eq 'username' || $dest eq 'domain') { next; } |
Line 2424 sub csvuploadassign {
|
Line 2520 sub csvuploadassign {
|
} |
} |
$request->print("<br />Stored $countdone students\n"); |
$request->print("<br />Stored $countdone students\n"); |
if (@skipped) { |
if (@skipped) { |
$request->print('<br /><font size="+1"><b>Skipped Students</b></font><br />'); |
$request->print('<p<font size="+1"><b>Skipped Students</b></font></p>'); |
foreach my $student (@skipped) { $request->print("<br />$student"); } |
foreach my $student (@skipped) { $request->print("$student<br />\n"); } |
} |
} |
|
if (@notallowed) { |
|
$request->print('<p><font size="+1" color="red"><b>Students Not Allowed to Modify</b></font></p>'); |
|
foreach my $student (@notallowed) { $request->print("$student<br />\n"); } |
|
} |
|
$request->print("<br />\n"); |
$request->print(&show_grading_menu_form($symb,$url)); |
$request->print(&show_grading_menu_form($symb,$url)); |
return ''; |
return ''; |
} |
} |
Line 2514 LISTJAVASCRIPT
|
Line 2615 LISTJAVASCRIPT
|
$result.='<input type="hidden" name="page" />'."\n". |
$result.='<input type="hidden" name="page" />'."\n". |
'<input type="hidden" name="title" />'."\n"; |
'<input type="hidden" name="title" />'."\n"; |
|
|
$result.=' <b>View Problems: </b><input type="radio" name="vProb" value="no" checked /> no '."\n". |
$result.=' <b>View Problems Text: </b><input type="radio" name="vProb" value="no" checked /> no '."\n". |
'<input type="radio" name="vProb" value="yes" /> yes '."<br>\n"; |
'<input type="radio" name="vProb" value="yes" /> yes '."<br>\n"; |
|
|
$result.=' <b>Submission Details: </b>'. |
$result.=' <b>Submission Details: </b>'. |
Line 2523 LISTJAVASCRIPT
|
Line 2624 LISTJAVASCRIPT
|
'<input type="radio" name="lastSub" value="all" /> all details'."\n"; |
'<input type="radio" name="lastSub" value="all" /> all details'."\n"; |
|
|
$result.='<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
$result.='<input type="hidden" name="section" value="'.$getsec.'" />'."\n". |
|
'<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="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
Line 2567 LISTJAVASCRIPT
|
Line 2669 LISTJAVASCRIPT
|
sub getSymbMap { |
sub getSymbMap { |
my ($request) = @_; |
my ($request) = @_; |
my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', |
my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', |
$ENV{'request.course.fn'}.'_parms.db',1, 1); |
$ENV{'request.course.fn'}.'_parms.db'); |
|
|
my $res = $navmap->firstResource(); # temp resource to access constants |
|
$navmap->init(); |
$navmap->init(); |
|
|
# End navmap using boilerplate |
|
|
|
my $iterator = $navmap->getIterator(undef, undef, undef, 1); |
|
my $depth = 1; |
|
$iterator->next(); # ignore first BEGIN_MAP |
|
my $curRes = $iterator->next(); |
|
|
|
my %symbx = (); |
my %symbx = (); |
my @titles = (); |
my @titles = (); |
my $minder=0; |
my $minder = 0; |
while ($depth > 0) { |
|
if ($curRes == $iterator->BEGIN_MAP()) {$depth++;} |
|
if ($curRes == $iterator->END_MAP()) { $depth--; } |
|
|
|
if (ref($curRes) && $curRes->is_map()) { |
# Gather every sequence that has problems. |
my ($mapUrl, $id, $resUrl) = split(/___/, $curRes->symb()); # check map contains at least one problem |
my @sequences = $navmap->retrieveResources(undef, sub { shift->is_map(); }, 1); |
my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps |
for my $sequence ($navmap->getById('0.0'), @sequences) { |
|
if ($navmap->hasResource($sequence, sub { shift->is_problem(); }, 0) ) { |
my $mapiterator = $navmap->getIterator($map->map_start(), |
my $title = $minder.'.'.$sequence->compTitle(); |
$map->map_finish()); |
push @titles, $title; # minder in case two titles are identical |
|
$symbx{$title} = $sequence->symb(); |
my $mapdepth = 1; |
$minder++; |
my $countProblems = 0; |
} |
$mapiterator->next(); # skip the first BEGIN_MAP |
|
my $mapcurRes = $mapiterator->next(); # for "current resource" |
|
my $ctr=0; |
|
while ($mapdepth > 0) { |
|
if($mapcurRes == $mapiterator->BEGIN_MAP) { $mapdepth++; } |
|
if($mapcurRes == $mapiterator->END_MAP) { $mapdepth--; } |
|
|
|
if (ref($mapcurRes) && $mapcurRes->is_problem() && !$mapcurRes->randomout) { |
|
$countProblems++; |
|
} |
|
$mapcurRes = $mapiterator->next(); |
|
} |
|
if ($countProblems > 0) { |
|
my $title = $curRes->compTitle(); |
|
push @titles,$minder.'.'.$title; # minder, just in case two titles are identical |
|
$symbx{$minder.'.'.$title} = $curRes->symb(); |
|
$minder++; |
|
} |
|
} |
|
$curRes = $iterator->next(); |
|
} |
} |
|
|
$navmap->untieHashes(); |
$navmap->untieHashes(); |
Line 2631 sub displayPage {
|
Line 2701 sub displayPage {
|
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 $pageTitle = $ENV{'form.page'}; |
my $pageTitle = $ENV{'form.page'}; |
my (undef,undef,$fullname) = &getclasslist($getsec,'1'); |
my ($classlist,undef,$fullname) = &getclasslist($getsec,'1'); |
my ($uname,$udom) = split(/:/,$ENV{'form.student'}); |
my ($uname,$udom) = split(/:/,$ENV{'form.student'}); |
|
my $usec=$classlist->{$ENV{'form.student'}}[5]; |
|
if (!&canview($usec)) { |
|
$request->print('<font color="red">Unable to view requested student.('.$ENV{'form.student'}.')</font>'); |
|
$request->print(&show_grading_menu_form($symb,$url)); |
|
return; |
|
} |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
$result.='<h3> Student: '.$$fullname{$ENV{'form.student'}}. |
$result.='<h3> Student: '.$$fullname{$ENV{'form.student'}}. |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
Line 2668 sub displayPage {
|
Line 2743 sub displayPage {
|
'<td align="center"><b> No </b></td>'. |
'<td align="center"><b> No </b></td>'. |
'<td><b> '.($ENV{'form.vProb'} eq 'no' ? 'Title' : 'Problem View').'/Grade</b></td></tr>'; |
'<td><b> '.($ENV{'form.vProb'} eq 'no' ? 'Title' : 'Problem View').'/Grade</b></td></tr>'; |
|
|
my ($depth,$ctr,$question) = (1,0,1); |
my ($depth,$question) = (1,1); |
$iterator->next(); # skip the first BEGIN_MAP |
$iterator->next(); # skip the first BEGIN_MAP |
my $curRes = $iterator->next(); # for "current resource" |
my $curRes = $iterator->next(); # for "current resource" |
while ($depth > 0 && $ctr < 100) { # ctr, just in case it never gets out of loop |
while ($depth > 0) { |
if($curRes == $iterator->BEGIN_MAP) { $depth++; } |
if($curRes == $iterator->BEGIN_MAP) { $depth++; } |
if($curRes == $iterator->END_MAP) { $depth--; } |
if($curRes == $iterator->END_MAP) { $depth--; } |
|
|
Line 2685 sub displayPage {
|
Line 2760 sub displayPage {
|
if ($ENV{'form.vProb'} eq 'yes') { |
if ($ENV{'form.vProb'} eq 'yes') { |
$studentTable.=&show_problem($request,$symbx,$uname,$udom,1); |
$studentTable.=&show_problem($request,$symbx,$uname,$udom,1); |
} else { |
} else { |
my $companswer = &Apache::loncommon::get_student_answers( |
my $companswer = &Apache::loncommon::get_student_answers($symbx,$uname,$udom,$ENV{'request.course.id'}); |
$symbx,$uname,$udom,$ENV{'request.course.id'}); |
|
$companswer =~ s|<form(.*?)>||g; |
$companswer =~ s|<form(.*?)>||g; |
$companswer =~ s|</form>||g; |
$companswer =~ s|</form>||g; |
|
|
# while ($companswer =~ /(<a href\=\"javascript:newWindow.*?Script Vars<\/a>)/s) { #<a href="javascript:newWindow</a> |
# while ($companswer =~ /(<a href\=\"javascript:newWindow.*?Script Vars<\/a>)/s) { #<a href="javascript:newWindow</a> |
# $request->print('match='.$1.'<br>'); |
# $companswer =~ s/$1/ /ms; |
# $companswer =~ s/$1/ /s; |
# $request->print('match='.$1."<br>\n"); |
# } |
# } |
# $companswer =~ s/<table border=\"1\">/<table border=\"0\">/g; |
# $companswer =~ s|<table border=\"1\">|<table border=\"0\">|g; |
$studentTable.=' <b>'.$title.'</b> <br> <b>Correct answer:</b><br>'.$companswer; |
$studentTable.=' <b>'.$title.'</b> <br> <b>Correct answer:</b><br>'.$companswer; |
} |
} |
|
|
my %record = &Apache::lonnet::restore($symbx,$ENV{'request.course.id'},$udom,$uname); |
my %record = &Apache::lonnet::restore($symbx,$ENV{'request.course.id'},$udom,$uname); |
|
|
if ($ENV{'form.lastSub'} eq 'datesub') { |
if ($ENV{'form.lastSub'} eq 'datesub') { |
if ($record{'version'} eq '') { |
if ($record{'version'} eq '') { |
$studentTable.='<br /> <font color="red">No recorded submission for this problem</font><br />'; |
$studentTable.='<br /> <font color="red">No recorded submission for this problem</font><br />'; |
Line 2709 sub displayPage {
|
Line 2781 sub displayPage {
|
'<td><b>Date/Time</b></td>'. |
'<td><b>Date/Time</b></td>'. |
'<td><b>Submission</b></td>'. |
'<td><b>Submission</b></td>'. |
'<td><b>Status </b></td></tr>'; |
'<td><b>Status </b></td></tr>'; |
|
my %responseType = (); |
|
foreach my $partid (@{$parts}) { |
|
$responseType{$partid} = $curRes->responseType($partid); |
|
} |
my ($version); |
my ($version); |
for ($version=1;$version<=$record{'version'};$version++) { |
for ($version=1;$version<=$record{'version'};$version++) { |
my $timestamp = scalar(localtime($record{$version.':timestamp'})); |
my $timestamp = scalar(localtime($record{$version.':timestamp'})); |
Line 2718 sub displayPage {
|
Line 2794 sub displayPage {
|
foreach my $partid (@{$parts}) { |
foreach my $partid (@{$parts}) { |
my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys; |
my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys; |
next if ($record{"$version:resource.$partid.solved"} eq ''); |
next if ($record{"$version:resource.$partid.solved"} eq ''); |
# next if ($record{"$version:resource.$partid.award"} eq 'APPROX_ANS' && |
|
# $record{"$version:resource.$partid.solved"} eq ''); |
|
$displaySub[0].=(exists $record{$version.':'.$matchKey[0]}) ? |
$displaySub[0].=(exists $record{$version.':'.$matchKey[0]}) ? |
'<b>Part '.$partid.' '. |
'<b>Part '.$partid.' '. |
($record{"$version:resource.$partid.tries"} eq '' ? 'Trial not counted' : |
($record{"$version:resource.$partid.tries"} eq '' ? 'Trial not counted' : |
'Trial '.$record{"$version:resource.$partid.tries"}).'</b> '. |
'Trial '.$record{"$version:resource.$partid.tries"}).'</b> '. |
$record{$version.':'.$matchKey[0]}.'<br />' : ''; |
&cleanRecord($record{$version.':'.$matchKey[0]},$responseType{$partid}).'<br />' : ''; |
$displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ? |
$displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ? |
'<b>Part '.$partid.'</b> '. |
'<b>Part '.$partid.'</b> '. |
$record{"$version:resource.$partid.award"}.'/'. |
$record{"$version:resource.$partid.award"}.'/'. |
Line 2746 sub displayPage {
|
Line 2820 sub displayPage {
|
'','.submission'); |
'','.submission'); |
|
|
} |
} |
|
if (&canmodify($usec)) { |
foreach my $partid (@{$parts}) { |
foreach my $partid (@{$parts}) { |
$studentTable.=&gradeBox($request,$symbx,$uname,$udom,$question,$partid,\%record); |
$studentTable.=&gradeBox($request,$symbx,$uname,$udom,$question,$partid,\%record); |
$studentTable.='<input type="hidden" name="q_'.$question.'" value="'.$partid.'" />'."\n"; |
$studentTable.='<input type="hidden" name="q_'.$question.'" value="'.$partid.'" />'."\n"; |
$question++; |
$question++; |
|
} |
} |
} |
$studentTable.='</td></tr>'; |
$studentTable.='</td></tr>'; |
|
|
} |
} |
$curRes = $iterator->next(); |
$curRes = $iterator->next(); |
$ctr++; |
|
} |
} |
|
|
$navmap->untieHashes(); |
$navmap->untieHashes(); |
Line 2771 sub displayPage {
|
Line 2845 sub displayPage {
|
return ''; |
return ''; |
} |
} |
|
|
|
sub cleanRecord { |
|
my ($answer,$response) = @_; |
|
if ($response eq 'option') { |
|
my (@IDs,@ans); |
|
foreach (split(/\&/,&Apache::lonnet::unescape($answer))) { |
|
my ($optionID,$ans) = split(/=/); |
|
push @IDs,$optionID.'</font>'; |
|
push @ans,$ans; |
|
} |
|
my $grayFont = '<font color="#999999">'; |
|
return '<table border="1">'. |
|
'<tr valign="top"><td>Answer</td><td>'. |
|
(join '</td><td>',@ans).'</td></tr>'. |
|
'<tr><td>'.$grayFont.'Option ID</font></td><td>'.$grayFont. |
|
(join '</td><td>'.$grayFont,@IDs).'</font></td></tr>'. |
|
'</table>'; |
|
} |
|
return $answer; |
|
} |
|
|
sub updateGradeByPage { |
sub updateGradeByPage { |
my ($request) = shift; |
my ($request) = shift; |
|
|
Line 2778 sub updateGradeByPage {
|
Line 2872 sub updateGradeByPage {
|
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 $pageTitle = $ENV{'form.page'}; |
my $pageTitle = $ENV{'form.page'}; |
my (undef,undef,$fullname) = &getclasslist($getsec,'1'); |
my ($classlist,undef,$fullname) = &getclasslist($getsec,'1'); |
my ($uname,$udom) = split(/:/,$ENV{'form.student'}); |
my ($uname,$udom) = split(/:/,$ENV{'form.student'}); |
|
my $usec=$classlist->{$ENV{'form.student'}}[5]; |
|
if (!&canmodify($usec)) { |
|
$request->print('<font color="red">Unable to modify requested student.('.$ENV{'form.student'}.'</font>'); |
|
$request->print(&show_grading_menu_form($ENV{'form.symb'},$ENV{'form.url'})); |
|
return; |
|
} |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
my $result='<h3><font color="#339933"> '.$ENV{'form.title'}.'</font></h3>'; |
$result.='<h3> Student: '.$$fullname{$ENV{'form.student'}}. |
$result.='<h3> Student: '.$$fullname{$ENV{'form.student'}}. |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
'<font color="#999999"> ('.$uname.($udom eq $cdom ? '':':'.$udom).')</font></h3>'."\n"; |
Line 2804 sub updateGradeByPage {
|
Line 2903 sub updateGradeByPage {
|
|
|
$iterator->next(); # skip the first BEGIN_MAP |
$iterator->next(); # skip the first BEGIN_MAP |
my $curRes = $iterator->next(); # for "current resource" |
my $curRes = $iterator->next(); # for "current resource" |
my ($depth,$ctr,$question,$changeflag)= (1,0,1,0); |
my ($depth,$question,$changeflag)= (1,1,0); |
while ($depth > 0 && $ctr < 100) { # ctr, just in case it never gets out of loop |
while ($depth > 0) { |
if($curRes == $iterator->BEGIN_MAP) { $depth++; } |
if($curRes == $iterator->BEGIN_MAP) { $depth++; } |
if($curRes == $iterator->END_MAP) { $depth--; } |
if($curRes == $iterator->END_MAP) { $depth--; } |
|
|
Line 2867 sub updateGradeByPage {
|
Line 2966 sub updateGradeByPage {
|
|
|
} |
} |
$curRes = $iterator->next(); |
$curRes = $iterator->next(); |
$ctr++; |
|
} |
} |
|
|
$navmap->untieHashes(); |
$navmap->untieHashes(); |
Line 3234 sub gradingmenu {
|
Line 3332 sub gradingmenu {
|
|
|
$request->print(<<GRADINGMENUJS); |
$request->print(<<GRADINGMENUJS); |
<script type="text/javascript" language="javascript"> |
<script type="text/javascript" language="javascript"> |
function checkChoice(formname) { |
function checkChoice(formname,val,cmdx) { |
var cmd = formname.command; |
if (val <= 2) { |
formname.saveState.value = "saveCmd="+radioSelection(cmd)+":saveSec="+pullDownSelection(formname.section)+ |
var cmd = radioSelection(formname.radioChoice); |
":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.status); |
} else { |
if (cmd[0].checked || cmd[1].checked || cmd[2].checked || cmd[3].checked || cmd[4].checked) formname.submit(); |
cmd = cmdx; |
if (cmd[5].checked) { |
} |
|
formname.command.value = cmd; |
|
formname.saveState.value = "saveCmd="+cmd+":saveSec="+pullDownSelection(formname.section)+ |
|
":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.Status); |
|
if (val < 5) formname.submit(); |
|
if (val == 5) { |
if (!checkReceiptNo(formname,'notOK')) { return false;} |
if (!checkReceiptNo(formname,'notOK')) { return false;} |
formname.submit(); |
formname.submit(); |
} |
} |
Line 3256 sub gradingmenu {
|
Line 3359 sub gradingmenu {
|
formname.receipt.focus(); |
formname.receipt.focus(); |
return false; |
return false; |
} |
} |
formname.command[5].checked = true; |
|
return true; |
return true; |
} |
} |
|
|
Line 3300 GRADINGMENUJS
|
Line 3402 GRADINGMENUJS
|
$resptype = $responsetype; |
$resptype = $responsetype; |
$hdgrade = $handgrade if ($handgrade eq 'yes'); |
$hdgrade = $handgrade if ($handgrade eq 'yes'); |
$result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'. |
$result.='<tr><td><b>Part </b>'.(split(/_/))[0].'</td>'. |
'<td><b>Type: </b>'.$responsetype.'</td>'. |
'<td><b>Type: </b>'.$responsetype.'</td></tr>'; |
'<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>'; |
# '<td><b>Handgrade: </b>'.$handgrade.'</font></td></tr>'; |
} |
} |
$result.='</table>'."\n"; |
$result.='</table>'."\n"; |
|
|
Line 3318 GRADINGMENUJS
|
Line 3420 GRADINGMENUJS
|
'<input type="hidden" name="response" value="'.$resptype.'" />'."\n". |
'<input type="hidden" name="response" value="'.$resptype.'" />'."\n". |
'<input type="hidden" name="handgrade" value="'.$hdgrade.'" />'."\n". |
'<input type="hidden" name="handgrade" value="'.$hdgrade.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$probTitle.'" />'."\n". |
'<input type="hidden" name="probTitle" value="'.$probTitle.'" />'."\n". |
|
'<input type="hidden" name="command" value="" />'."\n". |
'<input type="hidden" name="saveState" value="" />'."\n". |
'<input type="hidden" name="saveState" value="" />'."\n". |
'<input type="hidden" name="showgrading" value="yes" />'."\n"; |
'<input type="hidden" name="showgrading" value="yes" />'."\n"; |
|
|
$result.='<table width=100% border=0><tr><td bgcolor=#777777>'."\n". |
$result.='<table width="100%" border=0><tr><td bgcolor=#777777>'."\n". |
'<table width=100% border=0><tr bgcolor="#e6ffff"><td>'."\n". |
'<table width=100% border=0><tr bgcolor="#e6ffff"><td colspan="2">'."\n". |
' <b>Select a Grading/Viewing Option</b></td></tr>'."\n". |
' <b>Select a Grading/Viewing Option</b></td></tr>'."\n". |
'<tr bgcolor=#ffffe6><td>'."\n"; |
'<tr bgcolor="#ffffe6" valign="top"><td>'."\n"; |
|
|
$result.='<table width=100% border=0>'. |
$result.='<table width="100%" border=0>'; |
'<tr bgcolor="#ffffe6" valign="top"><td colspan="2">'. |
$result.='<tr bgcolor="#ffffe6" valign="top"><td>'."\n". |
'<input type="radio" name="command" value="pickStudentPage" '. |
' Section: <select name="section">'."\n"; |
|
if (ref($sections)) { |
|
foreach (sort (@$sections)) {$result.='<option value="'.$_.'" '. |
|
($saveSec eq $_ ? 'selected="on"' : '').'>'.$_.'</option>'."\n";} |
|
} |
|
$result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="on"' : ''). '>all</select> '; |
|
|
|
$result.='Student Status:</b>'.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,undef); |
|
|
|
if (ref($sections)) { |
|
$result.=' (Section "no" implies the students were not assigned a section.)<br />' |
|
if (grep /no/,@$sections); |
|
} |
|
$result.='</td></tr>'; |
|
|
|
$result.='<tr bgcolor="#ffffe6" valign="top"><td>'. |
|
'<input type="radio" name="radioChoice" value="pickStudentPage" '. |
($saveCmd eq 'pickStudentPage' ? 'checked' : '').'> '. |
($saveCmd eq 'pickStudentPage' ? 'checked' : '').'> '. |
'Handgrade/View Submission for a student by page/sequence</td></tr>'."\n". |
'One student for whole page/sequence/folder</td></tr>'."\n"; |
|
|
'<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'. |
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'. |
'<input type="radio" name="command" value="viewgrades" '. |
'<input type="radio" name="radioChoice" value="viewgrades" '. |
($saveCmd eq 'viewgrades' ? 'checked' : '').'> '. |
($saveCmd eq 'viewgrades' ? 'checked' : '').'> '. |
'Grade by section or class</td></tr>'."\n". |
'All students in section/course for current resource</td></tr>'."\n"; |
|
|
'<tr bgcolor="#ffffe6"valign="top"><td><input type="radio" name="command" value="submission" '. |
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'. |
($saveCmd eq 'submission' ? 'checked' : '').'> '. |
'<input type="radio" name="radioChoice" value="submission" '. |
($hdgrade eq 'yes' ? 'View/Grade essay response of' : 'View'). |
($saveCmd eq 'submission' ? 'checked' : '').'> '.'One or more students for current resource'. |
' an individual student </td>'."\n". |
'<br /> -->For students who has: '. |
'<td>--> For students who has: '. |
|
'<input type="radio" name="submitonly" value="yes" '. |
'<input type="radio" name="submitonly" value="yes" '. |
($saveSub eq 'yes' ? 'checked' : '').' /> submitted'. |
($saveSub eq 'yes' ? 'checked' : '').' /> submitted'. |
'<input type="radio" name="submitonly" value="all" '. |
'<input type="radio" name="submitonly" value="all" '. |
($saveSub eq 'all' ? 'checked' : '').' /> everybody</td></tr>'."\n". |
($saveSub eq 'all' ? 'checked' : '').' /> everybody</td></tr>'."\n"; |
|
|
|
$result.='<tr bgcolor="#ffffe6"><td><br />'. |
|
'<input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="View/Grade/Regrade" />'. |
|
'</td></tr></table>'."\n"; |
|
|
|
$result.='</td><td valign="top">'; |
|
|
'<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'. |
$result.='<table width="100%" border=0>'; |
'<input type="radio" name="command" value="csvform" '. |
$result.='<tr bgcolor="#ffffe6"><td>'. |
($saveCmd eq 'csvform' ? 'checked' : '').'> '. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'3\',\'csvform\');" value="Upload" />'. |
'Upload scores from file</td></tr>'."\n"; |
' scores from file </td></tr>'."\n"; |
|
|
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'. |
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'. |
'<input type="radio" name="command" value="scantron_selectphase" '. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'4\',\'scantron_selectphase\');'. |
($saveCmd eq 'scantron_selectphase' ? 'checked="on"' : '').' /> '. |
'" value="Grade" /> scantron forms</td></tr>'."\n"; |
'Grade scantron forms</td></tr>'."\n"; |
|
|
|
if ((&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) && ($symb)) { |
if ((&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) && ($symb)) { |
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'. |
$result.='<tr bgcolor="#ffffe6"valign="top"><td>'. |
'<input type="radio" name="command" value="verify" onChecked="javascript:this.form.receipt.focus()" '. |
'<input type="button" onClick="javascript:checkChoice(this.form,\'5\',\'verify\');" value="Verify" />'. |
($saveCmd eq 'verify' ? 'checked' : '').'> '. |
' submission Receipt no: '.unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}). |
'Verify a submission receipt issued by this server</td>'. |
|
'<td>--> Receipt no: '.unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}). |
|
'-<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\')">'. |
'</td></tr>'."\n"; |
'</td></tr>'."\n"; |
} |
} |
|
|
$result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2"><br />'."\n". |
$result.='</form></td></tr></table>'."\n". |
' Select section: <select name="section">'."\n"; |
|
if (ref($sections)) { |
|
foreach (sort (@$sections)) {$result.='<option value="'.$_.'" '. |
|
($saveSec eq $_ ? 'selected="on"' : '').'>'.$_.'</option>'."\n";} |
|
} |
|
$result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="on"' : ''). '>all</select> '; |
|
|
|
$result.='Student Status:</b><select name="status">'. |
|
'<option value="Active" '.($saveStatus eq 'Active' ? 'selected' : '').'>Active</option>'. |
|
'<option value="Expired" '.($saveStatus eq 'Expired' ? 'selected' : '').'>Expired</option>'. |
|
'<option value="Any" '.($saveStatus eq 'Any' ? 'selected' : '').'>Any</option>'. |
|
'</select>'; |
|
|
|
$result.=' <font color="red">(Applies to the first three options only.)</font>'."\n"; |
|
|
|
if (ref($sections)) { |
|
$result.=' (Section "no" implies the students were not assigned a section.)<br />' |
|
if (grep /no/,@$sections); |
|
} |
|
$result.='</td></tr>'; |
|
|
|
$result.='<tr bgcolor="#ffffe6"><td colspan="2"><br />'. |
|
'<input type="button" onClick="javascript:checkChoice(this.form);" value="View/Grade" />'."\n". |
|
'</form></td></tr></table>'."\n". |
|
'</td></tr></table>'."\n". |
'</td></tr></table>'."\n". |
'</td></tr></table>'."\n"; |
'</td></tr></table>'."\n"; |
return $result; |
return $result; |
Line 3399 GRADINGMENUJS
|
Line 3496 GRADINGMENUJS
|
|
|
sub handler { |
sub handler { |
my $request=$_[0]; |
my $request=$_[0]; |
|
|
|
undef(%perm); |
if ($ENV{'browser.mathml'}) { |
if ($ENV{'browser.mathml'}) { |
$request->content_type('text/xml'); |
$request->content_type('text/xml'); |
} else { |
} else { |
Line 3444 sub handler {
|
Line 3542 sub handler {
|
} |
} |
} |
} |
} else { |
} else { |
$Apache::grades::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}); |
if (!($perm{'vgr'}=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}))) { |
if ($command eq 'submission') { |
if ($perm{'vgr'}=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'})) { |
|
$perm{'vgr_section'}=$ENV{'request.course.sec'}; |
|
} else { |
|
delete($perm{'vgr'}); |
|
} |
|
} |
|
if (!($perm{'mgr'}=&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}))) { |
|
if ($perm{'mgr'}=&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'})) { |
|
$perm{'mgr_section'}=$ENV{'request.course.sec'}; |
|
} else { |
|
delete($perm{'mgr'}); |
|
} |
|
} |
|
|
|
if ($command eq 'submission' && $perm{'vgr'}) { |
($ENV{'form.student'} eq '' ? &listStudents($request) : &submission($request,0,0)); |
($ENV{'form.student'} eq '' ? &listStudents($request) : &submission($request,0,0)); |
} elsif ($command eq 'pickStudentPage') { |
} elsif ($command eq 'pickStudentPage' && $perm{'vgr'}) { |
&pickStudentPage($request); |
&pickStudentPage($request); |
} elsif ($command eq 'displayPage') { |
} elsif ($command eq 'displayPage' && $perm{'vgr'}) { |
&displayPage($request); |
&displayPage($request); |
} elsif ($command eq 'gradeByPage') { |
} elsif ($command eq 'gradeByPage' && $perm{'mgr'}) { |
&updateGradeByPage($request); |
&updateGradeByPage($request); |
} elsif ($command eq 'processGroup') { |
} elsif ($command eq 'processGroup' && $perm{'vgr'}) { |
&processGroup($request); |
&processGroup($request); |
} elsif ($command eq 'gradingmenu') { |
} elsif ($command eq 'gradingmenu' && $perm{'vgr'}) { |
$request->print(&gradingmenu($request)); |
$request->print(&gradingmenu($request)); |
} elsif ($command eq 'viewgrades') { |
} elsif ($command eq 'viewgrades' && $perm{'vgr'}) { |
$request->print(&viewgrades($request)); |
$request->print(&viewgrades($request)); |
} elsif ($command eq 'handgrade') { |
} elsif ($command eq 'handgrade' && $perm{'mgr'}) { |
$request->print(&processHandGrade($request)); |
$request->print(&processHandGrade($request)); |
} elsif ($command eq 'editgrades') { |
} elsif ($command eq 'editgrades' && $perm{'mgr'}) { |
$request->print(&editgrades($request)); |
$request->print(&editgrades($request)); |
} elsif ($command eq 'verify') { |
} elsif ($command eq 'verify' && $perm{'vgr'}) { |
$request->print(&verifyreceipt($request)); |
$request->print(&verifyreceipt($request)); |
} elsif ($command eq 'csvform') { |
} elsif ($command eq 'csvform' && $perm{'mgr'}) { |
$request->print(&upcsvScores_form($request)); |
$request->print(&upcsvScores_form($request)); |
} elsif ($command eq 'csvupload') { |
} elsif ($command eq 'csvupload' && $perm{'mgr'}) { |
$request->print(&csvupload($request)); |
$request->print(&csvupload($request)); |
} elsif ($command eq 'viewclasslist') { |
} elsif ($command eq 'csvuploadmap' && $perm{'mgr'} ) { |
$request->print(&viewclasslist($request)); |
|
} elsif ($command eq 'csvuploadmap') { |
|
$request->print(&csvuploadmap($request)); |
$request->print(&csvuploadmap($request)); |
} elsif ($command eq 'csvuploadassign') { |
} elsif ($command eq 'csvuploadassign' && $perm{'mgr'}) { |
if ($ENV{'form.associate'} ne 'Reverse Association') { |
if ($ENV{'form.associate'} ne 'Reverse Association') { |
$request->print(&csvuploadassign($request)); |
$request->print(&csvuploadassign($request)); |
} else { |
} else { |
Line 3484 sub handler {
|
Line 3594 sub handler {
|
} |
} |
$request->print(&csvuploadmap($request)); |
$request->print(&csvuploadmap($request)); |
} |
} |
} elsif ($command eq 'scantron_selectphase') { |
} elsif ($command eq 'scantron_selectphase' && $perm{'mgr'}) { |
$request->print(&scantron_selectphase($request)); |
$request->print(&scantron_selectphase($request)); |
} elsif ($command eq 'scantron_process') { |
} elsif ($command eq 'scantron_process' && $perm{'mgr'}) { |
$request->print(&scantron_process_students($request)); |
$request->print(&scantron_process_students($request)); |
} else { |
} elsif ($command) { |
$request->print("Unknown action: $command:"); |
$request->print("Access Denied"); |
} |
} |
} |
} |
&send_footer($request); |
&send_footer($request); |