[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemstatistics.pm

matthew lon-capa-cvs@mail.lon-capa.org
Mon, 29 Mar 2004 19:41:24 -0000


This is a MIME encoded message

--matthew1080589284
Content-Type: text/plain

matthew		Mon Mar 29 14:41:24 2004 EDT

  Modified files:              
    /loncom/interface/statistics	lonproblemstatistics.pm 
  Log:
  Added ability to select which statistics will be printed out.
  
  
--matthew1080589284
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040329144124.txt"

Index: loncom/interface/statistics/lonproblemstatistics.pm
diff -u loncom/interface/statistics/lonproblemstatistics.pm:1.75 loncom/interface/statistics/lonproblemstatistics.pm:1.76
--- loncom/interface/statistics/lonproblemstatistics.pm:1.75	Mon Mar 29 13:22:28 2004
+++ loncom/interface/statistics/lonproblemstatistics.pm	Mon Mar 29 14:41:24 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonproblemstatistics.pm,v 1.75 2004/03/29 18:22:28 matthew Exp $
+# $Id: lonproblemstatistics.pm,v 1.76 2004/03/29 19:41:24 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -73,23 +73,34 @@
            { name => 'problem_num',
              title => 'P#',
              align => 'right',
-             color => '#FFFFE6' },
+             color => '#FFFFE6',
+             selectable => 'no',
+             selected => 'yes',
+           },
            { name   => 'container',
              title  => 'Sequence or Folder',
              align  => 'left',
              color  => '#FFFFE6',
-             sortable => 'yes' },
+             sortable => 'yes',
+             selectable => 'no',
+             selected => 'yes',
+           },
            { name   => 'title',
              title  => 'Title',
              align  => 'left',
              color  => '#FFFFE6',
              special  => 'link',
-             sortable => 'yes', },
+             sortable => 'yes', 
+             selectable => 'no',
+             selected => 'yes',
+           },
            { name   => 'part', 
              title  => 'Part',
              align  => 'left',
              color  => '#FFFFE6',
-             },
+             selectable => 'no',
+             selected => 'yes',
+           },
            { name   => 'num_students',
              title  => '#Stdnts',
              align  => 'right',
@@ -97,7 +108,10 @@
              format => '%d',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Number of Students Attempting Problem' },
+             long_title => 'Number of Students Attempting Problem',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'tries',
              title  => 'Tries',
              align  => 'right',
@@ -105,7 +119,10 @@
              format => '%d',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Total Number of Tries' },
+             long_title => 'Total Number of Tries',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'max_tries',
              title  => 'Max Tries',
              align  => 'right',
@@ -113,7 +130,10 @@
              format => '%d',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Maximum Number of Tries' },
+             long_title => 'Maximum Number of Tries',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'min_tries',
              title  => 'Min Tries',
              align  => 'right',
@@ -121,7 +141,10 @@
              format => '%d',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Minumum Number of Tries' },
+             long_title => 'Minumum Number of Tries',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'mean_tries',
              title  => 'Mean Tries',
              align  => 'right',
@@ -129,7 +152,10 @@
              format => '%5.2f',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Average Number of Tries' },
+             long_title => 'Average Number of Tries',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'std_tries',
              title  => 'S.D. tries',
              align  => 'right',
@@ -137,7 +163,10 @@
              format => '%5.2f',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Standard Deviation of Number of Tries' },
+             long_title => 'Standard Deviation of Number of Tries',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'skew_tries',
              title  => 'Skew Tries',
              align  => 'right',
@@ -145,7 +174,10 @@
              format => '%5.2f',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Skew of Number of Tries' },
+             long_title => 'Skew of Number of Tries',
+             selectable => 'yes',
+             selected => 'no',
+           },
            { name   => 'num_solved',
              title  => '#YES',
              align  => 'right',
@@ -153,7 +185,10 @@
              format => '%4.1f',#             format => '%d',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Number of Students able to Solve' },
+             long_title => 'Number of Students able to Solve',
+             selectable => 'no',
+             selected => 'yes',
+           },
            { name   => 'num_override',
              title  => '#yes',
              align  => 'right',
@@ -161,7 +196,10 @@
              format => '%4.1f',#             format => '%d',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Number of Students given Override' },
+             long_title => 'Number of Students given Override',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'num_wrong',
              title  => '#Wrng',
              align  => 'right',
@@ -169,7 +207,10 @@
              format => '%4.1f',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Percent of students whose final answer is wrong' },
+             long_title => 'Percent of students whose final answer is wrong',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'deg_of_diff',
              title  => 'DoDiff',
              align  => 'right',
@@ -178,7 +219,10 @@
              sortable  => 'yes',
              graphable => 'yes',
              long_title => 'Degree of Difficulty'.
-                           '[ 1 - ((#YES+#yes) / Tries) ]'},
+                           '[ 1 - ((#YES+#yes) / Tries) ]',
+             selectable => 'yes',
+             selected => 'yes',
+           },
            { name   => 'deg_of_disc',
              title  => 'DoDisc',
              align  => 'right',
@@ -186,9 +230,61 @@
              format => '%4.2f',
              sortable  => 'yes',
              graphable => 'yes',
-             long_title => 'Degree of Discrimination' },
+             long_title => 'Degree of Discrimination',
+             selectable => 'yes',
+             selected => 'no',
+           },
 );
 
+my %SelectedFields;
+
+sub parse_field_selection {
+    #
+    # Pull out the defaults
+    if (! defined($ENV{'form.fieldselections'})) {
+        $ENV{'form.fieldselections'} = [];
+        foreach my $field (@Fields) {
+            next if ($field->{'selectable'} ne 'yes');
+            if ($field->{'selected'} eq 'yes') {
+                push(@{$ENV{'form.fieldselections'}},$field->{'name'});
+            }
+        }
+    }
+    #
+    # This should not happen, but in case it does...
+    if (ref($ENV{'form.fieldselections'}) ne 'ARRAY') {
+        $ENV{'form.fieldselections'} = [$ENV{'form.fieldselections'}];
+    }
+    #
+    # Set the field data and the selected fields (for easier checking)
+    undef(%SelectedFields);
+    foreach my $field (@Fields) {
+        next if ($field->{'selectable'} ne 'yes');
+        $field->{'selected'} = 'no';
+        foreach my $selection (@{$ENV{'form.fieldselections'}}) {
+            if ($selection eq $field->{'name'} || $selection eq 'all') {
+                $field->{'selected'} = 'yes';
+                $SelectedFields{$field->{'name'}}++;
+            }
+        }
+    }
+    return;
+}
+
+sub field_selection_input {
+    my $Str = '<select name="fieldselections" multiple size="5">'."\n";
+    $Str .= '<option value="all">all</option>'."\n";
+    foreach my $field (@Fields) {
+        next if ($field->{'selectable'} ne 'yes');
+        $Str .= '    <option value="'.$field->{'name'}.'" ';
+        if ($field->{'selected'} eq 'yes') {
+            $Str .= 'selected ';
+        }
+        $Str .= '>'.$field->{'title'}.'</option>'."\n";
+    }
+    $Str .= "</select>\n";
+}
+
 ###############################################
 ###############################################
 
@@ -204,6 +300,7 @@
 ###############################################
 ###############################################
 sub CreateInterface {
+    &parse_field_selection();
     my $Str = '';
     $Str .= &Apache::lonhtmlcommon::breadcrumbs
         (undef,'Overall Problem Statistics','Statistics_Overall_Key');
@@ -212,6 +309,7 @@
     $Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>';
     $Str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>';
     $Str .= '<td align="center"><b>'.&mt('Sequences and Folders').'</b></td>';
+    $Str .= '<td align="center"><b>'.&mt('Statistics').'</b></td>';
     $Str .= '<td rowspan="2">'.
         &Apache::lonstathelpers::limit_by_time_form().'</td>';
     $Str .= '</tr>'."\n";
@@ -232,6 +330,7 @@
     };
     $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
                                               $only_seq_with_assessments);
+    $Str .= '</td><td>'.&field_selection_input();
     $Str .= '</td></tr>'."\n";
     $Str .= '</table>'."\n";
     $Str .= '<input type="submit" name="GenerateStatistics" value="'.
@@ -432,6 +531,7 @@
     my $row = '';
     foreach my $field (@Fields) {
         next if ($options =~ /no $field->{'name'}/);
+        next if ($field->{'selected'} ne 'yes');
         $row .= '<td bgcolor="'.$field->{'color'}.'"';
         if (exists($field->{'align'})) {
             $row .= ' align="'.$field->{'align'}.'"';
@@ -458,6 +558,7 @@
     my $header_row;
     foreach my $field (@Fields) {
         next if ($options =~ /no $field->{'name'}/);
+        next if ($field->{'selected'} ne 'yes');
         $header_row .= '<th>';
         if (exists($field->{'sortable'}) && $field->{'sortable'} eq 'yes') {
             $header_row .= '<a href="javascript:'.
@@ -867,6 +968,7 @@
     # Long Headers
     foreach my $field (@Fields) {
         next if ($field->{'name'} eq 'problem_num');
+        next if ($field->{'selected'} ne 'yes');
         if (exists($field->{'long_title'})) {
             $excel_sheet->write($rows_output,$cols_output++,
                                 $field->{'long_title'});
@@ -878,6 +980,7 @@
     $cols_output=0;
     # Brief headers
     foreach my $field (@Fields) {
+        next if ($field->{'selected'} ne 'yes');
         next if ($field->{'name'} eq 'problem_num');
         # Use english for excel as I am not sure how well excel handles 
         # other character sets....
@@ -887,6 +990,7 @@
     foreach my $data (@StatsArray) {
         $cols_output=0;
         foreach my $field (@Fields) {
+            next if ($field->{'selected'} ne 'yes');
             next if ($field->{'name'} eq 'problem_num');
             $excel_sheet->write($rows_output,$cols_output++,
                                 $data->{$field->{'name'}});
@@ -1036,7 +1140,10 @@
     $data->{'title.link'}  = $resource->{'src'}.'?symb='.
         &Apache::lonnet::escape($resource->{'symb'});
     #
-    $data->{'deg_of_disc'} = &compute_discrimination_factor($resource,$part,$sequence);
+    if ($SelectedFields{'deg_of_disc'}) {
+        $data->{'deg_of_disc'} = 
+            &compute_discrimination_factor($resource,$part,$sequence);
+    }
     return $data;
 }
 

--matthew1080589284--