version 1.3, 2005/03/01 22:04:55
|
version 1.6, 2005/03/17 19:02:45
|
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 90 sub BuildSurveyReportsPage {
|
Line 91 sub BuildSurveyReportsPage {
|
} |
} |
# |
# |
$r->print('<hr />'); |
$r->print('<hr />'); |
|
$r->print('<h4>'. |
|
&Apache::lonstatistics::section_and_enrollment_description(). |
|
'</h4>'); |
$r->rflush(); |
$r->rflush(); |
# |
# |
# Determine which problem we are to analyze |
# Determine which problem we are to analyze |
Line 121 sub BuildSurveyReportsPage {
|
Line 125 sub BuildSurveyReportsPage {
|
my $resource = $current_problem->{'resource'}; |
my $resource = $current_problem->{'resource'}; |
$r->print('<h1>'.$resource->compTitle.'</h1>'); |
$r->print('<h1>'.$resource->compTitle.'</h1>'); |
$r->print('<h3>'.$resource->src.'</h3>'); |
$r->print('<h3>'.$resource->src.'</h3>'); |
$r->print(&Apache::lonstathelpers::render_resource($resource)); |
if ($ENV{'form.renderprob'} eq 'true') { |
|
$r->print(&Apache::lonstathelpers::render_resource($resource)); |
|
} |
$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); |
&Compile_Student_Answers($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 265 sub Compile_Student_Answers {
|
######################################################### |
######################################################### |
######################################################### |
######################################################### |
## |
## |
|
## 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('<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 |
## |
## |
######################################################### |
######################################################### |
######################################################### |
######################################################### |
sub make_HTML_report { |
sub make_HTML_report { |
my ($r,$problem,$ProblemData,$Students) = @_; |
my ($r,$problem,$ProblemData,$Students) = @_; |
&Compile_Student_Answers($problem,$ProblemData,$Students); |
|
# &output_hash('',$ProblemData); |
|
my $resource = $problem->{'resource'}; |
my $resource = $problem->{'resource'}; |
foreach my $partid (@{$resource->parts}) { |
foreach my $partid (@{$resource->parts}) { |
my @response_ids = $resource->responseIds($partid); |
my @response_ids = $resource->responseIds($partid); |
Line 344 sub make_HTML_report {
|
Line 469 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 514 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>'; |
$Str .= '<table cellspacing="5">'."\n"; |
$Str .= '<table cellspacing="5">'."\n"; |
$Str .= '<tr>'; |
$Str .= '<tr>'; |
$Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>'; |
$Str .= '<th>'.&mt('Sections').'</th>'; |
$Str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>'; |
$Str .= '<th>'.&mt('Enrollment Status').'</th>'; |
|
$Str .= '<th>'.&mt('Output Format').'</th>'; |
|
$Str .= '<th>'.' '.'</th>'; |
$Str .= '</tr>'."\n"; |
$Str .= '</tr>'."\n"; |
# |
# |
$Str .= '<tr><td align="center">'."\n"; |
$Str .= '<tr><td align="center">'."\n"; |
Line 407 sub CreateInterface {
|
Line 546 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>'; |
|
# |
|
# Render problem checkbox |
|
my $prob_checkbox = '<input type="checkbox" name="renderprob" '; |
|
if (exists($ENV{'form.renderprob'}) && $ENV{'form.renderprob'} eq 'true') { |
|
$prob_checkbox .= 'checked '; |
|
} |
|
$prob_checkbox .= 'value="true" />'; |
|
$Str .= '<td align="right" valign="top">'. |
|
'<label><b>'. |
|
&mt('Show problem [_1]',$prob_checkbox).'</b></label><br />'. |
|
'<label><b>'. |
|
'</td>'; |
|
# |
$Str .= '</tr>'."\n"; |
$Str .= '</tr>'."\n"; |
$Str .= '</table>'."\n"; |
$Str .= '</table>'."\n"; |
# |
# |