version 1.31, 2008/12/11 14:55:27
|
version 1.38, 2020/11/18 15:31:40
|
Line 31 use strict;
|
Line 31 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::lonstathelpers; |
use Apache::lonstathelpers; |
Line 66 sub BuildSubmissionTimePage {
|
Line 67 sub BuildSubmissionTimePage {
|
# |
# |
&Apache::lonstatistics::PrepareClasslist(); |
&Apache::lonstatistics::PrepareClasslist(); |
# |
# |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Submission Time Plots')); |
|
&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('<div class="LC_warning">' |
$r->print('<div class="LC_warning">' |
.&mt('There are no students in the sections selected.' |
.&mt('There are no students in the sections selected.') |
.'</div>') |
.'</div>' |
); |
); |
} |
} |
# |
# |
Line 102 sub BuildSubmissionTimePage {
|
Line 105 sub BuildSubmissionTimePage {
|
$r->rflush(); |
$r->rflush(); |
# |
# |
# Determine which problem we are to analyze |
# Determine which problem we are to analyze |
my $current_problem = &Apache::lonstathelpers::get_target_from_id |
my ($navmap,$current_problem) = &get_current_problem(); # need to retrieve $navmap |
($env{'form.problemchoice'}); |
# to support $resource->* calls |
# |
# for src and compTitle (below) |
my ($navmap,$prev,$curr,$next) = |
|
&Apache::lonstathelpers::get_prev_curr_next($current_problem, |
|
'.', |
|
'part'); |
|
if (exists($env{'form.PrevProblemAnalysis'}) && defined($prev)) { |
|
$current_problem = $prev; |
|
} elsif (exists($env{'form.NextProblemAnalysis'}) && defined($next)) { |
|
$current_problem = $next; |
|
} else { |
|
$current_problem = $curr; |
|
} |
|
# |
# |
# Store the current problem choice and send it out in the form |
# Store the current problem choice and send it out in the form |
$env{'form.problemchoice'} = |
$env{'form.problemchoice'} = |
Line 135 sub BuildSubmissionTimePage {
|
Line 127 sub BuildSubmissionTimePage {
|
} else { |
} else { |
$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('<h4>'. |
$r->print('<p>'. |
&Apache::lonstatistics::section_and_enrollment_description(). |
&Apache::lonstatistics::section_and_enrollment_description(). |
'</h4>'); |
'</p>'); |
$r->rflush(); |
$r->rflush(); |
$r->print('<hr />'); |
|
$r->print(&Apache::lonstathelpers::render_resource($resource)); |
$r->print(&Apache::lonstathelpers::render_resource($resource)); |
$r->print('<hr /><br />'); |
$r->print('<br />'); |
$r->rflush(); |
$r->rflush(); |
if (@Students) { |
if (@Students) { |
$r->print(&analyze_times($r,$resource->symb,\@Students, |
$r->print(&analyze_times($r,$resource->symb,\@Students, |
Line 152 sub BuildSubmissionTimePage {
|
Line 143 sub BuildSubmissionTimePage {
|
} |
} |
} |
} |
|
|
|
sub get_current_problem { |
|
my $current_problem = &Apache::lonstathelpers::get_target_from_id |
|
($env{'form.problemchoice'}); |
|
my ($navmap,$prev,$curr,$next) = |
|
&Apache::lonstathelpers::get_prev_curr_next($current_problem, |
|
'.', |
|
'part'); |
|
if (exists($env{'form.PrevProblemAnalysis'}) && defined($prev)) { |
|
$current_problem = $prev; |
|
} elsif (exists($env{'form.NextProblemAnalysis'}) && defined($next)) { |
|
$current_problem = $next; |
|
} else { |
|
$current_problem = $curr; |
|
} |
|
return ($navmap,$current_problem); |
|
} |
|
|
######################################################### |
######################################################### |
######################################################### |
######################################################### |
## |
## |
Line 217 sub analyze_times {
|
Line 225 sub analyze_times {
|
my @Ydata=(0); # number of submissions |
my @Ydata=(0); # number of submissions |
my @AnsData=(0); # number of correct submissions |
my @AnsData=(0); # number of correct submissions |
my @Xlabel=($WeekDay[$wday]); # Labels of itmes |
my @Xlabel=($WeekDay[$wday]); # Labels of itmes |
my @BinEnd; # The end time of each bin |
my @BinEnd=($endtime); # The end time of each bin |
my $cumulative_answers = 0; # The sum of @AnsData |
my $cumulative_answers = 0; # The sum of @AnsData |
my %students; # which students have attempted the problem? |
my %students; # which students have attempted the problem? |
# |
# |
Line 229 sub analyze_times {
|
Line 237 sub analyze_times {
|
$Ydata[$bincount] = 0; |
$Ydata[$bincount] = 0; |
$AnsData[$bincount] = 0; |
$AnsData[$bincount] = 0; |
$endtime += $binsize; |
$endtime += $binsize; |
push(@BinEnd,$endtime); |
$BinEnd[$bincount] = $endtime; |
if ($bincount % (86400/$binsize) == 0) { |
if ($bincount % (86400/$binsize) == 0) { |
$wday++; |
$wday++; |
$wday %= 7; |
$wday %= 7; |
Line 251 sub analyze_times {
|
Line 259 sub analyze_times {
|
$Ydata[$bincount]=0; |
$Ydata[$bincount]=0; |
$AnsData[$bincount]=0; |
$AnsData[$bincount]=0; |
$endtime += $binsize; |
$endtime += $binsize; |
push(@BinEnd,$endtime); |
$BinEnd[$bincount]=$endtime; |
if ($bincount % (86400/$binsize) == 0) { |
if ($bincount % (86400/$binsize) == 0) { |
$wday ++; |
$wday ++; |
$wday %= 7; |
$wday %= 7; |
Line 274 sub analyze_times {
|
Line 282 sub analyze_times {
|
} |
} |
# |
# |
# Build the data table |
# Build the data table |
$htmltable = '<p>'. |
$htmltable = '<br><h3>'.&mt('Student submission data').'</h3><p>'. |
'<table rules="groups" frame="border" '. |
&Apache::loncommon::start_data_table(). |
'summary="Student submission data">'. |
&Apache::loncommon::start_data_table_header_row(). |
'<thead>'. |
&Apache::loncommon::start_data_table_row(). |
'<tr>'. |
|
'<th valign="bottom">'.&mt('Begin').'</th>'. |
'<th valign="bottom">'.&mt('Begin').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
|
'<th valign="bottom">'.&mt('End').'</th>'. |
'<th valign="bottom">'.&mt('End').'</th>'. |
'<th valign="bottom">'.&mt('Submissions (plotted)').'</th>'. |
'<th valign="bottom">'.&mt('Submissions (plotted)').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
|
'<th valign="bottom">'.&mt('Correct Submissions (not plotted)').'</th>'. |
'<th valign="bottom">'.&mt('Correct Submissions (not plotted)').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
|
'<th valign="bottom">'.&mt('Cumulative Correct of those attempting the problem (not plotted)').'</th>'. |
'<th valign="bottom">'.&mt('Cumulative Correct of those attempting the problem (not plotted)').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
|
'<th valign="bottom">'.&mt('Cumulative Percent Correct of those attempting the problem (not plotted)').'</th>'. |
'<th valign="bottom">'.&mt('Cumulative Percent Correct of those attempting the problem (not plotted)').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
|
'<th valign="bottom">'.&mt('Cumulative Percent Correct of selected students (plotted)').'</th>'. |
'<th valign="bottom">'.&mt('Cumulative Percent Correct of selected students (plotted)').'</th>'. |
'</tr>'. |
&Apache::loncommon::end_data_table_row(). |
'</thead>'. |
&Apache::loncommon::end_data_table_header_row(). |
'<tbody>'; |
'<tbody>'; |
my @CumulativeCorrect=(0); |
my @CumulativeCorrect=(0); |
my @corr_as_percent_of_selected; |
my @corr_as_percent_of_selected; |
Line 305 sub analyze_times {
|
Line 307 sub analyze_times {
|
sprintf('%3.1f',100*$CumulativeCorrect[$i]/scalar(@$students)); |
sprintf('%3.1f',100*$CumulativeCorrect[$i]/scalar(@$students)); |
if ($Ydata[$i] != 0) { |
if ($Ydata[$i] != 0) { |
next if (! defined($BinEnd[$i]) || $BinEnd[$i] == 0); |
next if (! defined($BinEnd[$i]) || $BinEnd[$i] == 0); |
$htmltable .= |
$htmltable .= |
'<tr>'. |
&Apache::loncommon::start_data_table_row(). |
'<td align="right"><span class="LC_nobreak">'. |
'<td align="right"><span class="LC_nobreak">'. |
&Apache::lonlocal::locallocaltime($BinEnd[$i]-$binsize). |
&Apache::lonlocal::locallocaltime($BinEnd[$i]-$binsize). |
'</span></td>'. |
'</span></td>'. |
'<td> </td>'. |
|
'<td align="right"><span class="LC_nobreak">'. |
'<td align="right"><span class="LC_nobreak">'. |
&Apache::lonlocal::locallocaltime($BinEnd[$i]).'</td>'. |
&Apache::lonlocal::locallocaltime($BinEnd[$i]).'</td>'. |
'</span></td>'. |
'</span></td>'. |
'<td align="right">'.$Ydata[$i].(' 'x3).'</td>'. |
'<td align="right">'.$Ydata[$i].(' 'x3).'</td>'. |
'<td> </td>'. |
|
'<td align="right">'.$AnsData[$i].(' 'x3).'</td>'. |
'<td align="right">'.$AnsData[$i].(' 'x3).'</td>'. |
'<td> </td>'. |
|
'<td align="right">'.$CumulativeCorrect[$i].'</td>'. |
'<td align="right">'.$CumulativeCorrect[$i].'</td>'. |
'<td> </td>'. |
|
'<td align="right">'.$corr_as_percent_of_answering[$i].'</td>'. |
'<td align="right">'.$corr_as_percent_of_answering[$i].'</td>'. |
'<td> </td>'. |
|
'<td align="right">'.$corr_as_percent_of_selected[$i].'</td>'. |
'<td align="right">'.$corr_as_percent_of_selected[$i].'</td>'. |
'</tr>'.$/; |
&Apache::loncommon::end_data_table_row().$/; |
} |
} |
} |
} |
$htmltable .= '</tbody></table></p>'; |
$htmltable .= '</tbody>'.&Apache::loncommon::end_data_table().'</p>'; |
# |
# |
# Build the plot |
# Build the plot |
my $title = '';#'Number of Submissions and Number Correct'; |
my $title = '';#'Number of Submissions and Number Correct'; |
Line 410 sub CreateInterface {
|
Line 407 sub CreateInterface {
|
## |
## |
## Build the menu |
## Build the menu |
my $Str = ''; |
my $Str = ''; |
$Str .= &Apache::lonhtmlcommon::breadcrumbs('Submission Time Plots'); |
|
$Str .= '<p>'; |
$Str .= '<p>'; |
$Str .= &Apache::loncommon::start_data_table(); |
$Str .= &Apache::loncommon::start_data_table(); |
$Str .= &Apache::loncommon::start_data_table_header_row(); |
$Str .= &Apache::loncommon::start_data_table_header_row(); |
Line 436 sub CreateInterface {
|
Line 432 sub CreateInterface {
|
$Str .= &Apache::loncommon::end_data_table_row(); |
$Str .= &Apache::loncommon::end_data_table_row(); |
$Str .= &Apache::loncommon::end_data_table(); |
$Str .= &Apache::loncommon::end_data_table(); |
# |
# |
$Str .= '<p><span class="LC_nobreak">' |
|
.&mt('Status: [_1]', |
|
'<input type="text" name="stats_status"' |
|
.' size="60" value="" readonly="readonly" />') |
|
.'</span></p>'; |
|
$Str .= '</p>'; |
$Str .= '</p>'; |
## |
## |
return $Str; |
return $Str; |