');
$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');
@@ -121,11 +129,21 @@ 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);
- &make_HTML_report($r,$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('');
} else {
@@ -179,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.
@@ -203,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);
@@ -246,7 +268,188 @@ 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("There is no essay or string response data to output for this survey.").'
');
+ }
+ $r->rflush();
+ return;
+}
+
+
+#########################################################
+#########################################################
+##
+## make_Excel_report
+##
+#########################################################
+#########################################################
+sub make_Excel_report {
+ my ($r,$problem,$problem_data,$students) = @_;
+ my ($workbook,$filename,$format) = &Apache::loncommon::create_workbook($r);
+ if (! defined($workbook)) { return '';}
+ $r->print('');
+ my $worksheet = $workbook->addworksheet('Survey Reports');
+ #
+ my $rows_output=0;
+ $worksheet->write($rows_output++,0,
+ $env{'course.'.$env{'request.course.id'}.'.description'},
+ $format->{'h1'});
+ $rows_output++;
+ #
+ my $resource = $problem->{'resource'};
+ $worksheet->write($rows_output++,0,$resource->compTitle,$format->{'h2'});
+ 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};
+ my $cols_output=0;
+ $worksheet->write($rows_output,$cols_output++,
+ $resource->part_display($partid),$format->{'h3'});
+ $worksheet->write($rows_output,$cols_output++,
+ 'Response '.$respid.', '.$resptype,
+ $format->{'h3'});
+ $rows_output++;
+ if (exists($data->{'responses'}) &&
+ ref($data->{'responses'}) eq 'ARRAY') {
+ my $warned_about_size = 0;
+ foreach my $data (@{$data->{'responses'}}) {
+ if (length($data) > 255 && ! $warned_about_size) {
+ $r->print('
'.
+ &mt('[_1]:[_2] responses to [_3] may be too long to fit Excel spreadsheet.',
+ $resource->compTitle,
+ $resource->part_display($partid),
+ $respid).
+ '