--- loncom/homework/grades.pm 2010/12/20 21:23:38 1.641
+++ loncom/homework/grades.pm 2011/04/06 13:50:38 1.647
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.641 2010/12/20 21:23:38 raeburn Exp $
+# $Id: grades.pm,v 1.647 2011/04/06 13:50:38 bisitz Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -40,7 +40,7 @@ use Apache::lonhomework;
use Apache::lonpickcode;
use Apache::loncoursedata;
use Apache::lonmsg();
-use Apache::Constants qw(:common);
+use Apache::Constants qw(:common :http);
use Apache::lonlocal;
use Apache::lonenc;
use Apache::lonstathelpers;
@@ -1512,7 +1512,7 @@ INNERJS
var ypos = (screen.height-height)/2-30;
ypos = (ypos < 0) ? '0' : ypos;
- pWin = window.open('', 'MessageCenter', 'resizable=yes,toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=600,height='+height);
+ pWin = window.open('', 'MessageCenter', 'resizable=yes,toolbar=no,location=no,scrollbars='+scrollbar+',screenx='+xpos+',screeny='+ypos+',width=700,height='+height);
pWin.focus();
pDoc = pWin.document;
pDoc.$docopen;
@@ -6199,15 +6199,15 @@ sub scantron_do_warning {
if ( $env{'form.selectpage'} eq '' ||
$env{'form.scantron_selectfile'} eq '' ||
$env{'form.scantron_format'} eq '' ) {
- $r->print("
".&mt('You have forgetten to specify some information. Please go Back and try again.')."
");
+ $r->print("".&mt('You have forgotten to specify some information. Please go Back and try again.')."
");
if ( $env{'form.selectpage'} eq '') {
$r->print(''.&mt('You have not selected a Sequence to grade').'
');
}
if ( $env{'form.scantron_selectfile'} eq '') {
- $r->print(''.&mt('You have not selected a file that contains the student\'s response data.').'
');
+ $r->print(''.&mt("You have not selected a file that contains the student's response data.").'
');
}
if ( $env{'form.scantron_format'} eq '') {
- $r->print(''.&mt('You have not selected a the format of the student\'s response data.').'
');
+ $r->print(''.&mt("You have not selected the format of the student's response data.").'
');
}
} else {
my $warning=&scantron_warning_screen('Grading: Validate Records');
@@ -8841,7 +8841,7 @@ sub process_clicker_file {
if ($env{'form.gradingmechanism'} eq 'given') {
$env{'form.givenanswer'}=~s/^\s*//gs;
$env{'form.givenanswer'}=~s/\s*$//gs;
- $env{'form.givenanswer'}=~s/[^a-zA-Z0-9\.\*\-]+/\,/g;
+ $env{'form.givenanswer'}=~s/[^a-zA-Z0-9\.\*\-\+]+/\,/g;
$env{'form.givenanswer'}=uc($env{'form.givenanswer'});
my @answers=split(/\,/,$env{'form.givenanswer'});
$foundgiven=$#answers+1;
@@ -8973,7 +8973,7 @@ ENDHEADER
"\n".&mt("Username").": ".
"\n".&mt("Domain").": ".
&Apache::loncommon::select_dom_form($env{'course.'.$env{'request.course.id'}.'.domain'},'udom'.$id).' '.
- &Apache::loncommon::selectstudent_link('clickeranalysis','uname'.$id,'udom'.$id);
+ &Apache::loncommon::selectstudent_link('clickeranalysis','uname'.$id,'udom'.$id,0,$id);
$unknown_count++;
}
}
@@ -9019,6 +9019,7 @@ sub iclicker_eval {
$id=~s/^[\#0]+//;
for (my $i=0;$i<$number;$i++) {
my $idx=3+$i*6;
+ $entries[$idx]=~s/[^a-zA-Z0-9\.\*\-\+]+//g;
push(@idresponses,$entries[$idx]);
}
$$responses{$id}=join(',',@idresponses);
@@ -9090,20 +9091,20 @@ sub assign_clicker_grades {
$result.='
'.
&mt('More than one correct result given for question "[_1]": [_2] versus [_3].',
$env{'form.question:'.$i},$correct[$i],$input[$i]).'';
- } elsif ($input[$i]) {
+ } elsif (($input[$i]) || ($input[$i] eq '0')) {
$correct[$i]=$input[$i];
}
}
}
}
for (my $i=0;$i<$number;$i++) {
- if (!$correct[$i]) {
+ if ((!$correct[$i]) && ($correct[$i] ne '0')) {
$result.='
'.
&mt('No correct result given for question "[_1]"!',
$env{'form.question:'.$i}).'';
}
}
- $result.='
'.&mt("Correct answer: [_1]",join(', ',map { ($_?$_:'-') } @correct));
+ $result.='
'.&mt("Correct answer: [_1]",join(', ',map { ((($_) || ($_ eq '0'))?$_:'-') } @correct));
}
# Start grading
my $pcorrect=$env{'form.pcorrect'};
@@ -9136,17 +9137,29 @@ sub assign_clicker_grades {
for (my $i=0;$i<$number;$i++) {
if ($correct[$i] eq '-') {
$realnumber--;
- } elsif ($answer[$i]) {
+ } elsif (($answer[$i]) || ($answer[$i]=~/^[0\.]+$/)) {
if ($gradingmechanism eq 'attendance') {
$sum+=$pcorrect;
} elsif ($correct[$i] eq '*') {
$sum+=$pcorrect;
} else {
- if ($answer[$i] eq $correct[$i]) {
- $sum+=$pcorrect;
- } else {
- $sum+=$pincorrect;
+# We actually grade if correct or not
+ my $increment=$pincorrect;
+# Special case: numerical answer "0"
+ if ($correct[$i] eq '0') {
+ if ($answer[$i]=~/^[0\.]+$/) {
+ $increment=$pcorrect;
+ }
+# General numerical answer, both evaluate to something non-zero
+ } elsif ((1.0*$correct[$i]!=0) && (1.0*$answer[$i]!=0)) {
+ if (1.0*$correct[$i]==1.0*$answer[$i]) {
+ $increment=$pcorrect;
+ }
+# Must be just alphanumeric
+ } elsif ($answer[$i] eq $correct[$i]) {
+ $increment=$pcorrect;
}
+ $sum+=$increment;
}
}
}
@@ -9187,7 +9200,7 @@ sub startpage {
unshift(@$crumbs,{href=>&href_symb_cmd($symb,'gradingmenu'),text=>"Grading"});
$r->print(&Apache::loncommon::start_page('Grading',undef,
{'bread_crumbs' => $crumbs}));
- &Apache::lonquickgrades::startGradeScreen($r,'grading');
+ &Apache::lonquickgrades::startGradeScreen($r,($env{'form.symb'}?'probgrading':'grading'));
unless ($nodisplayflag) {
$r->print(&Apache::lonhtmlcommon::resource_info_box($symb,$onlyfolderflag));
}
@@ -9204,15 +9217,25 @@ sub select_problem {
sub handler {
my $request=$_[0];
&reset_caches();
- if ($env{'browser.mathml'}) {
- &Apache::loncommon::content_type($request,'text/xml');
- } else {
- &Apache::loncommon::content_type($request,'text/html');
+ if ($request->header_only) {
+ &Apache::loncommon::content_type($request,'text/html');
+ $request->send_http_header;
+ return OK;
}
- $request->send_http_header;
- return '' if $request->header_only;
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
+ &init_perm();
+ if (!$env{'request.course.id'}) {
+ # Not in a course.
+ $env{'user.error.msg'}="/adm/grades::vgr:0:0:Cannot display grades page outside course context";
+ return HTTP_NOT_ACCEPTABLE;
+ } elsif (!%perm) {
+ $request->internal_redirect('/adm/quickgrades');
+ }
+ &Apache::loncommon::content_type($request,'text/html');
+ $request->send_http_header;
+
+
# see what command we need to execute
my @commands=&Apache::loncommon::get_env_multiple('form.command');
@@ -9229,7 +9252,7 @@ sub handler {
(my $url=$env{'form.url'}) =~ s-^https*://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
$symb=&Apache::lonnet::symbread($url);
}
- &Apache::lonenc::check_decrypt(\$symb);
+ &Apache::lonenc::check_decrypt(\$symb);
$ssi_error = 0;
if (($symb eq '' || $command eq '') && ($env{'request.course.id'})) {
@@ -9239,7 +9262,6 @@ sub handler {
&startpage($request,undef,[],1,1);
&select_problem($request);
} else {
- &init_perm();
if ($command eq 'submission' && $perm{'vgr'}) {
&startpage($request,$symb,[{href=>"", text=>"Student Submissions"}]);
($env{'form.student'} eq '' ? &listStudents($request,$symb) : &submission($request,0,0,$symb));
@@ -9383,7 +9405,7 @@ sub handler {
&Apache::lonquickgrades::endGradeScreen($request);
$request->print(&Apache::loncommon::end_page());
&reset_caches();
- return '';
+ return OK;
}
1;