version 1.88, 2003/04/30 20:16:02
|
version 1.103, 2003/06/20 20:13:18
|
Line 49 use Apache::Constants qw(:common);
|
Line 49 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 130 sub getclasslist {
|
Line 131 sub getclasslist {
|
# 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) { |
|
Apache->request->print("<p>removed</p>"); |
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 466 LISTJAVASCRIPT
|
Line 475 LISTJAVASCRIPT
|
'onClick="javascript:checkSelect(this.form.stuinfo);" '. |
'onClick="javascript:checkSelect(this.form.stuinfo);" '. |
'value="'.$viewgrade.'" /></form>'."\n"; |
'value="'.$viewgrade.'" /></form>'."\n"; |
if ($ctr == 0) { |
if ($ctr == 0) { |
$gradeTable='<br /> <font color="red">'. |
my $num_students=(scalar(keys(%$fullname))); |
'No submission found for this resource.</font><br />'; |
if ($num_students eq 0) { |
|
$gradeTable='<br /> <font color="red">There are no students currently enrolled.</font>'; |
|
} else { |
|
$gradeTable='<br /> <font color="red">'. |
|
'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 1045 sub submission {
|
Line 1059 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 ''; |
|
$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))); |
Line 1302 KEYWORDS
|
Line 1316 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; #\' |
$msgfor =~ s/\'/\\'/g; #' stupid emacs |
$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 1913 sub viewgrades {
|
Line 1927 sub viewgrades {
|
my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1'); |
my (undef,undef,$fullname) = &getclasslist($ENV{'form.section'},'1'); |
my $ctr = 0; |
my $ctr = 0; |
foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
foreach (sort {lc($$fullname{$a}) cmp lc($$fullname{$b}) } keys %$fullname) { |
my ($uname,$udom) = split(/:/); |
my $uname = $_; |
|
$uname=~s/:/_/; |
$result.='<input type="hidden" name="ctr'.$ctr.'" value="'.$uname.'" />'."\n"; |
$result.='<input type="hidden" name="ctr'.$ctr.'" value="'.$uname.'" />'."\n"; |
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'}, |
$result.=&viewstudentgrade($url,$symb,$ENV{'request.course.id'}, |
$_,$$fullname{$_},\@parts,\%weight); |
$_,$$fullname{$_},\@parts,\%weight); |
Line 1923 sub viewgrades {
|
Line 1938 sub viewgrades {
|
$result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n"; |
$result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n"; |
$result.='<input type="button" value="Submit Changes" '. |
$result.='<input type="button" value="Submit Changes" '. |
'onClick="javascript:submit();" TARGET=_self /></form>'."\n"; |
'onClick="javascript:submit();" TARGET=_self /></form>'."\n"; |
|
if (scalar(%$fullname) eq 0) { |
|
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.=&show_grading_menu_form($symb,$url); |
$result.=&show_grading_menu_form($symb,$url); |
return $result; |
return $result; |
} |
} |
Line 1931 sub viewgrades {
|
Line 1950 sub viewgrades {
|
sub viewstudentgrade { |
sub viewstudentgrade { |
my ($url,$symb,$courseid,$student,$fullname,$parts,$weight) = @_; |
my ($url,$symb,$courseid,$student,$fullname,$parts,$weight) = @_; |
my ($uname,$udom) = split(/:/,$student); |
my ($uname,$udom) = split(/:/,$student); |
|
$student=~s/:/_/; |
my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname); |
my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname); |
my $result='<tr bgcolor="#ffffdd"><td>'. |
my $result='<tr bgcolor="#ffffdd"><td>'. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom. |
Line 1942 sub viewstudentgrade {
|
Line 1962 sub viewstudentgrade {
|
if ($type eq 'awarded') { |
if ($type eq 'awarded') { |
my $pts = $score eq '' ? '' : $score*$$weight{$part}; |
my $pts = $score eq '' ? '' : $score*$$weight{$part}; |
$result.='<input type="hidden" name="'. |
$result.='<input type="hidden" name="'. |
'GD_'.$uname.'_'.$part.'_awarded_s" value="'.$pts.'" />'."\n"; |
'GD_'.$student.'_'.$part.'_awarded_s" value="'.$pts.'" />'."\n"; |
$result.='<td align="middle"><input type="text" name="'. |
$result.='<td align="middle"><input type="text" name="'. |
'GD_'.$uname.'_'.$part.'_awarded" '. |
'GD_'.$student.'_'.$part.'_awarded" '. |
'onChange="javascript:changeSelect(\''.$part.'\',\''.$uname. |
'onChange="javascript:changeSelect(\''.$part.'\',\''.$student. |
'\')" value="'.$pts.'" size="4" /></td>'."\n"; |
'\')" value="'.$pts.'" size="4" /></td>'."\n"; |
} elsif ($type eq 'solved') { |
} elsif ($type eq 'solved') { |
my ($status,$foo)=split(/_/,$score,2); |
my ($status,$foo)=split(/_/,$score,2); |
$status = 'nothing' if ($status eq ''); |
$status = 'nothing' if ($status eq ''); |
$result.='<input type="hidden" name="'.'GD_'.$uname.'_'. |
$result.='<input type="hidden" name="'.'GD_'.$student.'_'. |
$part.'_solved_s" value="'.$status.'" />'."\n"; |
$part.'_solved_s" value="'.$status.'" />'."\n"; |
$result.='<td align="middle"><select name="'. |
$result.='<td align="middle"><select name="'. |
'GD_'.$uname.'_'.$part.'_solved" '. |
'GD_'.$student.'_'.$part.'_solved" '. |
'onChange="javascript:changeOneScore(\''.$part.'\',\''.$uname.'\')" >'."\n"; |
'onChange="javascript:changeOneScore(\''.$part.'\',\''.$student.'\')" >'."\n"; |
my $optsel = '<option selected="on"> </option><option>excused</option>'."\n"; |
my $optsel = '<option selected="on"> </option><option>excused</option>'."\n"; |
$optsel = '<option> </option><option selected="on">excused</option>'."\n" |
$optsel = '<option> </option><option selected="on">excused</option>'."\n" |
if ($status eq 'excused'); |
if ($status eq 'excused'); |
Line 1962 sub viewstudentgrade {
|
Line 1982 sub viewstudentgrade {
|
$result.="</select></td>\n"; |
$result.="</select></td>\n"; |
} else { |
} else { |
$result.='<input type="hidden" name="'. |
$result.='<input type="hidden" name="'. |
'GD_'.$uname.'_'.$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_'.$uname.'_'.$part.'_'.$type.'" '. |
'GD_'.$student.'_'.$part.'_'.$type.'" '. |
'value="'.$score.'" size="4" /></td>'."\n"; |
'value="'.$score.'" size="4" /></td>'."\n"; |
} |
} |
} |
} |
Line 1985 sub editgrades {
|
Line 2005 sub editgrades {
|
$title.='<font size=+1><b>Section: </b>'.$ENV{'form.section'}.'</font>'."\n"; |
$title.='<font size=+1><b>Section: </b>'.$ENV{'form.section'}.'</font>'."\n"; |
my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n"; |
my $result= '<table border="0"><tr><td bgcolor="#777777">'."\n"; |
$result.= '<table border="0"><tr bgcolor="#deffff">'. |
$result.= '<table border="0"><tr bgcolor="#deffff">'. |
'<td rowspan=2><b>Username</b></td><td rowspan=2><b>Fullname</b></td>'."\n"; |
'<td rowspan=2><b>Username</b></td><td rowspan=2><b>Domain</b></td><td rowspan=2><b>Fullname</b></td>'."\n"; |
|
|
my %scoreptr = ( |
my %scoreptr = ( |
'correct' =>'correct_by_override', |
'correct' =>'correct_by_override', |
Line 2033 sub editgrades {
|
Line 2053 sub editgrades {
|
$result .= '</tr><tr bgcolor="#deffff">'; |
$result .= '</tr><tr bgcolor="#deffff">'; |
$result .= $header; |
$result .= $header; |
$result .= '</tr>'."\n"; |
$result .= '</tr>'."\n"; |
|
my $noupdate; |
for ($i=0; $i<$ENV{'form.total'}; $i++) { |
for ($i=0; $i<$ENV{'form.total'}; $i++) { |
|
my $line; |
my $user = $ENV{'form.ctr'.$i}; |
my $user = $ENV{'form.ctr'.$i}; |
|
my $usercolon = $user; |
|
$usercolon =~s/_/:/; |
|
my ($uname,$udom)=split(/_/,$user); |
my %newrecord; |
my %newrecord; |
my $updateflag = 0; |
my $updateflag = 0; |
my @userdom = grep /^$user:/,keys %$classlist; |
|
my (undef,$udom) = split(/:/,$userdom[0]); |
|
|
|
$result .= '<tr bgcolor="#ffffde"><td>'.$user.' </td><td>'. |
$line .= '<tr bgcolor="#ffffde"><td>'.$uname.' </td><td>'. |
$$fullname{$userdom[0]}.' </td>'; |
$udom.' </td><td>'. |
|
$$fullname{$usercolon}.' </td>'; |
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 2062 sub editgrades {
|
Line 2085 sub editgrades {
|
} |
} |
$score = 'excused' if (($ENV{'form.GD_'.$user.'_'.$_.'_solved'} eq 'excused') && |
$score = 'excused' if (($ENV{'form.GD_'.$user.'_'.$_.'_solved'} eq 'excused') && |
($score ne 'excused')); |
($score ne 'excused')); |
$result .= '<td align="center">'.$old_aw.' </td>'. |
$line .= '<td align="center">'.$old_aw.' </td>'. |
'<td align="center">'.$awarded. |
'<td align="center">'.$awarded. |
($score eq 'excused' ? $score : '').' </td>'; |
($score eq 'excused' ? $score : '').' </td>'; |
|
|
Line 2085 sub editgrades {
|
Line 2108 sub editgrades {
|
$newrecord{'resource.'.$part.'regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$newrecord{'resource.'.$part.'regrader'}="$ENV{'user.name'}:$ENV{'user.domain'}"; |
$updateflag=1; |
$updateflag=1; |
} |
} |
$result .= '<td align="center">'.$old_aw.' </td>'. |
$line .= '<td align="center">'.$old_aw.' </td>'. |
'<td align="center">'.$awarded.' </td>'; |
'<td align="center">'.$awarded.' </td>'; |
} |
} |
} |
} |
$result .= '</tr>'."\n"; |
$line.='</tr>'."\n"; |
if ($updateflag) { |
if ($updateflag) { |
$count++; |
$count++; |
&Apache::lonnet::cstore(\%newrecord,$symb,$ENV{'request.course.id'}, |
&Apache::lonnet::cstore(\%newrecord,$symb,$ENV{'request.course.id'}, |
$udom,$user); |
$udom,$uname); |
|
$result.=$line; |
|
} else { |
|
$noupdate.=$line; |
} |
} |
} |
} |
|
if ($noupdate) { |
|
$result .= '<tr bgcolor="#ffffff"><td align="center" colspan="7">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); |
my $msg = '<b>Number of records updated = '.$rec_update. |
my $msg = '<b>Number of records updated = '.$rec_update. |
Line 2375 sub csvuploadassign {
|
Line 2404 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','1'); |
my ($classlist) = &getclasslist('all',0); |
my @skipped; |
my @skipped; |
my $countdone=0; |
my $countdone=0; |
foreach my $grade (@gradedata) { |
foreach my $grade (@gradedata) { |
Line 2407 sub csvuploadassign {
|
Line 2436 sub csvuploadassign {
|
$request->print('<br /><font size="+1"><b>Skipped Students</b></font><br />'); |
$request->print('<br /><font size="+1"><b>Skipped Students</b></font><br />'); |
foreach my $student (@skipped) { $request->print("<br />$student"); } |
foreach my $student (@skipped) { $request->print("<br />$student"); } |
} |
} |
$request->print(&view_edit_entire_class_form($symb,$url)); |
|
$request->print(&show_grading_menu_form($symb,$url)); |
$request->print(&show_grading_menu_form($symb,$url)); |
return ''; |
return ''; |
} |
} |
Line 2504 LISTJAVASCRIPT
|
Line 2532 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 2578 sub getSymbMap {
|
Line 2607 sub getSymbMap {
|
my $countProblems = 0; |
my $countProblems = 0; |
$mapiterator->next(); # skip the first BEGIN_MAP |
$mapiterator->next(); # skip the first BEGIN_MAP |
my $mapcurRes = $mapiterator->next(); # for "current resource" |
my $mapcurRes = $mapiterator->next(); # for "current resource" |
my $ctr=0; |
while ($mapdepth > 0) { |
while ($mapdepth > 0 && $ctr < 100) { |
|
if($mapcurRes == $mapiterator->BEGIN_MAP) { $mapdepth++; } |
if($mapcurRes == $mapiterator->BEGIN_MAP) { $mapdepth++; } |
if($mapcurRes == $mapiterator->END_MAP) { $mapdepth++; } |
if($mapcurRes == $mapiterator->END_MAP) { $mapdepth--; } |
|
|
if (ref($mapcurRes) && $mapcurRes->is_problem() && !$mapcurRes->randomout) { |
if (ref($mapcurRes) && $mapcurRes->is_problem() && !$mapcurRes->randomout) { |
$countProblems++; |
$countProblems++; |
} |
} |
$ctr++; |
$mapcurRes = $mapiterator->next(); |
} |
} |
if ($countProblems > 0) { |
if ($countProblems > 0) { |
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
Line 2612 sub displayPage {
|
Line 2640 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 2649 sub displayPage {
|
Line 2682 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--; } |
|
|
if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { |
if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { |
my $parts = $curRes->parts(); |
my $parts = $curRes->parts(); |
$parts = &temp_parts_fix($parts); # remove line when lonnavmap is fixed |
|
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
my $symbx = $curRes->symb(); |
my $symbx = $curRes->symb(); |
$studentTable.='<tr bgcolor="#ffffe6"><td align="center" valign="top" >'.$question. |
$studentTable.='<tr bgcolor="#ffffe6"><td align="center" valign="top" >'.$question. |
Line 2728 sub displayPage {
|
Line 2760 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(); |
|
|
$studentTable.='</td></tr></table></td></tr></table>'."\n". |
$studentTable.='</td></tr></table></td></tr></table>'."\n". |
' <input type="button" value="Save" '. |
' <input type="button" value="Save" '. |
'onClick="javascript:checkSubmitPage(this.form,'.$question.');" TARGET=_self />'. |
'onClick="javascript:checkSubmitPage(this.form,'.$question.');" TARGET=_self />'. |
Line 2751 sub displayPage {
|
Line 2785 sub displayPage {
|
return ''; |
return ''; |
} |
} |
|
|
sub temp_parts_fix { #remove sub once lonnavmap is fixed |
|
my $parts = shift; |
|
my %seen = (); |
|
my @correctParts = (); |
|
foreach (@{$parts}) { |
|
next if ($seen{$_} > 0); |
|
$seen{$_}++; |
|
push @correctParts,$_; |
|
} |
|
return \@correctParts; |
|
} |
|
|
|
sub updateGradeByPage { |
sub updateGradeByPage { |
my ($request) = shift; |
my ($request) = shift; |
|
|
Line 2770 sub updateGradeByPage {
|
Line 2792 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 2796 sub updateGradeByPage {
|
Line 2823 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--; } |
|
|
if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { |
if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { |
my $parts = $curRes->parts(); |
my $parts = $curRes->parts(); |
$parts = &temp_parts_fix($parts); # remove line when lonnavmap is fixed |
|
my $title = $curRes->compTitle(); |
my $title = $curRes->compTitle(); |
my $symbx = $curRes->symb(); |
my $symbx = $curRes->symb(); |
$studentTable.='<tr bgcolor="#ffffe6"><td align="center" valign="top" >'.$question. |
$studentTable.='<tr bgcolor="#ffffe6"><td align="center" valign="top" >'.$question. |
Line 2860 sub updateGradeByPage {
|
Line 2886 sub updateGradeByPage {
|
|
|
} |
} |
$curRes = $iterator->next(); |
$curRes = $iterator->next(); |
$ctr++; |
|
} |
} |
|
|
|
$navmap->untieHashes(); |
|
|
$studentTable.='</td></tr></table></td></tr></table>'; |
$studentTable.='</td></tr></table></td></tr></table>'; |
$studentTable.=&show_grading_menu_form($ENV{'form.symb'},$ENV{'form.url'}); |
$studentTable.=&show_grading_menu_form($ENV{'form.symb'},$ENV{'form.url'}); |
my $grademsg=($changeflag == 0 ? 'No score was changed or updated.' : |
my $grademsg=($changeflag == 0 ? 'No score was changed or updated.' : |
Line 3390 GRADINGMENUJS
|
Line 3417 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 3419 sub handler {
|
Line 3447 sub handler {
|
if ($tsymb) { |
if ($tsymb) { |
my ($map,$id,$url)=split(/\_\_\_/,$tsymb); |
my ($map,$id,$url)=split(/\_\_\_/,$tsymb); |
if (&Apache::lonnet::allowed('mgr',$tcrsid)) { |
if (&Apache::lonnet::allowed('mgr',$tcrsid)) { |
$request->print( |
$request->print(&Apache::lonnet::ssi_body('/res/'.$url, |
&Apache::lonnet::ssi('/res/'.$url, |
('grade_username' => $tuname, |
('grade_username' => $tuname, |
'grade_domain' => $tudom, |
'grade_domain' => $tudom, |
'grade_courseid' => $tcrsid, |
'grade_courseid' => $tcrsid, |
'grade_symb' => $tsymb))); |
'grade_symb' => $tsymb))); |
|
} else { |
} else { |
$request->print('<h3>Not authorized: '.$token.'</h3>'); |
$request->print('<h3>Not authorized: '.$token.'</h3>'); |
} |
} |
} else { |
} else { |
$request->print('<h3>Not a valid DocID: '.$token.'</h3>'); |
$request->print('<h3>Not a valid DocID: '.$token.'</h3>'); |
} |
} |
Line 3436 sub handler {
|
Line 3463 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 ($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'}); |
|
} |
|
} |
|
# $Apache::lonxml::debug=1; |
|
# &Apache::lonxml::debug("command is $command"); |
|
|
if ($command eq 'submission') { |
if ($command eq 'submission') { |
($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') { |
&updateGradeByPage($request); |
&updateGradeByPage($request); |