Diff for /loncom/homework/grades.pm between versions 1.402 and 1.407

version 1.402, 2007/06/13 15:22:38 version 1.407, 2007/06/15 22:10:15
Line 41  use Apache::Constants qw(:common); Line 41  use Apache::Constants qw(:common);
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonenc;  use Apache::lonenc;
 use String::Similarity;  use String::Similarity;
 use lib '/home/httpd/lib/perl';  
 use LONCAPA;  use LONCAPA;
   
 use POSIX qw(floor);  use POSIX qw(floor);
Line 1959  KEYWORDS Line 1958  KEYWORDS
  ($env{'form.lastSub'} eq 'hdgrade' &&    ($env{'form.lastSub'} eq 'hdgrade' && 
  $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) {   $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) {
  my $display_part=&get_display_part($partid,$symb);   my $display_part=&get_display_part($partid,$symb);
  $lastsubonly.='<tr><td bgcolor="#ffffe6">Debug -'.'<b>Part:</b> '.   $lastsubonly.='<tr><td bgcolor="#ffffe6"><b>Part:</b> '.
     $display_part.' <span class="LC_internal_info">( hhhh ID '.$respid.      $display_part.' <span class="LC_internal_info">( ID '.$respid.
     ' )</span>&nbsp; &nbsp;';      ' )</span>&nbsp; &nbsp;';
  my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record);   my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record);
  if (@$files) {   if (@$files) {
Line 6078  GRADINGMENUJS Line 6077  GRADINGMENUJS
  '<input type="button" onClick="javascript:checkChoice(this.form,\'3\',\'csvform\');" value="'.&mt('Upload').'" />'.   '<input type="button" onClick="javascript:checkChoice(this.form,\'3\',\'csvform\');" value="'.&mt('Upload').'" />'.
  ' '.&mt('scores from file').' </td></tr>'."\n";   ' '.&mt('scores from file').' </td></tr>'."\n";
   
 #    $result.='<tr bgcolor="#ffffe6"><td>'.      $result.='<tr bgcolor="#ffffe6"><td>'.
 #        '<input type="button" onClick="javascript:checkChoice(this.form,\'6\',\'processclicker\');" value="'.&mt('Process').'" />'.          '<input type="button" onClick="javascript:checkChoice(this.form,\'6\',\'processclicker\');" value="'.&mt('Process').'" />'.
 #        ' '.&mt('clicker file').' </td></tr>'."\n";          ' '.&mt('clicker file').' </td></tr>'."\n";
   
     $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.      $result.='<tr bgcolor="#ffffe6"valign="top"><td colspan="2">'.
  '<input type="button" onClick="javascript:checkChoice(this.form,\'4\',\'scantron_selectphase\');'.   '<input type="button" onClick="javascript:checkChoice(this.form,\'4\',\'scantron_selectphase\');'.
Line 6130  sub init_perm { Line 6129  sub init_perm {
 }  }
   
 sub gather_clicker_ids {  sub gather_clicker_ids {
     my %clickerids=();      my %clicker_ids=();
   
     my $classlist = &Apache::loncoursedata::get_classlist();      my $classlist = &Apache::loncoursedata::get_classlist();
   
     # Set up a couple variables.      # Set up a couple variables.
     my $usernameidx = &Apache::loncoursedata::CL_SNAME();      my $username_idx = &Apache::loncoursedata::CL_SNAME();
     my $domainidx   = &Apache::loncoursedata::CL_SDOM();      my $domain_idx   = &Apache::loncoursedata::CL_SDOM();
   
     foreach my $student (keys %$classlist) {      foreach my $student (keys(%$classlist)) {
   
         my $username = $classlist->{$student}->[$usernameidx];          my $username = $classlist->{$student}->[$username_idx];
         my $domain   = $classlist->{$student}->[$domainidx];          my $domain   = $classlist->{$student}->[$domain_idx];
         my $clickers =          my $clickers =
    (&Apache::lonnet::userenvironment($domain,$username,'clickers'))[1];     (&Apache::lonnet::userenvironment($domain,$username,'clickers'))[1];
         foreach my $id (split(/\,/,$clickers)) {          foreach my $id (split(/\,/,$clickers)) {
             if (exists($clickerids{$id})) {              $id=~s/^0+//;
                $clickerids{$id}.=','.$username.':'.$domain;              if (exists($clicker_ids{$id})) {
                  $clicker_ids{$id}.=','.$username.':'.$domain;
             } else {              } else {
                $clickerids{$id}=$username.':'.$domain;                 $clicker_ids{$id}=$username.':'.$domain;
             }              }
         }          }
     }      }
     return %clickerids;      return %clicker_ids;
 }  }
   
 sub gather_adv_clicker_ids {  sub gather_adv_clicker_ids {
     my %clickerids=();      my %clicker_ids=();
     my $cnum=$env{'course.'.$env{'request.course.id'}.'.num'};      my $cnum=$env{'course.'.$env{'request.course.id'}.'.num'};
     my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'};      my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
     my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);      my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);
Line 6165  sub gather_adv_clicker_ids { Line 6165  sub gather_adv_clicker_ids {
             my ($puname,$pudom)=split(/\:/,$person);              my ($puname,$pudom)=split(/\:/,$person);
             my $clickers =              my $clickers =
                (&Apache::lonnet::userenvironment($pudom,$puname,'clickers'))[1];                 (&Apache::lonnet::userenvironment($pudom,$puname,'clickers'))[1];
                foreach my $id (split(/\,/,$clickers)) {              foreach my $id (split(/\,/,$clickers)) {
                if (exists($clickerids{$id})) {                 $id=~s/^0+//;
                   $clickerids{$id}.=','.$puname.':'.$pudom;                 if (exists($clicker_ids{$id})) {
                     $clicker_ids{$id}.=','.$puname.':'.$pudom;
                } else {                 } else {
                   $clickerids{$id}=$puname.':'.$pudom;                    $clicker_ids{$id}=$puname.':'.$pudom;
                }                 }
            }              }
         }          }
     }      }
     return %clickerids;      return %clicker_ids;
 }  }
   
 sub process_clicker {  sub process_clicker {
Line 6194  sub process_clicker { Line 6195  sub process_clicker {
     my $type=&mt("Type");      my $type=&mt("Type");
     my $attendance=&mt("Award points just for participation");      my $attendance=&mt("Award points just for participation");
     my $personnel=&mt("Correctness determined from response by course personnel");      my $personnel=&mt("Correctness determined from response by course personnel");
     my $specific=&mt("Correctness determind from response with clicker ID");       my $specific=&mt("Correctness determined from response with clicker ID"); 
     my $pcorrect=&mt("Percentage points for correct solution");      my $pcorrect=&mt("Percentage points for correct solution");
     my $pincorrect=&mt("Percentage points for incorrect solution");      my $pincorrect=&mt("Percentage points for incorrect solution");
     my $selectform=&Apache::loncommon::select_form('iclicker','upfiletype',      my $selectform=&Apache::loncommon::select_form('iclicker','upfiletype',
                                   ('iclicker' => 'iClicker'));                                    ('iclicker' => 'i>clicker'));
   
     $result.=<<ENDUPFORM;      $result.=<<ENDUPFORM;
 <script type="text/javascript">  <script type="text/javascript">
Line 6268  sub process_clicker_file { Line 6269  sub process_clicker_file {
     my ($symb)=&get_symb($r);      my ($symb)=&get_symb($r);
     if (!$symb) {return '';}      if (!$symb) {return '';}
     my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});      my ($result) = &showResourceInfo($symb,$env{'form.probTitle'});
     $result.=&show_grading_menu_form($symb);      if (($env{'form.gradingmechanism'} eq 'specific') && ($env{'form.specificid'}!~/\w/)) {
     my %clickerids=&gather_clicker_ids();         $result.='<span class="LC_error">'.&mt('You need to specify a clicker ID for the correct answer').'</span>';
     foreach my $key (keys %clickerids) {         return $result.&show_grading_menu_form($symb);
        $result.='<br />'.$key.' - '.$clickerids{$key};      }
       my %clicker_ids=&gather_clicker_ids();
       my %correct_ids=();
       if ($env{'form.gradingmechanism'} eq 'personnel') {
          %correct_ids=&gather_adv_clicker_ids();
       }
       if ($env{'form.gradingmechanism'} eq 'specific') {
          my $correct_id=$env{'form.specificid'};
          $correct_id=~tr/a-z/A-Z/;
          $correct_id=~s/\s//gs;
          $correct_id=~s/^0+//;
          $correct_ids{$correct_id}='specified';
     }      }
     return $result;      if ($env{'form.gradingmechanism'} eq 'attendance') {
          $result.=&mt('Score based on attendance only');
       } else {
          my $number=0;
          $result.='<h3>'.&mt('Correctness determined by the following IDs').'</h3>';
          foreach my $id (sort(keys(%correct_ids))) {
             $result.='<tt>'.$id.'</tt> - ';
             if ($correct_ids{$id} eq 'specified') {
                $result.=&mt('specified');
             } else {
                my ($uname,$udom)=split(/\:/,$correct_ids{$id});
                $result.=&Apache::loncommon::plainname($uname,$udom);
             }
             $result.='<br />';
             $number++;
          }
          if ($number==0) {
             $result.='<span class="LC_error">'.&mt('No IDs found to determine correct answer').'</span>';
             return $result.&show_grading_menu_form($symb);
          }
       }
       if (length($env{'form.upfile'}) < 2) {
           $result.=&mt('[_1] Error: [_2] The file you attempted to upload, [_3] contained no information. Please check that you entered the correct filename.',
        '<span class="LC_error">',
        '</span>',
        '<span class="LC_filename">'.&HTML::Entities::encode($env{'form.upfile.filename'},'<>&"').'</span>');
           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.='<br />'.&mt('Found [_1] questions',$number).'<br />';
       foreach my $id (keys %responses) {
          $result.='<br />'.$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.'<br />');
             $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 {  sub handler {

Removed from v.1.402  
changed lines
  Added in v.1.407


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>