Diff for /loncom/homework/response.pm between versions 1.105 and 1.119

version 1.105, 2004/09/27 22:47:49 version 1.119, 2005/04/04 18:14:58
Line 110  sub poprandomnumber { Line 110  sub poprandomnumber {
  &Apache::lonxml::error("Unable to restore random algorithm.");   &Apache::lonxml::error("Unable to restore random algorithm.");
     }      }
 }  }
   
 sub setrandomnumber {  sub setrandomnumber {
     my $rndseed;      my $rndseed;
     $rndseed=&Apache::structuretags::setup_rndseed();      $rndseed=&Apache::structuretags::setup_rndseed();
Line 118  sub setrandomnumber { Line 119  sub setrandomnumber {
     #  $rndseed=unpack("%32i",$rndseed);      #  $rndseed=unpack("%32i",$rndseed);
     my $rand_alg=&Apache::lonnet::get_rand_alg();      my $rand_alg=&Apache::lonnet::get_rand_alg();
     my $rndmod;      my $rndmod;
     if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||  
  $rand_alg eq '64bit2') {      my ($id1,$id2,$shift_amt);
  $rndmod=(&Apache::lonnet::numval($Apache::inputtags::part) << 10);      if ($Apache::lonhomework::parsing_a_problem) {
    $id1=$Apache::inputtags::part;
  if (defined($Apache::inputtags::response[-1])) {   if (defined($Apache::inputtags::response[-1])) {
     $rndmod+=&Apache::lonnet::numval($Apache::inputtags::response[-1]);      $id2=$Apache::inputtags::response[-1];
  }   }
    $shift_amt=scalar(@Apache::inputtags::responselist);
       } elsif ($Apache::lonhomework::parsing_a_task) {
    $id1=$Apache::bridgetask::dimension;
    if (defined($Apache::bridgetask::instance[-1])) {
       $id2=$Apache::bridgetask::instance[-1];
    }
    $shift_amt=scalar(@Apache::bridgetask::instance);
       } 
       &Apache::lonxml::debug("id1: $id1, id2: $id2, shift_amt: $shift_amt");
       if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||
    $rand_alg eq '64bit2') {
    $rndmod=(&Apache::lonnet::numval($id1) << 10);
    if (defined($id2)) { $rndmod+=&Apache::lonnet::numval($id2); }
       } elsif ($rand_alg eq '64bit3') {
    $rndmod=(&Apache::lonnet::numval2($id1) << 10);
    if (defined($id2)) { $rndmod+=&Apache::lonnet::numval2($id2); }
     } else {      } else {
  $rndmod=(&Apache::lonnet::numval2($Apache::inputtags::part) << 10);   my $shift=(4*$shift_amt)%30;
  if (defined($Apache::inputtags::response[-1])) {   $rndmod=(&Apache::lonnet::numval3($id1) << (($shift+15)%30));
     $rndmod+=&Apache::lonnet::numval2($Apache::inputtags::response[-1]);   if (defined($id2)) {
       $rndmod+=(&Apache::lonnet::numval3($id2) << $shift );
  }   }
     }      }
     if ($rndseed =~/([,:])/) {      if ($rndseed =~/([,:])/) {
Line 136  sub setrandomnumber { Line 155  sub setrandomnumber {
  my ($num1,$num2)=split(/\Q$char\E/,$rndseed);   my ($num1,$num2)=split(/\Q$char\E/,$rndseed);
  $num1+=$rndmod;   $num1+=$rndmod;
  $num2+=$rndmod;   $num2+=$rndmod;
    if($Apache::lonnet::_64bit) { $num1=(($num1<<32)>>32); $num2=(($num2<<32)>>32); }
  $rndseed=$num1.$char.$num2;   $rndseed=$num1.$char.$num2;
     } else {      } else {
  $rndseed+=$rndmod;   $rndseed+=$rndmod;
    if($Apache::lonnet::_64bit) {
       use integer;
       $rndseed=(($rndseed<<32)>>32);
    }
     }      }
       &Apache::lonxml::debug("randseed $rndmod $rndseed");
     &Apache::lonnet::setup_random_from_rndseed($rndseed);      &Apache::lonnet::setup_random_from_rndseed($rndseed);
     &Apache::lonxml::debug("randseed $rndseed");  
     return '';      return '';
 }  }
   
Line 268  sub handle_previous { Line 292  sub handle_previous {
     if ($$previous{'used'} && ($$previous{'award'} eq $ad) ) {      if ($$previous{'used'} && ($$previous{'award'} eq $ad) ) {
  if ($$previous{'last'}) {   if ($$previous{'last'}) {
     push(@Apache::inputtags::previous,'PREVIOUSLY_LAST');      push(@Apache::inputtags::previous,'PREVIOUSLY_LAST');
  } else {      push(@Apache::inputtags::previous_version,$$previous{'version'});
    } elsif ($Apache::lonhomework::type ne 'survey') {
     push(@Apache::inputtags::previous,'PREVIOUSLY_USED');      push(@Apache::inputtags::previous,'PREVIOUSLY_USED');
       push(@Apache::inputtags::previous_version,$$previous{'version'});
  }   }
  push(@Apache::inputtags::previous_version,$$previous{'version'});  
     }      }
 }  }
   
Line 419  sub end_responseparam { Line 444  sub end_responseparam {
 }  }
   
 sub start_parameter {  sub start_parameter {
     my $result = &start_responseparam(@_);      return &start_responseparam(@_);
     return $result;  
 }  }
   
 sub end_parameter {  sub end_parameter {
     my $result = &end_responseparam(@_);      return &end_responseparam(@_);
     return $result;  
 }  }
   
 sub reset_params {  sub reset_params {
Line 502  sub answer_footer { Line 525  sub answer_footer {
 sub showallfoils {  sub showallfoils {
     if (defined($ENV{'form.showallfoils'})) {      if (defined($ENV{'form.showallfoils'})) {
  my ($symb)=&Apache::lonxml::whichuser();   my ($symb)=&Apache::lonxml::whichuser();
  if ($ENV{'request.state'} eq 'construct' ||    if (($ENV{'request.state'} eq 'construct') || 
     ($ENV{'user.adv'} && $symb eq '')) {      ($ENV{'user.adv'} && $symb eq '')      ||
               ($Apache::lonhomework::viewgrades) ) {
     return 1;      return 1;
  }   }
     }      }
       if ($Apache::lonhomework::type eq 'survey') { return 1; }
     return 0;      return 0;
 }  }
   
Line 646  sub analyze_store_foilgroup { Line 671  sub analyze_store_foilgroup {
 sub check_if_computed {  sub check_if_computed {
     my ($token,$parstack,$safeeval,$name)=@_;      my ($token,$parstack,$safeeval,$name)=@_;
     my $value = &Apache::lonxml::get_param($name,$parstack,$safeeval);      my $value = &Apache::lonxml::get_param($name,$parstack,$safeeval);
     if ($value ne $token->[2]{$name}) {      if (ref($token->[2]) eq 'HASH' && $value ne $token->[2]{$name}) {
  my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]";   my $part_id="$Apache::inputtags::part.$Apache::inputtags::response[-1]";
  $Apache::lonhomework::analyze{"$part_id.answercomputed"} = 1;   $Apache::lonhomework::analyze{"$part_id.answercomputed"} = 1;
     }      }
Line 702  sub get_response_param { Line 727  sub get_response_param {
     return $parameter;      return $parameter;
 }  }
   
   sub submitted {
       my ($who)=@_;
       
       # when scatron grading any submission is a submission
       if ($ENV{'form.submitted'} eq 'scantron') { return 1; }
       # if the caller only cared if this was a scantron submission
       if ($who eq 'scantron') { return 0; }
       # if the Submit Answer button for this particular part was pressed
       my $partid=$Apache::inputtags::part;
       if (defined($ENV{'form.submit_'.$partid})) { return 1; }
       # otherwise no submission occured
       return 0;
   }
   
   # basically undef and 0 (both false) mean that they still have work to do
   # and all true values mean that they can't do any more work
   #
   # a return of undef means it is unattempted
   # a return of 0 means it is attmpted and wrong but still has tries
   # a return of 1 means it is marked correct
   # a return of 2 means they have exceed maximum number of tries
   # a return of 3 means it after the answer date
   sub check_status {
       my ($id)=@_;
       if (!$id) { $id=$Apache::linputtags::part; }
       my $curtime=&Apache::lonnet::EXT('system.time');
       my $opendate=&Apache::lonnet::EXT("resource.$id.opendate");
       my $duedate=&Apache::lonnet::EXT("resource.$id.duedate");
       my $answerdate=&Apache::lonnet::EXT("resource.$id.answerdate");
       if ( $opendate && $curtime > $opendate &&
            $duedate && $curtime > $duedate &&
            $answerdate && $curtime > $answerdate) {
           return 3;
       }
       my $status=&Apache::lonnet::EXT("user.resource.resource.$id.solved");
       if ($status =~ /^correct/) { return 1; }
       if (!$status) { return undef; }
       my $maxtries=&Apache::lonnet::EXT("resource.$id.maxtries");
       if ($maxtries eq '') { $maxtries=2; }
       my $curtries=&Apache::lonnet::EXT("user.resource.resource.$id.tries");
       if ($curtries < $maxtries) { return 0; }
       return 2;
   }
   
 1;  1;
 __END__  __END__
     

Removed from v.1.105  
changed lines
  Added in v.1.119


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