--- loncom/interface/statistics/lonstathelpers.pm 2017/12/18 23:51:19 1.75
+++ loncom/interface/statistics/lonstathelpers.pm 2020/08/26 18:13:39 1.76
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstathelpers.pm,v 1.75 2017/12/18 23:51:19 raeburn Exp $
+# $Id: lonstathelpers.pm,v 1.76 2020/08/26 18:13:39 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -142,10 +142,12 @@ Skips 'survey' problems.
####################################################
####################################################
sub problem_selector {
- my ($AcceptedResponseTypes,$sequence_addendum,$symbmode,$all,$prefix,$smallbox,$onclick,
- $include_tools) = @_;
+ my ($AcceptedResponseTypes,$sequence_addendum,$symbmode,$all,$prefix,
+ $byres,$include_tools,$smallbox,$onclick) = @_;
# all: also make sequences selectable
# prefix: prefix for all form names
+# byres: radiobutton shown per resource
+# include_tools: external tools included
# smallbox: use smaller box
# onclick: javascript to execute when clicked
my $Str;
@@ -164,6 +166,29 @@ sub problem_selector {
foreach my $seq (@sequences) {
my $seq_str = '';
foreach my $res (&get_resources($navmap,$seq,$include_tools)) {
+ 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"';
+ }
+ $seq_str .= &Apache::loncommon::start_data_table_row().
+ '
'.
+ '';
+ my $link = $res->link.'?symb='.&escape($res->shown_symb);
+ $seq_str .= (' 'x2).
+ ''.&mt('view').' | ';
+ }
+ my %partsseen;
foreach my $part (@{$res->parts}) {
my (@response_ids,@response_types);
if ($res->is_tool) {
@@ -177,52 +202,79 @@ sub problem_selector {
my $respid = $response_ids[$i];
my $resptype = $response_types[$i];
if ($resptype =~ m/$AcceptedResponseTypes/) {
- 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"';
- }
- my $title = $res->compTitle;
- if (! defined($title) || $title eq '') {
- ($title) = ($res->src =~ m:/([^/]*)$:);
+ if ($byres) {
+ unless (exists($partsseen{$part})) {
+ my $parttitle = $part;
+ if ($part eq '0') {
+ $parttitle = '';
+ }
+ if ($parttitle ne '') {
+ $parttitle = (' 'x2).&mt('part').': '.$parttitle;
+ }
+ if (keys(%partsseen)) {
+ $seq_str .= &Apache::loncommon::continue_data_table_row();
+ }
+ unless ($partsseen{$part}) {
+ $seq_str .= ''.
+ $parttitle.' | ';
+ $partsseen{$part} = scalar(@response_ids);
+ }
+ }
+ $seq_str .= ''.$resptype;
+ if (scalar(@response_ids) > 1) {
+ $seq_str .= ' '.&mt('id').': '.$respid;
+ }
+ $seq_str .= ' | '. &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?
+ ' | '
+ :qq{ | }).
+ ' | '.
+ '';
+ if (scalar(@response_ids) > 1) {
+ $seq_str .= &mt('response').' '.$respid;
+ }
+ my $link = $res->link.'?symb='.&escape($res->shown_symb);
+ $seq_str .= (' 'x2).
+ ''.&mt('view').'';
+ $seq_str .= " | ". &Apache::loncommon::end_data_table_row()."\n";
+ $rb_count++;
}
- $seq_str .= &Apache::loncommon::start_data_table_row().
- ($symbmode?
- ' | '
- :qq{ | }).
- ' | '.
- '';
- if (scalar(@response_ids) > 1) {
- $seq_str .= &mt('response').' '.$respid;
- }
- my $link = $res->link.'?symb='.&escape($res->shown_symb);
- $seq_str .= (' 'x2).
- ''.&mt('view').'';
- $seq_str .= " | ". &Apache::loncommon::end_data_table_row()."\n";
- $rb_count++;
}
}
}
}
if ($seq_str ne '') {
- $Str .= &Apache::loncommon::start_data_table_header_row().
- ''.
- ($all?'':'').
- $seq->compTitle.' | '.
- &Apache::loncommon::end_data_table_header_row()."\n".$seq_str;
- if (defined($sequence_addendum)) {
+ if ($byres) {
+ $Str .= &Apache::loncommon::start_data_table_header_row().
+ ''.$seq->compTitle.' | '.
+ &Apache::loncommon::end_data_table_header_row().
+ $seq_str;
+ } else {
$Str .= &Apache::loncommon::start_data_table_header_row().
- (' | 'x2).
- ''.$sequence_addendum.' | '.
- &Apache::loncommon::end_data_table_header_row()."\n";
+ ''.
+ ($all?'':'').
+ $seq->compTitle.' | '.
+ &Apache::loncommon::end_data_table_header_row()."\n".$seq_str;
+ if (defined($sequence_addendum)) {
+ $Str .= &Apache::loncommon::start_data_table_header_row().
+ (' | 'x2).
+ ''.$sequence_addendum.' | '.
+ &Apache::loncommon::end_data_table_header_row()."\n";
+ }
}
}
-
}
$Str .= &Apache::loncommon::end_data_table().&Apache::loncommon::end_scrollbox()."\n";
return $Str;