--- loncom/homework/grades.pm 2008/11/11 16:40:47 1.529
+++ loncom/homework/grades.pm 2008/12/21 22:01:35 1.539
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.529 2008/11/11 16:40:47 jms Exp $
+# $Id: grades.pm,v 1.539 2008/12/21 22:01:35 riegler Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -26,182 +26,7 @@
# http://www.lon-capa.org/
#
-=head1 NAME
-
-Apache::grades
-
-=head1 SYNOPSIS
-
-Handles the viewing of grades.
-
-This is part of the LearningOnline Network with CAPA project
-described at http://www.lon-capa.org.
-
-=head1 OVERVIEW
-
-Do an ssi with retries:
-While I'd love to factor out this with the vesrion in lonprintout,
-that would either require a data coupling between modules, which I refuse to perpetuate (there's quite enough of that already), or would require the invention of another infrastructure
-I'm not quite ready to invent (e.g. an ssi_with_retry object).
-
-At least the logic that drives this has been pulled out into loncommon.
-
-
-
-ssi_with_retries - Does the server side include of a resource.
- if the ssi call returns an error we'll retry it up to
- the number of times requested by the caller.
- If we still have a proble, no text is appended to the
- output and we set some global variables.
- to indicate to the caller an SSI error occurred.
- All of this is supposed to deal with the issues described
- in LonCAPA BZ 5631 see:
- http://bugs.lon-capa.org/show_bug.cgi?id=5631
- by informing the user that this happened.
-
-Parameters:
- resource - The resource to include. This is passed directly, without
- interpretation to lonnet::ssi.
- form - The form hash parameters that guide the interpretation of the resource
-
- retries - Number of retries allowed before giving up completely.
-Returns:
- On success, returns the rendered resource identified by the resource parameter.
-Side Effects:
- The following global variables can be set:
- ssi_error - If an unrecoverable error occurred this becomes true.
- It is up to the caller to initialize this to false
- if desired.
- ssi_error_resource - If an unrecoverable error occurred, this is the value
- of the resource that could not be rendered by the ssi
- call.
- ssi_error_message - The error string fetched from the ssi response
- in the event of an error.
-
-
-=head1 HANDLER SUBROUTINE
-
-ssi_with_retries()
-
-=head1 OTHER SUBROUTINES
-
-=over
-
-=item *
-
-
-scantron_get_correction() :
-
- Builds the interface screen to interact with the operator to fix a
- specific error condition in a specific scanline
-
- Arguments:
- $r - Apache request object
- $i - number of the current scanline
- $scan_record - hash ref as returned from &scantron_parse_scanline()
- $scan_config - hash ref as returned from &get_scantron_config()
- $line - full contents of the current scanline
- $error - error condition, valid values are
- 'incorrectCODE', 'duplicateCODE',
- 'doublebubble', 'missingbubble',
- 'duplicateID', 'incorrectID'
- $arg - extra information needed
- For errors:
- - duplicateID - paper number that this studentID was seen before on
- - duplicateCODE - array ref of the paper numbers this CODE was
- seen on before
- - incorrectCODE - current incorrect CODE
- - doublebubble - array ref of the bubble lines that have double
- bubble errors
- - missingbubble - array ref of the bubble lines that have missing
- bubble errors
-=item *
-
-scantron_get_maxbubble() :
-
- Returns the maximum number of bubble lines that are expected to
- occur. Does this by walking the selected sequence rendering the
- resource and then checking &Apache::lonxml::get_problem_counter()
- for what the current value of the problem counter is.
-
- Caches the results to $env{'form.scantron_maxbubble'},
- $env{'form.scantron.bubble_lines.n'},
- $env{'form.scantron.first_bubble_line.n'} and
- $env{"form.scantron.sub_bubblelines.n"}
- which are the total number of bubble, lines, the number of bubble
- lines for response n and number of the first bubble line for response n,
- and a comma separated list of numbers of bubble lines for sub-questions
- (for optionresponse, matchresponse, and rankresponse items), for response n.
-
-
-=item *
-
-scantron_validate_missingbubbles() :
-
- Validates all scanlines in the selected file to not have any
- answers that don't have bubbles that have not been verified
- to be bubble free.
-
-=item *
-
-scantron_process_students() :
-
- Routine that does the actual grading of the bubble sheet information.
-
- The parsed scanline hash is added to %env
-
- Then foreach unskipped scanline it does an &Apache::lonnet::ssi()
- foreach resource , with the form data of
-
- 'submitted' =>'scantron'
- 'grade_target' =>'grade',
- 'grade_username'=> username of student
- 'grade_domain' => domain of student
- 'grade_courseid'=> of course
- 'grade_symb' => symb of resource to grade
-
- This triggers a grading pass. The problem grading code takes care
- of converting the bubbled letter information (now in %env) into a
- valid submission.
-
-=item *
-
-scantron_upload_scantron_data() :
-
- Creates the screen for adding a new bubble sheet data file to a course.
-
-=item *
-
-scantron_upload_scantron_data_save() :
-
- Adds a provided bubble information data file to the course if user
- has the correct privileges to do so.
-
-=item *
-
-valid_file() :
-
- Validates that the requested bubble data file exists in the course.
-
-=item *
-
-scantron_download_scantron_data() :
-
- Shows a list of the three internal files (original, corrected,
- skipped) for a specific bubble sheet data file that exists in the
- course.
-
-=item *
-
-scantron_validate_ID() :
-
- Validates all scanlines in the selected file to not have any
- invalid or underspecified student IDs
-
-=back
-
-=cut
package Apache::grades;
use strict;
@@ -392,9 +217,9 @@ sub showResourceInfo {
$partsseen{$partID}=1;
}
my $display_part=&get_display_part($partID,$symb);
- $result.='
'.
- &mt($viewgrade.' Submissions for a Student or a Group of Students')
+ my $result='
'.$viewgrade.
+ &mt(' Submissions for a Student or a Group of Students')
.'
';
my ($table,undef,$hdgrade,$partlist,$handgrade) = &showResourceInfo($symb,$env{'form.probTitle'},($env{'form.showgrading'} eq 'yes'));
my %lt = ( 'multiple' =>
- "Please select a student or group of students before clicking on the Next button.",
+ &mt("Please select a student or group of students before clicking on the Next button."),
'single' =>
- "Please select the student before clicking on the Next button.",
+ &mt("Please select the student before clicking on the Next button."),
);
%lt = &Apache::lonlocal::texthash(%lt);
$request->print(<View Problem Text: [_1]',
+ ' '.&mt('View Problem Text').': '.
''."\n".
''."\n".
- '').' '."\n";
+ ' '."\n";
$gradeTable .=
- ' '.
- &mt('View Answer: [_1]',
+ ' '.&mt('View Answer').': '.
''."\n".
''."\n".
- '').' '."\n";
+ ' '."\n";
my $submission_options;
if ($env{'form.handgrade'} eq 'yes' && scalar(@$partlist) > 1) {
@@ -1038,18 +861,16 @@ LISTJAVASCRIPT
''."\n".
'';
$gradeTable .=
- ' '.
- &mt('Submissions: [_1]',$submission_options).' '."\n";
+ ' '.&mt('Submissions').': '.$submission_options.' '."\n";
$gradeTable .=
- ' '.
- &mt('Grading Increments: [_1]',
+ ' '.&mt('Grading Increments').': '.
'');
+ '';
$gradeTable .=
&build_section_inputs().
@@ -1068,15 +889,14 @@ LISTJAVASCRIPT
&Apache::lonhtmlcommon::StatusOptions($saveStatus,undef,1,'javascript:reLoadList(this.form);')).' ';
}
- $gradeTable.=&mt('To '.lc($viewgrade).' a submission or a group of submissions, click on the check box(es) '.
- 'next to the student\'s name(s). Then click on the Next button.').' '."\n".
+ $gradeTable.=&mt('To [_1] a submission or a group of submissions, click on the check box(es) next to the student\'s name(s). Then click on the Next button.',lc($viewgrade)).' '."\n".
''."\n";
# checkall buttons
$gradeTable.=&check_script('gradesub', 'stuinfo');
$gradeTable.=' '."\n";
+ 'value="'.&mt('Next').' →" /> '."\n";
$gradeTable.=&check_buttons();
$gradeTable.='';
my ($classlist, undef, $fullname) = &getclasslist($getsec,'1',$getgroup);
@@ -1196,7 +1016,7 @@ LISTJAVASCRIPT
$gradeTable.=&Apache::loncommon::end_data_table()."\n".
''."\n";
+ 'value="'.&mt('Next').' →" />'."\n";
if ($ctr == 0) {
my $num_students=(scalar(keys(%$fullname)));
if ($num_students eq 0) {
@@ -1292,6 +1112,7 @@ sub processGroup {
#--- Javascript to handle the submission page functionality ---
sub sub_page_js {
my $request = shift;
+ my $alertmsg = &mt('A number equal or greater than 0 is expected. Entered value = ');
$request->print(<
function updateRadio(formname,id,weight) {
@@ -1302,7 +1123,7 @@ sub sub_page_js {
gradeBox.value = pts;
var resetbox = false;
if (isNaN(pts) || pts < 0) {
- alert("A number equal or greater than 0 is expected. Entered value = "+pts);
+ alert("$alertmsg"+pts);
for (var i=0; iprint(<
@@ -1579,7 +1401,7 @@ INNERJS
else return;
var cleantxt = txt.replace(new RegExp('([\\f\\n\\r\\t\\v ])+', 'g')," ");
if (cleantxt=="") {
- alert("Please select a word or group of words from document and then click this link.");
+ alert("$alertmsg");
return;
}
var nret = prompt("Add selection to keyword list? Edit if desired.",cleantxt);
@@ -1818,7 +1640,7 @@ sub gradeBox {
my $radio.='
'."\n"; # display radio buttons in a nice table 10 across
while ($thisweight<=$wgt) {
- $radio.= '
Part: '.
$display_part.' ( ID '.$respid.
' ) '.
- ''.&mt('Nothing submitted - no attempts').'
';
+ ''.&mt('Nothing submitted - no attempts.').'
';
next;
}
foreach my $submission (@$string) {
@@ -2509,7 +2331,7 @@ sub get_last_submission {
}
if (!@string) {
$string[0] =
- 'Nothing submitted - no attempts.';
+ ''.&mt('Nothing submitted - no attempts.').'';
}
return (\@string,\$timestamp);
}
@@ -2933,8 +2755,10 @@ sub handback_files {
$newflg.'_'.$part_resp.'_returndoc'.$file_counter,
$save_file_name);
if ($result !~ m|^/uploaded/|) {
- $request->print('An error occurred ('.$result.
- ') while trying to upload '.$newflg.'_'.$part_resp.'_returndoc'.$file_counter.' ');
+ $request->print(' '.
+ &mt('An error occurred ([_1]) while trying to upload [_2].',
+ $result,$newflg.'_'.$part_resp.'_returndoc'.$file_counter).
+ '');
} else {
# mark the file as read only
my @files = ($save_file_name);
@@ -3153,6 +2977,7 @@ sub file_name_version_ext {
sub viewgrades_js {
my ($request) = shift;
+ my $alertmsg = &mt('A number equal or greater than 0 is expected. Entered value = ');
$request->print(<
function writePoint(partid,weight,point) {
@@ -3161,7 +2986,7 @@ sub viewgrades_js {
if (point == "textval") {
point = document.classgrade["TEXTVAL_"+partid].value;
if (isNaN(point) || parseFloat(point) < 0) {
- alert("A number equal or greater than 0 is expected. Entered value = "+parseFloat(point));
+ alert("$alertmsg"+parseFloat(point));
var resetbox = false;
for (var i=0; i'.
- &mt("Assign Common Grade To $sectionClass",$section_display).'';
+ &mt("Assign Common Grade to [_1]",$sectionClass,$section_display).'';
$result.= &Apache::loncommon::start_data_table();
#radio buttons/text box for assigning points for a section or class.
#handles different parts of a problem
@@ -3391,8 +3216,8 @@ sub viewgrades {
my $line = ' /'.
- $weight{$partid}.' (problem weight)'."\n";
- $line.= '