--- 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 .= ('&nbsp;'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;
 }