Diff for /loncom/homework/inputtags.pm between versions 1.271.2.5 and 1.315

version 1.271.2.5, 2011/01/06 22:56:42 version 1.315, 2013/04/11 14:59:40
Line 60  use LONCAPA; Line 60  use LONCAPA;
     
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::inputtags',('hiddenline','textfield','textline'));      &Apache::lonxml::register('Apache::inputtags',('hiddensubmission','hiddenline','textfield','textline'));
 }  }
   
 =pod  =pod
Line 125  sub initialize_inputtags { Line 125  sub initialize_inputtags {
     %Apache::inputtags::submission_display=();      %Apache::inputtags::submission_display=();
 }  }
   
   #
   #  provides the onblur binding for spellchecking.  This could be an
   #  empty string if spellchecking was not enabled.
   #  Jquery selector binding is done rather than setting an onblur
   #  attribute because we'll need to set the element's spellcheck language
   #  option dynamically so we need $(this) to be defined.
   #
   # @param id   - The element id to bind.
   # @param lang - Language in which spellchecking is desired.
   #               if undef, nothing is generated.  
   # @return string - onblur specification to do the requested spellchecking.
   #
   sub spellcheck_onblur {
       my ($id, $lang) = @_;
       my $result = '';
       if ($lang) {
   
    $result = <<JAVASCRIPT;
   <script type="text/javascript">
   \$('\#$id').blur(function() {
       doSpellcheck('\#$id', '$lang');
    });
   </script>
   
   JAVASCRIPT
   
   
       }
       return $result;
   }
   
 sub check_for_duplicate_ids {  sub check_for_duplicate_ids {
     my %check;      my %check;
     foreach my $id (@Apache::inputtags::partlist,      foreach my $id (@Apache::inputtags::partlist,
Line 185  sub start_textfield { Line 216  sub start_textfield {
             }              }
         }          }
         unless ($newvariation) {          unless ($newvariation) {
     $oldresponse = &HTML::Entities::encode($Apache::lonhomework::history{"resource.$partid.$resid.submission"},'<>&"');      $oldresponse = $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);
Line 194  sub start_textfield { Line 225  sub start_textfield {
     if ( $rows eq '') { $rows = 16; }      if ( $rows eq '') { $rows = 16; }
     my $addchars=&Apache::lonxml::get_param('addchars',$parstack,$safeeval);      my $addchars=&Apache::lonxml::get_param('addchars',$parstack,$safeeval);
     $result='';      $result='';
       my $tagident = 'HWVAL_' . $resid;
     if ($addchars) {      if ($addchars) {
  $result.=&addchars('HWVAL_'.$resid,$addchars);   $result.=&addchars($tagident, $addchars);
     }      }
             my $textareaclass = 'class="LC_richDetectHtml"';              my $textareaclass = 'class="LC_richDetectHtml spellchecked"';
     $result.= '<textarea wrap="hard" name="HWVAL_'.$resid.'" id="HWVAL_'.$resid.'" '.      $result.= '<textarea wrap="hard" name="'.$tagident.'" id="'.$tagident.'" ' .
       'rows="'.$rows.'" cols="'.$cols.'" '.$textareaclass.'>'.        'rows="'.$rows.'" cols="'.$cols.'" '.$textareaclass
                       $oldresponse;        .'>'.
                         &HTML::Entities::encode($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 233  sub start_textfield { Line 266  sub start_textfield {
  my $bodytext=&Apache::lonxml::get_all_text("/textfield",$parser,   my $bodytext=&Apache::lonxml::get_all_text("/textfield",$parser,
    $style);     $style);
  $result.=&Apache::edit::editfield($token->[1],$bodytext,'Text you want to appear by default:',80,2);   $result.=&Apache::edit::editfield($token->[1],$bodytext,'Text you want to appear by default:',80,2);
           my $spell_langs = &spelling_languages();
    $result .= &Apache::edit::select_arg('Spellcheck for:', 'spellcheck',
        $spell_langs, $token);
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
  my $constructtag=&Apache::edit::get_new_args($token,$parstack,   my $constructtag=&Apache::edit::get_new_args($token,$parstack,
      $safeeval,'rows','cols',       $safeeval,'rows','cols',
      'addchars');       'addchars', 'spellcheck');
  if ($constructtag) {   if ($constructtag) {
     $result = &Apache::edit::rebuild_tag($token);      $result = &Apache::edit::rebuild_tag($token);
  } else {   } else {
Line 251  sub start_textfield { Line 287  sub start_textfield {
     for (my $i=0;$i<int $number_of_lines*2;$i++) {$result.='\strut \\\\ ';}      for (my $i=0;$i<int $number_of_lines*2;$i++) {$result.='\strut \\\\ ';}
     $result.='\strut \\\\\strut \\\\\strut \\\\\strut \\\\}}}';      $result.='\strut \\\\\strut \\\\\strut \\\\\strut \\\\}}}';
  } else {   } else {
     my $TeXwidth=$width_of_box/80;              if ($env{'form.pdfFormFields'} eq 'yes') {
     $result = '\vskip 1 mm \fbox{\fbox{\parbox{'.$TeXwidth.'\textwidth-5mm}{';                  my $fieldname = $env{'request.symb'}.
     for (my $i=0;$i<int $number_of_lines*2;$i++) {$result.='\strut \\\\ ';}                                  '&part_'. $Apache::inputtags::part.
     $result.='}}}\vskip 2 mm ';                                  '&textresponse'.
                                   '&HWVAL_' . $Apache::inputtags::response['-1'];
                   $result.='\TextField[name='.$fieldname.',multiline=true,height=6\baselineskip,width=270,borderwidth=0,backgroundcolor={.85 .85 .85}]\\';
               } else {
                   my $TeXwidth=$width_of_box/80;
                   $result = '\vskip 1 mm \fbox{\fbox{\parbox{'.$TeXwidth.'\textwidth-5mm}{';
                   for (my $i=0;$i<int $number_of_lines*2;$i++) {$result.='\strut \\\\ ';}
                   $result.='}}}\vskip 2 mm ';
               }
  }   }
     }      }
     return $result;      return $result;
Line 264  sub end_textfield { Line 308  sub end_textfield {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result;      my $result;
     if ($target eq 'web') {      if ($target eq 'web') {
    my $spellcheck = &Apache::lonxml::get_param('spellcheck', $parstack, $safeeval);
  $Apache::lonxml::evaluate++;   $Apache::lonxml::evaluate++;
  if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {   if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
     return "</textarea>";      my $resid = $Apache::inputtags::response[-1];
       my $tagident = 'HWVAL_' . $resid;
       my $result =  "</textarea>";
       $result .= &spellcheck_onblur($tagident, $spellcheck);
       return $result;
  }   }
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result=&Apache::edit::end_table();   $result=&Apache::edit::end_table();
Line 330  sub start_textline { Line 379  sub start_textline {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     my $result = "";      my $result = "";
     my $input_id = &start_input($parstack,$safeeval);      my $input_id = &start_input($parstack,$safeeval);
   
       # The spellcheck attribute 
       # 1. enables spellchecking.
       # 2. Provides the language code in which the spellchecking will be performed.
   
       my $spellcheck = &Apache::lonxml::get_param('spellcheck', $parstack, $safeeval);
     if ($target eq 'web') {      if ($target eq 'web') {
  $Apache::lonxml::evaluate--;   $Apache::lonxml::evaluate--;
  my $partid=$Apache::inputtags::part;   my $partid=$Apache::inputtags::part;
Line 354  sub start_textline { Line 409  sub start_textline {
             unless ($newvariation) {              unless ($newvariation) {
         $oldresponse = $Apache::lonhomework::history{"resource.$partid.$id.submission"};          $oldresponse = $Apache::lonhomework::history{"resource.$partid.$id.submission"};
         &Apache::lonxml::debug("oldresponse $oldresponse is ".ref($oldresponse));          &Apache::lonxml::debug("oldresponse $oldresponse is ".ref($oldresponse));
   
         if (ref($oldresponse) eq 'ARRAY') {          if (ref($oldresponse) eq 'ARRAY') {
     $oldresponse = $oldresponse->[$#Apache::inputtags::inputlist];      $oldresponse = $oldresponse->[$#Apache::inputtags::inputlist];
         }          }
Line 381  sub start_textline { Line 435  sub start_textline {
  if ($Apache::inputtags::status[-1] eq 'CANNOT_ANSWER') {   if ($Apache::inputtags::status[-1] eq 'CANNOT_ANSWER') {
     $name = "none";      $name = "none";
  }   }
  $result.= '<input onkeydown="javascript:setSubmittedPart(\''.$partid.'\');" type="text" '.$readonly.' name="'.$name.'" value="'.   $result.= '<input onkeydown="javascript:setSubmittedPart(\''.$partid.'\');"'
     $oldresponse.'" size="'.$size.'"'.$maxlength.' />';       . ' type="text" '
        . $readonly.' name="'. $name . '"'
        . ' id="' . $name . '"'
        . ' value="'.  $oldresponse.'"'
        . ' class="spellchecked"  size="'.$size.'"'.$maxlength
        . '/>';
   
    $result .= &spellcheck_onblur($name, $spellcheck);
     }      }
     if ($Apache::lonhomework::type eq 'exam'      if ($Apache::lonhomework::type eq 'exam'
  && &needs_exam_box($tagstack)) {   && &needs_exam_box($tagstack)) {
Line 401  sub start_textline { Line 462  sub start_textline {
     'addchars',$token,10);      'addchars',$token,10);
         $result.=&Apache::edit::select_arg('Readonly:','readonly',          $result.=&Apache::edit::select_arg('Readonly:','readonly',
    ['no','yes'],$token);     ['no','yes'],$token);
           my $spell_langs = &spelling_languages();
    $result.=&Apache::edit::select_arg("Spellcheck for: ", 'spellcheck',
      $spell_langs, $token);
  $result.=&Apache::edit::end_row();   $result.=&Apache::edit::end_row();
  $result.=&Apache::edit::end_table();   $result.=&Apache::edit::end_table();
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
  my $constructtag=&Apache::edit::get_new_args($token,$parstack,   my $constructtag=&Apache::edit::get_new_args($token,$parstack,
      $safeeval,'size',       $safeeval,'size',
      'addchars','readonly');       'addchars','readonly', 'spellcheck');
  if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }   if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
     } elsif ($target eq 'tex'       } elsif ($target eq 'tex' 
      && $Apache::lonhomework::type ne 'exam') {       && $Apache::lonhomework::type ne 'exam') {
Line 479  sub end_hiddenline { Line 543  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 529  sub file_selector { Line 636  sub file_selector {
     if ($which eq 'uploadonly' || $which eq 'both') {       if ($which eq 'uploadonly' || $which eq 'both') { 
  $result.=&mt('Submit a file: (only one file per submission)').   $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.'" id="HWFILE'.$jspart.'_'.$id.'" /><br />';
     }      }
     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"))'."'".'>'.          my $symb = $env{'request.symb'};
           (undef,undef,my $res)=&Apache::lonnet::decode_symb($symb);
           my $showsymb;
           # If resource is a .task and URL is unencrypted, include symb in query string
           # for url opened in portfolio file selection window. Can be used to override
           # blocking of portfolio access resulting from an exam event in a different course. 
           if ($res =~ /\.task$/i) {
               my $encsymb = &Apache::lonenc::check_encrypt($symb);
               if ($symb eq $encsymb) {
                   $showsymb = $symb;
               }
           }
    $result.=$extratext.'<a href='."'".'javascript:void(window.open("/adm/portfolio?mode=selectfile&amp;fieldname='.$env{'form.request.prefix'}.'HWPORT'.$jspart.'_'.$id.'&amp;symb='.$showsymb.'","cat","height=600,width=800,scrollbars=1,resizable=1,menubar=2,location=1"))'."'".'>'.
     &mt('Select Portfolio Files: (one or more files per submission)').'</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 />';
Line 634  sub current_file_submissions { Line 753  sub current_file_submissions {
         }          }
     }      }
     if ($header_shown) {      if ($header_shown) {
         $result .= &Apache::loncommon::end_data_table().          $result .= &Apache::loncommon::end_data_table();
                    '<br /><span class="LC_warning">'.          if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
                    &mt('Exclude existing file(s) from grading by checking the "Delete?" checkbox(es) and clicking "Submit Answer"').'</span>';              $result .= '<br /><span class="LC_warning">'.
                          &mt('Exclude existing file(s) from grading by checking the "Delete?" checkbox(es) and clicking "Submit Answer"').'</span>';
           }
     }      }
     if (@bad_file_list) {      if (@bad_file_list) {
         my $bad_files = '<span class="LC_filename">'.          my $bad_files = '<span class="LC_filename">'.
Line 686  sub valid_award { Line 807  sub valid_award {
        'UNIT_FAIL', 'NO_UNIT',         'UNIT_FAIL', 'NO_UNIT',
        'UNIT_NOTNEEDED', 'WANTED_NUMERIC',         'UNIT_NOTNEEDED', 'WANTED_NUMERIC',
        'BAD_FORMULA', 'NOT_FUNCTION', 'WRONG_FORMAT',          'BAD_FORMULA', 'NOT_FUNCTION', 'WRONG_FORMAT', 
        'INTERNAL_ERROR', 'SIG_FAIL', 'INCORRECT',                                  '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 704  sub valid_award { Line 825  sub valid_award {
   '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',  'NOT_FUNCTION',     'UNIT_NOTNEEDED', 'WANTED_NUMERIC', 'BAD_FORMULA',  'NOT_FUNCTION', 
   'WRONG_FORMAT', 'INTERNAL_ERROR',                    '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 802  sub finalizeawards { Line 923  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 820  sub decideoutput { Line 941  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 837  sub decideoutput { Line 964  sub decideoutput {
     $message=&mt('Incorrect.');      $message=&mt('Incorrect.');
     $css_class=$possible_class{'charged_try'};      $css_class=$possible_class{'charged_try'};
  }   }
  if ($env{'request.filename'} =~    if ($handgrade || 
     m|/res/lib/templates/examupload.problem$|) {              ($env{'request.filename'}=~/\/res\/lib\/templates\/(examupload|DropBox).problem$/)) {
     $message = &mt("A score has been assigned.");      $message = &mt("A score has been assigned.");
     $added_computer_text=1;      $added_computer_text=1;
  } else {   } else {
Line 863  sub decideoutput { Line 990  sub decideoutput {
  }   }
     }      }
  }   }
  $button=0;          if ($awarded >= 1) {
               $button=0;
           } elsif (&Apache::lonnet::EXT("resource.$part.retrypartial") !~/^1|on|yes$/i) {
               $button=0;
           } else {
               $button=1;
           }
  $previousmsg='';   $previousmsg='';
     } elsif ($solved =~ /^excused/) {      } elsif ($solved =~ /^excused/) {
  if ($target eq 'tex') {   if ($target eq 'tex') {
Line 945  sub decideoutput { Line 1078  sub decideoutput {
         } else {          } else {
             $message .= '<br />';              $message .= '<br />';
         }          }
         $message .= &mt('Please use a different file name.');          $message .= &mt('Please use a different filename.');
         $css_class=$possible_class{'not_charged_try'};          $css_class=$possible_class{'not_charged_try'};
         $button=1;          $button=1;
     } elsif ($award eq 'INVALID_FILETYPE') {      } elsif ($award eq 'INVALID_FILETYPE') {
Line 999  sub decideoutput { Line 1132  sub decideoutput {
         $message = &mt("Wrong format").'.';          $message = &mt("Wrong format").'.';
         $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 '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 1022  sub decideoutput { Line 1155  sub decideoutput {
     } elsif ($award eq 'ANONYMOUS_CREDIT') {      } elsif ($award eq 'ANONYMOUS_CREDIT') {
         $message = &mt("Your anonymous submission has been recorded, and credit awarded.");          $message = &mt("Your anonymous submission has been recorded, and credit awarded.");
         $css_class=$possible_class{'correct'};          $css_class=$possible_class{'correct'};
           $button=1;
     } elsif ($award eq 'DRAFT') {      } elsif ($award eq 'DRAFT') {
  $message = &mt("Copy saved but not submitted.");   $message = &mt("Copy saved but not submitted.");
  $css_class=$possible_class{'not_charged_try'};   $css_class=$possible_class{'not_charged_try'};
Line 1072  sub decideoutput { Line 1206  sub decideoutput {
     if (&Apache::lonhomework::hide_problem_status()      if (&Apache::lonhomework::hide_problem_status()
  && $Apache::inputtags::status[-1] ne 'SHOW_ANSWER'   && $Apache::inputtags::status[-1] ne 'SHOW_ANSWER'
  && &hide_award($award)) {   && &hide_award($award)) {
  $message = &mt("Answer Submitted: Your final submission will be graded after the due date.");          $message = &mt("Answer Submitted: Your final submission will be graded after the due date.");
           my @interval= &Apache::lonnet::EXT("resource.$part.interval");
           if ($interval[0] =~ /\d+/) {
               my $first_access=&Apache::lonnet::get_first_access($interval[1]);
               if (defined($first_access)) {
                   my $due_date= &Apache::lonnet::EXT("resource.$part.duedate");
                   unless (($due_date) && ($due_date < $first_access + $interval[0])) { 
                       $message = &mt("Answer Submitted: Your final submission will be graded when the time limit is reached.");
                   }
               }
           }
  $css_class=$possible_class{'no_grade'};   $css_class=$possible_class{'no_grade'};
  $button=1;   $button=1;
     }      }
Line 1089  sub decideoutput { Line 1233  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 1142  sub setgradedata { Line 1285  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 1264  sub setgradedata { Line 1406  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 1275  sub setgradedata { Line 1416  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::type eq 'randomizetry')) {      $Apache::lonhomework::results{"resource.$id.hinttries"} = &Apache::lonnet::EXT("resource.$id.hinttries");
         $Apache::lonhomework::results{"resource.$id.type"} = $Apache::lonhomework::type;      $Apache::lonhomework::results{"resourse.$id.version"} = &Apache::lonnet::usedversion(); 
     }  
     if ($Apache::lonhomework::type eq 'randomizetry') {  
         $Apache::lonhomework::results{"resource.$id.rndseed"} = $env{'form.'.$id.'.rndseed'};  
     }  
 }  }
   
 sub find_which_previous {  sub find_which_previous {
Line 1362  sub grade { Line 1499  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 1377  sub get_grade_messages { Line 1514  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 1395  sub get_grade_messages { Line 1532  sub get_grade_messages {
     if ( $tries eq '' ) { $tries = '0'; }      if ( $tries eq '' ) { $tries = '0'; }
     if ( $maxtries eq '' ) { $maxtries = '2'; }       if ( $maxtries eq '' ) { $maxtries = '2'; } 
     if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; }       if ( $maxtries eq 'con_lost' ) { $maxtries = '0'; } 
     my $tries_text= &get_tries_text();;      my $tries_text= &get_tries_text();
     if ($showbutton) {      if ($showbutton) {
  if ($target eq 'tex') {   if ($target eq 'tex') {
     if ($env{'request.state'} ne "construct"      if ($env{'request.state'} ne "construct"
  && $Apache::lonhomework::type ne 'exam'   && $Apache::lonhomework::type ne 'exam'
  && $env{'form.suppress_tries'} ne 'yes') {   && $env{'form.suppress_tries'} ne 'yes') {
  $trystr = ' {\vskip 1 mm \small \textit{'.$tries_text.'} '.   $trystr ='{\vskip 1 mm \small '
     $tries.'/'.$maxtries.'} \vskip 2 mm ';                          .&mt('[_1]'.$tries_text.'[_2] [_3]'
    ,'\textit{','}',$tries.'/'.$maxtries ) 
                           .'} \vskip 2 mm';
     } else {      } else {
  $trystr = '\vskip 0 mm ';   $trystr = '\vskip 0 mm ';
     }      }
  } else {   } else {
     $trystr = '<td><span class="LC_nobreak">'.&mt($tries_text)." $tries";      my $trial =$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";   $trial.="/".&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'};      $trial.="/".$Apache::inputtags::params{'maxtries'};
  }   }
     }      }
     $trystr.="</span></td>";      $trystr = '<td><span class="LC_nobreak">'.&mt($tries_text.' [_1]',$trial).'</span></td>';
  }   }
     }      }
   
Line 1445  sub gradestatus { Line 1584  sub gradestatus {
  && $status ne 'UNAVAILABLE'    && $status ne 'UNAVAILABLE' 
  && $status ne 'INVALID_ACCESS'    && $status ne 'INVALID_ACCESS' 
  && $status ne 'NEEDS_CHECKIN'    && $status ne 'NEEDS_CHECKIN' 
  && $status ne 'NOT_IN_A_SLOT') {     && $status ne 'NOT_IN_A_SLOT'
            && $status ne 'RESERVABLE'
            && $status ne 'RESERVABLE_LATER'
            && $status ne 'NOTRESERVABLE') {
   
    if ($status eq 'SHOW_ANSWER') {
               $showbutton = 0;
           }
   
  ($previousmsg,$latemessage,$message,$trystr) =   ($previousmsg,$latemessage,$message,$trystr) =
     &get_grade_messages($id,"resource.$id",$target,$status,      &get_grade_messages($id,"resource.$id",$target,$status,
  $showbutton);   $showbutton);
  if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {   if ($status eq 'CANNOT_ANSWER') {
     $showbutton = 0;      $showbutton = 0;
  }   }
  if ( $status eq 'SHOW_ANSWER') {   if ( $status eq 'SHOW_ANSWER') {
Line 1506  sub previous_tries { Line 1652  sub previous_tries {
  $count++;   $count++;
  $count_lookup{$i} = $count;   $count_lookup{$i} = $count;
         my $curr_rndseed = $Apache::lonhomework::history{"$prefix.rndseed"};          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 1524  sub previous_tries { Line 1669  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 || $lastrndseed) && ($i > 1)) {
                 if ($curr_rndseed ne $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>';                      $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 1570  sub previous_tries { Line 1725  sub previous_tries {
  '</th><th colspan="'.scalar(@Apache::inputtags::response).'">'.   '</th><th colspan="'.scalar(@Apache::inputtags::response).'">'.
  &mt('Submitted Answer').'</th>';   &mt('Submitted Answer').'</th>';
     $output ='<table class="LC_prior_tries">'.$headers.$output.'</table>';      $output ='<table class="LC_prior_tries">'.$headers.$output.'</table>';
     #return $output;  
     $output = &Apache::loncommon::js_ready($output);   
     $output.='<br /><form action=""><center><input type="button" name="close" value="'.&mt('Close Window').'" onClick="window.close()" /></center></form>';  
   
     my $windowopen=&Apache::lonhtmlcommon::javascript_docopen();  
     my $tries_text = &get_tries_text('link');      my $tries_text = &get_tries_text('link');
     my $start_page =  
  &Apache::loncommon::start_page($tries_text, undef,  
        {'only_body'      => 1,  
  'bgcolor'        => '#FFFFFF',  
  'js_ready'       => 1,  
         'inherit_jsmath' => 1, });  
     my $end_page =  
  &Apache::loncommon::end_page({'js_ready' => 1,});  
     my $prefix = $env{'form.request.prefix'};      my $prefix = $env{'form.request.prefix'};
     $prefix =~ tr{.}{_};      $prefix =~ tr{.}{_};
     my $function_name = "LONCAPA_previous_tries_".$prefix.      my $function_name = "LONCAPA_previous_tries_".$prefix.
  $Apache::lonxml::curdepth.'_'.$env{'form.counter'};   $Apache::lonxml::curdepth.'_'.$env{'form.counter'};
     my $result ="<script type=\"text/javascript\">      my $result = &Apache::loncommon::modal_adhoc_window($function_name,420,410,$output,&mt($tries_text))."<br />";
 // <![CDATA[  
     function $function_name() {newWindow=open('','new_W','width=500,height=500,scrollbars=1,resizable=yes');newWindow.$windowopen;newWindow.document.writeln('$start_page $output $end_page');newWindow.document.close();newWindow.focus()}  
 // ]]>  
 </script><a href=\"javascript:$function_name();void(0);\">".&mt($tries_text)."</a><br />";  
     #use Data::Dumper;  
     #&Apache::lonnet::logthis(&Dumper(\%Apache::inputtags::submission_display));  
     return $result;      return $result;
 }  }
   
Line 1620  sub get_tries_text { Line 1757  sub get_tries_text {
     return $tries_text;      return $tries_text;
 }  }
   
   sub spelling_languages {
       my %langchoices;
       foreach my $id (&Apache::loncommon::languageids()) {
           my $code = &Apache::loncommon::supportedlanguagecode($id);
           if ($code ne '') {
               $langchoices{$code} =  &Apache::loncommon::plainlanguagedescription($id);
           }
       }
       my @spelllangs = ('none');
       foreach my $code ('en','de','he','es','fr','pt','tr') {
           push(@spelllangs,[$code,$langchoices{$code}]);
       }
       return \@spelllangs;
   }
   
 1;  1;
 __END__  __END__
   

Removed from v.1.271.2.5  
changed lines
  Added in v.1.315


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