Diff for /loncom/interface/statistics/lonsurveyreports.pm between versions 1.3 and 1.4

version 1.3, 2005/03/01 22:04:55 version 1.4, 2005/03/10 00:23:15
Line 34  use Apache::loncoursedata(); Line 34  use Apache::loncoursedata();
 use Apache::lonstatistics;  use Apache::lonstatistics;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonstathelpers;  use Apache::lonstathelpers;
   use Spreadsheet::WriteExcel;
 use HTML::Entities();  use HTML::Entities();
 use Time::Local();  use Time::Local();
   
Line 125  sub BuildSurveyReportsPage { Line 126  sub BuildSurveyReportsPage {
             $r->rflush();              $r->rflush();
             my %Data = &Apache::lonstathelpers::get_problem_data              my %Data = &Apache::lonstathelpers::get_problem_data
                 ($resource->src);                  ($resource->src);
             &make_HTML_report($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);
               }
         }          }
         $r->print('<hr />');          $r->print('<hr />');
     } else {      } else {
Line 253  sub Compile_Student_Answers { Line 259  sub Compile_Student_Answers {
 #########################################################  #########################################################
 #########################################################  #########################################################
 ##  ##
   ## make_Excel_report
   ##
   #########################################################
   #########################################################
   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('<script>'.
                 'window.document.Statistics.stats_status.value="'.
                 &mt('Building spreadsheet.').
                 '";</script>');
       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('<p>'.
                                     &mt('[_1]:[_2] responses to  [_3] may be too long to fit Excel spreadsheet.',
                                         $resource->compTitle,
                                         $resource->part_display($partid),
                                         $respid).
                                     '</p>');
                           $r->rflush();
                           $warned_about_size=1;
                       }
                       $worksheet->write($rows_output++,0,$data);
                   }
               } elsif (exists($data->{'foil_count'}) && 
                        exists($data->{'foil_responses'})) {
                   my $respdata = $problem_data->{$partid.'.'.$respid};
                   my @rowdata = ('Foil Name','Foil Text','Option',
                                  'Frequency');
                   $worksheet->write_row($rows_output++,0,
                                         \@rowdata,$format->{'h4'});
                   #
                   my @foils = sort(keys(%{$data->{'foil_responses'}}));
                   foreach my $foilid (@foils) {
                       my $foil_count = $data->{'foil_count'}->{$foilid};
                       my $foiltext = $respdata->{'_Foils'}->{$foilid}->{'text'};
                       my $foilname = $respdata->{'_Foils'}->{$foilid}->{'name'};
                       $foiltext = &HTML::Entities::decode($foilname);
                       my $cols_output=0;
                       $worksheet->write($rows_output,$cols_output++,$foilname);
                       $worksheet->write($rows_output,$cols_output++,$foiltext);  
                       my $option_start_col = $cols_output;
                       #
                       foreach my $option (sort(@{$respdata->{'_Options'}})){
                           $cols_output= $option_start_col;
                           $worksheet->write($rows_output,$cols_output++,
                                             $option);
                           my $count=
                               $data->{'foil_responses'}->{$foilid}->{$option};
                           $worksheet->write($rows_output,$cols_output++,$count);
                           $rows_output++;
                       }
                   }
               } elsif (exists($data->{'_count'})      && 
                        exists($data->{'foil_values'}) && 
                        exists($data->{'map'})) {
                   my $respdata = $problem_data->{$partid.'.'.$respid};
                   my @rowdata = ('Foil Name','Foil Text','Frequency');
                   $worksheet->write_row($rows_output++,0,
                                         \@rowdata,$format->{'h4'});
                   foreach my $value (sort(keys(%{$data->{'foil_values'}}))) {
                       undef(@rowdata);
                       my $foilid = $data->{'map'}->{$value};
                       push(@rowdata,$respdata->{'_Foils'}->{$foilid}->{'name'});
                       push(@rowdata,$respdata->{'_Foils'}->{$foilid}->{'text'});
                       push(@rowdata,$data->{'foil_values'}->{$value});
                       $worksheet->write_row($rows_output++,0,\@rowdata);
                   }
               }  
               $rows_output++;
           }    #response ids
       }    # partids
       $workbook->close();
       $r->print('<p><a href="'.$filename.'">'.
                 &mt('Your Excel spreadsheet.').
                 '</a></p>'."\n");
       $r->print('<script>'.
                 'window.document.Statistics.stats_status.value="'.
                 &mt('Done compiling spreadsheet.  See link below to download.').
                 '";</script>');
       $r->rflush();
       return;
   }
   
   #########################################################
   #########################################################
   ##
 ## make_HTML_report  ## make_HTML_report
 ##  ##
 #########################################################  #########################################################
Line 344  sub make_HTML_report { Line 466  sub make_HTML_report {
                     my $foilid = $data->{'map'}->{$value};                      my $foilid = $data->{'map'}->{$value};
                     my $foiltext = $ProblemData->{$partid.'.'.$respid}->{'_Foils'}->{$foilid}->{'text'};                      my $foiltext = $ProblemData->{$partid.'.'.$respid}->{'_Foils'}->{$foilid}->{'text'};
                     my $foilname = $ProblemData->{$partid.'.'.$respid}->{'_Foils'}->{$foilid}->{'name'};                      my $foilname = $ProblemData->{$partid.'.'.$respid}->{'_Foils'}->{$foilid}->{'name'};
                     $sum = $value * $data->{'foil_values'}->{$value};  
                     $tmp .= '<tr>'.                      $tmp .= '<tr>'.
                         '<td>'.$foilname.'</td>'.                          '<td>'.$foilname.'</td>'.
                         '<td>'.$foiltext.'</td>'.                          '<td>'.$foiltext.'</td>'.
Line 390  sub CreateInterface { Line 511  sub CreateInterface {
     ##      ##
     ## Environment variable initialization      ## Environment variable initialization
     my $Str = '';      my $Str = '';
       my $output_selector = '<select name="output" size="5">'.$/;
       if (! exists($ENV{'form.output'})) {
           $ENV{'form.output'} = 'HTML';
       }
       foreach my $output_format ( {name=>'HTML',text=>&mt("HTML") },
                                   {name=>'Excel',text=>&mt("Excel") }) {
           $output_selector.='<option value="'.$output_format->{'name'}.'"';
           if ($ENV{'form.output'} eq $output_format->{'name'}) {
               $output_selector.=' selected';
           }
           $output_selector.= '>'.$output_format->{'text'}.'</option>'.$/;
       }
       $output_selector .= '</select>'.$/;
     $Str .= &Apache::lonhtmlcommon::breadcrumbs      $Str .= &Apache::lonhtmlcommon::breadcrumbs
         (undef,'Student Submission Reports');          (undef,'Student Submission Reports');
     $Str .= '<p>';      $Str .= '<p>';
Line 397  sub CreateInterface { Line 531  sub CreateInterface {
     $Str .= '<tr>';      $Str .= '<tr>';
     $Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>';      $Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>';
     $Str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>';      $Str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>';
       $Str .= '<td align="center"><b>'.&mt('Output Format').'</b></td>';
     $Str .= '</tr>'."\n";      $Str .= '</tr>'."\n";
     #      #
     $Str .= '<tr><td align="center">'."\n";      $Str .= '<tr><td align="center">'."\n";
Line 407  sub CreateInterface { Line 542  sub CreateInterface {
     $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);      $Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
     $Str .= '</td>';      $Str .= '</td>';
     #      #
       $Str .= '<td align="center">'.$output_selector.'</td>';
       #
     $Str .= '</tr>'."\n";      $Str .= '</tr>'."\n";
     $Str .= '</table>'."\n";      $Str .= '</table>'."\n";
     #      #

Removed from v.1.3  
changed lines
  Added in v.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>