Diff for /loncom/homework/structuretags.pm between versions 1.559 and 1.570

version 1.559, 2018/03/30 23:50:13 version 1.570, 2019/11/07 02:58:37
Line 366  var postsubmit = '$postsubmit'; Line 366  var postsubmit = '$postsubmit';
                 submithandled = 1;                  submithandled = 1;
                 \$( "#msg_"+buttonId ).css({"display": "inline","background-color": "#87cefa",                  \$( "#msg_"+buttonId ).css({"display": "inline","background-color": "#87cefa",
                                            "color": "black","padding": "2px"}) ;                                             "color": "black","padding": "2px"}) ;
                 if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) {                  if (( \$(this.form).attr("id") == "LC_page" ) && (\$('input[name="all_submit"]').length )) {
                     if (buttonId != "all_submit") {                      if (buttonId != "all_submit") {
                         \$( ".LC_status_"+buttonId ).hide();                          \$( ".LC_status_"+buttonId ).hide();
                         if (( "#"+buttonId+"_pressed" ).length) {                      }
                             \$( "#"+buttonId+"_pressed" ).val( "1" );                      if (( "#"+buttonId+"_pressed" ).length) {
                         }                          \$( "#"+buttonId+"_pressed" ).val( "1" );
                     }                      }
                 } else {                  } else {
                     \$( ".LC_status_"+buttonId ).hide();                      \$( ".LC_status_"+buttonId ).hide();
Line 384  var postsubmit = '$postsubmit'; Line 384  var postsubmit = '$postsubmit';
                 if (timeout > 0) {                  if (timeout > 0) {
                     setTimeout(function(){                      setTimeout(function(){
                                        \$( "#msg_"+buttonId ).css({"display": "none"});                                         \$( "#msg_"+buttonId ).css({"display": "none"});
                                        if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) {                                         if (( \$(this.form).attr("id") == "LC_page" ) && (\$('input[name="all_submit"]').length )) {
                                            if (buttonId != "all_submit") {                                             if (( "#"+buttonId+"_pressed" ).length) {
                                                if (( "#"+buttonId+"_pressed" ).length) {                                                 \$( "#"+buttonId+"_pressed" ).val( "" );
                                                    \$( "#"+buttonId+"_pressed" ).val( "" );  
                                                }  
                                            }                                             }
                                        }                                         }
                                        \$( ".LC_hwk_submit" ).prop( "disabled", false);                                         \$( ".LC_hwk_submit" ).prop( "disabled", false);
Line 669  sub get_resource_name { Line 667  sub get_resource_name {
 }  }
   
 sub setup_rndseed {  sub setup_rndseed {
     my ($safeeval,$target,$probpartlist)=@_;      my ($safeeval,$target,$probpartlist,$prevparttype)=@_;
     my ($symb)=&Apache::lonnet::whichuser();      my ($symb)=&Apache::lonnet::whichuser();
     my ($questiontype,$set_safespace,$rndseed);      my ($questiontype,$set_safespace,$rndseed,$numtries,$reqtries);
     if ($target eq 'analyze') {      if ($target eq 'analyze') {
         $questiontype = $env{'form.grade_questiontype'};          $questiontype = $env{'form.grade_questiontype'};
     }      }
     unless (defined($questiontype)) {      unless (defined($questiontype)) {
         $questiontype = $Apache::lonhomework::type;          $questiontype = $Apache::lonhomework::type;
     }      }
       if ($Apache::lonhomework::type eq 'randomizetry') {
           my $partfortries = $Apache::inputtags::part;
   #
   # Where question type is "randomizetry" for a problem containing
   # a single part (and unless type is explicitly set to not be
   # "randomizetry" for that part), the number of tries used to
   # determine randomization will be for that part, and randomization
   # from calls to &random() in a perl script block before the part tag,
   # will change based on the number of tries, and value of the
   # "randomizeontries" parameter in effect for the single part.
   #
           if (ref($probpartlist) eq 'ARRAY') {
               if ((@{$probpartlist} == 1) && ($probpartlist->[0] ne $partfortries)) {
                   if (&Apache::lonnet::EXT('resource.'.$probpartlist->[0].'.type') eq 'randomizetry') {
                       $partfortries = $probpartlist->[0];
                   } else {
                       $partfortries = '';
                   }
               }
           }
           if ($partfortries ne '') {
               $numtries = $Apache::lonhomework::history{"resource.$partfortries.tries"};
               $reqtries = &Apache::lonnet::EXT("resource.$partfortries.randomizeontries");
           }
       }
     if (($env{'request.state'} eq "construct")      if (($env{'request.state'} eq "construct")
         || ($symb eq '')          || ($symb eq '')
         || ($Apache::lonhomework::type eq 'practice')          || ($Apache::lonhomework::type eq 'practice')
Line 695  sub setup_rndseed { Line 718  sub setup_rndseed {
                 $env{'form.rndseed'}=$rndseed;                  $env{'form.rndseed'}=$rndseed;
             }              }
  }   }
         if (($env{'request.state'} eq "construct") &&           if ((($env{'request.state'} eq "construct") || ($symb eq '')) && 
             ($Apache::lonhomework::type eq 'randomizetry')) {              ($Apache::lonhomework::type eq 'randomizetry')) {
             my $tries = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"};              if ($numtries) {
             if ($tries) {                  if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) {
                 $rndseed += $tries;                      my $inc = int($numtries/$reqtries);
                       $rndseed += $inc;
                   } else {
                       $rndseed += $numtries;
                   }
             }              }
             $env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed;              $env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed;
         }          }
Line 737  sub setup_rndseed { Line 764  sub setup_rndseed {
         }          }
         unless (($target eq 'analyze') && (defined($rndseed))) {          unless (($target eq 'analyze') && (defined($rndseed))) {
             $rndseed=&Apache::lonnet::rndseed();              $rndseed=&Apache::lonnet::rndseed();
             my $partfortries = $Apache::inputtags::part;              my $curr_try = $numtries;
             if (ref($probpartlist) eq 'ARRAY') {  
                 if ((@{$probpartlist} == 1) && ($probpartlist->[0] ne $Apache::inputtags::part)) {  
                     $partfortries = $probpartlist->[0];  
                 }  
             }  
             my $curr_try = $Apache::lonhomework::history{"resource.$partfortries.tries"};  
             if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {              if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
                 $curr_try ++;                  $curr_try ++;
             }              }
Line 751  sub setup_rndseed { Line 772  sub setup_rndseed {
                 $rndseed = $1;                  $rndseed = $1;
             }              }
             if ($curr_try) {              if ($curr_try) {
                 my $reqtries = &Apache::lonnet::EXT("resource.$partfortries.randomizeontries");  
                 if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) {                  if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) {
                     my $inc = int(($curr_try-1)/$reqtries);                      my $inc = int(($curr_try-1)/$reqtries);
                     $rndseed += $inc;                      $rndseed += $inc;
Line 764  sub setup_rndseed { Line 784  sub setup_rndseed {
         if ($target eq 'grade') {          if ($target eq 'grade') {
             $Apache::lonhomework::rawrndseed = $rndseed;              $Apache::lonhomework::rawrndseed = $rndseed;
         }          }
       } elsif ($prevparttype eq 'randomizetry') {
           if ($env{'form.0.rndseed'} ne '') {
               $set_safespace = 1;
               $rndseed = $env{'form.0.rndseed'};
           }
     }      }
     if ($set_safespace) {      if ($set_safespace) {
         if ($safeeval) {          if ($safeeval) {
             &Apache::lonxml::debug("Setting rndseed to $rndseed");              &Apache::lonxml::debug("Setting rndseed to $rndseed");
             &Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval);              &Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval);
               if (($Apache::lonhomework::type eq 'randomizetry') || ($prevparttype eq 'randomizetry')) {
                   &Apache::lonxml::debug("Setting randomizetrypart to $Apache::inputtags::part");
                   &Apache::run::run('$external::randomizetrypart="'.$Apache::inputtags::part.'";',$safeeval);
               }
         }          }
     }      }
     unless (($env{'request.state'} eq "construct") || ($symb eq '')) {      unless (($env{'request.state'} eq "construct") || ($symb eq '')) {
Line 1117  sub finalize_storage { Line 1146  sub finalize_storage {
  delete(@Apache::lonhomework::results{@remove});   delete(@Apache::lonhomework::results{@remove});
  my ($symb,$courseid,$domain,$name) =    my ($symb,$courseid,$domain,$name) = 
     &Apache::lonnet::whichuser($given_symb);      &Apache::lonnet::whichuser($given_symb);
           my ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref,$total,$possible,$dopassback);
  if ($env{'request.state'} eq 'construct'    if ($env{'request.state'} eq 'construct' 
     || $symb eq ''      || $symb eq ''
     || $Apache::lonhomework::type eq 'practice') {      || $Apache::lonhomework::type eq 'practice') {
Line 1126  sub finalize_storage { Line 1156  sub finalize_storage {
       $namespace,'',$domain,$name);        $namespace,'',$domain,$name);
     &Apache::lonxml::debug('Construct Store return message:'.$result);      &Apache::lonxml::debug('Construct Store return message:'.$result);
  } else {   } else {
             my ($laststore,$checkedparts,@parts,%postcorrect);              my ($laststore,$checkedparts,@parts,%postcorrect,%record);
             if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) &&              if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) &&
                 (!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) &&                  (!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) &&
                 (!defined($env{'form.grade_courseid'}))) {                  (!defined($env{'form.grade_courseid'}))) {
                   if ($env{'request.lti.login'}) {
                       my ($map)=&Apache::lonnet::decode_symb($symb);
                       $map = &Apache::lonnet::clutter($map);
                       ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref) = 
                           &needs_lti_passback($courseid,$symb,$map);
                   }
                 if ($Apache::lonhomework::history{'version'}) {                  if ($Apache::lonhomework::history{'version'}) {
                     $laststore = $Apache::lonhomework::history{'version'}.'='.                      $laststore = $Apache::lonhomework::history{'version'}.'='.
                                  $Apache::lonhomework::history{'timestamp'};                                   $Apache::lonhomework::history{'timestamp'};
                 } else {                  } else {
                     $laststore = '0=0';                      $laststore = '0=0';
                 }                  }
                 my %record = &Apache::lonnet::restore($symb,$courseid,$domain,$name);                  %record = &Apache::lonnet::restore($symb,$courseid,$domain,$name);
                 if ($record{'version'}) {                  if ($record{'version'}) {
                     my ($newversion,$oldversion,$oldtimestamp);                      my ($newversion,$oldversion,$oldtimestamp);
                     if ($Apache::lonhomework::history{'version'}) {                      if ($Apache::lonhomework::history{'version'}) {
Line 1212  sub finalize_storage { Line 1248  sub finalize_storage {
                     }                      }
                 }                  }
             }              }
               if ($passback) {
                   foreach my $key (keys(%Apache::lonhomework::results)) {
                       if ($key =~ /^resource\.([^\.]+)\.solved$/) {
                           my $part = $1;
                           if ((($Apache::lonhomework::results{$key} =~ /^correct_/) ||
                               ($Apache::lonhomework::results{$key} eq 'incorrect_attempted')) &&
                               ($Apache::lonhomework::results{"resource.$part.tries"})) {
                               $dopassback = 1;
                               last;
                           }
                       }
                   }
               }
               if (($dopassback) && ($ltiscope eq 'resource') && ($ltisymb eq $symb)) {
                   $total = 0;
                   $possible = 0;
                   my $navmap = Apache::lonnavmaps::navmap->new();
                   if (ref($navmap)) {
                       my $res = $navmap->getBySymb($symb);
                       if (ref($res)) {
                           my $partlist = $res->parts();
                           if (ref($partlist) eq 'ARRAY') {
                               foreach my $part (@{$partlist}) {
                                   unless (exists($Apache::lonhomework::results{"resource.$part.solved"})) {
                                       next if ($Apache::lonhomework::record{"resource.$part.solved"} =~/^excused/);
                                       my $weight = &Apache::lonnet::EXT("resource.$part.weight",$symb);
                                       $possible += $weight;
                                       if (($record{'version'}) && (exists($record{"resource.$part.awarded"}))) {
                                           my $awarded = $record{"resource.$part.awarded"};
                                           if ($awarded) {
                                               $total += $weight * $awarded;
                                           }
                                       }
                                   }
                               }
                           }
                       }
                   }
                   foreach my $key (keys(%Apache::lonhomework::results)) {
                       if ($key =~ /^resource\.([^\.]+)\.awarded$/) {
                           my $part = $1;
                           my $weight = &Apache::lonnet::EXT("resource.$part.weight",$symb);
                           $possible += $weight;
                           my $awarded = $Apache::lonhomework::results{$key};
                           if ($awarded) {
                               $total += $weight * $awarded;
                           }
                       }
                   }
               }
     &Apache::lonxml::debug('Store return message:'.$result);      &Apache::lonxml::debug('Store return message:'.$result);
             &store_aggregates($symb,$courseid);              &store_aggregates($symb,$courseid);
               if ($dopassback) {
                   my $scoreformat = 'decimal';
                   if (ref($ltiref) eq 'HASH') {
                       if ($ltiref->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) {
                           $scoreformat = $1;
                       }
                   }
                   my $ltigrade = {
                                    'lti'      => $ltiref,
                                    'cid'      => $courseid,
                                    'uname'    => $env{'user.name'},
                                    'udom'     => $env{'user.domain'},
                                    'pbid'     => $env{'request.lti.passbackid'},
                                    'pburl'    => $env{'request.lti.passbackurl'},
                                    'scope'    => $ltiscope,
                                    'ltimap'   => $ltimap,
                                    'ltisymb'  => $ltisymb,
                                    'format'   => $scoreformat,
                                  };
                   if ($ltiscope eq 'resource') {
                       $ltigrade->{'total'} = $total;
                       $ltigrade->{'possible'} = $possible;
                   }
                   push(@Apache::lonhomework::ltipassback,$ltigrade);
               }
  }   }
     } else {      } else {
  &Apache::lonxml::debug('Nothing to store');   &Apache::lonxml::debug('Nothing to store');
Line 1221  sub finalize_storage { Line 1332  sub finalize_storage {
     return $result;      return $result;
 }  }
   
   sub needs_lti_passback {
       my ($courseid,$symb,$map) = @_;
       if (($env{'request.lti.passbackid'}) && ($env{'request.lti.passbackurl'})) {
           if ($courseid =~ /^($LONCAPA::match_domain)_($LONCAPA::match_courseid)$/) {
               my ($cdom,$cnum) = ($1,$2);
               my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider');
               if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') {
                   if ($lti{$env{'request.lti.login'}}{'passback'}) {
                       my ($ltiscope,$ltiuri,$ltisymb) =
                           &LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'},
                                                                  $cdom,$cnum,1);
                       my ($passback,$ltimap);
                       if ($ltiscope eq 'resource') {
                           if ($ltisymb eq $symb) {
                               $passback = 1;
                           }
                       } elsif ($ltiscope eq 'map') {
                           if ($ltiuri eq $map) {
                               $passback = 1;
                               $ltimap = $map;
                           }
                       } elsif ($ltiscope eq 'course') {
                           if (($env{'request.lti.uri'} eq "/$cdom/$cnum") || ($env{'request.lti.uri'} eq '')) {
                               $passback = 1;
                           }
                       }
                       return ($passback,$ltiscope,$ltimap,$ltisymb,$lti{$env{'request.lti.login'}});
                   }
               }
           }
       }
       return;
   }
   
 =pod  =pod
   
 =item check_correctness_changes()  =item check_correctness_changes()
Line 1545  sub init_problem_globals { Line 1690  sub init_problem_globals {
     @Apache::structuretags::whilebody=();      @Apache::structuretags::whilebody=();
     @Apache::structuretags::whileline=();      @Apache::structuretags::whileline=();
     $Apache::lonhomework::scantronmode=0;      $Apache::lonhomework::scantronmode=0;
       $Apache::lonhomework::randomizetrypart=0;
     undef($Apache::lonhomework::name);      undef($Apache::lonhomework::name);
     undef($Apache::lonhomework::default_type);      undef($Apache::lonhomework::default_type);
     undef($Apache::lonhomework::type);      undef($Apache::lonhomework::type);
Line 1568  sub reset_problem_globals { Line 1714  sub reset_problem_globals {
     undef($Apache::lonhomework::default_type);      undef($Apache::lonhomework::default_type);
     undef($Apache::lonhomework::type);      undef($Apache::lonhomework::type);
     undef($Apache::lonhomework::scantronmode);      undef($Apache::lonhomework::scantronmode);
       undef($Apache::inputtags::randomizetrypart);
     undef($Apache::lonhomework::ignore_response_errors);      undef($Apache::lonhomework::ignore_response_errors);
     undef(@Apache::functionplotresponse::callscripts);      undef(@Apache::functionplotresponse::callscripts);
     &Apache::lonhomework::reset_show_problem_status();      &Apache::lonhomework::reset_show_problem_status();
Line 1662  sub start_problem { Line 1809  sub start_problem {
     my $ipused;      my $ipused;
   
     my $name= &get_resource_name($parstack,$safeeval);      my $name= &get_resource_name($parstack,$safeeval);
     my ($result,$form_tag_start,$slot_name,$slot,$probpartlist);      my ($result,$form_tag_start,$slot_name,$slot,$probpartlist,$firstaccres);
   
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
         $target eq 'tex') {          $target eq 'tex') {
         if ($env{'form.markaccess'}) {          if ($env{'form.markaccess'}) {
             my @interval=&Apache::lonnet::EXT("resource.0.interval");              my @interval=&Apache::lonnet::EXT("resource.0.interval");
             my ($timelimit) = split(/_/,$interval[0]);              my ($timelimit) = split(/_/,$interval[0]);
             &Apache::lonnet::set_first_access($interval[1],$timelimit);              my $is_set = &Apache::lonnet::set_first_access($interval[1],$timelimit);
               unless (($is_set eq 'ok') || ($is_set eq 'already_set')) {
                   $firstaccres = $is_set;
               }
         }          }
     }      }
   
Line 1681  sub start_problem { Line 1831  sub start_problem {
     } elsif ((($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) ||      } elsif ((($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) ||
              ($target eq 'answer')) {               ($target eq 'answer')) {
         my ($symb)= &Apache::lonnet::whichuser();          my ($symb)= &Apache::lonnet::whichuser();
         my $navmap = Apache::lonnavmaps::navmap->new();          if ($symb ne '') {
         if (ref($navmap)) {              my $navmap = Apache::lonnavmaps::navmap->new();
             my $res = $navmap->getBySymb($symb);              if (ref($navmap)) {
             if (ref($res)) {                  my $res = $navmap->getBySymb($symb);
                 $probpartlist = $res->parts();                  if (ref($res)) {
                       $probpartlist = $res->parts();
                   }
             }              }
         }          }
     }      }
Line 1705  sub start_problem { Line 1857  sub start_problem {
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
  $target eq 'tex') {   $target eq 'tex') {
   
           my ($symb) = &Apache::lonnet::whichuser();
  #handle rand seed in construction space   #handle rand seed in construction space
           if (($env{'request.state'} eq 'construct') || ($symb eq '')) {
               my $partorder=&Apache::lonnet::metadata($env{'request.uri'},'partorder');
               if ($partorder ne '') {
                   @{$probpartlist} = split(/,/,$partorder);
               }
           }
  my $rndseed=&setup_rndseed($safeeval,$target,$probpartlist);   my $rndseed=&setup_rndseed($safeeval,$target,$probpartlist);
         if (($target eq 'grade') && &Apache::response::submitted()) {          if (($target eq 'grade') && &Apache::response::submitted()) {
             if ($Apache::lonhomework::type eq 'randomizetry') {              if ($Apache::lonhomework::type eq 'randomizetry') {
Line 1720  sub start_problem { Line 1879  sub start_problem {
                 }                  }
             }              }
         }          }
  my ($symb)=&Apache::lonnet::whichuser();  
   
  if ($env{'request.state'} ne "construct" &&    if ($env{'request.state'} ne "construct" && 
     ($symb eq '' || $Apache::lonhomework::type eq 'practice')) {      ($symb eq '' || $Apache::lonhomework::type eq 'practice')) {
               my $rndseedval = $rndseed;
               if (($symb eq '') && ($Apache::lonhomework::type eq 'randomizetry')) {
                   $rndseedval = $env{'form.rndseed'};
               }
     $form_tag_start.='<input type="hidden" name="rndseed" value="'.      $form_tag_start.='<input type="hidden" name="rndseed" value="'.
  $rndseed.'" />'.   $rndseedval.'" />'.
     '<button type="submit" name="resetdata"      '<button type="submit" name="resetdata"
                         value="new_problem_variation">'.&mt('New Problem Variation').'</button>';                          value="new_problem_variation">'.&mt('New Problem Variation').'</button>';
     if (exists($env{'form.username'})) {      if (exists($env{'form.username'})) {
Line 1747  sub start_problem { Line 1909  sub start_problem {
                 $form_tag_start.=&practice_problem_header();                  $form_tag_start.=&practice_problem_header();
             }              }
     $form_tag_start.='<hr />';      $form_tag_start.='<hr />';
         } elsif (($env{'request.state'} ne "construct") &&          }
                  ($Apache::lonhomework::type eq 'randomizetry') &&          if (($env{'request.state'} ne "construct") &&
                  ($status eq 'CAN_ANSWER') &&              ($Apache::lonhomework::type eq 'randomizetry') &&
                  ($env{'course.'.$env{'request.course.id'}.'.type'} ne 'Placement') &&              ($status eq 'CAN_ANSWER') &&
                  (!$env{'request.role.adv'})) {              ($env{'course.'.$env{'request.course.id'}.'.type'} ne 'Placement') &&
               (!$env{'request.role.adv'})) {
 # "New Problem Variation Each Try" header suppressed for Placement Tests, unless course personnel.   # "New Problem Variation Each Try" header suppressed for Placement Tests, unless course personnel. 
             my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");              my @parts;
             my $problemstatus = &get_problem_status($Apache::inputtags::part);              if (ref($probpartlist) eq 'ARRAY') {
             $form_tag_start.=&randomizetry_problem_header($problemstatus,$reqtries);                  @parts = @{$probpartlist};
               }
               unless (@parts) {
                   my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
                   my $problemstatus = &get_problem_status($Apache::inputtags::part);
                   $form_tag_start.=&randomizetry_problem_header($problemstatus,$reqtries,$symb);
               }
         }          }
   
  my $expression='$external::datestatus="'.$status.'";';   my $expression='$external::datestatus="'.$status.'";';
Line 1776  sub start_problem { Line 1945  sub start_problem {
             ( $status eq 'NEED_DIFFERENT_IP')) {              ( $status eq 'NEED_DIFFERENT_IP')) {
     my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,      my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,
        $style);         $style);
               if (($status eq 'NOT_YET_VIEWED') && ($firstaccres)) {
                   $result .= '<p class="LC_error">'.
                              &mt('A problem occurred when trying to start the timer.').'</p>';
               }
             $result .= &access_status_msg('problem',$status,$symb,$target,$ipused,$accessmsg);              $result .= &access_status_msg('problem',$status,$symb,$target,$ipused,$accessmsg);
  } elsif ($status eq 'NEEDS_CHECKIN') {   } elsif ($status eq 'NEEDS_CHECKIN') {
     my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,      my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,
Line 1809  sub start_problem { Line 1982  sub start_problem {
                     $result.= '<button type="submit" name="resetdata" '.                      $result.= '<button type="submit" name="resetdata" '.
                         'value="new_problem_variation">'.&mt('New Problem Variation').'</button>'.                          'value="new_problem_variation">'.&mt('New Problem Variation').'</button>'.
                         &practice_problem_header().'<hr />';                          &practice_problem_header().'<hr />';
                   } elsif ($Apache::lonhomework::type eq 'randomizetry') {
                       my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
                       my $problemstatus = &get_problem_status($Apache::inputtags::part);
                       $result.=&randomizetry_problem_header($problemstatus,$reqtries);
                 }                  }
     }      }
     # if we are viewing someone else preserve that info      # if we are viewing someone else preserve that info
Line 2040  sub end_problem { Line 2217  sub end_problem {
     }      }
  }   }
         if ($target eq 'web') {          if ($target eq 'web') {
            $result.=&Apache::functionplotresponse::init_script();              $result.=&Apache::functionplotresponse::init_script();
               if ($Apache::lonhomework::default_type eq 'randomizetry') {
                   my ($symb) = &Apache::lonnet::whichuser();
                   if ((($env{'request.state'} eq 'construct') || ($symb eq '')) &&
                       ($status eq 'CAN_ANSWER')) {
                       unless (@Apache::inputtags::partlist > 1) {
                           $result.= <<"ENDJS";
   <script type="text/javascript">
   // <![CDATA[
       \$(document).ready(function() {
            \$('#LC_randomizetry_header').css('display','block');
       });
   // ]]>
   </script>
   ENDJS
                       }
                   }
               }
         }          }
  if ($target eq 'grade') {   if ($target eq 'grade') {
     &Apache::lonhomework::showhash(%Apache::lonhomework::results);      &Apache::lonhomework::showhash(%Apache::lonhomework::results);
Line 2765  sub start_part { Line 2959  sub start_part {
         if (($target eq 'grade') && &Apache::response::submitted()) {          if (($target eq 'grade') && &Apache::response::submitted()) {
             $Apache::lonhomework::results{"resource.$id.rndseed"}=$rndseed;              $Apache::lonhomework::results{"resource.$id.rndseed"}=$rndseed;
         }          }
       } elsif (@Apache::inputtags::partlist > 1) {
           my $prevparttype = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[-2].type");
           if ($prevparttype eq 'randomizetry') {
               my $rndseed=&setup_rndseed($safeeval,$target,'',$prevparttype);
               if (($target eq 'grade') && &Apache::response::submitted()) {
                   $Apache::lonhomework::results{"resource.$id.rndseed"}=$rndseed;
               }
           }
     } elsif (($target eq 'grade') && &Apache::response::submitted()) {      } elsif (($target eq 'grade') && &Apache::response::submitted()) {
         $Apache::lonhomework::results{"resource.$id.rndseed"}=$Apache::lonhomework::rawrndseed;          $Apache::lonhomework::results{"resource.$id.rndseed"}=$Apache::lonhomework::rawrndseed;
     }      }
Line 2840  sub start_part { Line 3042  sub start_part {
  } elsif ($target eq 'web') {   } elsif ($target eq 'web') {
                     if ($status eq 'CAN_ANSWER') {                      if ($status eq 'CAN_ANSWER') {
                         my $problemstatus = &get_problem_status($Apache::inputtags::part);                           my $problemstatus = &get_problem_status($Apache::inputtags::part); 
                         my $probrandomize = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].type");  
                         my $probrandtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].randomizeontries");  
                         my $num = scalar(@Apache::inputtags::partlist)-1;                          my $num = scalar(@Apache::inputtags::partlist)-1;
                         if ($probrandomize eq 'randomizetry') {                          if ((($Apache::lonhomework::default_type eq 'randomizetry') || 
                             if (&Apache::lonnet::EXT("resource.$Apache::inputtags::part.type") ne 'randomizetry') {                              ($Apache::lonhomework::randomizetrypart)) &&
                                 $result .= &randomizetry_part_header($problemstatus,'none',$num);                              ($Apache::lonhomework::type ne 'randomizetry')) {
                             } else {                              $result .= &randomizetry_part_header($problemstatus,'none',$num);
                                 my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");                          } elsif ($Apache::lonhomework::type eq 'randomizetry') {
                                 if ($probrandtries ne $reqtries) {                              $Apache::lonhomework::randomizetrypart = 1;
                                     $result .= &randomizetry_part_header($problemstatus,$reqtries,$num);                              my $reqtries = &Apache::lonnet::EXT("resource.$id.randomizeontries");
                                 }  
                             }  
                         } elsif (&Apache::lonnet::EXT("resource.$Apache::inputtags::part.type") eq 'randomizetry') {  
                             my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");  
                             $result .= &randomizetry_part_header($problemstatus,$reqtries,$num);                              $result .= &randomizetry_part_header($problemstatus,$reqtries,$num);
                         }                          }
                     }                      }
Line 3173  sub practice_problem_header { Line 3369  sub practice_problem_header {
 }  }
   
 sub randomizetry_problem_header {  sub randomizetry_problem_header {
     my ($problemstatus,$reqtries) = @_;      my ($problemstatus,$reqtries,$symb) = @_;
     my ($header,$text);      my ($header,$text);
     if ($reqtries > 1) {      if ($reqtries > 1) {
         $header = &mt('New Problem Variation After Every [quant,_1,Try,Tries]',$reqtries);          $header = &mt('New Problem Variation After Every [quant,_1,Try,Tries]',$reqtries);
Line 3193  sub randomizetry_problem_header { Line 3389  sub randomizetry_problem_header {
             $text = &mt('A new variation will be generated after each try until correct or tries limit is reached.');              $text = &mt('A new variation will be generated after each try until correct or tries limit is reached.');
         }          }
     }      }
     return '<h3 class="LC_info">'.$header.'</h3>'.      if (($env{'request.state'} eq "construct") || ($symb eq '')) {
            '<span class="LC_info">'.$text.'</span><hr />';          return '<div class="LC_info" id="LC_randomizetry_header" style="display:none">'.
                  '<h3>'.$header.'</h3><span class="LC_info">'.$text.'</span><hr /></div>';
       } else {
           return '<h3 class="LC_info">'.$header.'</h3>'.
                  '<span class="LC_info">'.$text.'</span><hr />';
       }
 }  }
   
 sub randomizetry_part_header {  sub randomizetry_part_header {
Line 3202  sub randomizetry_part_header { Line 3403  sub randomizetry_part_header {
     my ($header,$text);      my ($header,$text);
     if ($reqtries eq 'none') {      if ($reqtries eq 'none') {
         $header = &mt('No Question Variation');          $header = &mt('No Question Variation');
         $text = &mt('For this question there will no new variation after a try.');          $text = &mt('For this question there will be no new variation after a try.');
     } elsif ($reqtries > 1) {      } elsif ($reqtries > 1) {
         $header = &mt('New Question Variation After Every [quant,_1,Try,Tries]',$reqtries);          $header = &mt('New Question Variation After Every [quant,_1,Try,Tries]',$reqtries);
         if (($problemstatus eq 'no') ||          if (($problemstatus eq 'no') ||

Removed from v.1.559  
changed lines
  Added in v.1.570


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