Diff for /loncom/homework/matchresponse.pm between versions 1.85 and 1.93

version 1.85, 2011/11/29 13:24:38 version 1.93, 2016/01/22 22:42:51
Line 30  package Apache::matchresponse; Line 30  package Apache::matchresponse;
 use strict;  use strict;
 use HTML::Entities();  use HTML::Entities();
 use Math::Random();  use Math::Random();
 use Apache::inputtags();  
 use Apache::optionresponse();  use Apache::optionresponse();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonxml;  use Apache::lonxml;
   use POSIX qw(ceil);
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::matchresponse',('matchresponse'));      &Apache::lonxml::register('Apache::matchresponse',('matchresponse'));
Line 55  sub start_matchresponse { Line 55  sub start_matchresponse {
  $result=&Apache::response::meta_package_write('matchresponse');   $result=&Apache::response::meta_package_write('matchresponse');
     } elsif ($target eq 'edit' ) {      } elsif ($target eq 'edit' ) {
  $result.=&Apache::edit::start_table($token).   $result.=&Apache::edit::start_table($token).
     '<tr><td>'.&Apache::lonxml::description($token).'</td>'      '<tr><td>'.&Apache::loncommon::insert_folding_button().&Apache::lonxml::description($token).'</td>'
            .'<td><span class="LC_nobreak">'.&mt('Delete?').' '             .'<td><span class="LC_nobreak">'.&mt('Delete?').' '
    .&Apache::edit::deletelist($target,$token)     .&Apache::edit::deletelist($target,$token)
            .'</span></td>'             .'</span></td>'
Line 104  sub start_itemgroup { Line 104  sub start_itemgroup {
     if ($target eq 'edit') {      if ($target eq 'edit') {
  $result=&Apache::edit::tag_start($target,$token);   $result=&Apache::edit::tag_start($target,$token);
  $result.=&Apache::edit::select_arg('Randomize Order:','randomize',   $result.=&Apache::edit::select_arg('Randomize Order:','randomize',
    ['yes','no'],$token).'&nbsp;'x 3;     ['yes','no'],$token);
  $result.=&Apache::edit::select_arg('Items Display Location:',   $result.=&Apache::edit::select_arg('Items Display Location:',
    'location',     'location',
    ['top','bottom','left','right'],     ['top','bottom','left','right'],
    $token).'&nbsp;'x 3;     $token);
  $result.=&Apache::edit::select_arg('Items Display Direction:',   $result.=&Apache::edit::select_arg('Items Display Direction:',
    'direction',     'direction',
    ['vertical','horizontal'],     ['vertical','horizontal'],
    $token);     $token);
           $result.=&Apache::edit::select_arg('Items Columns:',
                                              'columns',
                                              [['','default'],'1','2','3','4'],
                                               $token);
  $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();   $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,'randomize',       $safeeval,'randomize',
      'location','direction');       'location','direction',
                                                        'columns');
  if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }   if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
     } elsif ($target eq 'web' or $target eq 'tex') {      } elsif ($target eq 'web' or $target eq 'tex') {
  $Apache::matchresponse::itemtable{'location'}=   $Apache::matchresponse::itemtable{'location'}=
Line 159  sub end_itemgroup { Line 164  sub end_itemgroup {
     $Apache::response::itemgroup{'letter_name_map'}=\%letter_name_map;      $Apache::response::itemgroup{'letter_name_map'}=\%letter_name_map;
     $Apache::response::itemgroup{'name_letter_map'}=\%name_letter_map;      $Apache::response::itemgroup{'name_letter_map'}=\%name_letter_map;
     my $direction=&Apache::lonxml::get_param('direction',$parstack,$safeeval);      my $direction=&Apache::lonxml::get_param('direction',$parstack,$safeeval);
       my $columns=&Apache::lonxml::get_param('columns',$parstack,$safeeval);
       
       unless ($columns =~ /^\d+$/) {
           undef($columns);
       }
     if ($target eq 'web') {      if ($target eq 'web') {
   
  my $table='<br /><table>'; # extra space to match what latex does.   my $table='<table class="LC_itemgroup">'; # extra space to match what latex does.
  my $i=0;          if ((!$columns) || ($columns < 0)) {
  if ($direction eq 'horizontal') { $table .='<tr>';}              if ($direction eq 'horizontal') {
  foreach my $name (@names) {                  if (@names > 0) { 
     if ($direction ne 'horizontal') { $table.='<tr>'; }                      $columns = scalar(@names);
     $table.='<td>'.$alphabet[$i].'</td><td>'.                  } else {
  $Apache::response::itemgroup{$name.'.text'}.'</td>';                      $columns = 1;
     if ($direction ne 'horizontal') { $table.='</tr>'; }                  }
     $i++;              } else {
  }                  $columns = 1;
  if ($direction eq 'horizontal') { $table .='</tr>';}              }
           }
           my $rows=ceil(scalar(@names)/$columns);
           my $endloop = $columns*$rows;
           for (my $i=0; $i<$endloop; $i++) {
               my $label = '&nbsp;';
               my $item = '&nbsp;';
               my $index;
               if ($direction eq 'horizontal') {
                   $index = $i;
               } else {
                   $index = ($i % $columns)*$rows+int($i/$columns);
               }
               if ($index < scalar(@names)) {
                   $label = $alphabet[$index];
                   $item = $Apache::response::itemgroup{$names[$index].'.text'};
               }
               if ($i % $columns == 0) {
                   $table.='<tr>';
               }
               $table.= '<td>'.$label.'</td><td>'.$item.'</td>';
               if ($columns > 1) {
                   $table .= '<td>&nbsp;</td>';
               }
               if ( ! (($i+1) % $columns) ) {
                   $table.='</tr>';
               }
           }
  $table.='</table>';   $table.='</table>';
  $Apache::matchresponse::itemtable{'display'}=$table;   $Apache::matchresponse::itemtable{'display'}=$table;
  $Apache::lonxml::post_evaluate=0;   $Apache::lonxml::post_evaluate=0;
Line 225  sub start_item { Line 262  sub start_item {
  $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);
  if ($randomize ne 'no') {   if ($randomize ne 'no') {
     $result.='&nbsp;'x 3 .      $result.=
                      &Apache::edit::select_arg('Location:','location',                       &Apache::edit::select_arg('Location:','location',
        ['random','top','bottom'],         ['random','top','bottom'],
        $token);         $token);
Line 282  sub start_foilgroup { Line 319  sub start_foilgroup {
     &Apache::response::pushrandomnumber(undef,$target);      &Apache::response::pushrandomnumber(undef,$target);
     if ($target eq 'edit') {      if ($target eq 'edit') {
  $result.=&Apache::edit::start_table($token)   $result.=&Apache::edit::start_table($token)
     .'<tr><td>'.&mt('Collection Of Foils').'</td>'      .'<tr><td>'.&Apache::loncommon::insert_folding_button()
               .&mt('Collection Of Foils').'</td>'
             .'<td><span class="LC_nobreak">'.&mt('Delete?')              .'<td><span class="LC_nobreak">'.&mt('Delete?')
     .&Apache::edit::deletelist($target,$token)      .&Apache::edit::deletelist($target,$token)
     .'</span></td>'      .'</span></td>'
Line 463  sub grade_response { Line 501  sub grade_response {
  }   }
     }      }
     my $part=$Apache::inputtags::part;      my $part=$Apache::inputtags::part;
     my $nonlenient=&Apache::inputtags::grading_is_nonlenient($part);      my $nonlenient=&Apache::optionresponse::grading_is_nonlenient($part);
     my $id = $Apache::inputtags::response['-1'];      my $id = $Apache::inputtags::response['-1'];
     my $responsestr=&Apache::lonnet::hash2str(%responsehash);      my $responsestr=&Apache::lonnet::hash2str(%responsehash);
     my $itemstr    =&Apache::lonnet::array2str(@items);      my $itemstr    =&Apache::lonnet::array2str(@items);
Line 543  sub format_prior_answer { Line 581  sub format_prior_answer {
     my $output;      my $output;
           
     foreach my $name (@{ $foil_order }) {      foreach my $name (@{ $foil_order }) {
  my $item=shift(@items);   my $item = &HTML::Entities::encode(shift(@items),'<>&"');
           if ($item eq '') {
               $item = '&nbsp;';
           }
  $output .= '<tr><td>'.$item.'</td></tr>';   $output .= '<tr><td>'.$item.'</td></tr>';
     }      }
     return if (!defined($output));      return if (!defined($output));
Line 615  sub displayfoils { Line 656  sub displayfoils {
                 $newvariation = 1;                  $newvariation = 1;
             }              }
         }          }
         unless ((($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurvey') || ($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurveycred') && (defined($env{'form.grade_symb'}))) || $newvariation) {          unless ($newvariation) {
     $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};              if ((($env{'form.grade_username'} eq '') && ($env{'form.grade_domain'} eq '')) ||
                   (($env{'form.grade_username'} eq $env{'user.name'}) &&
                    ($env{'form.grade_domain'} eq $env{'user.domain'}))) {
                   $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};
               } else {
                   unless (($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurvey') ||
                           ($Apache::lonhomework::history{"resource.$part.type"} eq 'anonsurveycred')) {
                       $lastresponse=$Apache::lonhomework::history{"resource.$part.$id.submission"};
                   }
               }
         }          }
   
  my %lastresponse=&Apache::lonnet::str2hash($lastresponse);       my %lastresponse=&Apache::lonnet::str2hash($lastresponse);    
  my @alphabet=('A'..'Z');   my @alphabet=('A'..'Z');
  my @used_letters=sort(keys(%letter_name_map));   my @used_letters=sort(keys(%letter_name_map));

Removed from v.1.85  
changed lines
  Added in v.1.93


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