--- loncom/interface/statistics/lonsurveyreports.pm 2005/03/17 19:02:45 1.6 +++ loncom/interface/statistics/lonsurveyreports.pm 2005/03/18 00:20:44 1.7 @@ -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 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'}, ); @@ -77,6 +79,7 @@ sub BuildSurveyReportsPage { # if (exists($ENV{'form.problemchoice'}) && ! exists($ENV{'form.SelectAnother'})) { + $r->print(' 'x3); foreach my $button (@SubmitButtons) { if ($button->{'name'} eq 'break') { $r->print("
\n"); @@ -92,6 +95,7 @@ sub BuildSurveyReportsPage { # $r->print('
'); $r->print('

'. + &Apache::lonlocal::locallocaltime(time).','. &Apache::lonstatistics::section_and_enrollment_description(). '

'); $r->rflush(); @@ -131,12 +135,14 @@ sub BuildSurveyReportsPage { $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('
'); @@ -215,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); @@ -258,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; } + ######################################################### ######################################################### ## @@ -519,7 +595,9 @@ sub CreateInterface { $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.='