Diff for /loncom/interface/statistics/lonstathelpers.pm between versions 1.71 and 1.79

version 1.71, 2013/07/15 14:33:02 version 1.79, 2020/09/12 20:21:30
Line 108  sub render_resource { Line 108  sub render_resource {
 ####################################################  ####################################################
 ####################################################  ####################################################
 sub get_resources {  sub get_resources {
     my ($navmap,$sequence) = @_;      my ($navmap,$sequence,$include_tools) = @_;
     my @resources = $navmap->retrieveResources($sequence,      my @resources;
                                                sub { shift->is_problem(); },      if ($include_tools) {
                                                0,0,0);          @resources = $navmap->retrieveResources($sequence,
                                                   sub { shift->is_gradable(); },
                                                   0,0,0);
       } else {
           @resources = $navmap->retrieveResources($sequence,
                                                   sub { shift->is_problem(); },
                                                   0,0,0);
       }
     return @resources;      return @resources;
 }  }
   
Line 135  Skips 'survey' problems. Line 142  Skips 'survey' problems.
 ####################################################  ####################################################
 ####################################################  ####################################################
 sub problem_selector {  sub problem_selector {
     my ($AcceptedResponseTypes,$sequence_addendum,$symbmode,$all,$prefix,$smallbox,$onclick) = @_;      my ($AcceptedResponseTypes,$sequence_addendum,$symbmode,$all,$prefix,
           $byres,$include_tools,$smallbox,$onclick) = @_;
 # all: also make sequences selectable  # all: also make sequences selectable
 # prefix: prefix for all form names  # prefix: prefix for all form names
   # byres: radiobutton shown per resource
   # include_tools: external tools included 
 # smallbox: use smaller box  # smallbox: use smaller box
 # onclick: javascript to execute when clicked  # onclick: javascript to execute when clicked
     my $Str;      my $Str;
Line 155  sub problem_selector { Line 165  sub problem_selector {
     return $navmap if (! ref($navmap)); # error      return $navmap if (! ref($navmap)); # error
     foreach my $seq (@sequences) {      foreach my $seq (@sequences) {
         my $seq_str = '';          my $seq_str = '';
         foreach my $res (&get_resources($navmap,$seq)) {          foreach my $res (&get_resources($navmap,$seq,$include_tools)) {
               if ($res->src() eq '/res/lib/templates/simpleproblem.problem') {
                   next if (grep(/^placeholder$/,@{$res->parts}));
               }
               my $title = $res->compTitle;
               if (! defined($title) || $title eq '') {
                   ($title) = ($res->src =~ m:/([^/]*)$:);
               }
               my $totalresps = 0;
               if ($byres) {
                   foreach my $part (@{$res->parts}) {
                       $totalresps += scalar($res->responseIds($part));
                   }
                   my $value = &HTML::Entities::encode($res->symb(),'<>&"');
                   my $checked;
                   if ($env{'form.problemchoice'} eq $res->symb()) {
                       $checked = ' checked="checked"';
                   }
                   my $rowspan;
                   if ($totalresps > 1) {
                       $rowspan = ' rowspan="'.$totalresps.'"';
                   }
                   $seq_str .= &Apache::loncommon::start_data_table_row().
                               '<td'.$rowspan.' style="vertical-align:top">'.
                               '<label><input type="radio" name="symb" value="'.$value.'"'.$checked.' />'.
                               $title.'</label>';
                   my $link = $res->link.'?symb='.&escape($res->shown_symb);
                   $seq_str .= ('&nbsp;'x2).
                               '<a target="preview" href="'.$link.'">'.&mt('view').'</a></td>';
               }
               my %partsseen;
             foreach my $part (@{$res->parts}) {              foreach my $part (@{$res->parts}) {
                 my @response_ids   = $res->responseIds($part);                  my (@response_ids,@response_types);
                 my @response_types = $res->responseType($part);                  if ($res->is_tool) {
                       @response_ids = ();
                       @response_types = ('tool');
                   } else {
                       @response_ids   = $res->responseIds($part);
                       @response_types = $res->responseType($part);
                   }
                 for (my $i=0;$i<scalar(@response_types);$i++){                  for (my $i=0;$i<scalar(@response_types);$i++){
                     my $respid = $response_ids[$i];                      my $respid = $response_ids[$i];
                     my $resptype = $response_types[$i];                      my $resptype = $response_types[$i];
                     if ($resptype =~ m/$AcceptedResponseTypes/) {                      if ($resptype =~ m/$AcceptedResponseTypes/) {
                         my $value = &make_target_id({symb=>$res->symb,                          if ($byres) {
                                                      part=>$part,                              if (exists($partsseen{$part})) {
                                                      respid=>$respid,                                  $seq_str .= &Apache::loncommon::continue_data_table_row();
                                                      resptype=>$resptype});                              } else {
                         my $checked = '';                                  my $parttitle = $part;
                         if ($env{'form.problemchoice'} eq $value) {                                  if ($part eq '0') {
                             $checked = ' checked="checked"';                                      $parttitle = '';
                         }                                  }
                         my $title = $res->compTitle;                                  if ($parttitle ne '') {
                         if (! defined($title) || $title eq '') {                                      $parttitle = ('&nbsp;'x2).&mt('part').':&nbsp;'.$parttitle;
                             ($title) = ($res->src =~ m:/([^/]*)$:);                                  }
                         }                                  if (keys(%partsseen)) {
                         $seq_str .=  &Apache::loncommon::start_data_table_row().                                      $seq_str .= &Apache::loncommon::continue_data_table_row();
                             ($symbmode?                                  }
                              '<td><input type="radio" id="'.$prefix.$rb_count.'" name="'.$prefix.'symb" value="'.&HTML::Entities::encode($res->symb,'<>&"').'" '.$checked.' '.                                  unless ($partsseen{$part}) {
                              $jsadd.                                      my $resprowspan;
                              ' /></td>'                                      if (scalar(@response_ids) > 1) {
                             :qq{<td><input type="radio" id="$rb_count" name="problemchoice" value="$value"$checked /></td>}).                                          $resprowspan = ' rowspan="'.scalar(@response_ids).'"';
                             '<td><label for="'.$prefix.$rb_count.'">'.$resptype.'</label></td>'.                                      }
                             '<td><label for="'.$prefix.$rb_count.'">'.$title.'</label>';                                      $seq_str .= '<td'.$resprowspan.' style="vertical-align:top">'.
                         if (scalar(@response_ids) > 1) {                                                  $parttitle.'</td>';
                             $seq_str .= &mt('response').' '.$respid;                                      $partsseen{$part} = scalar(@response_ids);
                                   }
                               }
                               $seq_str .= '<td>'.$resptype;
                               if (scalar(@response_ids) > 1) {
                                   $seq_str .= '&nbsp;'.&mt('id').':&nbsp;'.$respid;
                               }
                               $seq_str .= '</td>'. &Apache::loncommon::end_data_table_row()."\n";
                           } else {
                               my $value = &make_target_id({symb=>$res->symb,
                                                            part=>$part,
                                                            respid=>$respid,
                                                            resptype=>$resptype});
                               my $checked = '';
                               if ($env{'form.problemchoice'} eq $value) {
                                   $checked = ' checked="checked"';
                               }
                               $seq_str .= &Apache::loncommon::start_data_table_row().
                                   ($symbmode?
                                    '<td><input type="radio" id="'.$prefix.$rb_count.'" name="'.$prefix.'symb" value="'.&HTML::Entities::encode($res->symb,'<>&"').'" '.$checked.' '.
                                    $jsadd.
                                    ' /></td>'
                                    :qq{<td><input type="radio" id="$rb_count" name="problemchoice" value="$value"$checked /></td>}).
                                   '<td><label for="'.$prefix.$rb_count.'">'.$resptype.'</label></td>'.
                                   '<td><label for="'.$prefix.$rb_count.'">'.$title.'</label>';
                               if (scalar(@response_ids) > 1) {
                                   $seq_str .= &mt('response').' '.$respid;
                               }
                               my $link = $res->link.'?symb='.&escape($res->shown_symb);
                               $seq_str .= ('&nbsp;'x2).
                                           '<a target="preview" href="'.$link.'">'.&mt('view').'</a>';
                               $seq_str .= "</td>". &Apache::loncommon::end_data_table_row()."\n";
                         }                          }
                         my $link = $res->link.'?symb='.&escape($res->shown_symb);  
                         $seq_str .= ('&nbsp;'x2).  
                             '<a target="preview" href="'.$link.'">'.&mt('view').'</a>';  
                         $seq_str .= "</td>". &Apache::loncommon::end_data_table_row()."\n";  
                         $rb_count++;                          $rb_count++;
                     }                      }
                 }                  }
             }              }
         }          }
         if ($seq_str ne '') {          if ($seq_str ne '') {
             $Str .= &Apache::loncommon::start_data_table_header_row().              if ($byres) {
                 '<th colspan="3">'.                  $Str .= &Apache::loncommon::start_data_table_header_row().
                 ($all?'<input type="radio" id="'.$prefix.'s'.$rb_count.'" name="'.$prefix.'symb" value="'.&HTML::Entities::encode($seq->symb,'<>&').'" '.$jsadd.' />':'').                          '<th colspan="3">'.$seq->compTitle.'</th>'.
                 $seq->compTitle.'</th>'.                          &Apache::loncommon::end_data_table_header_row().
                 &Apache::loncommon::end_data_table_header_row()."\n".$seq_str;                          $seq_str;
             if (defined($sequence_addendum)) {              } else {
                 $Str .= &Apache::loncommon::start_data_table_header_row().                  $Str .= &Apache::loncommon::start_data_table_header_row().
                     ('<td>&nbsp;</td>'x2).                      '<th colspan="3">'.
                     '<td align="right">'.$sequence_addendum.'</td>'.                      ($all?'<input type="radio" id="'.$prefix.'s'.$rb_count.'" name="'.$prefix.'symb" value="'.&HTML::Entities::encode($seq->symb,'<>&').'" '.$jsadd.' />':'').
                     &Apache::loncommon::end_data_table_header_row()."\n";                      $seq->compTitle.'</th>'.
                       &Apache::loncommon::end_data_table_header_row()."\n".$seq_str;
                   if (defined($sequence_addendum)) {
                       $Str .= &Apache::loncommon::start_data_table_header_row().
                           ('<td>&nbsp;</td>'x2).
                           '<td align="right">'.$sequence_addendum.'</td>'.
                           &Apache::loncommon::end_data_table_header_row()."\n";
                   }
             }              }
         }          }
   
     }      }
     $Str .= &Apache::loncommon::end_data_table().&Apache::loncommon::end_scrollbox()."\n";      $Str .= &Apache::loncommon::end_data_table().&Apache::loncommon::end_scrollbox()."\n";
       if (!$rb_count) {
           if ($byres) {
               $Str = '<p class="LC_info">'.&mt('No gradable problems found').'</p>';
           } elsif ($AcceptedResponseTypes eq '.') {
               $Str = '<p class="LC_info">'.&mt('No problems found').'</p>';
           } else {
               $Str = '<p class="LC_info">'.&mt('No analyzable problems found').'</p>';
           }
       }
     return $Str;      return $Str;
 }  }
   
Line 286  END Line 374  END
 END  END
     if (ref($anoncounter) eq 'HASH') {      if (ref($anoncounter) eq 'HASH') {
         if (keys(%{$anoncounter}) > 0) {          if (keys(%{$anoncounter}) > 0) {
             my $anonwarning = &mt('Your selection includes both problems with and without anonymous submissions.').'\n'.&mt('You must select either only anonymous or only named problems.').'\n\n'.&mt('If a selection contains both anonymous and named parts, [_1]use the Anoymous/Named buttons to ensure selections will be either all anonymous [_1]or all named.','\n');              my $anonwarning = &mt('Your selection includes both problems with and without anonymous submissions.')."\n".&mt('You must select either only anonymous or only named problems.')."\n\n".&mt('If a selection contains both anonymous and named parts,[_1]use the Anonymous/Named buttons to ensure selections will be either all anonymous[_1]or all named.',"\n");
               &js_escape(\$anonwarning);
             $checkanonjs = <<"END";              $checkanonjs = <<"END";
   
 <script type="text/javascript" language="JavaScript">  <script type="text/javascript" language="JavaScript">
Line 1385  sub limit_by_time_form { Line 1474  sub limit_by_time_form {
     $Str .= '<fieldset>';      $Str .= '<fieldset>';
     my $timecheckbox = '<input type="checkbox" name="limit_by_time" ';      my $timecheckbox = '<input type="checkbox" name="limit_by_time" ';
     if (&limit_by_time()) {      if (&limit_by_time()) {
         $timecheckbox .= ' checked ';          $timecheckbox .= 'checked="checked" ';
     }       } 
     $timecheckbox .= 'OnChange="javascript:toggle_limitby_activity(this.checked);" ';      $timecheckbox .= 'onchange="javascript:toggle_limitby_activity(this.checked);" ';
     $timecheckbox .= ' />';      $timecheckbox .= ' />';
     $Str .= '<legend><label>'.&mt('[_1] Limit by time',$timecheckbox).'</label></legend>';      $Str .= '<legend><label>'.&mt('[_1] Limit by time',$timecheckbox).'</label></legend>';
     $Str .= &mt('Start Time: [_1]',$startdateform).'<br />';      $Str .= &mt('Start Time: [_1]',$startdateform).'<br />';

Removed from v.1.71  
changed lines
  Added in v.1.79


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