--- loncom/interface/statistics/lonstathelpers.pm	2020/09/12 20:36:11	1.76.2.4
+++ loncom/interface/statistics/lonstathelpers.pm	2023/09/08 00:52:36	1.76.2.5.2.1
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstathelpers.pm,v 1.76.2.4 2020/09/12 20:36:11 raeburn Exp $
+# $Id: lonstathelpers.pm,v 1.76.2.5.2.1 2023/09/08 00:52:36 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -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;
@@ -108,10 +108,17 @@ sub render_resource {
 ####################################################
 ####################################################
 sub get_resources {
-    my ($navmap,$sequence) = @_;
-    my @resources = $navmap->retrieveResources($sequence,
-                                               sub { shift->is_problem(); },
-                                               0,0,0);
+    my ($navmap,$sequence,$include_tools) = @_;
+    my @resources;
+    if ($include_tools) {
+        @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;
 }
 
@@ -158,7 +165,7 @@ sub problem_selector {
     return $navmap if (! ref($navmap)); # error
     foreach my $seq (@sequences) {
         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}));
             }
@@ -190,8 +197,14 @@ sub problem_selector {
             }
             my %partsseen;
             foreach my $part (@{$res->parts}) {
-                my @response_ids   = $res->responseIds($part);
-                my @response_types = $res->responseType($part);
+                my (@response_ids,@response_types);
+                if (($include_tools) && ($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++){
                     my $respid = $response_ids[$i];
                     my $resptype = $response_types[$i];