--- loncom/interface/statistics/lonstathelpers.pm 2020/08/26 18:13:39 1.76 +++ loncom/interface/statistics/lonstathelpers.pm 2020/10/08 12:02:07 1.80 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonstathelpers.pm,v 1.76 2020/08/26 18:13:39 raeburn Exp $ +# $Id: lonstathelpers.pm,v 1.80 2020/10/08 12:02:07 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -73,7 +73,7 @@ use LONCAPA; Input: a navmaps resource -Retunrs: a scalar containing html for a rendering of the problem +Returns: a scalar containing html for a rendering of the problem within a table. =cut @@ -85,7 +85,7 @@ sub render_resource { ## ## Render the problem my ($base) = ($resource->src =~ m|^(.*/)[^/]*$|); - $base="http://".$ENV{'SERVER_NAME'}.$base; + $base=&Apache::lonnet::absolute_url().$base; my ($src,$symb)=($resource->link,&escape($resource->shown_symb)); my $rendered_problem = &Apache::lonnet::ssi_body($src.'?symb='.$symb); $rendered_problem =~ s/<\s*form\s*/<nop /g; @@ -166,6 +166,9 @@ sub problem_selector { foreach my $seq (@sequences) { my $seq_str = ''; 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:/([^/]*)$:); @@ -180,8 +183,12 @@ sub problem_selector { 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="'.$totalresps.'" style="vertical-align:middle">'. + '<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); @@ -203,7 +210,9 @@ sub problem_selector { my $resptype = $response_types[$i]; if ($resptype =~ m/$AcceptedResponseTypes/) { if ($byres) { - unless (exists($partsseen{$part})) { + if (exists($partsseen{$part})) { + $seq_str .= &Apache::loncommon::continue_data_table_row(); + } else { my $parttitle = $part; if ($part eq '0') { $parttitle = ''; @@ -215,7 +224,11 @@ sub problem_selector { $seq_str .= &Apache::loncommon::continue_data_table_row(); } unless ($partsseen{$part}) { - $seq_str .= '<td rowspan="'.scalar(@response_ids).'" style="vertical-align:middle">'. + my $resprowspan; + if (scalar(@response_ids) > 1) { + $resprowspan = ' rowspan="'.scalar(@response_ids).'"'; + } + $seq_str .= '<td'.$resprowspan.' style="vertical-align:top">'. $parttitle.'</td>'; $partsseen{$part} = scalar(@response_ids); } @@ -249,8 +262,8 @@ sub problem_selector { $seq_str .= (' 'x2). '<a target="preview" href="'.$link.'">'.&mt('view').'</a>'; $seq_str .= "</td>". &Apache::loncommon::end_data_table_row()."\n"; - $rb_count++; } + $rb_count++; } } } @@ -277,6 +290,15 @@ sub problem_selector { } } $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; }