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

matthew lon-capa-cvs@mail.lon-capa.org
Thu, 09 Oct 2003 22:10:02 -0000


This is a MIME encoded message

--matthew1065737402
Content-Type: text/plain

matthew		Thu Oct  9 18:10:02 2003 EDT

  Modified files:              
    /loncom/interface/statistics	lonproblemanalysis.pm 
  Log:
  Many changes, some large, some small.
  Added 'tries' selection box, although it doesn't work yet and this 
  functionality will likely be changed signifigantly in the future.
  Use loncommon::DrawGraph instead of our own DrawGraph.
  Added proper handling of selected students, instead of always running 
  analysis on all students in the cache tables.
  
  
--matthew1065737402
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20031009181002.txt"

Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.27 loncom/interface/statistics/lonproblemanalysis.pm:1.28
--- loncom/interface/statistics/lonproblemanalysis.pm:1.27	Wed Oct  8 15:20:47 2003
+++ loncom/interface/statistics/lonproblemanalysis.pm	Thu Oct  9 18:10:02 2003
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonproblemanalysis.pm,v 1.27 2003/10/08 19:20:47 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.28 2003/10/09 22:10:02 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -39,6 +39,9 @@
     my ($r,$c)=@_;
     $r->print('<h2>'.&mt('Option Response Problem Analysis').'</h2>');
     $r->print(&CreateInterface());
+    #
+    my @Students = @Apache::lonstatistics::Students;
+    #
     if (exists($ENV{'form.problemchoice'})) {
         $r->print('<hr />');
         &Apache::lonstatistics::Gather_Full_Student_Data($r);
@@ -46,6 +49,10 @@
         my ($symb,$part,$resid) = &get_problem_symb(
                      &Apache::lonnet::unescape($ENV{'form.problemchoice'})
                                            );
+        #
+#        my ($firsttime,$lasttime) = 
+#            &Apache::loncoursedata::get_timestamp_data($symb,$resid);
+        #
         my $resource = &get_resource_from_symb($symb);
         if (defined($resource)) {
             my %Data = &get_problem_data($resource->{'src'});
@@ -67,11 +74,23 @@
             ## Analyze the problem
             my $PerformanceData = 
                 &Apache::loncoursedata::get_optionresponse_data
-                                             (undef,$symb,$resid);
+                                           (\@Students,$symb,$resid);
             if (defined($PerformanceData) && 
                 ref($PerformanceData) eq 'ARRAY') {
-                my $analysis_html = &DoTriesAnalysis($PerformanceData,$ORdata);
+                if ($ENV{'form.AnalyzeBy'} eq 'Tries') {
+                    my $analysis_html = &DoTriesAnalysis($PerformanceData,
+                                                         $ORdata);
                 $r->print($analysis_html);
+#                } elsif ($ENV{'form.AnalyzeBy'} eq 'Time') {
+#                    my $analysis_html = &DoTimeAnalysis($PerformanceData,
+#                                                         $ORdata);
+#                $r->print($analysis_html);
+                } else {
+                    $r->print('<h2>'.
+                              &mt('The analysis you have selected is '.
+                                         'not supported at this time').
+                              '</h2>');
+                }
             } else {
                 $r->print('<h2>'.
                           &mt('There is no student data for this problem.').
@@ -92,7 +111,7 @@
 sub DoTriesAnalysis {
     my ($PerformanceData,$ORdata) = @_;
     my $mintries = 1;
-    my $maxtries = 3;
+    my $maxtries = 10;
     my %ResponseData = &analyze_option_data_by_tries($PerformanceData,
                                                  $mintries,$maxtries);
     my @Foils = sort(keys(%ResponseData));
@@ -160,22 +179,26 @@
                 $maxstu = $ResponseData{$foilid}->[$i]->{'total'};
             }
         }
+        $maxstu = 0 if (! $maxstu);
+        $minstu = 0 if (! $minstu);
         my $graphlink;
         if ($maxstu == $minstu) {
-            $graphlink = &DrawGraph('Attempt '.$i.', '.$maxstu.' students',
-                                    'Foil Number',
-                                    'Percent Correct',
-                                    100,
-                                    $PlotData[$i]->{'good'},
-                                    $PlotData[$i]->{'bad'});
+            $graphlink = &Apache::loncommon::DrawGraph
+                ('Attempt '.$i.', '.$maxstu.' students',
+                 'Foil Number',
+                 'Percent Correct',
+                 100,
+                 $PlotData[$i]->{'good'},
+                 $PlotData[$i]->{'bad'});
         } else {
-            $graphlink = &DrawGraph('Attempt '.$i.', '.$minstu.'-'.$maxstu.
-                                    ' students',
-                                    'Foil Number',
-                                    'Percent Correct',
-                                    100,
-                                    $PlotData[$i]->{'good'},
-                                    $PlotData[$i]->{'bad'});
+            $graphlink = &Apache::loncomon::DrawGraph
+                ('Attempt '.$i.', '.$minstu.'-'.$maxstu.
+                 ' students',
+                 'Foil Number',
+                 'Percent Correct',
+                 100,
+                 $PlotData[$i]->{'good'},
+                 $PlotData[$i]->{'bad'});
         }
         push(@Data,'<td colspan="3">'.$graphlink.'</td>');
     }
@@ -228,40 +251,6 @@
     return %Trydata;
 }
 
-sub DrawGraph {
-    my ($title,$xlabel,$ylabel,$MaxY,$values1,$values2)=@_;
-    if (! defined($values1) || ref($values1) ne 'ARRAY') {
-        return '';
-    }
-    $title  = '' if (! defined($title));
-    $xlabel = '' if (! defined($xlabel));
-    $ylabel = '' if (! defined($ylabel));
-    $title = &Apache::lonnet::escape($title);
-    $xlabel = &Apache::lonnet::escape($xlabel);
-    $ylabel = &Apache::lonnet::escape($ylabel);
-    #
-    my $sendValues1 = join(',', @$values1);
-    my $sendValues2;
-    if (defined($values2)) {
-        $sendValues2 = join(',', @$values2);
-    }
-            
-    my $sendCount = scalar(@$values1);
-    $MaxY =1 if ($MaxY < 1);
-    if ( int($MaxY) < $MaxY ) {
-        $MaxY++;
-        $MaxY = int($MaxY);
-    }
-    my @GData = ($title,$xlabel,$ylabel,$MaxY,$sendCount,$sendValues1);
-    if (defined($sendValues2)) {
-        push (@GData,$sendValues2);
-    }
-    return '<IMG src="/cgi-bin/graph.png?'.
-        (join('&', @GData)).'" border="1" />';
-}
-
-
-
 sub get_problem_symb {
     my $problemstring = shift();
     my ($symb,$partid,$resid) = ($problemstring=~ /^(.*):([^:]*):([^:]*)$/);
@@ -269,19 +258,31 @@
 }
 
 sub CreateInterface {
+    ##
+    ## Environment variable initialization
+    if (! exists$ENV{'form.AnalyzeBy'}) {
+        $ENV{'form.AnalyzeBy'} = 'Tries';
+    }
+    ##
+    ## Build the menu
     my $Str = '';
     $Str .= '<table cellspacing="5">'."\n";
     $Str .= '<tr>';
     $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('Analyze By').'</b></td>';
     $Str .= '</tr>'."\n";
     #
     $Str .= '<tr><td align="center">'."\n";
     $Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
-    $Str .= '</td><td align="center">';
+    $Str .= '</td>';
+    #
+    $Str .= '<td align="center">';
     $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
-    $Str .= '</td><td align="center">';
+    $Str .= '</td>';
+    #
+    $Str .= '<td align="center">';
     my $only_seq_with_assessments = sub { 
         my $s=shift;
         if ($s->{'num_assess'} < 1) { 
@@ -292,7 +293,22 @@
     };
     $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
                                               $only_seq_with_assessments);
-    $Str .= '</td></tr>'."\n";
+    $Str .= '</td>';
+    #
+    $Str .= '<td>';
+    $Str .='<input type="radio" name="AnalyzeBy" value="Tries" ';
+    if ($ENV{'form.AnalyzeBy'} eq 'Tries') {
+        $Str .= 'checked ';
+    }
+    $Str .= '>'.&mt('Tries').'<br />';
+    $Str .='<input type="radio" name="AnalyzeBy" value="Time" ';
+    if ($ENV{'form.AnalyzeBy'} eq 'Time') {
+        $Str .= 'checked ';
+    }
+    $Str .= '>'.&mt('Time').'<br />';
+    $Str .= '</td>';
+    #
+    $Str .= '</tr>'."\n";
     $Str .= '</table>'."\n";
     $Str .= '<input type="submit" name="ProblemAnalysis" value="'.
         &mt('Analyze Problem').'" />';

--matthew1065737402--