--- loncom/homework/grades.pm 2009/05/18 20:07:34 1.574.2.1 +++ loncom/homework/grades.pm 2009/05/28 14:30:04 1.577 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.574.2.1 2009/05/18 20:07:34 raeburn Exp $ +# $Id: grades.pm,v 1.577 2009/05/28 14:30:04 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -183,7 +183,8 @@ sub get_display_part { my ($partID,$symb)=@_; my $display=&Apache::lonnet::EXT('resource.'.$partID.'.display',$symb); if (defined($display) and $display ne '') { - $display.= " (<span class=\"LC_internal_info\">id $partID</span>)"; + $display.= ' (<span class="LC_internal_info">' + .&mt('Part ID: [_1]',$partID).'</span>)'; } else { $display=$partID; } @@ -217,9 +218,9 @@ sub showResourceInfo { $partsseen{$partID}=1; } my $display_part=&get_display_part($partID,$symb); - $result.='<td><b>'.&mt('Part').': </b>'.$display_part. + $result.='<td><b>'.&mt('Part: [_1]',$display_part).'</b>'. ' <span class="LC_internal_info">'.$resID.'</span></td>'. - '<td><b>'.&mt('Type').': </b>'.$responsetype.'</td></tr>'; + '<td><b>'.&mt('Type: [_1]',$responsetype).'</b></td></tr>'; # '<td>'.&mt('<b>Handgrade: </b>[_1]',$handgrade).'</td></tr>'; } } @@ -1734,7 +1735,7 @@ sub gradeBox { #&mt('<td><b>Part:</b></td><td>[_1]</td><td><b>Points:</b></td><td>[_2]</td><td>or</td><td>[_3]</td>',$display_part,$radio,$line); $result .= - '<td><b>'.&mt('Part').':</b></td><td>'.$display_part.'</td><td><b>'.&mt('Points').':</b></td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'. + '<td><b>'.&mt('Part:').'</b></td><td>'.$display_part.'</td><td><b>'.&mt('Points:').'</b></td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'. $result.='</tr></table>'."\n"; $result.='<input type="hidden" name="stores'.$counter.'_'.$partid.'" value="" />'."\n". @@ -2113,9 +2114,11 @@ KEYWORDS } my $responsetype = $responseType->{$partid}->{$respid}; if (!exists($record{"resource.$partid.$respid.submission"})) { - $lastsubonly.="\n".'<div class="LC_grade_submission_part"><b>Part:</b> '. - $display_part.' <span class="LC_internal_info">( ID '.$respid. - ' )</span> '. + $lastsubonly.="\n".'<div class="LC_grade_submission_part">'. + '<b>'.&mt('Part: [_1]',$display_part).'</b>'. + ' <span class="LC_internal_info">'. + '('.&mt('Part ID: [_1]',$respid).')</b>'. + '</span> '. '<span class="LC_warning">'.&mt('Nothing submitted - no attempts.').'</span><br /><br /></div>'; next; } @@ -2151,9 +2154,11 @@ KEYWORDS ($env{'form.lastSub'} eq 'hdgrade' && $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) { my $display_part=&get_display_part($partid,$symb); - $lastsubonly.='<div class="LC_grade_submission_part"><b>Part:</b> '. - $display_part.' <span class="LC_internal_info">( ID '.$respid. - ' )</span> '; + $lastsubonly.='<div class="LC_grade_submission_part">'. + '<b>'.&mt('Part: [_1]',$display_part).'</b>'. + ' <span class="LC_internal_info">'. + '('.&mt('Part ID: [_1]',$respid).')'. + '</b></span> '; my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record); if (@$files) { $lastsubonly.='<br /><span class="LC_warning">'.&mt('Like all files provided by users, this file may contain viruses').'</span><br />'; @@ -3294,7 +3299,7 @@ sub viewgrades { $result.= &Apache::loncommon::start_data_table_row()."\n". - '<td><b>'.&mt('Part').':</b></td><td>'.$display_part.'</td><td><b>'.&mt('Points').':</b></td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'. + '<td><b>'.&mt('Part:').'</b></td><td>'.$display_part.'</td><td><b>'.&mt('Points:').'</b></td><td>'.$radio.'</td><td>'.&mt('or').'</td><td>'.$line.'</td>'. &Apache::loncommon::end_data_table_row()."\n"; $ctsparts++; } @@ -4466,13 +4471,16 @@ sub displaySubByDates { my ($responseId)= ($isTask ? ($matchKey=~ /^resource\.(.*?)\.\Q$partid\E\.award$/) : ($matchKey=~ /^resource\.\Q$partid\E\.(.*?)\.submission$/)); - $displaySub[0].='<b>'.&mt('Part:').'</b> '.$display_part.' '; - $displaySub[0].='<span class="LC_internal_info">('.&mt('ID').' '. - $responseId.')</span> <b>'; + $displaySub[0].='<span class="LC_nobreak"'; + $displaySub[0].='<b>'.&mt('Part: [_1]',$display_part).'</b>' + .' <span class="LC_internal_info">' + .'('.&mt('Part ID: [_1]',$responseId).')' + .'</span>' + .' <b>'; if ($$record{"$where.$partid.tries"} eq '') { - $displaySub[0].=&mt('Trial not counted'); + $displaySub[0].=&mt('Trial not counted'); } else { - $displaySub[0].=&mt('Trial [_1]', + $displaySub[0].=&mt('Trial: [_1]', $$record{"$where.$partid.tries"}); } my $responseType=($isTask ? 'Task' @@ -4483,7 +4491,8 @@ sub displaySubByDates { &get_order($partid,$responseId,$symb,$uname,$udom, $no_increment); } - $displaySub[0].='</b> '. + $displaySub[0].='</b></span>'; # /nobreak + $displaySub[0].=' '. &cleanRecord($$record{$version.':'.$matchKey},$responseType,$symb,$partid,$responseId,$record,$orders{$partid}->{$responseId},"$version:",$uname,$udom).'<br />'; } } @@ -5199,7 +5208,7 @@ sub scantron_selectphase { &Apache::loncommon::start_data_table_row()."\n". '<td colspan="2">'."\n". '<input type="hidden" name="command" value="checksubmissions" />'."\n". - '<input type="submit" value="'.&mt('Review Scantron Data and Submission Records').'" />'."\n". + '<input type="submit" value="'.&mt('Review Bubblesheet Data and Submission Records').'" />'."\n". '</td>'."\n". &Apache::loncommon::end_data_table_row()."\n". &Apache::loncommon::end_data_table()."\n". @@ -7474,8 +7483,8 @@ SCANTRONFORM my $lock=&Apache::lonnet::set_lock(&mt('Grading bubblesheet exam')); my $count=&get_todo_count($scanlines,$scan_data); - my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Scantron Status', - 'Scantron Progress',$count, + my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Bubblesheet Status', + 'Bubblesheet Progress',$count, 'inline',undef,'scantronupload'); &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state, 'Processing first student'); @@ -7759,7 +7768,7 @@ sub scantron_upload_scantron_data { &Apache::lonhtmlcommon::end_pick_box().'<br /> <input name="command" value="scantronupload_save" type="hidden" /> -<input type="button" onClick="javascript:checkUpload(this.form);" value="'.&mt('Upload Scantron Data').'" /> +<input type="button" onClick="javascript:checkUpload(this.form);" value="'.&mt('Upload Bubblesheet Data').'" /> </form> '); return ''; @@ -7777,7 +7786,7 @@ sub scantron_upload_scantron_data_save { if (!&Apache::lonnet::allowed('usc',$env{'form.domainid'}) && !&Apache::lonnet::allowed('usc', $env{'form.domainid'}.'_'.$env{'form.courseid'})) { - $r->print(&mt("You are not allowed to upload Scantron data to the requested course.")."<br />"); + $r->print(&mt("You are not allowed to upload bubblesheet data to the requested course.")."<br />"); if ($symb) { $r->print(&show_grading_menu_form($symb)); } else { @@ -8278,36 +8287,50 @@ sub grading_menu { 'saveState'=>"", 'gradingMenu'=>1, 'showgrading'=>"yes"); - my $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); - my @menu = ({ url => $url, - name => &mt('Manual Grading/View Submissions'), - short_description => - &mt('Start the process of hand grading submissions.'), - }); + + my $url1 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); + $fields{'command'} = 'csvform'; - $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); - push(@menu, { url => $url, - name => &mt('Upload Scores'), - short_description => - &mt('Specify a file containing the class scores for current resource.')}); + my $url2 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); + $fields{'command'} = 'processclicker'; - $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); - push(@menu, { url => $url, - name => &mt('Process Clicker'), - short_description => - &mt('Specify a file containing the clicker information for this resource.')}); + my $url3 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); + $fields{'command'} = 'scantron_selectphase'; - $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); - push(@menu, { url => $url, - name => &mt('Grade/Manage/Review Scantron Forms'), - short_description => - &mt('Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.')}); - $fields{'command'} = 'verify'; - $url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); - push(@menu, { url => "", - name => &mt('Verify Receipt'), - short_description => - &mt('')}); + my $url4 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); + + my @menu = ({ categorytitle=>'Course Grading', + items =>[ + { linktext => 'Manual Grading/View Submissions', + url => $url1, + permission => 'F', + icon => 'edit-find-replace.png', + linktitle => 'Start the process of hand grading submissions.' + }, + { linktext => 'Upload Scores', + url => $url2, + permission => 'F', + icon => 'uploadscores.png', + linktitle => 'Specify a file containing the class scores for current resource.' + }, + { linktext => 'Process Clicker', + url => $url3, + permission => 'F', + icon => 'addClickerInfoFile.png', + linktitle => 'Specify a file containing the clicker information for this resource.' + }, + { linktext => 'Grade/Manage/Review Scantron Forms', + url => $url4, + permission => 'F', + icon => 'stat.png', + linktitle => 'Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.' + } + ] + }); + + #$fields{'command'} = 'verify'; + #$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields); + # # Create the menu my $Str; # $Str .= '<h2>'.&mt('Please select a grading task').'</h2>'; @@ -8319,24 +8342,15 @@ sub grading_menu { '<input type="hidden" name="saveState" value="" />'."\n". '<input type="hidden" name="gradingMenu" value="1" />'."\n". '<input type="hidden" name="showgrading" value="yes" />'."\n"; - foreach my $menudata (@menu) { - if ($menudata->{'name'} ne &mt('Verify Receipt')) { - $Str .=' <h3><a '. - $menudata->{'jscript'}. - ' href="'. - $menudata->{'url'}.'" >'. - $menudata->{'name'}."</a></h3>\n"; - } else { - $Str .='<hr /><input type="button" value="'.&mt('Verify Receipt').'" '. - $menudata->{'jscript'}. - ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '. - ' /> '. - &Apache::lonnet::recprefix($env{'request.course.id'}). - '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />'; - } - $Str .= ' '.(' 'x8).$menudata->{'short_description'}. - "\n"; - } + + $Str .= Apache::lonhtmlcommon::generate_menu(@menu); + #$menudata->{'jscript'} + $Str .='<hr /><input type="button" value="'.&mt('Verify Receipt').'" '. + ' onClick="javascript:checkChoice(document.forms.gradingMenu,\'5\',\'verify\')" '. + ' /> '. + &Apache::lonnet::recprefix($env{'request.course.id'}). + '-<input type="text" name="receipt" size="4" onChange="javascript:checkReceiptNo(this.form,\'OK\')" />'; + $Str .="</form>\n"; my $receiptalert = &mt("Please enter a receipt number given by a student in the receipt box."); $request->print(<<GRADINGMENUJS); @@ -8453,102 +8467,91 @@ GRADINGMENUJS '<input type="hidden" name="showgrading" value="yes" />'."\n"; $result.=' - <div class="LC_grade_select_mode"> - <div class="LC_grade_select_mode_current"> - <h2> - '.&mt('Grade Current Resource').' - </h2> - <div class="LC_grade_select_mode_body"> - <div class="LC_grades_resource_info"> - '.$table.' - </div> - <div class="LC_grade_select_mode_selector"> - <div class="LC_grade_select_mode_selector_header"> - '.&mt('Sections').' - </div> - <div class="LC_grade_select_mode_selector_body"> - <select name="section" multiple="multiple" size="5">'."\n"; - if (ref($sections)) { - foreach my $section (sort(@$sections)) { - $result.='<option value="'.$section.'" '. - ($saveSec eq $section ? 'selected="selected"':'').'>'.$section.'</option>'."\n"; - } - } +<h2> + '.&mt('Grade Current Resource').' +</h2> +<div> + '.$table.' +</div> + +<div class="LC_columnSection"> + + <fieldset> + <legend> + '.&mt('Sections').' + </legend> + <select name="section" multiple="multiple" size="5">'."\n"; + $result.= $selsec; $result.= '<option value="all" '.($saveSec eq 'all' ? 'selected="selected"' : ''). '>all</option></select> '; $result.=' - </div> - </div> - <div class="LC_grade_select_mode_selector"> - <div class="LC_grade_select_mode_selector_header"> - '.&mt('Groups').' - </div> - <div class="LC_grade_select_mode_selector_body"> - '.&Apache::lonstatistics::GroupSelect('group','multiple',5).' - </div> - </div> - <div class="LC_grade_select_mode_selector"> - <div class="LC_grade_select_mode_selector_header"> - '.&mt('Access Status').' - </div> - <div class="LC_grade_select_mode_selector_body"> - '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').' - </div> - </div> - <div class="LC_grade_select_mode_selector"> - <div class="LC_grade_select_mode_selector_header"> - '.&mt('Submission Status').' - </div> - <div class="LC_grade_select_mode_selector_body"> - <select name="submitonly" size="5"> - <option value="yes" '. ($saveSub eq 'yes' ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option> - <option value="queued" '. ($saveSub eq 'queued' ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option> - <option value="graded" '. ($saveSub eq 'graded' ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option> - <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option> + </fieldset> + + <fieldset> + <legend> + '.&mt('Groups').' + </legend> + '.&Apache::lonstatistics::GroupSelect('group','multiple',5).' + </fieldset> + + <fieldset> + <legend> + '.&mt('Access Status').' + </legend> + '.&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,5,undef,'mult').' + </fieldset> + + <fieldset> + <legend> + '.&mt('Submission Status').' + </legend> + <select name="submitonly" size="5"> + <option value="yes" '. ($saveSub eq 'yes' ? 'selected="selected"' : '').'>'.&mt('with submissions').'</option> + <option value="queued" '. ($saveSub eq 'queued' ? 'selected="selected"' : '').'>'.&mt('in grading queue').'</option> + <option value="graded" '. ($saveSub eq 'graded' ? 'selected="selected"' : '').'>'.&mt('with ungraded submissions').'</option> + <option value="incorrect" '.($saveSub eq 'incorrect' ? 'selected="selected"' : '').'>'.&mt('with incorrect submissions').'</option> <option value="all" '. ($saveSub eq 'all' ? 'selected="selected"' : '').'>'.&mt('with any status').'</option> - </select> - </div> - </div> - <div class="LC_grade_select_mode_type_body"> - <div class="LC_grade_select_mode_type"> + </select> + </fieldset> + +</div> + +<br /> + <div> + <div> <label> <input type="radio" name="radioChoice" value="submission" '. ($saveCmd eq 'submission' ? 'checked="checked"' : '').' /> '. &mt('Select individual students to grade and view submissions.').' - </label> + </label> </div> - <div class="LC_grade_select_mode_type"> - <label> + <div> + <label> <input type="radio" name="radioChoice" value="viewgrades" '. ($saveCmd eq 'viewgrades' ? 'checked="checked"' : '').' /> '. &mt('Grade all selected students in a grading table.').' </label> </div> - <div class="LC_grade_select_mode_type"> - <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next->').'" /> + <div> + <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' →" /> </div> </div> - </div> - </div> - <div class="LC_grade_select_mode_page"> + + <h2> '.&mt('Grade Complete Folder for One Student').' </h2> - <div class="LC_grades_select_mode_body"> - <div class="LC_grade_select_mode_type_body"> - <div class="LC_grade_select_mode_type"> + <div> + <div> <label> <input type="radio" name="radioChoice" value="pickStudentPage" '. - ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '. + ($saveCmd eq 'pickStudentPage' ? 'checked="checked"' : '').' /> '. &mt('The <b>complete</b> page/sequence/folder: For one student').' </label> </div> - <div class="LC_grade_select_mode_type"> - <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next->').'" /> + <div> + <input type="button" onClick="javascript:checkChoice(this.form,\'2\');" value="'.&mt('Next').' →" /> </div> - </div> </div> - </div> - </div> </form>'; $result .= &show_grading_menu_form($symb); return $result; @@ -9049,13 +9052,13 @@ ENDHEADER my $sum=0; my $realnumber=$number; for (my $i=0;$i<$number;$i++) { - if ($answer[$i]) { + if ($correct[$i] eq '-') { + $realnumber--; + } elsif ($answer[$i]) { if ($gradingmechanism eq 'attendance') { $sum+=$pcorrect; - } elsif ($answer[$i] eq '*') { + } elsif ($correct[$i] eq '*') { $sum+=$pcorrect; - } elsif ($answer[$i] eq '-') { - $realnumber--; } else { if ($answer[$i] eq $correct[$i]) { $sum+=$pcorrect;