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

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 16 Feb 2005 17:43:20 -0000


This is a MIME encoded message

--matthew1108575800
Content-Type: text/plain

matthew		Wed Feb 16 12:43:20 2005 EDT

  Modified files:              
    /loncom/interface/statistics	lonproblemanalysis.pm 
  Log:
  Remove excel output of option response data.
  
  
--matthew1108575800
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20050216124320.txt"

Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.110 loncom/interface/statistics/lonproblemanalysis.pm:1.111
--- loncom/interface/statistics/lonproblemanalysis.pm:1.110	Thu Dec 23 14:58:06 2004
+++ loncom/interface/statistics/lonproblemanalysis.pm	Wed Feb 16 12:43:20 2005
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonproblemanalysis.pm,v 1.110 2004/12/23 19:58:06 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.111 2005/02/16 17:43:20 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -37,7 +37,6 @@
 use Apache::lonstudentsubmissions();
 use HTML::Entities();
 use Time::Local();
-use Spreadsheet::WriteExcel();
 use capa;
 
 my $plotcolors = ['#33ff00', 
@@ -53,9 +52,7 @@
                        text => 'Next Problem' },
                      { name => 'break'},
                      { name => 'SelectAnother',
-                       text => 'Choose a different Problem' },
-                     { name => 'ExcelOutput',
-                       text => 'Produce Excel Output' });
+                       text => 'Choose a different Problem' });
 
 sub BuildProblemAnalysisPage {
     my ($r,$c)=@_;
@@ -84,11 +81,7 @@
         &Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
     $r->rflush();
     #
-    # Support for numerical and radio response isn't complete enough to
-    # include in 1.2 release.
-    # my $problem_types = '(option|radiobutton|numerical)';
-    my $problem_types = '(option|radiobutton)';
-    # my $problem_types = '.';#(option)';
+    my $problem_types = '(option|radiobutton|numerical)';
     if (exists($ENV{'form.problemchoice'}) && 
         ! exists($ENV{'form.SelectAnother'})) {
         foreach my $button (@SubmitButtons) {
@@ -895,6 +888,7 @@
 
 sub RR_concept_plot {
     my ($concepts,$foil_data,$title) = @_;
+    &Apache::lonnet::logthis('got to RR_concept_plot');
     #
     my %correct_by_concept;
     my %incorrect_by_concept;
@@ -909,7 +903,6 @@
                 } else {
                     $incorrect_by_concept{$concept->{'name'}} +=
                         $foil_data->{$foil}->{$choice};
-                    
                 }
             }
         }
@@ -943,6 +936,7 @@
 
 sub RR_create_percent_selected_plot {
     my ($concepts,$foils,$foil_data,$title) = @_;
+    &Apache::lonnet::logthis('got to RR_create_percent_selected_plot');
     #
     if ($foil_data->{'_count'} == 0) { return ''; };
     my %correct_selections;
@@ -1014,6 +1008,7 @@
 sub RR_create_stacked_selection_plot {
     my ($foils,$foil_data,$title,$true_foils)=@_;
     #
+    &Apache::lonnet::logthis('got to RR_create_stacked_selection_plot');
     my @dataset; # array of array refs - multicolor rows $datasets[row]->[col]
     my @labels;
     my $count;
@@ -1134,30 +1129,22 @@
                   '</h2>');
     }  else {
         $r->rflush();
-        if (exists($ENV{'form.ExcelOutput'})) {
-            my $result = &OR_excel_sheet($r,$resource,
-                                         $PerformanceData,
-                                         $problem_data);
-            $r->print($result);
+        if ($ENV{'form.AnalyzeOver'} eq 'tries') {
+            my $analysis_html = &OR_tries_analysis($r,
+                                                   $PerformanceData,
+                                                   $problem_data);
+            $r->print($analysis_html);
+            $r->rflush();
+        } elsif ($ENV{'form.AnalyzeOver'} eq 'time') {
+            my $analysis_html = &OR_time_analysis($PerformanceData,
+                                                  $problem_data);
+            $r->print($analysis_html);
             $r->rflush();
         } else {
-            if ($ENV{'form.AnalyzeOver'} eq 'tries') {
-                my $analysis_html = &OR_tries_analysis($r,
-                                                    $PerformanceData,
-                                                    $problem_data);
-                $r->print($analysis_html);
-                $r->rflush();
-            } elsif ($ENV{'form.AnalyzeOver'} eq 'time') {
-                my $analysis_html = &OR_time_analysis($PerformanceData,
-                                                   $problem_data);
-                $r->print($analysis_html);
-                $r->rflush();
-            } else {
-                $r->print('<h2>'.
-                          &mt('The analysis you have selected is '.
-                              'not supported at this time').
-                          '</h2>');
-            }
+            $r->print('<h2>'.
+                      &mt('The analysis you have selected is '.
+                          'not supported at this time').
+                      '</h2>');
         }
     }
 }
@@ -1590,211 +1577,6 @@
             scalar(keys(%distinct_students)));
 }
 
-#########################################################
-#########################################################
-##
-##             Excel output 
-##
-#########################################################
-#########################################################
-sub build_student_data_worksheet {
-    my ($workbook,$format) = @_;
-    my $rows_output = 3;
-    my $cols_output = 0;
-    my $worksheet  = $workbook->addworksheet('Student Data');
-    $worksheet->write($rows_output++,0,'Student Data',$format->{'h3'});
-    my @Headers = ('full name','username','domain','section',
-                   "student\nnumber",'identifier');
-    $worksheet->write_row($rows_output++,0,\@Headers,$format->{'header'});
-    my @Students = @Apache::lonstatistics::Students;
-    my $studentrows = &Apache::loncoursedata::get_student_data(\@Students);
-    my %ids;
-    foreach my $row (@$studentrows) {
-        my ($mysqlid,$student) = @$row;
-        $ids{$student}=$mysqlid;
-    }
-    foreach my $student (@Students) {
-        my $name_domain = $student->{'username'}.':'.$student->{'domain'};
-        $worksheet->write_row($rows_output++,0,
-                          [$student->{'fullname'},
-                           $student->{'username'},$student->{'domain'},
-                           $student->{'section'},$student->{'id'},
-                           $ids{$name_domain}]);
-    }
-    return $worksheet;
-}
-
-sub OR_excel_sheet {
-    my ($r,$resource,$performance_data,$ORdata) = @_;
-    my $response = '';
-    my (undef,$Foils,$Concepts) = &build_foil_index($ORdata);
-    #
-    # Create excel worksheet
-    my $filename = '/prtspool/'.
-        $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.
-        time.'_'.rand(1000000000).'.xls';
-    my $workbook  = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);
-    if (! defined($workbook)) {
-        $r->log_error("Error creating excel spreadsheet $filename: $!");
-        $r->print('<p>'.&mt("Unable to create new Excel file.  ".
-                            "This error has been logged.  ".
-                            "Please alert your LON-CAPA administrator").
-                  '</p>');
-        return undef;
-    }
-    #
-    $workbook->set_tempdir('/home/httpd/perl/tmp');
-    my $format = &Apache::loncommon::define_excel_formats($workbook);
-    #
-    # Create and populate main worksheets
-    my $problem_data_sheet  = $workbook->addworksheet('Problem Data');
-    my $student_data_sheet = &build_student_data_worksheet($workbook,$format);
-    my $response_data_sheet = $workbook->addworksheet('Response Data');
-    foreach my $sheet ($problem_data_sheet,$student_data_sheet,
-                       $response_data_sheet) {
-        $sheet->write(0,0,$resource->{'title'},$format->{'h2'});
-        $sheet->write(1,0,$resource->{'src'},$format->{'h3'});
-    }
-    #
-    my $result;
-    $result = &OR_build_problem_data_worksheet($problem_data_sheet,$format,
-                                            $Concepts,$ORdata);
-    if ($result ne 'okay') {
-        # Do something useful
-    }
-    $result = &OR_build_response_data_worksheet($response_data_sheet,$format,
-                                             $performance_data,$Foils,
-                                             $ORdata);
-    if ($result ne 'okay') {
-        # Do something useful
-    }
-    $response_data_sheet->activate();
-    #
-    # Close the excel file
-    $workbook->close();
-    #
-    # Write a link to allow them to download it
-    $result .= '<h2>'.&mt('Excel Raw Data Output').'</h2>'.
-              '<p><a href="'.$filename.'">'.
-              &mt('Your Excel spreadsheet.').
-              '</a></p>'."\n";
-    return $result;
-}
-
-sub OR_build_problem_data_worksheet {
-    my ($worksheet,$format,$Concepts,$ORdata) = @_;
-    my $rows_output = 3;
-    my $cols_output = 0;
-    $worksheet->write($rows_output++,0,'Problem Structure',$format->{'h3'});
-    ##
-    ##
-    my @Headers;
-    if (@$Concepts > 1) {
-        @Headers = ("Concept\nNumber",'Concept',"Foil\nNumber",
-                    'Foil Name','Foil Text','Correct value');
-    } else {
-        @Headers = ('Foil Number','FoilName','Foil Text','Correct value');
-    }
-    $worksheet->write_row($rows_output++,0,\@Headers,$format->{'header'});
-    my %Foildata = %{$ORdata->{'_Foils'}};
-    my $conceptindex = 1;
-    my $foilindex = 1;
-    foreach my $concept (@$Concepts) {
-        my @FoilsInConcept = @{$concept->{'foils'}};
-        my $firstfoil = shift(@FoilsInConcept);
-        if (@$Concepts > 1) {
-            $worksheet->write_row($rows_output++,0,
-                                  [$conceptindex,
-                                   $concept->{'name'},
-                                   $foilindex++,
-                                   $Foildata{$firstfoil}->{'name'},
-                                   $Foildata{$firstfoil}->{'text'},
-                                   $Foildata{$firstfoil}->{'value'},]);
-        } else {
-            $worksheet->write_row($rows_output++,0,
-                                  [ $foilindex++,
-                                    $Foildata{$firstfoil}->{'name'},
-                                    $Foildata{$firstfoil}->{'text'},
-                                    $Foildata{$firstfoil}->{'value'},]);
-        }
-        foreach my $foilid (@FoilsInConcept) {
-            if (@$Concepts > 1) {
-                $worksheet->write_row($rows_output++,0,
-                                      ['',
-                                       '',
-                                       $foilindex,
-                                       $Foildata{$foilid}->{'name'},
-                                       $Foildata{$foilid}->{'text'},
-                                       $Foildata{$foilid}->{'value'},]);
-            } else {
-                $worksheet->write_row($rows_output++,0,                
-                                      [$foilindex,
-                                       $Foildata{$foilid}->{'name'},
-                                       $Foildata{$foilid}->{'text'},
-                                       $Foildata{$foilid}->{'value'},]);
-            }                
-        } continue {
-            $foilindex++;
-        }
-    } continue {
-        $conceptindex++;
-    }
-    $rows_output++;
-    $rows_output++;
-    ##
-    ## Option data output
-    $worksheet->write($rows_output++,0,'Options',$format->{'header'});
-    foreach my $string (@{$ORdata->{'_Options'}}) {
-        $worksheet->write($rows_output++,0,$string);
-    }
-    return 'okay';
-}
-
-sub OR_build_response_data_worksheet {
-    my ($worksheet,$format,$performance_data,$Foils,$ORdata)=@_;
-    my $rows_output = 3;
-    my $cols_output = 0;
-    $worksheet->write($rows_output++,0,'Response Data',$format->{'h3'});
-    $worksheet->set_column(1,1,20);
-    $worksheet->set_column(2,2,13);
-    my @Headers = ('identifier','time','award detail','attempt');
-    foreach my $foil (@$Foils) {
-        push (@Headers,$foil.' submission');
-        push (@Headers,$foil.' grading');
-    }
-    $worksheet->write_row($rows_output++,0,\@Headers,$format->{'header'});
-    #
-    foreach my $row (@$performance_data) {
-        next if (! defined($row));
-        my ($student,$award,$grading,$submission,$time,$tries) = @$row;
-        my @Foilgrades = split('&',$grading);
-        my @Foilsubs   = split('&',$submission);
-        my %response_data;
-        for (my $j=0;$j<=$#Foilgrades;$j++) {
-            my ($foilid,$correct)  = split('=',$Foilgrades[$j]);
-            my (undef,$submission) = split('=',$Foilsubs[$j]);
-            $submission = &Apache::lonnet::unescape($submission);
-            $foilid = &Apache::lonnet::unescape($foilid);
-            $response_data{$foilid.' submission'}=$submission;
-            $response_data{$foilid.' award'}=$correct;
-        }
-        $worksheet->write($rows_output,$cols_output++,$student);
-        $worksheet->write($rows_output,$cols_output++,
-             &Apache::lonstathelpers::calc_serial($time),$format->{'date'});
-        $worksheet->write($rows_output,$cols_output++,$award);
-        $worksheet->write($rows_output,$cols_output++,$tries);
-        foreach my $foilid (@$Foils) {
-            $worksheet->write($rows_output,$cols_output++,
-                              $response_data{$foilid.' submission'});
-            $worksheet->write($rows_output,$cols_output++,
-                              $response_data{$foilid.' award'});
-        }
-        $rows_output++;
-        $cols_output = 0;
-    }
-    return;
-}
-
 sub build_foil_index {
     my ($ORdata) = @_;
     return if (! exists($ORdata->{'_Foils'}));

--matthew1108575800--