[LON-CAPA-cvs] cvs: loncom /homework grades.pm /interface/statistics lonstathelpers.pm

raeburn raeburn at source.lon-capa.org
Wed Aug 26 14:13:40 EDT 2020


raeburn		Wed Aug 26 18:13:40 2020 EDT

  Modified files:              
    /loncom/interface/statistics	lonstathelpers.pm 
    /loncom/homework	grades.pm 
  Log:
  - Problem selector for "Content Grading" screen only needs a radiobutton
    for each resource.
  - Order of args passed to lonstathelper::problem_selector() changed.
    smallbox, onclick args not passed by any callers of the routine --
    added for lonquickgrades.pm rev. 1.75, but use discontinued in 
    rev. 1.84).
  
  
-------------- next part --------------
Index: loncom/interface/statistics/lonstathelpers.pm
diff -u loncom/interface/statistics/lonstathelpers.pm:1.75 loncom/interface/statistics/lonstathelpers.pm:1.76
--- loncom/interface/statistics/lonstathelpers.pm:1.75	Mon Dec 18 23:51:19 2017
+++ loncom/interface/statistics/lonstathelpers.pm	Wed Aug 26 18:13:39 2020
@@ -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 @@
 ####################################################
 ####################################################
 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 @@
     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().
+                            '<td rowspan="'.$totalresps.'" style="vertical-align:middle">'.
+                            '<label><input type="radio" name="symb" value="'.$value.'"'.$checked.' />'.
+                            $title.'</label>';
+                my $link = $res->link.'?symb='.&escape($res->shown_symb);
+                $seq_str .= (' 'x2).
+                            '<a target="preview" href="'.$link.'">'.&mt('view').'</a></td>';
+            }
+            my %partsseen;
             foreach my $part (@{$res->parts}) {
                 my (@response_ids, at response_types);
                 if ($res->is_tool) {
@@ -177,52 +202,79 @@
                     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:/([^/]*)$:);
-                        }
-                        $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;
+                        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 .= '<td rowspan="'.scalar(@response_ids).'" style="vertical-align:middle">'.
+                                                $parttitle.'</td>';
+                                    $partsseen{$part} = scalar(@response_ids);
+                                }
+                            }
+                            $seq_str .= '<td>'.$resptype;
+                            if (scalar(@response_ids) > 1) {
+                                $seq_str .= ' '.&mt('id').': '.$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 .= (' 'x2).
+                                        '<a target="preview" href="'.$link.'">'.&mt('view').'</a>';
+                            $seq_str .= "</td>". &Apache::loncommon::end_data_table_row()."\n";
+                            $rb_count++;
                         }
-                        my $link = $res->link.'?symb='.&escape($res->shown_symb);
-                        $seq_str .= (' 'x2).
-                            '<a target="preview" href="'.$link.'">'.&mt('view').'</a>';
-                        $seq_str .= "</td>". &Apache::loncommon::end_data_table_row()."\n";
-                        $rb_count++;
                     }
                 }
             }
         }
         if ($seq_str ne '') {
-            $Str .= &Apache::loncommon::start_data_table_header_row().
-                '<th colspan="3">'.
-                ($all?'<input type="radio" id="'.$prefix.'s'.$rb_count.'" name="'.$prefix.'symb" value="'.&HTML::Entities::encode($seq->symb,'<>&').'" '.$jsadd.' />':'').
-                $seq->compTitle.'</th>'.
-                &Apache::loncommon::end_data_table_header_row()."\n".$seq_str;
-            if (defined($sequence_addendum)) {
+            if ($byres) {
                 $Str .= &Apache::loncommon::start_data_table_header_row().
-                    ('<td> </td>'x2).
-                    '<td align="right">'.$sequence_addendum.'</td>'.
-                    &Apache::loncommon::end_data_table_header_row()."\n";
+                        '<th colspan="3">'.$seq->compTitle.'</th>'.
+                        &Apache::loncommon::end_data_table_header_row().
+                        $seq_str;
+            } else {
+                $Str .= &Apache::loncommon::start_data_table_header_row().
+                    '<th colspan="3">'.
+                    ($all?'<input type="radio" id="'.$prefix.'s'.$rb_count.'" name="'.$prefix.'symb" value="'.&HTML::Entities::encode($seq->symb,'<>&').'" '.$jsadd.' />':'').
+                    $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> </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";
     return $Str;
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.770 loncom/homework/grades.pm:1.771
--- loncom/homework/grades.pm:1.770	Wed May 20 22:02:57 2020
+++ loncom/homework/grades.pm	Wed Aug 26 18:13:40 2020
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.770 2020/05/20 22:02:57 raeburn Exp $
+# $Id: grades.pm,v 1.771 2020/08/26 18:13:40 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -11145,7 +11145,7 @@
 sub select_problem {
     my ($r)=@_;
     $r->print('<h3>'.&mt('Select the problem or one of the problems you want to grade').'</h3><form action="/adm/grades">');
-    $r->print(&Apache::lonstathelpers::problem_selector('.',undef,1,undef,undef,undef,undef,1));
+    $r->print(&Apache::lonstathelpers::problem_selector('.',undef,1,undef,undef,1,1));
     $r->print('<input type="hidden" name="command" value="gradingmenu" />');
     $r->print('<input type="submit" value="'.&mt('Next').' →" /></form>');
 }


More information about the LON-CAPA-cvs mailing list