version 1.14, 2006/08/18 15:15:38
|
version 1.26, 2011/12/21 21:25:51
|
Line 30 use strict;
|
Line 30 use strict;
|
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
|
use Apache::lonquickgrades(); |
use Apache::loncoursedata(); |
use Apache::loncoursedata(); |
use Apache::lonstatistics; |
use Apache::lonstatistics; |
use Apache::lonlocal; |
use Apache::lonlocal; |
Line 63 sub BuildSurveyReportsPage {
|
Line 64 sub BuildSurveyReportsPage {
|
); |
); |
&Apache::loncommon::store_course_settings('survey_reports', |
&Apache::loncommon::store_course_settings('survey_reports', |
\%Saveable_Parameters); |
\%Saveable_Parameters); |
&Apache::loncommon::restore_course_settings('survey_resports', |
&Apache::loncommon::restore_course_settings('survey_reports', |
\%Saveable_Parameters); |
\%Saveable_Parameters); |
# |
# |
&Apache::lonstatistics::PrepareClasslist(); |
&Apache::lonstatistics::PrepareClasslist(); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Student Submission Reports')); |
|
&Apache::lonquickgrades::startGradeScreen($r,'statistics'); |
|
|
# |
# |
$r->print(&CreateInterface()); |
$r->print(&CreateInterface()); |
# |
# |
my @Students = @Apache::lonstatistics::Students; |
my @Students = @Apache::lonstatistics::Students; |
# |
# |
if (@Students < 1) { |
if (@Students < 1) { |
$r->print('<h2>There are no students in the sections selected</h2>'); |
$r->print('<p class="LC_warning">'.&mt('There are no students in the sections selected.').'</p>'); |
} |
} |
# |
# |
my @CacheButtonHTML = |
my @CacheButtonHTML = |
Line 98 sub BuildSurveyReportsPage {
|
Line 102 sub BuildSurveyReportsPage {
|
# |
# |
$r->print('<hr />'); |
$r->print('<hr />'); |
$r->print('<h4>'. |
$r->print('<h4>'. |
&Apache::lonlocal::locallocaltime(time).','. |
&Apache::lonlocal::locallocaltime(time).', '. |
&Apache::lonstatistics::section_and_enrollment_description(). |
&Apache::lonstatistics::section_and_enrollment_description(). |
'</h4>'); |
'</h4>'); |
$r->rflush(); |
$r->rflush(); |
Line 133 sub BuildSurveyReportsPage {
|
Line 137 sub BuildSurveyReportsPage {
|
$r->print('<h1>'.$resource->compTitle.'</h1>'); |
$r->print('<h1>'.$resource->compTitle.'</h1>'); |
$r->print('<h3>'.$resource->src.'</h3>'); |
$r->print('<h3>'.$resource->src.'</h3>'); |
if ($env{'form.renderprob'} eq 'true') { |
if ($env{'form.renderprob'} eq 'true') { |
$r->print(&Apache::lonstathelpers::render_resource($resource)); |
$r->print('<hr />' |
|
.&Apache::lonstathelpers::render_resource($resource) |
|
.'<hr />' |
|
); |
} |
} |
$r->rflush(); |
$r->rflush(); |
my %Data = &Apache::lonstathelpers::get_problem_data |
my %Data = &Apache::lonstathelpers::get_problem_data |
Line 174 sub SurveyProblemSelector {
|
Line 181 sub SurveyProblemSelector {
|
my @resources = &Apache::lonstathelpers::get_resources($navmap,$seq); |
my @resources = &Apache::lonstathelpers::get_resources($navmap,$seq); |
foreach my $res (@resources) { |
foreach my $res (@resources) { |
foreach my $part (@{$res->parts}) { |
foreach my $part (@{$res->parts}) { |
if ($res->is_survey($part)) { |
if (($res->is_survey($part)) || ($res->is_anonsurvey($part))) { |
push(@SurveyProblems,{res=>$res,seq=>$seq,part=>$part}); |
push(@SurveyProblems,{res=>$res,seq=>$seq,part=>$part}); |
last; |
last; |
} |
} |
Line 182 sub SurveyProblemSelector {
|
Line 189 sub SurveyProblemSelector {
|
} |
} |
} |
} |
if (! scalar(@SurveyProblems)) { |
if (! scalar(@SurveyProblems)) { |
$Str = '<h1>'. |
$Str = '<p class="LC_warning">'. |
&mt('There are no survey problems in this course'). |
&mt('There are no survey problems in this course.'). |
'</h1>'.$/; |
'</p>'.$/; |
return $Str; |
return $Str; |
} |
} |
$Str .= '<table>'.$/; |
$Str .= '<table>'.$/; |
Line 201 sub SurveyProblemSelector {
|
Line 208 sub SurveyProblemSelector {
|
resptype=>undef}); |
resptype=>undef}); |
my $checked = ''; |
my $checked = ''; |
if ($env{'form.problemchoice'} eq $value) { |
if ($env{'form.problemchoice'} eq $value) { |
$checked = 'checked '; |
$checked = 'checked="checked" '; |
} |
} |
my $link = $problem->{'res'}->src. |
my $link = $problem->{'res'}->link. |
'?symb='.&escape($problem->{'res'}->symb); |
'?symb='.&escape($problem->{'res'}->shown_symb); |
$Str .= '<tr><td>'. |
$Str .= '<tr><td>'. |
'<input type="radio" name="problemchoice" id="'.$id.'" '. |
'<input type="radio" name="problemchoice" id="'.$id.'" '. |
'value="'.$value.'" '.$checked.'/>'.'</td>'. |
'value="'.$value.'" '.$checked.'/>'.'</td>'. |
'<td><nobr>'. |
'<td><span class="LC_nobreak">'. |
'<label for="'.$id.'">'.$problem->{'res'}->compTitle.'('.$problem->{'seq'}->compTitle.')'.'</label>'. |
'<label for="'.$id.'">'.$problem->{'res'}->compTitle.' ('.$problem->{'seq'}->compTitle.')'.'</label>'. |
(' 'x2). |
(' 'x2). |
qq{<a target="preview" href="$link">view</a>}.'</td></tr>'.$/; |
'<a target="preview" href="'.$link.'">'.&mt('View survey').'</a></span></td></tr>'.$/; |
} |
} |
$Str .= '</table>'; |
$Str .= '</table>'; |
return $Str; |
return $Str; |
Line 227 sub SurveyProblemSelector {
|
Line 234 sub SurveyProblemSelector {
|
sub compile_student_answers { |
sub compile_student_answers { |
my ($r,$problem,$ProblemData,$Students) = @_; |
my ($r,$problem,$ProblemData,$Students) = @_; |
my $resource = $problem->{'resource'}; |
my $resource = $problem->{'resource'}; |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,scalar(@$Students)); |
($r,'Processing Student Submissions', |
|
'Processing Student Submissions', |
|
scalar(@$Students),'inline',undef,'Statistics','stats_status'); |
|
foreach my $student (@$Students) { |
foreach my $student (@$Students) { |
foreach my $partid (@{$resource->parts}) { |
foreach my $partid (@{$resource->parts}) { |
my @response_ids = $resource->responseIds($partid); |
my @response_ids = $resource->responseIds($partid); |
Line 264 sub compile_student_answers {
|
Line 268 sub compile_student_answers {
|
$data->{'foil_values'}->{$value}++; |
$data->{'foil_values'}->{$value}++; |
if (! exists($data->{'map'}->{$value})) { |
if (! exists($data->{'map'}->{$value})) { |
$data->{'map'}->{$value} = $foil; |
$data->{'map'}->{$value} = $foil; |
|
$data->{'map_fv'}->{$foil} = $value; |
} |
} |
} else { |
} else { |
# Variable stuff (essays, raw numbers, strings) go here |
# Variable stuff (essays, raw numbers, strings) go here |
Line 271 sub compile_student_answers {
|
Line 276 sub compile_student_answers {
|
} |
} |
} |
} |
} |
} |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student'); |
'last student'); |
|
} |
} |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
return; |
return; |
Line 325 sub make_text_report {
|
Line 329 sub make_text_report {
|
} |
} |
close($file); |
close($file); |
if($something_has_been_output) { |
if($something_has_been_output) { |
$r->print('<p><a href="'.$filename.'">'. |
$r->print('<p class="LC_info"><a href="'.$filename.'">'. |
&mt('Your text file.'). |
&mt('Your text file'). |
'</a></p>'."\n"); |
'</a></p>'."\n"); |
$r->print('<script>'. |
$r->print('<script>'. |
'window.document.Statistics.stats_status.value="'. |
'window.document.Statistics.stats_status.value="'. |
&mt('Done compiling text file. See link below to download.'). |
&mt('Done compiling text file. See link below to download.'). |
'";</script>'); |
'";</script>'); |
} else { |
} else { |
$r->print('<h2>'. |
$r->print('<p class="LC_warning">' |
&mt("There is no essay or string response data to output for this survey.").'</h2>'); |
.&mt('There is no essay or string response data to output for this survey.') |
|
.'</p>'); |
} |
} |
$r->rflush(); |
$r->rflush(); |
return; |
return; |
Line 385 sub make_Excel_report {
|
Line 390 sub make_Excel_report {
|
my $warned_about_size = 0; |
my $warned_about_size = 0; |
foreach my $data (@{$data->{'responses'}}) { |
foreach my $data (@{$data->{'responses'}}) { |
if (length($data) > 255 && ! $warned_about_size) { |
if (length($data) > 255 && ! $warned_about_size) { |
$r->print('<p>'. |
$r->print('<p class="LC_warning">'. |
&mt('[_1]:[_2] responses to [_3] may be too long to fit Excel spreadsheet.', |
&mt('[_1]:[_2] responses to [_3] may be too long to fit Excel spreadsheet.', |
$resource->compTitle, |
$resource->compTitle, |
$resource->part_display($partid), |
$resource->part_display($partid), |
$respid). |
$respid). |
Line 404 sub make_Excel_report {
|
Line 409 sub make_Excel_report {
|
$worksheet->write_row($rows_output++,0, |
$worksheet->write_row($rows_output++,0, |
\@rowdata,$format->{'h4'}); |
\@rowdata,$format->{'h4'}); |
# |
# |
my @foils = sort(keys(%{$data->{'foil_responses'}})); |
my @foils = sort(keys(%{$respdata->{'_Foils'}})); |
foreach my $foilid (@foils) { |
foreach my $foilid (@foils) { |
my $foil_count = $data->{'foil_count'}->{$foilid}; |
my $foil_count = $data->{'foil_count'}->{$foilid}; |
my $foiltext = $respdata->{'_Foils'}->{$foilid}->{'text'}; |
my $foiltext = $respdata->{'_Foils'}->{$foilid}->{'text'}; |
Line 432 sub make_Excel_report {
|
Line 437 sub make_Excel_report {
|
my @rowdata = ('Foil Name','Foil Text','Frequency'); |
my @rowdata = ('Foil Name','Foil Text','Frequency'); |
$worksheet->write_row($rows_output++,0, |
$worksheet->write_row($rows_output++,0, |
\@rowdata,$format->{'h4'}); |
\@rowdata,$format->{'h4'}); |
foreach my $value (sort(keys(%{$data->{'foil_values'}}))) { |
my @foils = sort(keys(%{$respdata->{'_Foils'}})); |
|
foreach my $foilid (@foils) { |
undef(@rowdata); |
undef(@rowdata); |
my $foilid = $data->{'map'}->{$value}; |
my $value = $data->{'map_fv'}->{$foilid}; |
push(@rowdata,$respdata->{'_Foils'}->{$foilid}->{'name'}); |
push(@rowdata,$respdata->{'_Foils'}->{$foilid}->{'name'}); |
push(@rowdata,$respdata->{'_Foils'}->{$foilid}->{'text'}); |
push(@rowdata,$respdata->{'_Foils'}->{$foilid}->{'text'}); |
push(@rowdata,$data->{'foil_values'}->{$value}); |
push(@rowdata,$data->{'foil_values'}->{$value}); |
Line 445 sub make_Excel_report {
|
Line 451 sub make_Excel_report {
|
} #response ids |
} #response ids |
} # partids |
} # partids |
$workbook->close(); |
$workbook->close(); |
$r->print('<p><a href="'.$filename.'">'. |
$r->print('<p class="LC_info"><a href="'.$filename.'">'. |
&mt('Your Excel spreadsheet.'). |
&mt('Your Excel spreadsheet.'). |
'</a></p>'."\n"); |
'</a></p>'."\n"); |
$r->print('<script>'. |
$r->print('<script>'. |
'window.document.Statistics.stats_status.value="'. |
'window.document.Statistics.stats_status.value="'. |
&mt('Done compiling spreadsheet. See link below to download.'). |
&mt('Done compiling spreadsheet. See link below to download.'). |
'";</script>'); |
'";</script>'); |
$r->rflush(); |
$r->rflush(); |
return; |
return; |
Line 504 sub make_HTML_report {
|
Line 510 sub make_HTML_report {
|
} |
} |
} elsif (exists($data->{'foil_count'}) && |
} elsif (exists($data->{'foil_count'}) && |
exists($data->{'foil_responses'})) { |
exists($data->{'foil_responses'})) { |
$Str.='<tr><td colspan="3">'. |
$Str.='<tr>' |
'<table><tr>'; |
.'<td colspan="3">' |
|
.&Apache::loncommon::start_data_table() |
|
.&Apache::loncommon::start_data_table_header_row(); |
my $tmp = '<th>'.join('</th><th>', |
my $tmp = '<th>'.join('</th><th>', |
(&mt('Foil Name'), |
(&mt('Foil Name'), |
&mt('Foil Text'), |
&mt('Foil Text'), |
&mt('Option'), |
&mt('Option'), |
&mt('Frequency'), |
&mt('Frequency'), |
&mt('Percent'))).'</th></tr>'; |
&mt('Percent'))).'</th>' |
my @foils = sort(keys(%{$data->{'foil_responses'}})); |
.&Apache::loncommon::end_data_table_header_row(); |
|
my @foils = sort(keys(%{$ProblemData->{$partid.'.'.$respid}->{'_Foils'}})); |
foreach my $foilid (@foils) { |
foreach my $foilid (@foils) { |
my $prob_data = $ProblemData->{$partid.'.'.$respid}; |
my $prob_data = $ProblemData->{$partid.'.'.$respid}; |
my $foil_count = $data->{'foil_count'}->{$foilid}; |
my $foil_count = $data->{'foil_count'}->{$foilid}; |
my $foiltext = $prob_data->{'_Foils'}->{$foilid}->{'text'}; |
my $foiltext = $prob_data->{'_Foils'}->{$foilid}->{'text'}; |
my $foilname = $prob_data->{'_Foils'}->{$foilid}->{'name'}; |
my $foilname = $prob_data->{'_Foils'}->{$foilid}->{'name'}; |
my $rowspan = scalar(@{$prob_data->{'_Options'}}); |
my $rowspan = scalar(@{$prob_data->{'_Options'}}); |
my $preamble = '<tr>'. |
my $preamble = &Apache::loncommon::start_data_table_row(). |
'<td valign="top" rowspan="'.$rowspan.'">'. |
'<td valign="top" rowspan="'.$rowspan.'">'. |
$foilname.'</td>'. |
$foilname.'</td>'. |
'<td valign="top" rowspan="'.$rowspan.'">'. |
'<td valign="top" rowspan="'.$rowspan.'">'. |
Line 532 sub make_HTML_report {
|
Line 541 sub make_HTML_report {
|
'<td align="right">'.$count.'</td>'. |
'<td align="right">'.$count.'</td>'. |
'<td align="right">'. |
'<td align="right">'. |
sprintf('%.2f',100*$count/$foil_count).'%'. |
sprintf('%.2f',100*$count/$foil_count).'%'. |
'</td></tr>'.$/; |
'</td>'.&Apache::loncommon::end_data_table_row().$/; |
$preamble = '<tr>'; |
$preamble = &Apache::loncommon::continue_data_table_row(); #&Apache::loncommon::start_data_table_row(); |
} |
} |
} |
} |
$Str.=$tmp.'</table></td></tr>'; |
$Str.=$tmp.&Apache::loncommon::end_data_table() |
|
.'</td></tr>'; |
} elsif (exists($data->{'_count'}) && |
} elsif (exists($data->{'_count'}) && |
exists($data->{'foil_values'}) && |
exists($data->{'foil_values'}) && |
exists($data->{'map'})) { |
exists($data->{'map'})) { |
Line 544 sub make_HTML_report {
|
Line 554 sub make_HTML_report {
|
my $total = $data->{'_count'}; |
my $total = $data->{'_count'}; |
my $sum = 0; |
my $sum = 0; |
my $tmp; |
my $tmp; |
foreach my $value (sort(keys(%{$data->{'foil_values'}}))) { |
my @foils = sort(keys(%{$ProblemData->{$partid.'.'.$respid} |
|
->{'_Foils'}})); |
|
foreach my $foilid (@foils) { |
|
my $value = $data->{'map_fv'}->{$foilid}; |
my $count = $data->{'foil_values'}->{$value}; |
my $count = $data->{'foil_values'}->{$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'}; |
$tmp .= '<tr>'. |
$tmp .= &Apache::loncommon::start_data_table_row(). |
'<td>'.$foilname.'</td>'. |
'<td>'.$foilname.'</td>'. |
'<td>'.$foiltext.'</td>'. |
'<td>'.$foiltext.'</td>'. |
'<td align="right">'.$count.'</td>'. |
'<td align="right">'.$count.'</td>'. |
'<td align="right">'. |
'<td align="right">'. |
sprintf("%.2f",$count/$total*100).'%</td>'. |
sprintf("%.2f",$count/$total*100).'%</td>'. |
'</tr>'.$/; |
&Apache::loncommon::end_data_table_row().$/; |
} |
} |
$Str .= '<tr>'. |
$Str.='<tr>' |
'<th>'.&mt('Foil Name').'</th>'. |
.'<td colspan="3">' |
'<th>'.&mt('Text').'</th>'. |
.&Apache::loncommon::start_data_table() |
'<th>'.&mt('Freq').'</th>'. |
.&Apache::loncommon::start_data_table_header_row() |
'<th>'.&mt('Percent').'</th>'. |
.'<th>'.&mt('Foil Name').'</th>' |
'</tr>'.$/. |
.'<th>'.&mt('Text').'</th>' |
$tmp; |
.'<th>'.&mt('Frequency').'</th>' |
|
.'<th>'.&mt('Percent').'</th>' |
|
.&Apache::loncommon::end_data_table_header_row().$/ |
|
.$tmp |
|
.&Apache::loncommon::end_data_table() |
|
.'</td></tr>'; |
} |
} |
$Str.= '</table><hr />'; |
$Str.= '</table>'; |
$r->print($Str); |
$r->print($Str); |
$r->rflush(); |
$r->rflush(); |
} |
} |
Line 604 sub CreateInterface {
|
Line 621 sub CreateInterface {
|
) { |
) { |
$output_selector.='<option value="'.$output_format->{'name'}.'"'; |
$output_selector.='<option value="'.$output_format->{'name'}.'"'; |
if ($env{'form.output'} eq $output_format->{'name'}) { |
if ($env{'form.output'} eq $output_format->{'name'}) { |
$output_selector.=' selected'; |
$output_selector.=' selected="selected"'; |
} |
} |
$output_selector.= '>'.$output_format->{'text'}.'</option>'.$/; |
$output_selector.= '>'.$output_format->{'text'}.'</option>'.$/; |
} |
} |
$output_selector .= '</select>'.$/; |
$output_selector .= '</select>'.$/; |
$Str .= &Apache::lonhtmlcommon::breadcrumbs('Student Submission Reports'); |
|
$Str .= '<p>'; |
$Str .= '<p>'; |
$Str .= '<table cellspacing="5">'."\n"; |
$Str .= &Apache::loncommon::start_data_table(); |
$Str .= '<tr>'; |
$Str .= &Apache::loncommon::start_data_table_header_row(); |
$Str .= '<th>'.&mt('Sections').'</th>'; |
$Str .= '<th>'.&mt('Sections').'</th>'; |
$Str .= '<th>'.&mt('Groups').'</th>'; |
$Str .= '<th>'.&mt('Groups').'</th>'; |
$Str .= '<th>'.&mt('Access Status').'</th>'; |
$Str .= '<th>'.&mt('Access Status').'</th>'; |
$Str .= '<th>'.&mt('Output Format').'</th>'; |
$Str .= '<th>'.&mt('Output Format').'</th>'; |
$Str .= '<th>'.' '.'</th>'; |
$Str .= '<th>'.&mt('Options').'</th>'; |
$Str .= '</tr>'."\n"; |
$Str .= &Apache::loncommon::end_data_table_header_row(); |
# |
# |
$Str .= '<tr><td align="center">'."\n"; |
$Str .= &Apache::loncommon::start_data_table_row(); |
|
$Str .= '<td align="center">'."\n"; |
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5); |
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5); |
$Str .= '</td>'; |
$Str .= '</td>'; |
# |
# |
Line 637 sub CreateInterface {
|
Line 654 sub CreateInterface {
|
# Render problem checkbox |
# Render problem checkbox |
my $prob_checkbox = '<input type="checkbox" name="renderprob" '; |
my $prob_checkbox = '<input type="checkbox" name="renderprob" '; |
if (exists($env{'form.renderprob'}) && $env{'form.renderprob'} eq 'true') { |
if (exists($env{'form.renderprob'}) && $env{'form.renderprob'} eq 'true') { |
$prob_checkbox .= 'checked '; |
$prob_checkbox .= 'checked="checked" '; |
} |
} |
$prob_checkbox .= 'value="true" />'; |
$prob_checkbox .= 'value="true" />'; |
$Str .= '<td align="right" valign="top">'. |
$Str .= |
'<label><b>'. |
'<td valign="top">' |
&mt('Show problem [_1]',$prob_checkbox).'</b></label><br />'. |
.'<label>' |
'<label><b>'. |
.$prob_checkbox.&mt('Show problem') |
'</td>'; |
.'</label>' |
# |
.'</td>'; |
$Str .= '</tr>'."\n"; |
# |
$Str .= '</table>'."\n"; |
$Str .= &Apache::loncommon::end_data_table_row(); |
# |
$Str .= &Apache::loncommon::end_data_table(); |
$Str .= '<nobr>'.&mt('Status: [_1]', |
# |
'<input type="text" '. |
$Str .= '</p>'; |
'name="stats_status" size="60" value="" />'). |
|
'</nobr>'.'</p>'; |
|
## |
## |
return $Str; |
return $Str; |
} |
} |