[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';