Diff for /loncom/homework/grades.pm between versions 1.701 and 1.709

version 1.701, 2013/08/15 12:38:30 version 1.709, 2013/12/06 14:19:49
Line 1084  LISTJAVASCRIPT Line 1084  LISTJAVASCRIPT
     if ($submitonly eq 'graded'   ) { $submissions = 'ungraded submissions'; }      if ($submitonly eq 'graded'   ) { $submissions = 'ungraded submissions'; }
     if ($submitonly eq 'queued'   ) { $submissions = 'queued submissions'; }      if ($submitonly eq 'queued'   ) { $submissions = 'queued submissions'; }
     $gradeTable='<br />&nbsp;<span class="LC_warning">'.      $gradeTable='<br />&nbsp;<span class="LC_warning">'.
  &mt('No '.$submissions.' found for this resource for any students. ([_1] students checked for '.$submissions.')',   &mt('No '.$submissions.' found for this resource for any students. ([quant,_1,student] checked for '.$submissions.')',
     $num_students).      $num_students).
  '</span><br />';   '</span><br />';
  }   }
Line 1976  sub submission { Line 1976  sub submission {
     $request->print(&show_problem($request,$symb,$uname,$udom,0,1,$mode));      $request->print(&show_problem($request,$symb,$uname,$udom,0,1,$mode));
  }   }
   
  # kwclr is the only variable that is guaranteed to be non blank    # kwclr is the only variable that is guaranteed not to be blank 
         # if this subroutine has been called once.          # if this subroutine has been called once.
  my %keyhash = ();   my %keyhash = ();
 # if ($env{'form.kwclr'} eq '' && $env{'form.handgrade'} eq 'yes') {  # if ($env{'form.kwclr'} eq '' && $env{'form.handgrade'} eq 'yes') {
Line 2080  KEYWORDS Line 2080  KEYWORDS
     if ($perm{'vgr'}) {      if ($perm{'vgr'}) {
         $request->print(          $request->print(
             &Apache::loncommon::track_student_link(              &Apache::loncommon::track_student_link(
                 &mt('View recent activity'),                  'View recent activity',
                 $uname,$udom,'check')                  $uname,$udom,'check')
            .' '             .' '
         );          );
Line 2139  KEYWORDS Line 2139  KEYWORDS
  $result.=$sub_result;   $result.=$sub_result;
     }      }
     $request->print($result."\n");      $request->print($result."\n");
       
     # print student answer/submission      # print student answer/submission
     # Options are (1) Handgraded submission only      # Options are (1) Handgraded submission only
     #             (2) Last submission, includes submission that is not handgraded       #             (2) Last submission, includes submission that is not handgraded 
     #                  (for multi-response type part)      #                  (for multi-response type part)
     #             (3) Last submission plus the parts info      #             (3) Last submission plus the parts info
     #             (4) The whole record for this student      #             (4) The whole record for this student
     if ($env{'form.lastSub'} =~ /^(lastonly|hdgrade)$/) {      
  my ($string,$timestamp)= &get_last_submission(\%record);      my ($string,$timestamp)= &get_last_submission(\%record);
   
  my $lastsubonly;      my $lastsubonly;
   
         if ($$timestamp eq '') {      if ($$timestamp eq '') {
             $lastsubonly.='<div class="LC_grade_submissions_body">'.$$string[0].'</div>';           $lastsubonly.='<div class="LC_grade_submissions_body">'.$$string[0].'</div>'; 
         } else {      } else {
             $lastsubonly =          $lastsubonly =
                 '<div class="LC_grade_submissions_body">'              '<div class="LC_grade_submissions_body">'
                .'<b>'.&mt('Date Submitted:').'</b> '.$$timestamp."\n";             .'<b>'.&mt('Date Submitted:').'</b> '.$$timestamp."\n";
   
     my %seenparts;   my %seenparts;
     my @part_response_id = &flatten_responseType($responseType);   my @part_response_id = &flatten_responseType($responseType);
     foreach my $part (@part_response_id) {   foreach my $part (@part_response_id) {
  next if ($env{'form.lastSub'} eq 'hdgrade'       next if ($env{'form.lastSub'} eq 'hdgrade' 
  && $$handgrade{$$part[0].'_'.$$part[1]} ne 'yes');   && $$handgrade{$$part[0].'_'.$$part[1]} ne 'yes');
   
  my ($partid,$respid) = @{ $part };      my ($partid,$respid) = @{ $part };
  my $display_part=&get_display_part($partid,$symb);      my $display_part=&get_display_part($partid,$symb);
  if ($env{"form.$uname:$udom:$partid:submitted_by"}) {      if ($env{"form.$uname:$udom:$partid:submitted_by"}) {
     if (exists($seenparts{$partid})) { next; }   if (exists($seenparts{$partid})) { next; }
     $seenparts{$partid}=1;   $seenparts{$partid}=1;
                     $request->print(                  $request->print(
                         '<b>'.&mt('Part: [_1]',$display_part).'</b>'.                      '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
                         ' <b>'.&mt('Collaborative submission by: [_1]',                      ' <b>'.&mt('Collaborative submission by: [_1]',
                                    '<a href="javascript:viewSubmitter(\''.                                 '<a href="javascript:viewSubmitter(\''.
                                    $env{"form.$uname:$udom:$partid:submitted_by"}.                                 $env{"form.$uname:$udom:$partid:submitted_by"}.
                                    '\');" target="_self">'.                                 '\');" target="_self">'.
                                    $$fullname{$env{"form.$uname:$udom:$partid:submitted_by"}}.'</a>').                                 $$fullname{$env{"form.$uname:$udom:$partid:submitted_by"}}.'</a>').
                         '<br />');                      '<br />');
     next;   next;
  }  
  my $responsetype = $responseType->{$partid}->{$respid};  
  if (!exists($record{"resource.$partid.$respid.submission"})) {  
                     $lastsubonly.="\n".'<div class="LC_grade_submission_part">'.  
                         '<b>'.&mt('Part: [_1]',$display_part).'</b>'.  
                         ' <span class="LC_internal_info">'.  
                         '('.&mt('Response ID: [_1]',$respid).')'.  
                         '</span>&nbsp; &nbsp;'.  
  '<span class="LC_warning">'.&mt('Nothing submitted - no attempts.').'</span><br /><br /></div>';  
     next;  
  }   }
  foreach my $submission (@$string) {      my $responsetype = $responseType->{$partid}->{$respid};
     my ($partid,$respid) = ($submission =~ /^resource\.([^\.]*)\.([^\.]*)\.submission/);      if (!exists($record{"resource.$partid.$respid.submission"})) {
     if (join('_',@{$part}) ne ($partid.'_'.$respid)) { next; }                  $lastsubonly.="\n".'<div class="LC_grade_submission_part">'.
     my ($ressub,$hide,$subval) = split(/:/,$submission,3);                      '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
     # Similarity check                      ' <span class="LC_internal_info">'.
     my $similar='';                      '('.&mt('Response ID: [_1]',$respid).')'.
                     my ($type,$trial,$rndseed);                      '</span>&nbsp; &nbsp;'.
                     if ($hide eq 'rand') {            '<span class="LC_warning">'.&mt('Nothing submitted - no attempts.').'</span><br /><br /></div>';
                         $type = 'randomizetry';   next;
                         $trial = $record{"resource.$partid.tries"};      }
                         $rndseed = $record{"resource.$partid.rndseed"};      foreach my $submission (@$string) {
                     }   my ($partid,$respid) = ($submission =~ /^resource\.([^\.]*)\.([^\.]*)\.submission/);
     if($env{'form.checkPlag'}){   if (join('_',@{$part}) ne ($partid.'_'.$respid)) { next; }
  my ($oname,$odom,$ocrsid,$oessay,$osim)=   my ($ressub,$hide,$subval) = split(/:/,$submission,3);
     &most_similar($uname,$udom,$symb,$subval);   # Similarity check
  if ($osim) {                  my $similar='';
     $osim=int($osim*100.0);                  my ($type,$trial,$rndseed);
     my %old_course_desc =                   if ($hide eq 'rand') {
  &Apache::lonnet::coursedescription($ocrsid,                      $type = 'randomizetry';
    {'one_time' => 1});                      $trial = $record{"resource.$partid.tries"};
                       $rndseed = $record{"resource.$partid.rndseed"};
                             if ($hide eq 'anon') {                  }
                                 $similar='<hr /><span class="LC_warning">'.&mt("Essay was found to be similar to another essay submitted for this assignment.").'<br />'.          if ($env{'form.checkPlag'}) {
                                          &mt('As the current submission is for an anonymous survey, no other details are available.').'</span><hr />';         my ($oname,$odom,$ocrsid,$oessay,$osim)=
                             } else {          &most_similar($uname,$udom,$symb,$subval);
         $similar="<hr /><h3><span class=\"LC_warning\">".      if ($osim) {
     &mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])',   $osim=int($osim*100.0);
         $osim,   my %old_course_desc = 
         &Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')',      &Apache::lonnet::coursedescription($ocrsid,
    {'one_time' => 1});
   
                           if ($hide eq 'anon') {
                               $similar='<hr /><span class="LC_warning">'.&mt("Essay was found to be similar to another essay submitted for this assignment.").'<br />'.
                                        &mt('As the current submission is for an anonymous survey, no other details are available.').'</span><hr />';
                           } else {
       $similar="<hr /><h3><span class=\"LC_warning\">".
    &mt('Essay is [_1]% similar to an essay by [_2] in course [_3] (course id [_4]:[_5])',
       $osim,
       &Apache::loncommon::plainname($oname,$odom).' ('.$oname.':'.$odom.')',
         $old_course_desc{'description'},          $old_course_desc{'description'},
         $old_course_desc{'num'},          $old_course_desc{'num'},
         $old_course_desc{'domain'}).          $old_course_desc{'domain'}).
     '</span></h3><blockquote><i>'.      '</span></h3><blockquote><i>'.
     &keywords_highlight($oessay).      &keywords_highlight($oessay).
     '</i></blockquote><hr />';      '</i></blockquote><hr />';
                             }                          }
  }              }
     }   }
     my $order=&get_order($partid,$respid,$symb,$uname,$udom,   my $order=&get_order($partid,$respid,$symb,$uname,$udom,
                                          undef,$type,$trial,$rndseed);                                       undef,$type,$trial,$rndseed);
     if ($env{'form.lastSub'} eq 'lastonly' ||                   if ($env{'form.lastSub'} eq 'lastonly' || $env{'form.lastSub'} eq 'datesub' || $env{'form.lastSub'} =~ /^(last|all)$/ || ($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.='<div class="LC_grade_submission_part">'.                      $lastsubonly.='<div class="LC_grade_submission_part">'.
                             '<b>'.&mt('Part: [_1]',$display_part).'</b>'.                          '<b>'.&mt('Part: [_1]',$display_part).'</b>'.
                             ' <span class="LC_internal_info">'.                          ' <span class="LC_internal_info">'.
                             '('.&mt('Response ID: [_1]',$respid).')'.                          '('.&mt('Response ID: [_1]',$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) {
                             if ($hide eq 'anon') {  
                                 $lastsubonly.='<br />'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files}));  
                             } else {  
                                 $lastsubonly.='<br /><br />'.'<b>'.&mt('Submitted Files:').'</b>'  
                                             .'<br /><span class="LC_warning">';  
                                 if(@$files == 1) {  
                                     $lastsubonly .= &mt('Like all files provided by users, this file may contain viruses!');  
                                 } else {  
                                     $lastsubonly .= &mt('Like all files provided by users, these files may contain viruses!');  
                                 }  
                                 $lastsubonly .= '</span>';                           
                                 foreach my $file (@$files) {  
                                     &Apache::lonnet::allowuploaded('/adm/grades',$file);  
                                     $lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" alt="" /> '.$file.'</a>';  
                                 }  
                             }  
     $lastsubonly.='<br />';  
  }  
                         if ($hide eq 'anon') {                          if ($hide eq 'anon') {
                             $lastsubonly.='<br /><b>'.&mt('Anonymous Survey').'</b>';                               $lastsubonly.='<br />'.&mt('[quant,_1,file] uploaded to this anonymous survey',scalar(@{$files}));
                         } else {                          } else {
     $lastsubonly.='<br /><b>'.&mt('Submitted Answer:').' </b>'.                              $lastsubonly.='<br /><br />'.'<b>'.&mt('Submitted Files:').'</b>'
         &cleanRecord($subval,$responsetype,$symb,$partid,                                          .'<br /><span class="LC_warning">';
      $respid,\%record,$order,undef,$uname,$udom,$type,$trial,$rndseed);                              if(@$files == 1) {
                                   $lastsubonly .= &mt('Like all files provided by users, this file may contain viruses!');
                               } else {
                                   $lastsubonly .= &mt('Like all files provided by users, these files may contain viruses!');
                               }
                               $lastsubonly .= '</span>';                         
                               foreach my $file (@$files) {
                                   &Apache::lonnet::allowuploaded('/adm/grades',$file);
                                   $lastsubonly.='<br /><a href="'.$file.'?rawmode=1" target="lonGRDs"><img src="'.&Apache::loncommon::icon($file).'" border="0" alt="" /> '.$file.'</a>';
                               }
                         }                          }
  if ($similar) {$lastsubonly.="<br /><br />$similar\n";}   $lastsubonly.='<br />';
  $lastsubonly.='</div>';                      }
     }                      if ($hide eq 'anon') {
                           $lastsubonly.='<br /><b>'.&mt('Anonymous Survey').'</b>'; 
                       } else {
                        $lastsubonly.='<br /><b>'.&mt('Submitted Answer:').' </b>'.
       &cleanRecord($subval,$responsetype,$symb,$partid,
    $respid,\%record,$order,undef,$uname,$udom,$type,$trial,$rndseed);
                       }
               if ($similar) {$lastsubonly.="<br /><br />$similar\n";}
       $lastsubonly.='</div>';
  }   }
     }              }
     $lastsubonly.='</div>'."\n"; # End: LC_grade_submissions_body  
  }   }
  $request->print($lastsubonly);   $lastsubonly.='</div>'."\n"; # End: LC_grade_submissions_body
    } elsif ($env{'form.lastSub'} eq 'datesub') {      }
       $request->print($lastsubonly);
       if ($env{'form.lastSub'} eq 'datesub') {
         my ($parts,$handgrade,$responseType) = &response_type($symb,\$res_error);          my ($parts,$handgrade,$responseType) = &response_type($symb,\$res_error);
  $request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom));   $request->print(&displaySubByDates($symb,\%record,$parts,$responseType,$checkIcon,$uname,$udom));
     } elsif ($env{'form.lastSub'} =~ /^(last|all)$/) {      } 
  $request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom,      if ($env{'form.lastSub'} =~ /^(last|all)$/) {
           $request->print(&Apache::loncommon::get_previous_attempt($symb,$uname,$udom,
  $env{'request.course.id'},   $env{'request.course.id'},
  $last,'.submission',   $last,'.submission',
  'Apache::grades::keywords_highlight'));   'Apache::grades::keywords_highlight'));
Line 4143  sub csvupload_fields { Line 4143  sub csvupload_fields {
   
 sub csvuploadmap_footer {  sub csvuploadmap_footer {
     my ($request,$i,$keyfields) =@_;      my ($request,$i,$keyfields) =@_;
       my $buttontext = &mt('Assign Grades');
     $request->print(<<ENDPICK);      $request->print(<<ENDPICK);
 </table>  </table>
 <input type="hidden" name="nfields" value="$i" />  <input type="hidden" name="nfields" value="$i" />
 <input type="hidden" name="keyfields" value="$keyfields" />  <input type="hidden" name="keyfields" value="$keyfields" />
 <input type="button" onclick="javascript:verify(this.form)" value="Assign Grades" /><br />  <input type="button" onclick="javascript:verify(this.form)" value="$buttontext" /><br />
 </form>  </form>
 ENDPICK  ENDPICK
 }  }
Line 4268  ENDPICK Line 4269  ENDPICK
     }      }
     # FIXME do a check for any duplicated user ids...      # FIXME do a check for any duplicated user ids...
     # FIXME do a check for any invalid user ids?...      # FIXME do a check for any invalid user ids?...
     $request->print('<input type="submit" value="Assign Grades" /><br />      $request->print('<input type="submit" value="'.&mt('Assign Grades').'" /><br />
 <hr /></form>'."\n");  <hr /></form>'."\n");
     return '';      return '';
 }  }
Line 5086  like. Line 5087  like.
 Next each scanline is checked for any errors of either 'missing  Next each scanline is checked for any errors of either 'missing
 bubbles' (it's an error because it may have been mis-scanned  bubbles' (it's an error because it may have been mis-scanned
 because too light bubbling), 'double bubble' (each bubble line should  because too light bubbling), 'double bubble' (each bubble line should
 have no more that one letter picked), invalid or duplicated CODE,  have no more than one letter picked), invalid or duplicated CODE,
 invalid student/employee ID  invalid student/employee ID
   
 If the CODE option is used that determines the randomization of the  If the CODE option is used that determines the randomization of the
Line 6440  sub scantron_process_corrections { Line 6441  sub scantron_process_corrections {
  }   }
     }      }
     if ($err) {      if ($err) {
  $r->print("<span class=\"LC_warning\">Unable to accept last correction, an error occurred :$errmsg:</span>");          $r->print(
               '<p class="LC_error">'
              .&mt('Unable to accept last correction, an error occurred: [_1]',
                   $errmsg)
              .'</p>');
     } else {      } else {
  &scantron_put_line($scanlines,$scan_data,$which,$line,$skip);   &scantron_put_line($scanlines,$scan_data,$which,$line,$skip);
  &scantron_putfile($scanlines,$scan_data);   &scantron_putfile($scanlines,$scan_data);
Line 6576  sub scantron_warning_screen { Line 6581  sub scantron_warning_screen {
     return ('      return ('
 <p>  <p>
 <span class="LC_warning">  <span class="LC_warning">
 '.&mt('Please double check the information below before clicking on \'[_1]\'',&mt($button_text)).'</span>  '.&mt("Please double check the information below before clicking on '[_1]'",&mt($button_text)).'</span>
 </p>  </p>
 <table>  <table>
 <tr><td><b>'.&mt('Sequence to be Graded:').'</b></td><td>'.$title.'</td></tr>  <tr><td><b>'.&mt('Sequence to be Graded:').'</b></td><td>'.$title.'</td></tr>
Line 6688  sub scantron_validate_file { Line 6693  sub scantron_validate_file {
     if (!$symb) {return '';}      if (!$symb) {return '';}
     my $default_form_data=&defaultFormData($symb);      my $default_form_data=&defaultFormData($symb);
           
     # do the detection of only doing skipped records first befroe we delete      # do the detection of only doing skipped records first before we delete
     # them when doing the corrections reset      # them when doing the corrections reset
     if ($env{'form.scantron_options_redo'} ne 'redo_skipped_ready') {      if ($env{'form.scantron_options_redo'} ne 'redo_skipped_ready') {
  &reset_skipping_status();   &reset_skipping_status();
Line 8444  SCANTRONFORM Line 8449  SCANTRONFORM
                               &Apache::loncommon::end_data_table_header_row()."\n".                                &Apache::loncommon::end_data_table_header_row()."\n".
                               &Apache::loncommon::start_data_table_row().                                &Apache::loncommon::start_data_table_row().
                               '<td>'.&mt('Bubblesheet').'</td>'.                                '<td>'.&mt('Bubblesheet').'</td>'.
                               '<td><span class="LC_nobreak"><tt>'.$studentdata.'</tt></span></td>'.                                '<td><span class="LC_nobreak" style="white-space: pre;"><tt>'.$studentdata.'</tt></span></td>'.
                               &Apache::loncommon::end_data_table_row().                                &Apache::loncommon::end_data_table_row().
                               &Apache::loncommon::start_data_table_row().                                &Apache::loncommon::start_data_table_row().
                               '<td>'.&mt('Stored submissions').'</td>'.                                '<td>'.&mt('Stored submissions').'</td>'.
                               '<td><span class="LC_nobreak"><tt>'.$studentrecord.'</tt></span></td>'."\n".                                '<td><span class="LC_nobreak" style="white-space: pre;"><tt>'.$studentrecord.'</tt></span></td>'."\n".
                               &Apache::loncommon::end_data_table_row().                                &Apache::loncommon::end_data_table_row().
                               &Apache::loncommon::end_data_table().'</p>');                                &Apache::loncommon::end_data_table().'</p>');
                 } else {                  } else {
Line 8888  sub checkscantron_results { Line 8893  sub checkscantron_results {
   
     my $count=&get_todo_count($scanlines,$scan_data);      my $count=&get_todo_count($scanlines,$scan_data);
     my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$count);      my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$count);
     my ($username,$domain,$started,%ordered);      my ($username,$domain,$started);
     &scantron_get_maxbubble(\$nav_error,\%scantron_config); # Need the bubble lines array to parse.      &scantron_get_maxbubble(\$nav_error,\%scantron_config); # Need the bubble lines array to parse.
     if ($nav_error) {      if ($nav_error) {
         $r->print(&navmap_errormsg());          $r->print(&navmap_errormsg());

Removed from v.1.701  
changed lines
  Added in v.1.709


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