Diff for /loncom/homework/inputtags.pm between versions 1.264 and 1.290

version 1.264, 2010/06/17 00:13:20 version 1.290, 2011/06/06 23:28:42
Line 53  package Apache::inputtags; Line 53  package Apache::inputtags;
 use HTML::Entities();  use HTML::Entities();
 use strict;  use strict;
 use Apache::loncommon;  use Apache::loncommon;
   use Apache::lonhtmlcommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use LONCAPA;  use LONCAPA;
     
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::inputtags',('hiddenline','textfield','textline'));      &Apache::lonxml::register('Apache::inputtags',('hiddensubmission','hiddenline','textfield','textline'));
 }  }
   
 =pod  =pod
Line 174  sub start_textfield { Line 175  sub start_textfield {
     if ($target eq 'web') {      if ($target eq 'web') {
  $Apache::lonxml::evaluate--;   $Apache::lonxml::evaluate--;
  my $partid=$Apache::inputtags::part;   my $partid=$Apache::inputtags::part;
  my $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$resid.submission"},'<>&"');          my ($oldresponse,$newvariation);
           if ((($Apache::lonhomework::history{"resource.$partid.type"} eq 'randomizetry') ||
                ($Apache::lonhomework::type eq 'randomizetry')) &&
                ($Apache::inputtags::status[-1] eq 'CAN_ANSWER')) {
               if ($env{'form.'.$partid.'.rndseed'} ne
                   $Apache::lonhomework::history{"resource.$partid.rndseed"}) {
                   $newvariation = 1;
               }
           }
           unless ($newvariation) {
       $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$resid.submission"},'<>&"');
           }
  if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {   if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
     my $cols = &Apache::lonxml::get_param('cols',$parstack,$safeeval);      my $cols = &Apache::lonxml::get_param('cols',$parstack,$safeeval);
     if ( $cols eq '') { $cols = 80; }      if ( $cols eq '') { $cols = 80; }
Line 185  sub start_textfield { Line 197  sub start_textfield {
     if ($addchars) {      if ($addchars) {
  $result.=&addchars('HWVAL_'.$resid,$addchars);   $result.=&addchars('HWVAL_'.$resid,$addchars);
     }      }
     &Apache::lonhtmlcommon::add_htmlareafields('HWVAL_'.$resid);              my $textareaclass = 'class="LC_richDetectHtml"';
     $result.= '<textarea wrap="hard" name="HWVAL_'.$resid.'" id="HWVAL_'.$resid.'" '.      $result.= '<textarea wrap="hard" name="HWVAL_'.$resid.'" id="HWVAL_'.$resid.'" '.
  "rows=\"$rows\" cols=\"$cols\">".$oldresponse;        'rows="'.$rows.'" cols="'.$cols.'" '.$textareaclass.'>'.
                         $oldresponse;
     if ($oldresponse ne '') {      if ($oldresponse ne '') {
   
  #get rid of any startup text if the user has already responded   #get rid of any startup text if the user has already responded
Line 329  sub start_textline { Line 342  sub start_textline {
     $maxlength = ' maxlength="'.$size.'"';      $maxlength = ' maxlength="'.$size.'"';
  }   }
     }      }
     my $oldresponse = $Apache::lonhomework::history{"resource.$partid.$id.submission"};              my ($oldresponse,$newvariation);
     &Apache::lonxml::debug("oldresponse $oldresponse is ".ref($oldresponse));              if ((($Apache::lonhomework::history{"resource.$partid.type"} eq 'randomizetry') ||
                    ($Apache::lonhomework::type eq 'randomizetry')) &&
     if (ref($oldresponse) eq 'ARRAY') {                   ($Apache::inputtags::status[-1] eq 'CAN_ANSWER')) {
  $oldresponse = $oldresponse->[$#Apache::inputtags::inputlist];                  if ($env{'form.'.$partid.'.rndseed'} ne
     }                      $Apache::lonhomework::history{"resource.$partid.rndseed"}) {
     $oldresponse = &HTML::Entities::encode($oldresponse,'<>&"');                      $newvariation = 1;
             $oldresponse =~ s/^\s+//;                  }
             $oldresponse =~ s/\s+$//;              }
             $oldresponse =~ s/\s+/ /g;              unless ($newvariation) {
           $oldresponse = $Apache::lonhomework::history{"resource.$partid.$id.submission"};
           &Apache::lonxml::debug("oldresponse $oldresponse is ".ref($oldresponse));
           if (ref($oldresponse) eq 'ARRAY') {
       $oldresponse = $oldresponse->[$#Apache::inputtags::inputlist];
           }
           $oldresponse = &HTML::Entities::encode($oldresponse,'<>&"');
                   $oldresponse =~ s/^\s+//;
                   $oldresponse =~ s/\s+$//;
                   $oldresponse =~ s/\s+/ /g;
               }
     if ($Apache::lonhomework::type ne 'exam') {      if ($Apache::lonhomework::type ne 'exam') {
  my $addchars=&Apache::lonxml::get_param('addchars',$parstack,$safeeval);   my $addchars=&Apache::lonxml::get_param('addchars',$parstack,$safeeval);
  $result='';   $result='';
Line 455  sub end_hiddenline { Line 478  sub end_hiddenline {
     return "";      return "";
 }  }
   
   
   sub start_hiddensubmission {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $result = "";
       my $input_id = &start_input($parstack,$safeeval);
       if ($target eq 'web') {
           $Apache::lonxml::evaluate--;
           if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
               my $partid=$Apache::inputtags::part;
               my $id=$Apache::inputtags::response[-1];
               if ($Apache::lonhomework::type ne 'exam') {
                   my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval);
                   $value = &HTML::Entities::encode($value,'<>&"');
                   $result= '<input type="hidden" name="HWVAL_'.$id.'" value="'.$value.'" />';
               }
           }
       } elsif ($target eq 'edit') {
           $result=&Apache::edit::tag_start($target,$token);
           $result.=&Apache::edit::text_arg('Value:','value',$token,'15');
           $result.=&Apache::edit::end_row();
           $result.=&Apache::edit::end_table();
       } elsif ($target eq 'modified') {
           my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                                                        $safeeval,'value');
           if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
       }
   
       if ( ($target eq 'web' || $target eq 'tex')
            && $Apache::lonhomework::type eq 'exam'
            && &needs_exam_box($tagstack)) {
           $result.=&exam_box($target);
       }
       return $result;
   }
   
   sub end_hiddensubmission {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       if    ($target eq 'web') { $Apache::lonxml::evaluate++; }
       elsif ($target eq 'edit') { return ('','no'); }
       &end_input();
       return "";
   }
   
 =pod  =pod
   
 =item file_selector()  =item file_selector()
Line 479  sub file_selector { Line 545  sub file_selector {
     $jspart=~s/\./_/g;      $jspart=~s/\./_/g;
   
     my $result;      my $result;
           my $current_files_display = &current_file_submissions($part,$id);
     $result.='<tr><td>';      my $addfiles;
     if (($uploadedfiletypes ne '*') || ($maxfilesize)) {      if ($current_files_display) {
         if ($uploadedfiletypes ne '*') {          $result .= &Apache::lonhtmlcommon::row_title(&mt('Currently submitted files')).
     $result.=                     $current_files_display.
         &mt('Allowed filetypes: [_1]','<b>'.$uploadedfiletypes.'</b>').'<br />';                     &Apache::lonhtmlcommon::row_closure();
         }          $addfiles = &mt('Submit other file(s)');
         if ($maxfilesize) {      } else {
             $result.=&mt('Combined size of files not to exceed: [_1] MB[_2].',          $addfiles = &mt('Choose file(s) to submit');
                          '<b>'.$maxfilesize.'</b>').'<br />';      }
         }      $result .= &Apache::lonhtmlcommon::row_title($addfiles);
         $result .= '<br />';      my $constraints;
       if ($uploadedfiletypes ne '*') {
    $constraints =
       &mt('Allowed filetypes: [_1]','<b>'.$uploadedfiletypes.'</b>').'<br />';
       }
       if ($maxfilesize) {
           $constraints .= &mt('Combined size of all files not to exceed: [_1] MB[_2].',
                           '<b>'.$maxfilesize.'</b>').'<br />';
       }
       if ($constraints) {
           $result .= $constraints.'<br />';
     }      }
     if ($which eq 'uploadonly' || $which eq 'both') {       if ($which eq 'uploadonly' || $which eq 'both') { 
  $result.=&mt('Submit a file: (only one file can be uploaded)').   $result.=&mt('Submit a file: (only one file per submission)').
     ' <br /><input type="file" size="50" name="HWFILE'.      ' <br /><input type="file" size="50" name="HWFILE'.
     $jspart.'_'.$id.'" /><br />';      $jspart.'_'.$id.'" /><br />';
  $result .= &show_past_file_submission($part,$id);  
     }      }
     if ( $which eq 'both') {       if ( $which eq 'both') {
  $result.='<br />'.'<strong>'.&mt('OR:').'</strong><br />';   $result.='<br />'.'<strong>'.&mt('OR:').'</strong><br />';
     }      }
     if ($which eq 'portfolioonly' || $which eq 'both') {       if ($which eq 'portfolioonly' || $which eq 'both') { 
  $result.=$extratext.'<a href='."'".'javascript:void(window.open("/adm/portfolio?mode=selectfile&amp;fieldname='.$env{'form.request.prefix'}.'HWPORT'.$jspart.'_'.$id.'","cat","height=600,width=800,scrollbars=1,resizable=1,menubar=2,location=1"))'."'".'>'.   $result.=$extratext.'<a href='."'".'javascript:void(window.open("/adm/portfolio?mode=selectfile&amp;fieldname='.$env{'form.request.prefix'}.'HWPORT'.$jspart.'_'.$id.'","cat","height=600,width=800,scrollbars=1,resizable=1,menubar=2,location=1"))'."'".'>'.
     &mt('Select Portfolio Files').'</a><br />'.      &mt('Select Portfolio Files: (one or more files per submission)').'</a><br />'.
     '<input type="text" size="50" name="HWPORT'.$jspart.'_'.$id.'" value="" />'.      '<input type="text" size="50" name="HWPORT'.$jspart.'_'.$id.'" value="" />'.
     '<br />';      '<br />';
  $result .= &show_past_portfile_submission($part,$id);  
     }      }
     $result.='</td></tr>';       $result.=&Apache::lonhtmlcommon::row_closure(1);
     return $result;      return $result;
 }  }
   
 sub show_past_file_submission {  sub current_file_submissions {
     my ($part,$id) = @_;  
     my $uploadedfile= &HTML::Entities::encode($Apache::lonhomework::history{"resource.$part.$id.uploadedfile"},'<>&"');  
   
     return if (!$uploadedfile);  
   
     my $url=$Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};  
     &Apache::lonxml::extlink($url);  
     &Apache::lonnet::allowuploaded('/adm/essayresponse',$url);  
     my $icon=&Apache::loncommon::icon($url);  
     my $curfile='<a href="'.$url.'"><img src="'.$icon.  
  '" border="0" />'.$uploadedfile.'</a>';  
     return &mt('Currently submitted: [_1]','<tt>'.$curfile.'</tt>');  
   
 }  
   
 sub show_past_portfile_submission {  
     my ($part,$id) = @_;      my ($part,$id) = @_;
     if ($Apache::lonhomework::history{"resource.$part.$id.portfiles"}!~/[^\s]/){      my $jspart=$part;
  return;      $jspart=~s/\./_/g;
       my $uploadedfile=$Apache::lonhomework::history{"resource.$part.$id.uploadedfile"};
       my $portfiles=$Apache::lonhomework::history{"resource.$part.$id.portfiles"};
       return if (($uploadedfile eq '') && ($portfiles !~/[^\s]/));
       my $header = &Apache::loncommon::start_data_table().
                    &Apache::loncommon::start_data_table_header_row();
       if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
           $header .= '<th>'.&mt('Delete?').'</th>';
       }
       $header .=   '<th>'.&mt('File').'</th>'.
                    '<th>'.&mt('Size (MB)').'</th>'.
                    '<th>'.&mt('Last Modified').'</th>'.
                    &Apache::loncommon::end_data_table_header_row();
       my (undef,$crsid,$udom,$uname)=&Apache::lonnet::whichuser();
       my ($cdom,$cnum) = ($crsid =~ /^($LONCAPA::match_domain)_($LONCAPA::match_courseid)$/);
       my ($result,$header_shown,%okfiles,%rows,%legacy,@bad_file_list);
       if ($uploadedfile) {
           my $url=$Apache::lonhomework::history{"resource.$part.$id.uploadedurl"};
           my $link = &HTML::Entities::encode($url,'<>&"');
           my ($path,$name) = ($url =~ m{^(/uploaded/\Q$udom\E/\Q$uname\E/essayresponse.*/)([^/]+)$});
           my ($status,$hashref,$error) =
               &current_file_info($url,$link,$name,$path);
           if ($status eq 'ok') {
               push(@{$okfiles{$name}},$url);
               $rows{$url} = $hashref;
               $legacy{$url} = 1;
               &Apache::lonxml::extlink($url);
               &Apache::lonnet::allowuploaded('/adm/essayresponse',$url);
           } else {
               push(@bad_file_list,$error);
           }
       }
       if ($portfiles =~ /[^\s]/) {
           my $prefix = "/uploaded/$udom/$uname/portfolio";
           foreach my $file (split(/\s*,\s*/,&unescape($portfiles))) {
               my ($path,$name) = ($file =~ m{^(.*/)([^/]+)$});
               my $url = $prefix.$path.$name;
               my $uploadedfile = &HTML::Entities::encode($url,'<>&"');
               my ($status,$hashref,$error) =
                   &current_file_info($url,$uploadedfile,$name,$path);
               if ($status eq 'ok') {
                   push(@{$okfiles{$name}},$url);
                   $rows{$url} = $hashref;
               } else {
                   push(@bad_file_list,$error);
               }
           }
       }
       my $num = 0;
       foreach my $name (sort(keys(%okfiles))) {
           if (ref($okfiles{$name}) eq 'ARRAY') {
               foreach my $url (@{$okfiles{$name}}) {
                   if (ref($rows{$url}) eq 'HASH') {
                       my $link = $rows{$url}{link};
                       my $portfile = $rows{$url}{path}.$rows{$url}{name};
                       $portfile = &HTML::Entities::encode($portfile,'<>&"');
                       if ($link) {
                           my $icon=&Apache::loncommon::icon($url);
                           unless ($header_shown) {
                               $result .= $header;
                               $header_shown = 1;
                           }
                           $result.=
                               &Apache::loncommon::start_data_table_row()."\n";
                           if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
                               $result .=
                                    '<td valign="bottom"><input type="checkbox" name="HWFILE'.$jspart.'_'.$id.'_delete"'.
                                    ' value="'.$portfile.'" id="HWFILE'.$jspart.'_'.$id.'_'.$num.'_delete" /></td>'."\n";
                               $num ++;
                           }
                           my $showname = $rows{$url}{path}.$name;
                           if ($legacy{$url}) {
                               $showname = $name.' '.&mt('not in portfolio');
                           }
                           $result .= 
                               '<td><a href="'.$link.'"><img src="'.$icon.
                               '" border="0" alt="" />'.$showname.'</a></td>'."\n".
                               '<td align="right" valign="bottom">'.$rows{$url}{size}.'</td>'."\n".
                               '<td align="right" valign="bottom">'.$rows{$url}{lastmodified}.'</td>'."\n".
                               &Apache::loncommon::end_data_table_row();
                       }
                   }
               }
           }
       }
       if ($header_shown) {
           $result .= &Apache::loncommon::end_data_table().
                      '<br /><span class="LC_warning">'.
                      &mt('Exclude existing file(s) from grading by checking the "Delete?" checkbox(es) and clicking "Submit Answer"').'</span>';
     }      }
     my (@file_list,@bad_file_list);  
     foreach my $file (split(/\s*,\s*/,&unescape($Apache::lonhomework::history{"resource.$part.$id.portfiles"}))) {  
  my (undef,undef,$domain,$user)=&Apache::lonnet::whichuser();  
  my $url="/uploaded/$domain/$user/portfolio$file";  
  my $icon=&Apache::loncommon::icon($url);  
  push(@file_list,'<a href="'.$url.'"><img src="'.$icon.  
      '" border="0" />'.$file.'</a>');  
  if (! &Apache::lonnet::stat_file($url)) {  
     &Apache::lonnet::logthis("bad file is $url");  
     push(@bad_file_list,'<a href="'.$url.'"><img src="'.$icon.  
  '" border="0" />'.$file.'</a>');  
  }  
     }  
     my $files = '<span class="LC_filename">'.  
  join('</span>, <span class="LC_filename">',@file_list).  
  '</span>';  
     my $result = &mt("Portfolio files previously selected: [_1]",$files);  
     if (@bad_file_list) {      if (@bad_file_list) {
  my $bad_files = '<span class="LC_filename">'.          my $bad_files = '<span class="LC_filename">'.
     join('</span>, <span class="LC_filename">',@bad_file_list).              join('</span>, <span class="LC_filename">',@bad_file_list).
     '</span>';              '</span>';
  $result.='<p><span class="LC_error">'          $result.='<p class="LC_error">'.
                 .&mt("These file(s) don't exist: [_1]",$bad_files)                   &mt("These file(s) don't exist: [_1]",$bad_files).
                 .'</span></p>';                   '</p>';
     }      }
     return $result;      return $result;
   }
   
   sub current_file_info {
       my ($url,$uploadedfile,$name,$path) = @_;
       my ($status,$error,%info);
       my @stat = &Apache::lonnet::stat_file($url);
       if ((@stat) && ($stat[0] ne 'no_such_dir')) {
           my ($lastmod,$size);
           if ($stat[9] =~ /^\d+$/) {
               $lastmod = &Apache::lonlocal::locallocaltime($stat[9]);
           }
           $size = $stat[7]/(1024*1024);
           $size = sprintf("%.3f",$size);
           %info = (
                       link         => $uploadedfile,
                       name         => $name,
                       path         => $path,
                       size         => $size,
                       lastmodified => $lastmod,
                   );
           $status = 'ok';
       } else {
           &Apache::lonnet::logthis("bad file is $url");
           my $icon=&Apache::loncommon::icon($url);
           $error = '<a href="'.$url.'"><img src="'.$icon.
                    '" border="0" />'.$uploadedfile.'</a>';
       }
       return ($status,\%info,$error);
 }  }
   
 sub valid_award {  sub valid_award {
Line 570  sub valid_award { Line 727  sub valid_award {
        'UNIT_INVALID_STUDENT', 'UNIT_IRRECONCIBLE',         'UNIT_INVALID_STUDENT', 'UNIT_IRRECONCIBLE',
        'UNIT_FAIL', 'NO_UNIT',         'UNIT_FAIL', 'NO_UNIT',
        'UNIT_NOTNEEDED', 'WANTED_NUMERIC',         'UNIT_NOTNEEDED', 'WANTED_NUMERIC',
        'BAD_FORMULA', 'INTERNAL_ERROR', 'SIG_FAIL', 'INCORRECT',          'BAD_FORMULA', 'NOT_FUNCTION', 'WRONG_FORMAT', 
                                  'INTERNAL_ERROR', 'SIG_FAIL', 'INCORRECT', 
        'MISORDERED_RANK', 'INVALID_FILETYPE',         'MISORDERED_RANK', 'INVALID_FILETYPE',
                                'EXCESS_FILESIZE', 'FILENAME_INUSE',                                  'EXCESS_FILESIZE', 'FILENAME_INUSE', 
        'DRAFT', 'SUBMITTED', 'SUBMITTED_CREDIT',          'DRAFT', 'SUBMITTED', 'SUBMITTED_CREDIT', 
Line 587  sub valid_award { Line 745  sub valid_award {
   'TOO_LONG',    'TOO_LONG',
   'UNIT_INVALID_INSTRUCTOR', 'UNIT_INVALID_STUDENT',    'UNIT_INVALID_INSTRUCTOR', 'UNIT_INVALID_STUDENT',
   'UNIT_IRRECONCIBLE', 'UNIT_FAIL', 'NO_UNIT',    'UNIT_IRRECONCIBLE', 'UNIT_FAIL', 'NO_UNIT',
   'UNIT_NOTNEEDED', 'WANTED_NUMERIC', 'BAD_FORMULA', 'INTERNAL_ERROR',    'UNIT_NOTNEEDED', 'WANTED_NUMERIC', 'BAD_FORMULA',  'NOT_FUNCTION', 
                     'WRONG_FORMAT', 'INTERNAL_ERROR',
   'COMMA_FAIL', 'SIG_FAIL', 'INCORRECT', 'MISORDERED_RANK',    'COMMA_FAIL', 'SIG_FAIL', 'INCORRECT', 'MISORDERED_RANK',
   'INVALID_FILETYPE', 'EXCESS_FILESIZE', 'FILENAME_INUSE',     'INVALID_FILETYPE', 'EXCESS_FILESIZE', 'FILENAME_INUSE', 
                   'DRAFT', 'SUBMITTED',                    'DRAFT', 'SUBMITTED',
Line 685  sub finalizeawards { Line 844  sub finalizeawards {
 }  }
   
 sub decideoutput {  sub decideoutput {
     my ($award,$awarded,$awardmsg,$solved,$previous,$target)=@_;      my ($award,$awarded,$awardmsg,$solved,$previous,$target,$nocorrect)=@_;
   
     my $message='';      my $message='';
     my $button=0;      my $button=0;
Line 703  sub decideoutput { Line 862  sub decideoutput {
     my $part = $Apache::inputtags::part;      my $part = $Apache::inputtags::part;
     my $tohandgrade = &Apache::lonnet::EXT("resource.$part.handgrade");      my $tohandgrade = &Apache::lonnet::EXT("resource.$part.handgrade");
     my $handgrade = ('yes' eq lc($tohandgrade));       my $handgrade = ('yes' eq lc($tohandgrade)); 
   #
   # Should "Computer's Answer" be displayed?
   # Should not be displayed if still answerable,
   # if the problem is handgraded,
   # or if the problem does not give a correct answer
   #
           
     my $computer = ($handgrade)? ''      my $computer = ($handgrade || $nocorrect)? ''
                        : " ".&mt("Computer's answer now shown above.");                         : " ".&mt("Computer's answer now shown above.");
     &Apache::lonxml::debug("handgrade has :$handgrade:");      &Apache::lonxml::debug("handgrade has :$handgrade:");
   
Line 746  sub decideoutput { Line 911  sub decideoutput {
  }   }
     }      }
  }   }
  $button=0;          if ($awarded==1) { $button=0; } else { $button=1; }
  $previousmsg='';   $previousmsg='';
     } elsif ($solved =~ /^excused/) {      } elsif ($solved =~ /^excused/) {
  if ($target eq 'tex') {   if ($target eq 'tex') {
Line 874  sub decideoutput { Line 1039  sub decideoutput {
         if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Formula_Answers')};          if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Formula_Answers')};
  $css_class=$possible_class{'not_charged_try'};   $css_class=$possible_class{'not_charged_try'};
  $button=1;   $button=1;
     } elsif ($award eq 'INTERNAL_ERROR') {      } elsif ($award eq 'NOT_FUNCTION') {
           $message = &mt("Not a function").'.';
           $css_class=$possible_class{'not_charged_try'};
           $button=1;
       } elsif ($award eq 'WRONG_FORMAT') {
           $message = &mt("Wrong format").'.';
           $css_class=$possible_class{'not_charged_try'};
           $button=1;
        } elsif ($award eq 'INTERNAL_ERROR') {
         $message = &mt("An internal error occurred while processing your answer. Please try again later.");          $message = &mt("An internal error occurred while processing your answer. Please try again later.");
         $css_class=$possible_class{'not_charged_try'};          $css_class=$possible_class{'not_charged_try'};
         $button=1;          $button=1;
Line 964  sub decideoutput { Line 1137  sub decideoutput {
        }         }
        $message.=&mt('Submissions to practice problems are not permanently recorded.');         $message.=&mt('Submissions to practice problems are not permanently recorded.');
     }      }
   
     return ($button,$css_class,$message,$previousmsg);      return ($button,$css_class,$message,$previousmsg);
 }  }
   
Line 1017  sub setgradedata { Line 1189  sub setgradedata {
  $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') {   $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') {
  $Apache::lonhomework::results{"resource.$id.afterduedate"}=$award;   $Apache::lonhomework::results{"resource.$id.afterduedate"}=$award;
  return '';   return '';
     } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} !~      } elsif ( $Apache::lonhomework::history{"resource.$id.awarded"} < 1
       /^correct/   
       || $Apache::lonhomework::scantronmode         || $Apache::lonhomework::scantronmode 
       || &Apache::lonhomework::hide_problem_status()  ) {        || &Apache::lonhomework::hide_problem_status()  ) {
         # the student doesn't already have it correct,          # the student doesn't already have it correct,
Line 1139  sub setgradedata { Line 1310  sub setgradedata {
  $Apache::lonhomework::results{"resource.$id.previous"} = '0';   $Apache::lonhomework::results{"resource.$id.previous"} = '0';
     }      }
  }   }
     } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} =~      } elsif ( $Apache::lonhomework::history{"resource.$id.awarded"} == 1 ) {
       /^correct/ ) {  
  #delete all data as they student already has it correct   #delete all data as they student already has it correct
  &removealldata($id);   &removealldata($id);
  #and since they didn't do anything we were never here   #and since they didn't do anything we were never here
Line 1150  sub setgradedata { Line 1320  sub setgradedata {
     if ($award eq 'SUBMITTED') {      if ($award eq 'SUBMITTED') {
  &Apache::response::add_to_gradingqueue();   &Apache::response::add_to_gradingqueue();
     }      }
     if (($Apache::lonhomework::type eq 'anonsurvey') ||      $Apache::lonhomework::results{"resource.$id.type"} = $Apache::lonhomework::type;
         ($Apache::lonhomework::type eq 'anonsurveycred')) {      $Apache::lonhomework::results{"resource.$id.duedate"} = &Apache::lonnet::EXT("resource.$id.duedate");
         $Apache::lonhomework::results{"resource.$id.type"} = $Apache::lonhomework::type;      $Apache::lonhomework::results{"resource.$id.hinttries"} = &Apache::lonnet::EXT("resource.$id.hinttries");
     }      $Apache::lonhomework::results{"resourse.$id.version"} = &Apache::lonnet::usedversion(); 
 }  }
   
 sub find_which_previous {  sub find_which_previous {
Line 1233  sub grade { Line 1403  sub grade {
 }  }
   
 sub get_grade_messages {  sub get_grade_messages {
     my ($id,$prefix,$target,$status) = @_;      my ($id,$prefix,$target,$status,$nocorrect) = @_;
   # nocorrect suppresses "Computer's answer now shown above"
     my ($message,$latemessage,$trystr,$previousmsg);      my ($message,$latemessage,$trystr,$previousmsg);
     my $showbutton = 1;      my $showbutton = 1;
   
Line 1248  sub get_grade_messages { Line 1418  sub get_grade_messages {
  &Apache::lonxml::debug('Getting message');   &Apache::lonxml::debug('Getting message');
  ($showbutton,my $css_class,$message,$previousmsg) =   ($showbutton,my $css_class,$message,$previousmsg) =
     &decideoutput($award,$awarded,$awardmsg,$solved,$previous,      &decideoutput($award,$awarded,$awardmsg,$solved,$previous,
   $target);    $target,(($status eq 'CAN_ANSWER') || $nocorrect));
  if ($target eq 'tex') {   if ($target eq 'tex') {
     $message='\vskip 2 mm '.$message.' ';      $message='\vskip 2 mm '.$message.' ';
  } else {   } else {
Line 1281  sub get_grade_messages { Line 1451  sub get_grade_messages {
     $trystr = '<td><span class="LC_nobreak">'.&mt($tries_text)." $tries";      $trystr = '<td><span class="LC_nobreak">'.&mt($tries_text)." $tries";
     if ($Apache::lonhomework::parsing_a_task) {      if ($Apache::lonhomework::parsing_a_task) {
     } elsif($env{'request.state'} ne 'construct') {      } elsif($env{'request.state'} ne 'construct') {
  $trystr.="/$maxtries";   $trystr.="/".&Apache::lonhtmlcommon::direct_parm_link($maxtries,$env{'request.symb'},'maxtries',$id,$target);
     } else {      } else {
  if (defined($Apache::inputtags::params{'maxtries'})) {   if (defined($Apache::inputtags::params{'maxtries'})) {
     $trystr.="/".$Apache::inputtags::params{'maxtries'};      $trystr.="/".$Apache::inputtags::params{'maxtries'};
Line 1362  sub previous_tries { Line 1532  sub previous_tries {
   
     my $count;      my $count;
     my %count_lookup;      my %count_lookup;
       my $lastrndseed;
   
     foreach my $i (1..$Apache::lonhomework::history{'version'}) {      foreach my $i (1..$Apache::lonhomework::history{'version'}) {
  my $prefix = $i.":resource.$id";   my $prefix = $i.":resource.$id";
Line 1375  sub previous_tries { Line 1546  sub previous_tries {
  next if (!exists($Apache::lonhomework::history{"$prefix.award"}));   next if (!exists($Apache::lonhomework::history{"$prefix.award"}));
  $count++;   $count++;
  $count_lookup{$i} = $count;   $count_lookup{$i} = $count;
           my $curr_rndseed = $Apache::lonhomework::history{"$prefix.rndseed"};
  my ($previousmsg,$latemessage,$message,$trystr);   my ($previousmsg,$latemessage,$message,$trystr);
   
  ($previousmsg,$latemessage,$message,$trystr) =   ($previousmsg,$latemessage,$message,$trystr) =
Line 1393  sub previous_tries { Line 1564  sub previous_tries {
  ) {   ) {
   
                 my $txt_correct = &mt('Correct');                  my $txt_correct = &mt('Correct');
                   my $awarded = $Apache::lonhomework::history{"$prefix.awarded"};
                   if ($awarded < 1 && $awarded > 0) {
                       $txt_correct=&mt('Partially Correct');
                   } elsif ($awarded < 1) {
                       if ($awarded eq '') {
                           $txt_correct='';
                       } else {
                           $txt_correct=&mt('Incorrect');
                       }
                   }
  $message =~ s{(<td.*?>)(.*?)(</td>)}   $message =~ s{(<td.*?>)(.*?)(</td>)}
                              {$1 <strong>$txt_correct</strong>. $3}s;                               {$1 <strong>$txt_correct</strong>. $3}s;
     }      }
             my $trystr = "(".&mt('Try [_1]',$Apache::lonhomework::history{"$prefix.tries"}).")";              my $trystr = "(".&mt('Try [_1]',$Apache::lonhomework::history{"$prefix.tries"}).")";
               if ($curr_rndseed || $lastrndseed) {
                   if ($curr_rndseed ne $lastrndseed) {
                       $trystr .= '<br /><span style="color: green; white-space: nowrap; font-style: italic; font-weight: bold; font-size: 80%;">'.&mt('New problem variation this try.').'</span>';
                   }
               } 
     $message =~ s{(</td>)}{ $trystr $1};      $message =~ s{(</td>)}{ $trystr $1};
  }   }
  my ($class) = ($message =~ m{<td.*class="([^"]*)"}); #"   my ($class) = ($message =~ m{<td.*class="([^"]*)"}); #"
Line 1426  sub previous_tries { Line 1612  sub previous_tries {
     }      }
  }   }
  $output.=&Apache::loncommon::end_data_table_row()."\n";   $output.=&Apache::loncommon::end_data_table_row()."\n";
           $lastrndseed = $curr_rndseed;
     }      }
     return if ($output eq '');      return if ($output eq '');
     my $headers =       my $headers = 

Removed from v.1.264  
changed lines
  Added in v.1.290


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