--- loncom/interface/statistics/lonsubmissiontimeanalysis.pm 2005/02/28 20:16:03 1.18
+++ loncom/interface/statistics/lonsubmissiontimeanalysis.pm 2012/12/17 02:20:13 1.36
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonsubmissiontimeanalysis.pm,v 1.18 2005/02/28 20:16:03 matthew Exp $
+# $Id: lonsubmissiontimeanalysis.pm,v 1.36 2012/12/17 02:20:13 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -28,16 +28,16 @@
package Apache::lonsubmissiontimeanalysis;
use strict;
-use Apache::lonnet();
+use Apache::lonnet;
use Apache::loncommon();
use Apache::lonhtmlcommon();
+use Apache::lonquickgrades();
use Apache::loncoursedata();
use Apache::lonstatistics;
use Apache::lonstathelpers;
use Apache::lonlocal;
use HTML::Entities();
use Time::Local();
-use Spreadsheet::WriteExcel();
my $plotcolors = ['#33ff00',
'#ff33cc', '#990000', '#aaaa66', '#663399', '#ff9933',
@@ -67,25 +67,32 @@ sub BuildSubmissionTimePage {
#
&Apache::lonstatistics::PrepareClasslist();
#
+ $r->print(&Apache::lonhtmlcommon::breadcrumbs('Submission Time Plots'));
+ &Apache::lonquickgrades::startGradeScreen($r,'statistics');
$r->print(&CreateInterface());
#
my @Students = @Apache::lonstatistics::Students;
#
if (@Students < 1) {
- $r->print('
There are no students in the sections selected ');
+ $r->print(''
+ .&mt('There are no students in the sections selected.')
+ .'
'
+ );
}
#
my @CacheButtonHTML =
&Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
$r->rflush();
#
- if (! exists($ENV{'form.problemchoice'}) ||
- exists($ENV{'form.SelectAnother'})) {
- $r->print(' ');
- $r->print(' 'x5);
+ if (! exists($env{'form.problemchoice'}) ||
+ exists($env{'form.SelectAnother'})) {
+ my $submit_button = ' ';
+ &mt('Generate Graph').'" />';
+ $r->print($submit_button.' 'x5);
$r->print(''.&mt('Please select a problem to analyze').' ');
- $r->print(&Apache::lonstathelpers::problem_selector('.'));
+ $r->print(&Apache::lonstathelpers::problem_selector('.',
+ $submit_button));
} else {
foreach my $button (@SubmitButtons) {
$r->print(' print(' ');
+ $env{'form.problemchoice'}.'" />');
#
$r->print(' ');
$r->rflush();
#
my $resource = $current_problem->{'resource'};
if (! defined($resource)) {
- $r->print('resource is undefined');
+ $r->print(''
+ .&mt('Resource is undefined.')
+ .'
'
+ );
} else {
$r->print(''.$resource->compTitle.' ');
$r->print(''.$resource->src.' ');
+ $r->print(''.
+ &Apache::lonstatistics::section_and_enrollment_description().
+ '
');
$r->rflush();
$r->print(&Apache::lonstathelpers::render_resource($resource));
$r->print(' ');
$r->rflush();
- $r->print(&analyze_times($r,$resource->symb,\@Students,
- $current_problem->{'part'}));
+ if (@Students) {
+ $r->print(&analyze_times($r,$resource->symb,\@Students,
+ $current_problem->{'part'}));
+ }
}
$r->print(' ');
}
@@ -170,16 +185,21 @@ sub analyze_times {
my $html; # holds results of analysis
# Get the data
my $SubData = &Apache::loncoursedata::get_response_time_data
- (\@Apache::lonstatistics::SelectedSections,
+ ([&Apache::lonstatistics::get_selected_sections()],
+ [&Apache::lonstatistics::get_selected_groups()],
$Apache::lonstatistics::enrollment_status,
$symb,$part);
if (! defined($SubData) || ! ref($SubData)) {
- $html.= 'There is no submission data for this problem at all ';
+ $html.= ''
+ .&mt('There is no submission data for this problem at all.')
+ .'
';
return $html;
}
my $NumSub = scalar(@{$SubData});
if (! @{$SubData}) {
- $html.= 'There is no submission data for this problem ';
+ $html.= ''
+ .&mt('There is no submission data for this problem.')
+ .'
';
return $html;
}
# Process the data
@@ -201,6 +221,7 @@ sub analyze_times {
my @Xlabel=($WeekDay[$wday]); # Labels of itmes
my @BinEnd; # The end time of each bin
my $cumulative_answers = 0; # The sum of @AnsData
+ my %students; # which students have attempted the problem?
#
foreach my $row (@$SubData) {
my $subtime = &get_time_from_row($row);
@@ -223,6 +244,7 @@ sub analyze_times {
$max = $Ydata[$bincount] if ($max < $Ydata[$bincount]);
$AnsData[$bincount] += &successful_submission($row);
$cumulative_answers += &successful_submission($row);
+ $students{$row->[&Apache::loncoursedata::RT_student_id()]}++;
}
#
# Pad the data to a full day
@@ -240,7 +262,7 @@ sub analyze_times {
$Xlabel[$bincount] = '';
}
}
- my $numstudents = scalar(@$students);
+ my $numstudents = scalar(keys(%students));
#
# Determine a nice maximum value to use
foreach my $maximum (10,15,20,25,30,40,50,60,70,80,90,100,
@@ -254,47 +276,48 @@ sub analyze_times {
}
#
# Build the data table
- $htmltable = ''.
- '
'.
- ''.
- ''.
+ $htmltable = ''.&mt('Student submission data').' '.
+ &Apache::loncommon::start_data_table().
+ &Apache::loncommon::start_data_table_header_row().
+ &Apache::loncommon::start_data_table_row().
'
'.&mt('Begin').' '.
- ''.(' 'x3).' '.
''.&mt('End').' '.
- ''.&mt('Submissions').' '.
- ''.(' 'x3).' '.
- ''.&mt('Correct Submissions').' '.
- ''.(' 'x3).' '.
- ''.&mt('Cumulative Percent Correct').' '.
- ' '.
- ' '.
+ ''.&mt('Submissions (plotted)').' '.
+ ''.&mt('Correct Submissions (not plotted)').' '.
+ ''.&mt('Cumulative Correct of those attempting the problem (not plotted)').' '.
+ ''.&mt('Cumulative Percent Correct of those attempting the problem (not plotted)').' '.
+ ''.&mt('Cumulative Percent Correct of selected students (plotted)').' '.
+ &Apache::loncommon::end_data_table_row().
+ &Apache::loncommon::end_data_table_header_row().
'';
my @CumulativeCorrect=(0);
- my @CumulativeCorrectPercent;
+ my @corr_as_percent_of_selected;
+ my @corr_as_percent_of_answering;
for (my $i=0;$i<=$#Ydata;$i++) {
$CumulativeCorrect[$i]=$CumulativeCorrect[-1]+$AnsData[$i];
- $CumulativeCorrectPercent[$i] = (int(100*$CumulativeCorrect[$i]/$numstudents));
+ $corr_as_percent_of_answering[$i] =
+ sprintf('%3.1f',100*$CumulativeCorrect[$i]/$numstudents);
+ $corr_as_percent_of_selected[$i] =
+ sprintf('%3.1f',100*$CumulativeCorrect[$i]/scalar(@$students));
if ($Ydata[$i] != 0) {
next if (! defined($BinEnd[$i]) || $BinEnd[$i] == 0);
- $htmltable .=
- ''.
- ''.
+ $htmltable .=
+ &Apache::loncommon::start_data_table_row().
+ ''.
&Apache::lonlocal::locallocaltime($BinEnd[$i]-$binsize).
- ' '.
- ' '.
- ''.
+ ' '.
+ ''.
&Apache::lonlocal::locallocaltime($BinEnd[$i]).' '.
- ' '.
+ ''.
''.$Ydata[$i].(' 'x3).' '.
- ' '.
''.$AnsData[$i].(' 'x3).' '.
- ' '.
- ''.$CumulativeCorrectPercent[$i].' '.
- ' '.$/;
+ ''.$CumulativeCorrect[$i].' '.
+ ''.$corr_as_percent_of_answering[$i].' '.
+ ''.$corr_as_percent_of_selected[$i].' '.
+ &Apache::loncommon::end_data_table_row().$/;
}
}
- $htmltable .= '
';
+ $htmltable .= ''.&Apache::loncommon::end_data_table().'';
#
# Build the plot
my $title = '';#'Number of Submissions and Number Correct';
@@ -316,7 +339,7 @@ sub analyze_times {
$plotcolors,
\@Xlabel,
\@Ydata,0,$max,
- \@CumulativeCorrectPercent,0,100,
+ \@corr_as_percent_of_selected,0,100,
(xskip => $bins_per_day,
x_ticks => $bins_per_day,
x_tick_offset => $bins_per_day,
@@ -337,7 +360,6 @@ sub successful_submission {
return $row->[&Apache::loncoursedata::RT_awarded()];
}
return undef;
- return 0;
}
sub get_time_from_row {
@@ -373,36 +395,38 @@ sub Process_Row {
sub CreateInterface {
##
## Environment variable initialization
- if (! exists$ENV{'form.AnalyzeOver'}) {
- $ENV{'form.AnalyzeOver'} = 'Tries';
+ if (! exists$env{'form.AnalyzeOver'}) {
+ $env{'form.AnalyzeOver'} = 'Tries';
}
##
## Build the menu
my $Str = '';
- $Str .= &Apache::lonhtmlcommon::breadcrumbs(undef,'Submission Time Plots');
$Str .= '';
- $Str .= '
'."\n";
- $Str .= '';
- $Str .= ''.&mt('Sections').' ';
- $Str .= ''.&mt('Enrollment Status').' ';
- $Str .= ' '."\n";
+ $Str .= &Apache::loncommon::start_data_table();
+ $Str .= &Apache::loncommon::start_data_table_header_row();
+ $Str .= ''.&mt('Sections').' ';
+ $Str .= ''.&mt('Groups').' ';
+ $Str .= ''.&mt('Access Status').' ';
+ $Str .= &Apache::loncommon::end_data_table_header_row();
##
##
- $Str .= ''."\n";
+ $Str .= &Apache::loncommon::start_data_table_row();
+ $Str .= ' '."\n";
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',4);
$Str .= ' ';
#
+ $Str .= ''."\n";
+ $Str .= &Apache::lonstatistics::GroupSelect('Group','multiple',4);
+ $Str .= ' ';
+ #
$Str .= '';
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,4);
$Str .= ' ';
#
- $Str .= ' '."\n";
- $Str .= '
'."\n";
+ $Str .= &Apache::loncommon::end_data_table_row();
+ $Str .= &Apache::loncommon::end_data_table();
#
- $Str .= ''.&mt('Status: [_1]',
- ' ').
- ' '.'';
+ $Str .= '';
##
return $Str;
}