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

matthew lon-capa-cvs@mail.lon-capa.org
Fri, 18 Mar 2005 00:20:45 -0000


matthew		Thu Mar 17 19:20:45 2005 EDT

  Modified files:              
    /loncom/interface/statistics	lonsurveyreports.pm 
  Log:
  Interface changes.  Added ability to output essay (and other uncategorizable
  response types) to a text file.
  
  
Index: loncom/interface/statistics/lonsurveyreports.pm
diff -u loncom/interface/statistics/lonsurveyreports.pm:1.6 loncom/interface/statistics/lonsurveyreports.pm:1.7
--- loncom/interface/statistics/lonsurveyreports.pm:1.6	Thu Mar 17 14:02:45 2005
+++ loncom/interface/statistics/lonsurveyreports.pm	Thu Mar 17 19:20:44 2005
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonsurveyreports.pm,v 1.6 2005/03/17 19:02:45 matthew Exp $
+# $Id: lonsurveyreports.pm,v 1.7 2005/03/18 00:20:44 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -38,13 +38,15 @@
 use HTML::Entities();
 use Time::Local();
 
-my @SubmitButtons = ({ name => 'PrevProblem',
+my @SubmitButtons = (
+                     { name => 'break'},
+                     { name => 'PrevProblem',
                        text => 'Previous Survey' },
                      { name => 'NextProblem',
                        text => 'Next Survey' },
-                     { name => 'break'},
                      { name => 'SelectAnother',
-                       text => 'Choose a different Survey Problem' },
+                       text => 'Choose a different Survey' },
+                     { name => 'break'},
                      { name => 'Generate',
                        text => 'Generate Report'},
                      );
@@ -77,6 +79,7 @@
     #
     if (exists($ENV{'form.problemchoice'}) && 
         ! exists($ENV{'form.SelectAnother'})) {
+        $r->print(' 'x3);
         foreach my $button (@SubmitButtons) {
             if ($button->{'name'} eq 'break') {
                 $r->print("<br />\n");
@@ -92,6 +95,7 @@
         #
         $r->print('<hr />');
         $r->print('<h4>'.
+                  &Apache::lonlocal::locallocaltime(time).','.
                   &Apache::lonstatistics::section_and_enrollment_description().
                   '</h4>');
         $r->rflush();
@@ -131,12 +135,14 @@
             $r->rflush();
             my %Data = &Apache::lonstathelpers::get_problem_data
                 ($resource->src);
-            &Compile_Student_Answers($current_problem,\%Data,\@Students);
+            &compile_student_answers($r,$current_problem,\%Data,\@Students);
             if ($ENV{'form.output'} eq 'HTML' || 
                 ! defined($ENV{'form.output'})) {
                 &make_HTML_report($r,$current_problem,\%Data,\@Students);
             } elsif ($ENV{'form.output'} eq 'Excel') {
                 &make_Excel_report($r,$current_problem,\%Data,\@Students);
+            } elsif ($ENV{'form.output'} eq 'TXT') {
+                &make_text_report($r,$current_problem,\%Data,\@Students);
             }
         }
         $r->print('<hr />');
@@ -215,9 +221,13 @@
 ##
 #########################################################
 #########################################################
-sub Compile_Student_Answers {
-    my ($problem,$ProblemData,$Students) = @_;
+sub compile_student_answers {
+    my ($r,$problem,$ProblemData,$Students) = @_;
     my $resource = $problem->{'resource'};
+    my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
+        ($r,'Processing Student Submissions',
+         'Processing Student Submissions', 
+         scalar(@$Students),'inline',undef,'Statistics','stats_status');
     foreach my $student (@$Students) {
         foreach my $partid (@{$resource->parts}) {
             my @response_ids   = $resource->responseIds($partid);
@@ -258,10 +268,76 @@
                 }
             }
         }
+        &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+                                                 'last student');
+    }
+    &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
+    return;
+}
+
+
+#########################################################
+#########################################################
+##
+## make_text_report
+##
+#########################################################
+#########################################################
+sub make_text_report {
+    my ($r,$problem,$problem_data,$students) = @_;
+    my ($file,$filename) = &Apache::loncommon::create_text_file($r,'txt');
+    if (! defined($file)) { return '';}
+    $r->print('<script>'.
+              'window.document.Statistics.stats_status.value="'.
+              &mt('Building text document.').
+              '";</script>');
+    my $resource = $problem->{'resource'};
+    print $file $resource->compTitle.$/;
+    print $file &Apache::lonstatistics::section_and_enrollment_description().
+        ' '.&mt('Generated on [_1]',&Apache::lonlocal::locallocaltime(time)).
+        $/;
+    my $something_has_been_output = 0;
+    foreach my $partid (@{$resource->parts}) {
+        my @response_ids   = $resource->responseIds($partid);
+        my @response_types = $resource->responseType($partid);
+        for (my $i=0;$i<=$#response_ids;$i++) {
+            my $respid   = $response_ids[$i];
+            my $resptype = $response_types[$i];
+            my $data = $problem->{'responsedata'}->{$partid}->{$respid};
+            if (exists($data->{'responses'}) && 
+                ref($data->{'responses'}) eq 'ARRAY') {
+                # Essay type response
+                print $file ('-'x40).$/;
+                print $file 
+                    $resource->part_display($partid).', '.$respid.':'.$resptype.$/;
+                foreach my $submission (@{$data->{'responses'}}) {
+                    print $file ('-'x20).$/;
+                    $submission =~ s/(\\r\\n|\\n)/\n/g;
+                    $submission =~ s/\\(\'|\"|\`)/$1/g;
+                    print $file $submission.$/.$/;
+                    $something_has_been_output=1;
+                }
+            }
+        }
     }
+    close($file);
+    if($something_has_been_output) {
+        $r->print('<p><a href="'.$filename.'">'.
+                  &mt('Your text file.').
+                  '</a></p>'."\n");
+        $r->print('<script>'.
+                  'window.document.Statistics.stats_status.value="'.
+               &mt('Done compiling text file.  See link below to download.').
+                  '";</script>');
+    } else {
+        $r->print('<h2>'.
+                  &mt("There is no essay or string response data to output for this survey.").'</h2>');
+    }
+    $r->rflush();
     return;
 }
 
+
 #########################################################
 #########################################################
 ##
@@ -519,7 +595,9 @@
         $ENV{'form.output'} = 'HTML';
     }
     foreach my $output_format ( {name=>'HTML',text=>&mt("HTML") },
-                                {name=>'Excel',text=>&mt("Excel") }) {
+                                {name=>'Excel',text=>&mt("Excel") },
+                                {name=>'TXT',text=>&mt("Text (essays only)") },
+                                ) {
         $output_selector.='<option value="'.$output_format->{'name'}.'"';
         if ($ENV{'form.output'} eq $output_format->{'name'}) {
             $output_selector.=' selected';