Diff for /loncom/homework/radiobuttonresponse.pm between versions 1.10 and 1.24

version 1.10, 2001/01/19 21:44:12 version 1.24, 2001/08/13 21:01:32
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # mutliple choice style responses  # mutliple choice style responses
   # 2/21 Guy
   
 package Apache::radiobuttonresponse;  package Apache::radiobuttonresponse;
 use strict;  use strict;
Line 9  sub BEGIN { Line 10  sub BEGIN {
 }  }
   
 sub start_radiobuttonresponse {  sub start_radiobuttonresponse {
   my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   #when in a radiobutton response use these    #when in a radiobutton response use these
   &Apache::lonxml::register('Apache::radiobuttonresponse',('foilgroup','foil'));    &Apache::lonxml::register('Apache::radiobuttonresponse',('foilgroup','foil','conceptgroup'));
   my $id = &Apache::response::start_response($parstack,$safeeval);    my $id = &Apache::response::start_response($parstack,$safeeval);
   return '';    return '';
 }  }
Line 24  sub end_radiobuttonresponse { Line 25  sub end_radiobuttonresponse {
 %Apache::response::foilgroup={};  %Apache::response::foilgroup={};
 sub start_foilgroup {  sub start_foilgroup {
   %Apache::response::foilgroup={};    %Apache::response::foilgroup={};
     $Apache::radiobuttonresponse::conceptgroup=0;
     &Apache::response::setrandomnumber();
   return '';    return '';
 }  }
   
 sub setrandomnumber {  sub storesurvey {
   my $rndseed=&Apache::lonnet::rndseed();    if ( defined $ENV{'form.submitted'}) {
   $rndseed=unpack("%32i",$rndseed);      my $response = $ENV{'form.HWVAL'.$Apache::inputtags::response['-1']};
   $rndseed=$rndseed      &Apache::lonxml::debug("Here I am!:$response:");
     +&Apache::lonnet::numval($Apache::inputtags::part)      if ( $response =~ /[^\s]/) {
       +&Apache::lonnet::numval($Apache::inputtags::response['-1']);        my $id = $Apache::inputtags::response['-1'];
   srand($rndseed);        $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=$response;
         $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='SUBMITTED';
         &Apache::lonxml::debug("submitted a $response<br />\n");
       }
     }
   return '';    return '';
 }  }
   
 sub end_foilgroup {  sub end_foilgroup {
   my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       
   my $result;    my $result;
   if ($target ne 'meta') {    if ($target eq 'grade' || $target eq 'web') {
     my $name;      my $style = &Apache::lonxml::get_param('style',$parstack,$safeeval,'-2');
     &setrandomnumber();      if ( $style eq 'survey' ) {
     my ($truecnt,$falsecnt,$max) = &getfoilcounts($parstack,$safeeval);        if ($target eq 'web') {
     my $count=0;   $result=&displayallfoils();
     # we will add in 1 of the true statements        } elsif ( $target eq 'grade' ) {
     if (($falsecnt+1)>$max) { $count=$max } else { $count=$falsecnt+1; }   $result=&storesurvey();
     my $answer = int(rand ($count));        }
     &Apache::lonxml::debug("Answer is $answer, $count from $max, $falsecnt");      } else {
     if ($target eq 'web') {        my $name;
       $result=&displayfoils($max,$answer);        my ($truecnt,$falsecnt,$max) = &getfoilcounts($parstack,$safeeval);
     } elsif ( $target eq 'grade') {        my $count=0;
       if ( defined $ENV{'form.submitted'}) {        # we will add in 1 of the true statements
  my $response = $ENV{'form.HWVAL'.$Apache::inputtags::response['-1']};        if (($falsecnt+1)>$max) { $count=$max } else { $count=$falsecnt+1; }
  if ( $response =~ /[^\s]/) {        my $answer = int(rand ($count));
   my $id = $Apache::inputtags::response['-1'];        &Apache::lonxml::debug("Answer is $answer, $count from $max, $falsecnt");
   $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=$response;        if ($target eq 'web') {
   &Apache::lonxml::debug("submitted a $response<br>\n");   $result=&displayfoils($max,$answer);
   if ($response == $answer) {        } elsif ( $target eq 'grade') {
     $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='EXACT_ANS';   if ( defined $ENV{'form.submitted'}) {
   } else {    my $response = $ENV{'form.HWVAL'.$Apache::inputtags::response['-1']};
     $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='INCORRECT';    if ( $response =~ /[^\s]/) {
       my $id = $Apache::inputtags::response['-1'];
       $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.submission"}=$response;
       &Apache::lonxml::debug("submitted a $response<br />\n");
       if ($response == $answer) {
         $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='EXACT_ANS';
       } else {
         $Apache::lonhomework::results{"resource.$Apache::inputtags::part.$id.awarddetail"}='INCORRECT';
       }
   }    }
  }   }
       }        }
Line 73  sub end_foilgroup { Line 88  sub end_foilgroup {
   
 sub getfoilcounts {  sub getfoilcounts {
   my ($parstack,$safeeval)=@_;    my ($parstack,$safeeval)=@_;
   my $rrargs ='';    my $max = &Apache::lonxml::get_param('max',$parstack,$safeeval,'-2');
   if ( $#$parstack > 0 ) { $rrargs=$$parstack['-2']; }  
   my $max = &Apache::run::run("{$rrargs;".'return $max}',$safeeval);  
   my @names = @{ $Apache::response::foilgroup{'names'} };    my @names = @{ $Apache::response::foilgroup{'names'} };
   my $truecnt=0;    my $truecnt=0;
   my $falsecnt=0;    my $falsecnt=0;
Line 91  sub getfoilcounts { Line 104  sub getfoilcounts {
   return ($truecnt,$falsecnt,$max);    return ($truecnt,$falsecnt,$max);
 }  }
   
   sub displayallfoils {
     my $result;
     &Apache::lonxml::debug("survey style display");
     my @names = @{ $Apache::response::foilgroup{'names'} };
     my $temp=0;
     my $id=$Apache::inputtags::response['-1'];
     my $part=$Apache::inputtags::part;
     my $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};
     foreach my $name (@names) {
       if ($Apache::response::foilgroup{$name.'.value'} ne 'unused') {
         $result.="<br /><input type=\"radio\" name=\"HWVAL$Apache::inputtags::response['-1']\" value=\"$temp\" ";
         if ($lastresponse eq $temp) { $result .= 'checked="on"'; }
         $result .= '>'.$Apache::response::foilgroup{$name.'.text'}."</input>\n";
         $temp++;
       }
     }
     return $result;
   }
   
 sub displayfoils {  sub displayfoils {
   my ($max,$answer)=@_;    my ($max,$answer)=@_;
   my @names = @{ $Apache::response::foilgroup{'names'} };    my @names = @{ $Apache::response::foilgroup{'names'} };
Line 100  sub displayfoils { Line 132  sub displayfoils {
   my $name;    my $name;
   
   foreach $name (@names) {    foreach $name (@names) {
     #result.="<br><b>$name</b> is <i> $Apache::response::foilgroup{$name.'.value'} </i>";      #result.="<br /><b>$name</b> is <i> $Apache::response::foilgroup{$name.'.value'} </i>";
     if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {      if ($Apache::response::foilgroup{$name.'.value'} eq 'true') {
       push (@truelist,$name);        push (@truelist,$name);
     } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {      } elsif ($Apache::response::foilgroup{$name.'.value'} eq 'false') {
Line 110  sub displayfoils { Line 142  sub displayfoils {
       &Apache::lonxml::error("Unknown state $Apache::response::foilgroup{$name.'.value'} for $name in <foilgroup>");        &Apache::lonxml::error("Unknown state $Apache::response::foilgroup{$name.'.value'} for $name in <foilgroup>");
     }      }
   }    }
   my $whichtrue = rand $#truelist;    my $whichtrue = int(rand($#truelist+1));
   &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");    &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");
   my @whichfalse =();    my @whichfalse =();
   while ((($#whichfalse+2) < $max) && ($#falselist > -1)) {    while ((($#whichfalse+1) < $max) && ($#falselist > -1)) {
     my $afalse=rand $#falselist;      &Apache::lonxml::debug("Have $#whichfalse max is $max");
       my $afalse=int(rand($#falselist+1));
     &Apache::lonxml::debug("From $#falselist elms, picking $afalse");      &Apache::lonxml::debug("From $#falselist elms, picking $afalse");
     $afalse=splice(@falselist,$afalse,1);      $afalse=splice(@falselist,$afalse,1);
     &Apache::lonxml::debug("Picked $afalse");      &Apache::lonxml::debug("Picked $afalse");
Line 124  sub displayfoils { Line 157  sub displayfoils {
   &Apache::lonxml::debug("the true statement is $answer");    &Apache::lonxml::debug("the true statement is $answer");
   if ($Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"} =~ /^correct/ ) {    if ($Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"} =~ /^correct/ ) {
     foreach $name (@whichfalse) {      foreach $name (@whichfalse) {
       $result.="<br />".$Apache::response::foilgroup{$name.'.value'}.        $result.="<br />";
  ":".$Apache::response::foilgroup{$name.'.text'}."</input>\n";        if ($Apache::response::foilgroup{$name.'.value'} eq 'true') { 
    $result.='Correct';
         } else {
    $result.='Incorrect';
         }
         $result.=":".$Apache::response::foilgroup{$name.'.text'}."</input>\n";
     }      }
   } else {    } else {
     my $temp=0;      my $temp=0;
       my $id=$Apache::inputtags::response['-1'];
       my $part=$Apache::inputtags::part;
       my $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};
     foreach $name (@whichfalse) {      foreach $name (@whichfalse) {
       $result.="<br /><input type=\"radio\" name=\"HWVAL$Apache::inputtags::response['-1']\" value=\"$temp\">".$Apache::response::foilgroup{$name.'.text'}."</input>\n";         $result.="<br /><input type=\"radio\" name=\"HWVAL$Apache::inputtags::response['-1']\" value=\"$temp\" ";
         if ($lastresponse eq $temp) { $result .= 'checked="on"'; }
         $result .= '>'.$Apache::response::foilgroup{$name.'.text'}."</input>\n";
       $temp++;        $temp++;
     }      }
   }    }
   return $result."<br />";    return $result."<br />";
 }  }
   
 sub start_foil {  sub start_conceptgroup {
   $Apache::lonxml::redirection--;    $Apache::radiobuttonresponse::conceptgroup=1;
     %Apache::response::conceptgroup={};
   return '';    return '';
 }  }
   
 sub end_foil {  sub end_conceptgroup {
   my ($target,$token,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     $Apache::radiobuttonresponse::conceptgroup=0;
   if ($target eq 'web' || $target eq 'grade') {    if ($target eq 'web' || $target eq 'grade') {
     my $args ='';      my @names = @{ $Apache::response::conceptgroup{'names'} };
     if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }      my $pick=int rand $#names+1;
     my $name = &Apache::run::run("{$args;".'return $name}',$safeeval);      my $name=$names[$pick];
     push @{ $Apache::response::foilgroup{'names'} }, $name;      push @{ $Apache::response::foilgroup{'names'} }, $name;
     my $value = &Apache::run::run("{$args;".'return $value}',$safeeval);      $Apache::response::foilgroup{"$name.text"} =  $Apache::response::conceptgroup{"$name.text"};
     $Apache::response::foilgroup{"$name.value"} = $value;      $Apache::response::foilgroup{"$name.value"} = $Apache::response::conceptgroup{"$name.value"};
     $Apache::response::foilgroup{"$name.text"} = $Apache::lonxml::outputstack;      my $concept = &Apache::lonxml::get_param('concept',$parstack,$safeeval);
       $Apache::response::foilgroup{"$name.concept"} = $concept;
       &Apache::lonxml::debug("Selecting $name in $concept");
   }    }
       return '';
   $Apache::lonxml::redirection++;  }
   if ($Apache::lonxml::redirection == 1) {   
     $Apache::lonxml::outputstack='';   sub start_foil {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
     if ($target eq 'web') { &Apache::lonxml::startredirection; }
     return '';
   }
   
   sub end_foil {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $text='';
     if ($target eq 'web') { $text=&Apache::lonxml::endredirection; }
     if ($target eq 'web' || $target eq 'grade') {
       my $value = &Apache::lonxml::get_param('value',$parstack,$safeeval);
       if ($value ne 'unused') {
         my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
         if ( $Apache::radiobuttonresponse::conceptgroup ) {
    push @{ $Apache::response::conceptgroup{'names'} }, $name;
    $Apache::response::conceptgroup{"$name.value"} = $value;
    $Apache::response::conceptgroup{"$name.text"} = $text;
         } else {
    push @{ $Apache::response::foilgroup{'names'} }, $name;
    $Apache::response::foilgroup{"$name.value"} = $value;
    $Apache::response::foilgroup{"$name.text"} = $text;
         }
       }
   }    }
   return '';    return '';
 }  }

Removed from v.1.10  
changed lines
  Added in v.1.24


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.