--- loncom/homework/grades.pm 2003/07/11 12:54:07 1.110 +++ loncom/homework/grades.pm 2003/07/21 13:32:49 1.121 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.110 2003/07/11 12:54:07 ng Exp $ +# $Id: grades.pm,v 1.121 2003/07/21 13:32:49 ng Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,6 +41,7 @@ use Apache::style; use Apache::lonxml; use Apache::lonnet; use Apache::loncommon; +use Apache::lonhtmlcommon; use Apache::lonnavmaps; use Apache::lonhomework; use Apache::loncoursedata; @@ -105,6 +106,7 @@ sub response_type { if (/^\w+response_\w+.*/) { my ($responsetype,$part) = split(/_/,$_,2); my ($partid,$respid) = split(/_/,$part); + $responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!! $handgrade{$part} = $responsetype.':'.($allkeys =~ /parameter_$part\_handgrade/ ? 'yes' : 'no'); next if ($seen{$partid} > 0); $seen{$partid}++; @@ -114,10 +116,88 @@ sub response_type { return \@partlist,\%handgrade; } +#--- Show resource title +#--- and parts and response type +sub showResourceInfo { + my ($url,$probTitle) = @_; + my $result =''. + ''."\n"; + my ($partlist,$handgrade) = &response_type($url); + my ($resptype,$hdgrade)=('','no'); + for (sort keys(%$handgrade)) { + my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); + $resptype = $responsetype; + $hdgrade = $handgrade if ($handgrade eq 'yes'); + $result.=''. + ''; +# ''; + } + $result.='
Current Resource: '.$probTitle.'
Part '.(split(/_/))[0].'Type: '.$responsetype.'
Handgrade: '.$handgrade.'
'."\n"; + return $result,$resptype,$hdgrade,$partlist,$handgrade; +} + +#--- Clean response type for display +#--- Currently filters option response type only. +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.''; + push @ans,$ans; + } + my $grayFont = ''; + return ''. + ''. + ''. + '
Answer'. + (join '',@ans).'
'.$grayFont.'Option ID'.$grayFont. + (join ''.$grayFont,@IDs).'
'; + } + return $answer; +} + +#-- A couple of common js functions +sub commonJSfunctions { + my $request = shift; + $request->print(< + function radioSelection(radioButton) { + var selection=null; + if (radioButton.length > 1) { + for (var i=0; i 1) { + for (var i=0; i +COMMONJSFUNCTIONS +} + #--- Dumps the class list with usernames,list of sections, #--- section, ids and fullnames for each user. sub getclasslist { my ($getsec,$filterlist) = @_; + $getsec = $getsec eq '' ? 'all' : $getsec; my $classlist=&Apache::loncoursedata::get_classlist(); # Bail out if we were unable to get the classlist return if (! defined($classlist)); @@ -129,8 +209,8 @@ sub getclasslist { my (undef,undef,$end,$start,$id,$section,$fullname,$status)= @{$classlist->{$_}}; # filter students according to status selected - if ($filterlist && $ENV{'form.status'} ne 'Any') { - if ($ENV{'form.status'} ne $status) { + if ($filterlist && $ENV{'form.Status'} ne 'Any') { + if ($ENV{'form.Status'} ne $status) { delete ($classlist->{$_}); next; } @@ -296,7 +376,7 @@ sub verifyreceipt { my $title.='

Verifying Submission Receipt '. $receipt.'

'."\n". - 'Problem: '.$ENV{'form.probTitle'}.'

'."\n"; + 'Resource: '.$ENV{'form.probTitle'}.'

'."\n"; my ($string,$contents,$matches) = ('','',0); my (undef,undef,$fullname) = &getclasslist('all','0'); @@ -344,26 +424,15 @@ sub listStudents { my $getsec = $ENV{'form.section'} eq '' ? 'all' : $ENV{'form.section'}; my $submitonly= $ENV{'form.submitonly'} eq '' ? 'all' : $ENV{'form.submitonly'}; - my $result; - my ($partlist,$handgrade) = &response_type($url); - for (sort keys(%$handgrade)) { - my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); - $ENV{'form.handgrade'} = 'yes' if ($handgrade eq 'yes'); - $result.='Part '.(split(/_/))[0].''. - 'Type: '.$responsetype.''. - 'Handgrade: '.$handgrade.'
'; - } - $result.=''."\n"; - - my $viewgrade = $ENV{'form.handgrade'} eq 'yes' ? 'View/Grade' : 'View'; + my $viewgrade = $ENV{'form.showgrading'} eq 'yes' ? 'View/Grade/Regrade' : 'View'; $ENV{'form.probTitle'} = $ENV{'form.probTitle'} eq '' ? &Apache::lonnet::gettitle($symb) : $ENV{'form.probTitle'}; - $result='

 '. - $viewgrade. - ' Submissions for a Student or a Group of Students

'. - ''.$result; + my $result='

 '.$viewgrade. + ' Submissions for a Student or a Group of Students

'; + + my ($table,$resptype,$hdgrade,$partlist,$handgrade) = &showResourceInfo($url,$ENV{'form.probTitle'}); + $result.=$table; $request->print(< @@ -391,42 +460,29 @@ sub listStudents { } function reLoadList(formname) { - if (formname.saveStatusOld.value == pullDownSelection(formname.status)) {return;} + 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 LISTJAVASCRIPT + &commonJSfunctions($request); $request->print($result); - my $checkhdgrade = $ENV{'form.handgrade'} eq 'yes' ? 'checked' : ''; - my $checklastsub = $ENV{'form.handgrade'} eq 'yes' ? '' : 'checked'; - + my $checkhdgrade = ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1 ) ? 'checked' : ''; + my $checklastsub = $checkhdgrade eq '' ? 'checked' : ''; my $gradeTable='
'."\n". - ' View Problem: no '."\n". + ' View Problem Text: no '."\n". ' one student '."\n". ' all students
'."\n". ' Submissions: '."\n"; - if ($ENV{'form.handgrade'} eq 'yes') { - $gradeTable.=' handgrade only'."\n"; + if ($ENV{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) { + $gradeTable.=' essay part only'."\n"; } - my $saveStatus = $ENV{'form.status'} eq '' ? 'Active' : $ENV{'form.status'}; - $ENV{'form.status'} = $saveStatus; + my $saveStatus = $ENV{'form.Status'} eq '' ? 'Active' : $ENV{'form.Status'}; + $ENV{'form.Status'} = $saveStatus; $gradeTable.=' last sub only'."\n". ' last sub & parts info'."\n". @@ -442,12 +498,9 @@ LISTJAVASCRIPT ''."\n". ''."\n"; - $gradeTable.='Student Status:
'."\n"; - + $gradeTable.='Student Status: '. + &Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);').'
'; + $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". ' on the check boxes for the group of students.
'."\n". @@ -655,9 +708,10 @@ sub sub_page_js { } function checkSolved(formname,id) { - if (eval("formname.solved"+id+".value") == "correct_by_student") { - alert("This problem has been graded correct by the computer. The score cannot be changed."); - return "noupdate"; + if (eval("formname.solved"+id+".value") == "correct_by_student" && formname.overRideScore.value == 'no') { + var reply = confirm("This problem has been graded correct by the computer. Do you want to change the score?"); + if (!reply) {return "noupdate";} + formname.overRideScore.value = 'yes'; } return "update"; } @@ -668,9 +722,9 @@ sub sub_page_js { return; } -//=========== Check that a point is assigned for all the parts (essay grading only) ============ +//=========== Check that a point is assigned for all the parts ============ function checksubmit(formname,val,total,parttot) { - document.SCORE.gradeOpt.value = val; + formname.gradeOpt.value = val; if (val == "Save & Next") { for (i=0;i<=total;i++) { for (j=0;jdir_config('lonIconsURL'); + &commonJSfunctions($request); $request->print(< @@ -820,7 +882,6 @@ sub sub_page_kw_js { return; } -// var pWin = null; function savedMsgHeader(Nmsg,usrctr,fullname) { var height = 70*Nmsg+250; var scrollbar = "no"; @@ -829,7 +890,12 @@ sub sub_page_kw_js { scrollbar = "yes"; } // if (window.pWin) {window.pWin.close(); window.pWin=null} - pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx=70,screeny=75,width=600,height='+height); + var xpos = (screen.width-600)/2; + xpos = (xpos < 0) ? '0' : xpos; + var ypos = (screen.height-height)/2-30; + ypos = (ypos < 0) ? '0' : ypos; + + pWin = window.open('', 'MessageCenter', 'toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height); pWin.focus(); pDoc = pWin.document; pDoc.write(""); @@ -949,10 +1015,14 @@ sub sub_page_kw_js { return; } -// var hwdWin = null; function highlightCentral() { // if (window.hwdWin) window.hwdWin.close(); - hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx=100,screeny=75'); + var xpos = (screen.width-400)/2; + xpos = (xpos < 0) ? '0' : xpos; + var ypos = (screen.height-330)/2-30; + ypos = (ypos < 0) ? '0' : ypos; + + hwdWin = window.open('', 'KeywordHighlightCentral', 'toolbar=no,location=no,scrollbars=no,width=400,height=300,screenx='+xpos+',screeny='+ypos); hwdWin.focus(); var hDoc = hwdWin.document; hDoc.write(""); @@ -960,9 +1030,9 @@ sub sub_page_kw_js { hDoc.write(" ENDPICK -return ''; + $request->print(&show_grading_menu_form($symb,$url)); + return ''; } @@ -2394,9 +2480,11 @@ sub upcsvScores_form { CSVFORMJS $ENV{'form.probTitle'} = &Apache::lonnet::gettitle($symb); + my ($table) = &showResourceInfo($url,$ENV{'form.probTitle'}); + $result.=$table; $result.='
'. - 'Problem: '.$ENV{'form.probTitle'}.'
'."\n"; $result.=''."\n"; $result.='
'."\n"; - $result.=' Specify a file containing the class scores for problem - '.$ENV{'form.probTitle'}. + $result.=' Specify a file containing the class scores for current resource'. '.
'."\n"; my $upfile_select=&Apache::loncommon::upfile_select_html(); @@ -2415,7 +2503,6 @@ ENDUPFORM $result.='
'."\n"; $result.='


'."\n"; $result.=&show_grading_menu_form($symb,$url); - return $result; } @@ -2549,35 +2636,9 @@ function checkPickOne(formname) { formname.submit(); } -function radioSelection(radioButton) { - var selection=null; - if (radioButton.length > 1) { - for (var i=0; i 1) { - for (var i=0; i LISTJAVASCRIPT - + &commonJSfunctions($request); my ($symb,$url) = &get_symb_and_url($request); my $cdom = $ENV{"course.$ENV{'request.course.id'}.domain"}; my $cnum = $ENV{"course.$ENV{'request.course.id'}.num"}; @@ -2609,7 +2670,7 @@ LISTJAVASCRIPT $result.=''."\n". ''."\n"; - $result.=' View Problems: no '."\n". + $result.=' View Problems Text: no '."\n". ' yes '."
\n"; $result.=' Submission Details: '. @@ -2618,7 +2679,7 @@ LISTJAVASCRIPT ' all details'."\n"; $result.=''."\n". - ''."\n". + ''."\n". ''."\n". ''."\n". ''."\n". @@ -2663,53 +2724,22 @@ LISTJAVASCRIPT sub getSymbMap { my ($request) = @_; my $navmap = Apache::lonnavmaps::navmap-> new($ENV{'request.course.fn'}.'.db', - $ENV{'request.course.fn'}.'_parms.db',1, 1); - - my $res = $navmap->firstResource(); # temp resource to access constants + $ENV{'request.course.fn'}.'_parms.db'); $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 @titles = (); - my $minder=0; - while ($depth > 0) { - if ($curRes == $iterator->BEGIN_MAP()) {$depth++;} - if ($curRes == $iterator->END_MAP()) { $depth--; } + my $minder = 0; - if (ref($curRes) && $curRes->is_map()) { - my ($mapUrl, $id, $resUrl) = split(/___/, $curRes->symb()); # check map contains at least one problem - my $map = $navmap->getResourceByUrl($resUrl); # add to navmaps - - my $mapiterator = $navmap->getIterator($map->map_start(), - $map->map_finish()); - - my $mapdepth = 1; - my $countProblems = 0; - $mapiterator->next(); # skip the first BEGIN_MAP - my $mapcurRes = $mapiterator->next(); # for "current resource" - 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(); + # Gather every sequence that has problems. + my @sequences = $navmap->retrieveResources(undef, sub { shift->is_map(); }, 1); + for my $sequence ($navmap->getById('0.0'), @sequences) { + if ($navmap->hasResource($sequence, sub { shift->is_problem(); }, 0) ) { + my $title = $minder.'.'.$sequence->compTitle(); + push @titles, $title; # minder in case two titles are identical + $symbx{$title} = $sequence->symb(); + $minder++; + } } $navmap->untieHashes(); @@ -2761,12 +2791,12 @@ sub displayPage { my $checkIcon = ''; - $studentTable.=' Note: A problem graded correct ('.$checkIcon. - ') by the computer cannot be changed.'."\n". + $studentTable.=' Note: Problems graded correct by the computer are marked with a '.$checkIcon. + ' symbol.'."\n". '
'. ''. - ''. - ''; + ''. + ''; my ($depth,$question) = (1,1); $iterator->next(); # skip the first BEGIN_MAP @@ -2775,7 +2805,8 @@ sub displayPage { if($curRes == $iterator->BEGIN_MAP) { $depth++; } if($curRes == $iterator->END_MAP) { $depth--; } - if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { +# if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { + if (ref($curRes) && $curRes->is_problem()) { my $parts = $curRes->parts(); my $title = $curRes->compTitle(); my $symbx = $curRes->symb(); @@ -2785,59 +2816,27 @@ sub displayPage { if ($ENV{'form.vProb'} eq 'yes') { $studentTable.=&show_problem($request,$symbx,$uname,$udom,1); } else { - my $companswer = &Apache::loncommon::get_student_answers( - $symbx,$uname,$udom,$ENV{'request.course.id'}); + my $companswer = &Apache::loncommon::get_student_answers($symbx,$uname,$udom,$ENV{'request.course.id'}); $companswer =~ s|||g; $companswer =~ s|||g; - # while ($companswer =~ /()/s) { #\n"); # } -# $companswer =~ s/
 No  '.($ENV{'form.vProb'} eq 'no' ? 'Title' : 'Problem View').'/Grade
 Prob.  '.($ENV{'form.vProb'} eq 'no' ? 'Title' : 'Problem Text').'/Grade
/
/g; +# $companswer =~ s|
|
|g; $studentTable.=' '.$title.' 
 Correct answer:
'.$companswer; } my %record = &Apache::lonnet::restore($symbx,$ENV{'request.course.id'},$udom,$uname); - if ($ENV{'form.lastSub'} eq 'datesub') { if ($record{'version'} eq '') { $studentTable.='
 No recorded submission for this problem
'; } else { - $studentTable.='
'. - ''. - ''. - ''. - ''; - my ($version); - for ($version=1;$version<=$record{'version'};$version++) { - my $timestamp = scalar(localtime($record{$version.':timestamp'})); - $studentTable.=''; - my @versionKeys = split(/\:/,$record{$version.':keys'}); - my @displaySub = (); - foreach my $partid (@{$parts}) { - my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys; - 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]}) ? - 'Part '.$partid.' '. - ($record{"$version:resource.$partid.tries"} eq '' ? 'Trial not counted' : - 'Trial '.$record{"$version:resource.$partid.tries"}).'  '. - $record{$version.':'.$matchKey[0]}.'
' : ''; - $displaySub[1].=(exists $record{"$version:resource.$partid.award"}) ? - 'Part '.$partid.'  '. - $record{"$version:resource.$partid.award"}.'/'. - $record{"$version:resource.$partid.solved"}.'
' : ''; - $displaySub[2].=(exists $record{"$version:resource.$partid.regrader"}) ? - $record{"$version:resource.$partid.regrader"}.' (Part: '.$partid.')' : ''; - } - $displaySub[2].=(exists $record{"$version:resource.regrader"}) ? - $record{"$version:resource.regrader"} : ''; - $studentTable.=''; + my %responseType = (); + foreach my $partid (@{$parts}) { + $responseType{$partid} = $curRes->responseType($partid); } - $studentTable.='
Date/TimeSubmissionStatus 
'.$timestamp.''.$displaySub[0].' '.$displaySub[1]. - ($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' 
'; + $studentTable.= &displaySubByDates(\%record,$parts,\%responseType,$checkIcon); } } elsif ($ENV{'form.lastSub'} eq 'all') { my $last = ($ENV{'form.lastSub'} eq 'last' ? 'last' : ''); @@ -2871,6 +2870,46 @@ sub displayPage { return ''; } +sub displaySubByDates { + my ($record,$parts,$responseType,$checkIcon) = @_; + my $studentTable='
'. + ''. + ''. + ''. + ''; + my ($version); + my %mark; + $mark{'correct_by_student'} = $checkIcon; + for ($version=1;$version<=$$record{'version'};$version++) { + my $timestamp = scalar(localtime($$record{$version.':timestamp'})); + $studentTable.=''; + my @versionKeys = split(/\:/,$$record{$version.':keys'}); + my @displaySub = (); + foreach my $partid (@{$parts}) { + my @matchKey = grep /^resource\.$partid\..*?\.submission$/,@versionKeys; + next if ($$record{"$version:resource.$partid.solved"} eq ''); + $displaySub[0].=(exists $$record{$version.':'.$matchKey[0]}) ? + 'Part '.$partid.' '. + ($$record{"$version:resource.$partid.tries"} eq '' ? 'Trial not counted' : + 'Trial '.$$record{"$version:resource.$partid.tries"}).'  '. + &cleanRecord($$record{$version.':'.$matchKey[0]},$$responseType{$partid}).'
' : ''; + $displaySub[1].=(exists $$record{"$version:resource.$partid.award"}) ? + 'Part '.$partid.'  '. + lc($$record{"$version:resource.$partid.award"}).' '. + $mark{$$record{"$version:resource.$partid.solved"}}.'
' : ''; +# $$record{"$version:resource.$partid.solved"}.'
' : ''; + $displaySub[2].=(exists $$record{"$version:resource.$partid.regrader"}) ? + $$record{"$version:resource.$partid.regrader"}.' (Part: '.$partid.')' : ''; + } + $displaySub[2].=(exists $$record{"$version:resource.regrader"}) ? + $$record{"$version:resource.regrader"} : ''; + $studentTable.=''; + } + $studentTable.='
Date/TimeSubmissionStatus 
'.$timestamp.''.$displaySub[0].' '.$displaySub[1]. + ($displaySub[2] eq '' ? '' : 'Manually graded by '.$displaySub[2]).' 
'; + return $studentTable; +} + sub updateGradeByPage { my ($request) = shift; @@ -3338,12 +3377,19 @@ sub gradingmenu { $request->print(< - function checkChoice(formname) { - var cmd = formname.command; - formname.saveState.value = "saveCmd="+radioSelection(cmd)+":saveSec="+pullDownSelection(formname.section)+ - ":saveSub="+radioSelection(formname.submitonly)+":saveStatus="+pullDownSelection(formname.status); - if (cmd[0].checked || cmd[1].checked || cmd[2].checked || cmd[3].checked || cmd[4].checked) formname.submit(); - if (cmd[5].checked) { + function checkChoice(formname,val,cmdx) { + if (val <= 2) { + var cmd = radioSelection(formname.radioChoice); + var cmdsave = cmd; + } else { + cmd = cmdx; + cmdsave = 'submission'; + } + formname.command.value = cmd; + formname.saveState.value = "saveCmd="+cmdsave+":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;} formname.submit(); } @@ -3360,60 +3406,19 @@ sub gradingmenu { formname.receipt.focus(); return false; } - formname.command[5].checked = true; return true; } - - function radioSelection(radioButton) { - var selection=null; - if (radioButton.length > 1) { - for (var i=0; i 1) { - for (var i=0; i GRADINGMENUJS - - my $result='

 Manual Grading/View Submission

'. - ''. - ''."\n"; - my ($partlist,$handgrade) = &response_type($url); - my ($resptype,$hdgrade)=('','no'); - for (sort keys(%$handgrade)) { - my ($responsetype,$handgrade)=split(/:/,$$handgrade{$_}); - $resptype = $responsetype; - $hdgrade = $handgrade if ($handgrade eq 'yes'); - $result.=''. - ''. - ''; - } - $result.='
Problem: '.$probTitle.'
Part '.(split(/_/))[0].'Type: '.$responsetype.'Handgrade: '.$handgrade.'
'."\n"; - + &commonJSfunctions($request); + my $result='

 Manual Grading/View Submission

'; + my ($table,$resptype,$hdgrade) = &showResourceInfo($url,$probTitle); + $result.=$table; my (undef,$sections) = &getclasslist('all','0'); my $savedState = &savedState(); - my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'pickStudentPage' : $$savedState{'saveCmd'}); + my $saveCmd = ($$savedState{'saveCmd'} eq '' ? 'submission' : $$savedState{'saveCmd'}); my $saveSec = ($$savedState{'saveSec'} eq '' ? 'all' : $$savedState{'saveSec'}); - my $saveSub = ($$savedState{'saveSub'} eq '' ? 'yes' : $$savedState{'saveSub'}); + my $saveSub = ($$savedState{'saveSub'} eq '' ? 'all' : $$savedState{'saveSub'}); my $saveStatus = ($$savedState{'saveStatus'} eq '' ? 'Active' : $$savedState{'saveStatus'}); $result.='
'."\n". @@ -3422,80 +3427,75 @@ GRADINGMENUJS ''."\n". ''."\n". ''."\n". + ''."\n". ''."\n". ''."\n"; - $result.='
'."\n". - '
'."\n". + $result.='
'."\n". + ''."\n". - ''."\n"; + $result.='
'."\n". ' Select a Grading/Viewing Option
'."\n"; + '
'."\n"; - $result.=''. - ''."\n". + $result.='
'. - ' '. - 'Handgrade/View Submission for a student by page/sequence
'; + $result.=''."\n". + $result.='Student Status:'.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,undef); + + if (ref($sections)) { + $result.=' (Section "no" implies the students were not assigned a section.)
' + if (grep /no/,@$sections); + } + $result.=''; - ''."\n". - ''."\n". + ($saveSub eq 'all' ? 'checked' : '').' /> for all'."\n"; + + $result.=''."\n"; + + $result.=''."\n"; + + $result.='
'."\n". + ' Select Section:   '; - '
'. - ' '. - 'Grade by section or class
'. - ($hdgrade eq 'yes' ? 'View/Grade essay response of' : 'View'). - ' an individual student --> For students who has: '. + $result.='
'. + ' '.'Current Resource: For one or more students'. + '
            -->For students with '. ' submitted'. + ($saveSub eq 'yes' ? 'checked' : '').' /> submissions or '. ' everybody
'. + ' '. + 'Current Resource: For all students in selected section or course
'. + ' '. + 'The complete set/page/sequence: For one student

'. + ''. + '
'."\n"; + + $result.='
'; - '
'. - ' '. - 'Upload scores from file
'; + $result.=''."\n"; $result.=''."\n"; + ' scantron forms'."\n"; if ((&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'})) && ($symb)) { $result.=''. - ''."\n"; } - $result.=''; - - $result.='
'. + ''. + ' scores from file
'. - ' '. - 'Grade scantron forms
'. - ' '. - 'Verify a submission receipt issued by this server--> Receipt no: '.unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}). + ''. + ' submission Receipt no: '.unpack("%32C*",$Apache::lonnet::perlvar{'lonHostID'}). '-'. '

'."\n". - ' Select section:   '; - - $result.='Student Status:'; - - $result.='   (Applies to the first three options only.)'."\n"; - - if (ref($sections)) { - $result.=' (Section "no" implies the students were not assigned a section.)
' - if (grep /no/,@$sections); - } - $result.='

'. - ''."\n". - '
'."\n". + $result.='
'."\n". '
'."\n". '
'."\n"; return $result;