--- loncom/interface/statistics/lonsurveyreports.pm 2005/03/10 00:23:15 1.4
+++ loncom/interface/statistics/lonsurveyreports.pm 2006/05/05 20:03:43 1.12
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonsurveyreports.pm,v 1.4 2005/03/10 00:23:15 matthew Exp $
+# $Id: lonsurveyreports.pm,v 1.12 2006/05/05 20:03:43 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -27,7 +27,7 @@
package Apache::lonsurveyreports;
use strict;
-use Apache::lonnet();
+use Apache::lonnet;
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::loncoursedata();
@@ -38,13 +38,15 @@ use Spreadsheet::WriteExcel;
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'},
);
@@ -75,8 +77,9 @@ sub BuildSurveyReportsPage {
&Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
$r->rflush();
#
- if (exists($ENV{'form.problemchoice'}) &&
- ! exists($ENV{'form.SelectAnother'})) {
+ if (exists($env{'form.problemchoice'}) &&
+ ! exists($env{'form.SelectAnother'})) {
+ $r->print(' 'x3);
foreach my $button (@SubmitButtons) {
if ($button->{'name'} eq 'break') {
$r->print(" \n");
@@ -91,30 +94,34 @@ sub BuildSurveyReportsPage {
}
#
$r->print('
');
+ $r->print(''.
+ &Apache::lonlocal::locallocaltime(time).','.
+ &Apache::lonstatistics::section_and_enrollment_description().
+ ' ');
$r->rflush();
#
# Determine which problem we are to analyze
my $current_problem = &Apache::lonstathelpers::get_target_from_id
- ($ENV{'form.problemchoice'});
+ ($env{'form.problemchoice'});
#
my ($navmap,$prev,$curr,$next) =
&Apache::lonstathelpers::get_prev_curr_next($current_problem,
'.',
'part_survey',
);
- if (exists($ENV{'form.PrevProblem'}) && defined($prev)) {
+ if (exists($env{'form.PrevProblem'}) && defined($prev)) {
$current_problem = $prev;
- } elsif (exists($ENV{'form.NextProblem'}) && defined($next)) {
+ } elsif (exists($env{'form.NextProblem'}) && defined($next)) {
$current_problem = $next;
} else {
$current_problem = $curr;
}
#
# Store the current problem choice and send it out in the form
- $ENV{'form.problemchoice'} =
+ $env{'form.problemchoice'} =
&Apache::lonstathelpers::make_target_id($current_problem);
$r->print(' ');
+ $env{'form.problemchoice'}.'" />');
#
if (! defined($current_problem->{'resource'})) {
$r->print('resource is undefined');
@@ -122,15 +129,20 @@ sub BuildSurveyReportsPage {
my $resource = $current_problem->{'resource'};
$r->print(''.$resource->compTitle.' ');
$r->print(''.$resource->src.' ');
- $r->print(&Apache::lonstathelpers::render_resource($resource));
+ if ($env{'form.renderprob'} eq 'true') {
+ $r->print(&Apache::lonstathelpers::render_resource($resource));
+ }
$r->rflush();
my %Data = &Apache::lonstathelpers::get_problem_data
($resource->src);
- if ($ENV{'form.output'} eq 'HTML' ||
- ! defined($ENV{'form.output'})) {
+ &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') {
+ } 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(' ');
@@ -185,7 +197,7 @@ sub SurveyProblemSelector {
respid=>undef,
resptype=>undef});
my $checked = '';
- if ($ENV{'form.problemchoice'} eq $value) {
+ if ($env{'form.problemchoice'} eq $value) {
$checked = 'checked ';
}
my $link = $problem->{'res'}->src.
@@ -194,7 +206,7 @@ sub SurveyProblemSelector {
' '.''.
''.
- ''.$problem->{'res'}->compTitle.'('.$problem->{'seq'}->compTitle.')'.''.
+ ''.$problem->{'res'}->compTitle.'('.$problem->{'seq'}->compTitle.')'.' '.
(' 'x2).
qq{view }.' '.$/;
}
@@ -209,9 +221,13 @@ sub SurveyProblemSelector {
##
#########################################################
#########################################################
-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);
@@ -252,10 +268,76 @@ sub Compile_Student_Answers {
}
}
}
+ &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('');
+ 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(''.
+ &mt('Your text file.').
+ '
'."\n");
+ $r->print('');
+ } else {
+ $r->print(''.
+ &mt("There is no essay or string response data to output for this survey.").' ');
+ }
+ $r->rflush();
+ return;
+}
+
+
#########################################################
#########################################################
##
@@ -265,7 +347,6 @@ sub Compile_Student_Answers {
#########################################################
sub make_Excel_report {
my ($r,$problem,$problem_data,$students) = @_;
- &Compile_Student_Answers($problem,$problem_data,$students);
my ($workbook,$filename,$format) = &Apache::loncommon::create_workbook($r);
if (! defined($workbook)) { return '';}
$r->print('