version 1.102, 2003/06/20 17:25:48
|
version 1.105, 2003/06/20 21:45:20
|
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 135 sub getclasslist {
|
Line 136 sub getclasslist {
|
} |
} |
} |
} |
$section = ($section ne '' ? $section : 'no'); |
$section = ($section ne '' ? $section : 'no'); |
if ($getsec eq 'all' || $getsec eq $section) { |
if (1 || &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); |
} |
} |
|
|
|
sub canmodify { |
|
my ($sec)=@_; |
|
if ($perm{'mgr'}) { |
|
if (!defined($perm{'mgr_section'})) { |
|
# can modify whole class |
|
return 1; |
|
} else { |
|
if ($sec eq $perm{'mgr_section'}) { |
|
#can modify the requested section |
|
return 1; |
|
} else { |
|
# can't modify the request section |
|
return 0; |
|
} |
|
} |
|
} |
|
#can't modify |
|
return 0; |
|
} |
|
|
|
sub canview { |
|
my ($sec)=@_; |
|
if ($perm{'vgr'}) { |
|
if (!defined($perm{'vgr_section'})) { |
|
# can modify whole class |
|
return 1; |
|
} else { |
|
if ($sec eq $perm{'vgr_section'}) { |
|
#can modify the requested section |
|
return 1; |
|
} else { |
|
# can't modify the request section |
|
return 0; |
|
} |
|
} |
|
} |
|
#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 |
sub student_gradeStatus { |
sub student_gradeStatus { |
my ($url,$symb,$udom,$uname,$partlist) = @_; |
my ($url,$symb,$udom,$uname,$partlist) = @_; |
Line 409 LISTJAVASCRIPT
|
Line 454 LISTJAVASCRIPT
|
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">'. |
'<td align="center"><input type=checkbox name="stuinfo" value="'. |
'<td align="center"><input type=checkbox name="stuinfo" value="'. |
$student.':'.$$fullname{$student}.'"></td>'."\n". |
$student.':'.$$fullname{$student}.'"></td>'."\n". |
Line 1013 sub submission {
|
Line 1058 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'}); |
|
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 1251 KEYWORDS
|
Line 1303 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))) { |
$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 1395 sub processHandGrade {
|
Line 1447 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 1414 sub processHandGrade {
|
Line 1471 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 1552 sub processHandGrade {
|
Line 1613 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 1783 sub viewgrades {
|
Line 1847 sub viewgrades {
|
|
|
#beginning of class grading form |
#beginning of class grading form |
$result.= '<form action="/adm/grades" method="post" name="classgrade">'."\n". |
$result.= '<form action="/adm/grades" method="post" name="classgrade">'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" />'."\n". |
'<input type="hidden" name="symb" value="'.$symb.'" /resu\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="url" value="'.$url.'" />'."\n". |
'<input type="hidden" name="command" value="editgrades" />'."\n". |
'<input type="hidden" name="command" value="editgrades" />'."\n". |
'<input type="hidden" name="section" value="'.$ENV{'form.section'}.'" />'."\n". |
'<input type="hidden" name="section" value="'.$ENV{'form.section'}.'" />'."\n". |
Line 2016 sub editgrades {
|
Line 2080 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 2077 sub editgrades {
|
Line 2146 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 2486 LISTJAVASCRIPT
|
Line 2556 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 2593 sub displayPage {
|
Line 2664 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 2708 sub displayPage {
|
Line 2784 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(); |
} |
} |
|
|
Line 2739 sub updateGradeByPage {
|
Line 2816 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 3360 GRADINGMENUJS
|
Line 3442 GRADINGMENUJS
|
sub handler { |
sub handler { |
my $request=$_[0]; |
my $request=$_[0]; |
|
|
undef(%Apache::grades::perm); |
undef(%perm); |
if ($ENV{'browser.mathml'}) { |
if ($ENV{'browser.mathml'}) { |
$request->content_type('text/xml'); |
$request->content_type('text/xml'); |
} else { |
} else { |
Line 3405 sub handler {
|
Line 3487 sub handler {
|
} |
} |
} |
} |
} else { |
} else { |
if (!($Apache::grades::perm{'vgr'}=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}))) { |
if (!($perm{'vgr'}=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}))) { |
if ($Apache::grades::perm{'vgr'}=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'})) { |
if ($perm{'vgr'}=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'})) { |
$Apache::grades::perm{'vgr_section'}=$ENV{'request.course.sec'}; |
$perm{'vgr_section'}=$ENV{'request.course.sec'}; |
} else { |
} else { |
delete($Apache::grades::perm{'vgr'}); |
delete($perm{'vgr'}); |
} |
} |
} |
} |
if (!($Apache::grades::perm{'mgr'}=&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}))) { |
if (!($perm{'mgr'}=&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}))) { |
if ($Apache::grades::perm{'mgr'}=&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'})) { |
if ($perm{'mgr'}=&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'})) { |
$Apache::grades::perm{'mgr_section'}=$ENV{'request.course.sec'}; |
$perm{'mgr_section'}=$ENV{'request.course.sec'}; |
} else { |
} else { |
delete($Apache::grades::perm{'mgr'}); |
delete($perm{'mgr'}); |
} |
} |
} |
} |
|
#delete($perm{'mgr'}); |
|
#$Apache::lonxml::debug=1; |
|
#&Apache::lonxml::debug("command is $command"); |
|
|
if ($command eq 'submission') { |
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') { |
$request->print(&verifyreceipt($request)); |
$request->print(&verifyreceipt($request)); |