--- loncom/homework/grades.pm 2007/06/13 17:18:48 1.403 +++ loncom/homework/grades.pm 2007/06/15 22:00:42 1.406 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.403 2007/06/13 17:18:48 albertel Exp $ +# $Id: grades.pm,v 1.406 2007/06/15 22:00:42 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -6078,9 +6078,9 @@ GRADINGMENUJS ''. ' '.&mt('scores from file').' '."\n"; -# $result.=''. -# ''. -# ' '.&mt('clicker file').' '."\n"; + $result.=''. + ''. + ' '.&mt('clicker file').' '."\n"; $result.=''. ' 'iClicker')); + ('iclicker' => 'i>clicker')); $result.=< @@ -6268,12 +6270,92 @@ sub process_clicker_file { my ($symb)=&get_symb($r); if (!$symb) {return '';} my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); - $result.=&show_grading_menu_form($symb); + if (($env{'form.gradingmechanism'} eq 'specific') && ($env{'form.specificid'}!~/\w/)) { + $result.=''.&mt('You need to specify a clicker ID for the correct answer').''; + return $result.&show_grading_menu_form($symb); + } my %clickerids=&gather_clicker_ids(); - foreach my $key (keys %clickerids) { - $result.='
'.$key.' - '.$clickerids{$key}; + my %correctids=(); + if ($env{'form.gradingmechanism'} eq 'personnel') { + %correctids=&gather_adv_clicker_ids(); + } + if ($env{'form.gradingmechanism'} eq 'specific') { + my $correctid=$env{'form.specificid'}; + $correctid=~tr/a-z/A-Z/; + $correctid=~s/\s//gs; + $correctid=~s/^0+//; + $correctids{$correctid}='specified'; } - return $result; + if ($env{'form.gradingmechanism'} eq 'attendance') { + $result.=&mt('Score based on attendance only'); + } else { + my $number=0; + $result.='

'.&mt('Correctness determined by the following IDs').'

'; + foreach my $id (sort(keys(%correctids))) { + $result.=''.$id.' - '; + if ($correctids{$id} eq 'specified') { + $result.=&mt('specified'); + } else { + my ($uname,$udom)=split(/\:/,$correctids{$id}); + $result.=&Apache::loncommon::plainname($uname,$udom); + } + $result.='
'; + $number++; + } + if ($number==0) { + $result.=''.&mt('No IDs found to determine correct answer').''; + return $result.&show_grading_menu_form($symb); + } + } + if (length($env{'form.upfile'}) < 2) { + $result.="Error: The file you attempted to upload, ".&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').", contained no information. Please check that you entered the correct filename."; + return $result.&show_grading_menu_form($symb); + } + my %responses=(); + my @questiontitles=(); + my $errormsg=''; + my $number=0; + if ($env{'form.upfiletype'} eq 'iclicker') { + ($errormsg,$number)=&iclicker_eval(\@questiontitles,\%responses); + } + $result.='
'.&mt('Found [_1] questions',$number).'
'; + foreach my $id (keys %responses) { + $result.='
'.$id.' - '.$responses{$id}; + } + return $result.&show_grading_menu_form($symb); +} + +sub iclicker_eval { + my ($questiontitles,$responses)=@_; + my $number=0; + my $errormsg=''; + foreach my $line (split(/[\n\r]/,$env{'form.upfile'})) { + chomp($line); + foreach my $quoted ($line=~/\,\s*\"([^\"]*)\"\s*\,/g) { + my $replace=$quoted; + $replace=~s/\,//g; + &Apache::lonnet::logthis($quoted.' - '.$replace.'
'); + $line=~s/\,\s*\"\Q$quoted\E\"\s*\,/,$replace,/gs; + } + my @entries=split(/\,/,$line); + if ($entries[0] eq 'Question') { + for (my $i=3;$i<$#entries;$i+=6) { + $$questiontitles[$number]=$entries[$i]; + $number++; + } + } + if ($entries[0]=~/^\#/) { + my $id=$entries[0]; + my @idresponses=(); + $id=~s/^[\#0]+//; + for (my $i=0;$i<$number;$i++) { + my $idx=3+$i*6; + push(@idresponses,$entries[$idx]); + } + $$responses{$id}=join(',',@idresponses); + } + } + return ($errormsg,$number); } sub handler {