Diff for /loncom/homework/matchresponse.pm between versions 1.2 and 1.3

version 1.2, 2003/02/20 08:57:51 version 1.3, 2003/02/20 09:30:42
Line 102  sub end_itemgroup { Line 102  sub end_itemgroup {
     my @names=@{ $Apache::response::itemgroup{'names'} };      my @names=@{ $Apache::response::itemgroup{'names'} };
     my $randomize =&Apache::lonxml::get_param('randomize',$parstack,$safeeval);      my $randomize =&Apache::lonxml::get_param('randomize',$parstack,$safeeval);
     if ($randomize ne 'no' ) {      if ($randomize ne 'no' ) {
  @names=&Math::Random::random_permutation(@names);   @names=&whichorder($#names+1,$randomize,0,
      \%Apache::response::itemgroup)
     }      }
     my %letter_name_map;      my %letter_name_map;
     my %name_letter_map;      my %name_letter_map;
Line 135  sub start_item { Line 136  sub start_item {
     if ($target eq 'web' ) {      if ($target eq 'web' ) {
  &Apache::lonxml::startredirection;   &Apache::lonxml::startredirection;
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
    my $randomize=&Apache::lonxml::get_param('randomize',$parstack,
    $safeeval,'-2');
  $result=&Apache::edit::tag_start($target,$token,"Item");   $result=&Apache::edit::tag_start($target,$token,"Item");
  $result.=&Apache::edit::text_arg('Name:','name',$token);   $result.=&Apache::edit::text_arg('Name:','name',$token);
  $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();   if ($randomize ne 'no') {
       $result.=&Apache::edit::select_arg('Location:','location',
          ['random','top','bottom'],
          $token);
    }
    $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
     } 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,'name');       $safeeval,'name',
        'location');
  if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }   if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
     }      }
     return $result;      return $result;
Line 156  sub end_item { Line 165  sub end_item {
     if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||      if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
  $target eq 'edit') {   $target eq 'edit') {
  my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);   my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
    my $location=&Apache::lonxml::get_param('location',$parstack,
    $safeeval);
  &Apache::lonxml::debug("Got a name of :$name:");   &Apache::lonxml::debug("Got a name of :$name:");
  if (!$name) { $name=$Apache::lonxml::curdepth; }   if (!$name) { $name=$Apache::lonxml::curdepth; }
  &Apache::lonxml::debug("Using a name of :$name:");   &Apache::lonxml::debug("Using a name of :$name:");
  push @{ $Apache::response::itemgroup{'names'} }, $name;   push @{ $Apache::response::itemgroup{'names'} }, $name;
  $Apache::response::itemgroup{"$name.text"} = $text;   $Apache::response::itemgroup{"$name.text"} = $text;
    $Apache::response::itemgroup{"$name.location"} = $location;
     }      }
     if ($target eq 'edit') {      if ($target eq 'edit') {
  $result.= &Apache::edit::tag_end($target,$token,'');   $result.= &Apache::edit::tag_end($target,$token,'');
Line 217  sub displayanswers { Line 229  sub displayanswers {
     my ($max,$randomize,@opt)=@_;      my ($max,$randomize,@opt)=@_;
     if (!defined(@{ $Apache::response::foilgroup{'names'} })) { return; }      if (!defined(@{ $Apache::response::foilgroup{'names'} })) { return; }
     my @names = @{ $Apache::response::foilgroup{'names'} };      my @names = @{ $Apache::response::foilgroup{'names'} };
     my @whichfoils = &whichfoils($max,$randomize);      my @whichfoils = &whichorder(&getfoilcounts($max),$randomize,
    &Apache::response::showallfoils(),
    \%Apache::response::foilgroup);
     my $result=&Apache::response::answer_header('matchresponse');      my $result=&Apache::response::answer_header('matchresponse');
     my %name_letter_map;      my %name_letter_map;
     if (defined(%{ $Apache::response::itemgroup{'name_letter_map'} })) {      if (defined(%{ $Apache::response::itemgroup{'name_letter_map'} })) {
Line 236  sub displayanswers { Line 250  sub displayanswers {
   
 sub grade_response {  sub grade_response {
     my ($max,$randomize)=@_;      my ($max,$randomize)=@_;
     my (@whichfoils)=&whichfoils($max,$randomize);      my (@whichfoils)=&whichorder(&getfoilcounts($max),$randomize,
    &Apache::response::showallfoils(),
    \%Apache::response::foilgroup);
     if (!defined($ENV{'form.submitted'})) { return; }      if (!defined($ENV{'form.submitted'})) { return; }
     my %responsehash;      my %responsehash;
     my %grade;      my %grade;
Line 293  sub grade_response { Line 309  sub grade_response {
 sub displayfoils {  sub displayfoils {
     my ($target,$max,$randomize)=@_;      my ($target,$max,$randomize)=@_;
     my $result;      my $result;
     my (@whichfoils)=&whichfoils($max,$randomize);      my (@whichfoils)=&whichorder(&getfoilcounts($max),$randomize,
    &Apache::response::showallfoils(),
    \%Apache::response::foilgroup);
     my $part=$Apache::inputtags::part;      my $part=$Apache::inputtags::part;
     my $solved=$Apache::lonhomework::history{"resource.$part.solved"};      my $solved=$Apache::lonhomework::history{"resource.$part.solved"};
     my $status=$Apache::inputtags::status[-1];      my $status=$Apache::inputtags::status[-1];
Line 355  sub getfoilcounts { Line 373  sub getfoilcounts {
     return $count;      return $count;
 }  }
   
 sub whichfoils {  sub whichorder {
     my ($max,$randomize)=@_;      my ($max,$randomize,$showall,$hash)=@_;
     $max = &getfoilcounts($max);      #&Apache::lonxml::debug("man $max randomize $randomize");
  #   &Apache::lonxml::debug("man $max randomize $randomize");      if (!defined(@{ $$hash{'names'} })) { return; }
     if (!defined(@{ $Apache::response::foilgroup{'names'} })) { return; }      my @names = @{ $$hash{'names'} };
     my @names = @{ $Apache::response::foilgroup{'names'} };  
     my @whichopt =();      my @whichopt =();
     my (%top,@toplist,%bottom,@bottomlist);      my (%top,@toplist,%bottom,@bottomlist);
     if (!(&Apache::response::showallfoils() || ($randomize eq 'no'))) {      if (!($showall || ($randomize eq 'no'))) {
  my $current=0;   my $current=0;
  foreach my $name (@names) {   foreach my $name (@names) {
     $current++;      $current++;
     if ($Apache::response::foilgroup{"$name.location"} eq 'top') {      if ($$hash{"$name.location"} eq 'top') {
  $top{$name}=$current;   $top{$name}=$current;
     } elsif ($Apache::response::foilgroup{"$name.location"} eq      } elsif ($$hash{"$name.location"} eq 'bottom') {
      'bottom') {  
  $bottom{$name}=$current;   $bottom{$name}=$current;
     }      }
  }   }
     }      }
     while ((($#whichopt+1) < $max) && ($#names > -1)) {      while ((($#whichopt+1) < $max) && ($#names > -1)) {
 # &Apache::lonxml::debug("Have $#whichopt max is $max");   #&Apache::lonxml::debug("Have $#whichopt max is $max");
  my $aopt;   my $aopt;
  if (&Apache::response::showallfoils() || ($randomize eq 'no')) {   if ($showall || ($randomize eq 'no')) {
     $aopt=0;      $aopt=0;
  } else {   } else {
     $aopt=int(&Math::Random::random_uniform() * ($#names+1));      $aopt=int(&Math::Random::random_uniform() * ($#names+1));
  }   }
 # &Apache::lonxml::debug("From $#whichopt $max $#names elms, picking $aopt");   #&Apache::lonxml::debug("From $#whichopt $max $#names elms, picking $aopt");
  $aopt=splice(@names,$aopt,1);   $aopt=splice(@names,$aopt,1);
 # &Apache::lonxml::debug("Picked $aopt");   #&Apache::lonxml::debug("Picked $aopt");
  if ($top{$aopt}) {   if ($top{$aopt}) {
     $toplist[$top{$aopt}]=$aopt;      $toplist[$top{$aopt}]=$aopt;
  } elsif ($bottom{$aopt}) {   } elsif ($bottom{$aopt}) {

Removed from v.1.2  
changed lines
  Added in v.1.3


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