--- loncom/interface/statistics/lonsubmissiontimeanalysis.pm 2003/12/10 23:06:57 1.5
+++ loncom/interface/statistics/lonsubmissiontimeanalysis.pm 2004/06/04 21:42:19 1.15
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonsubmissiontimeanalysis.pm,v 1.5 2003/12/10 23:06:57 matthew Exp $
+# $Id: lonsubmissiontimeanalysis.pm,v 1.15 2004/06/04 21:42:19 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -33,6 +33,7 @@ use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::loncoursedata();
use Apache::lonstatistics;
+use Apache::lonstathelpers;
use Apache::lonlocal;
use HTML::Entities();
use Time::Local();
@@ -44,29 +45,16 @@ my $plotcolors = ['#33ff00',
];
my @SubmitButtons = (
- { name => 'ProblemAnalyis',
+ { name => 'PrevProblemAnalysis',
+ text => 'Previous Problem' },
+ { name => 'ProblemAnalysis',
text => 'Analyze Problem Again' },
+ { name => 'NextProblemAnalysis',
+ text => 'Next Problem' },
{ name => 'SelectAnother',
- text => 'Choose a different resource' },
+ text => 'Choose a different Problem' },
);
-sub render_resource {
- my ($resource) = @_;
- ##
- ## Render the problem
- my $base;
- ($base,undef) = ($resource->{'src'} =~ m|(.*/)[^/]*$|);
- $base = "http://".$ENV{'SERVER_NAME'}.$base;
- my $rendered_problem =
- &Apache::lonnet::ssi_body($resource->{'src'});
- $rendered_problem =~ s/<\s*form\s*/)|<\/nop>|g;
- return ''.
- ''.
- $rendered_problem.
- ' |
';
-}
-
sub BuildSubmissionTimePage {
my ($r,$c)=@_;
#
@@ -79,7 +67,6 @@ sub BuildSubmissionTimePage {
#
&Apache::lonstatistics::PrepareClasslist();
#
- $r->print(''.&mt('Submission Time Plots').'
');
$r->print(&CreateInterface());
#
my @Students = @Apache::lonstatistics::Students;
@@ -88,18 +75,8 @@ sub BuildSubmissionTimePage {
$r->print('There are no students in the sections selected
');
}
#
- &Apache::loncoursedata::clear_internal_caches();
- if (exists($ENV{'form.ClearCache'}) ||
- exists($ENV{'form.updatecaches'}) ||
- (exists($ENV{'form.firstanalysis'}) &&
- $ENV{'form.firstanalysis'} ne 'no')) {
- &Apache::lonstatistics::Gather_Full_Student_Data($r);
- }
- if (! exists($ENV{'form.firstanalysis'})) {
- $r->print('');
- } else {
- $r->print('');
- }
+ my @CacheButtonHTML =
+ &Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
$r->rflush();
#
if (! exists($ENV{'form.problemchoice'}) ||
@@ -108,32 +85,55 @@ sub BuildSubmissionTimePage {
&mt('Graph Problem Submission Times').'" />');
$r->print(' 'x5);
$r->print(''.&mt('Please select a problem to analyze').'
');
- $r->print(&ProblemSelector());
+ $r->print(&Apache::lonstathelpers::ProblemSelector('.'));
} else {
foreach my $button (@SubmitButtons) {
$r->print('{'text'}).'" />');
$r->print(' 'x5);
}
+ foreach my $html (@CacheButtonHTML) {
+ $r->print($html.(' 'x5));
+ }
+ $r->rflush();
+ #
+ # Determine which problem we are to analyze
+ my $current_problem = &Apache::lonstathelpers::get_target_from_id
+ ($ENV{'form.problemchoice'});
+ #
+ my ($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
+ $ENV{'form.problemchoice'} =
+ &Apache::lonstathelpers::make_target_id($current_problem);
$r->print('');
#
$r->print('
');
- #
- my ($symb,$part) = &get_problem_symb(
- &Apache::lonnet::unescape($ENV{'form.problemchoice'}));
$r->rflush();
#
- my $resource = &get_resource_from_symb($symb);
+ my $resource = $current_problem->{'resource'};
if (! defined($resource)) {
$r->print('resource is undefined');
} else {
$r->print(''.$resource->{'title'}.'
');
$r->print(''.$resource->{'src'}.'
');
$r->rflush();
- $r->print(&render_resource($resource));
+ $r->print(&Apache::lonstathelpers::render_resource($resource));
+ $r->print('
');
$r->rflush();
- $r->print(&analyze_times($r,$resource,\@Students,$part));
+ $r->print(&analyze_times($r,$resource,\@Students,
+ $current_problem->{'part'}));
}
$r->print('
');
}
@@ -171,12 +171,12 @@ sub analyze_times {
my $SubData = &Apache::loncoursedata::get_response_time_data
($students,$resource->{'symb'},$part);
if (! defined($SubData) || ! ref($SubData)) {
- $html.= 'There is no submission data for this resource
';
+ $html.= 'There is no submission data for this problem
';
return $html;
}
my $NumSub = scalar(@{$SubData});
if (! @{$SubData}) {
- $html.= 'There is no submission data for this resource
';
+ $html.= 'There is no submission data for this problem
';
return $html;
}
# Process the data
@@ -241,7 +241,10 @@ sub analyze_times {
$Xlabel[$bincount] = '';
}
}
-
+ my $numstudents = scalar(@$students);
+ for (my $i=0;$i<=$#AnsData;$i++) {
+ $AnsData[$i] = int(100*($AnsData[$i]/$numstudents));
+ }
my $title = 'Number of Submissions and Number Correct';
my $xlabel;
(undef,undef,undef,$mday,$month,$year,$wday) = localtime($day_start);
@@ -250,19 +253,28 @@ sub analyze_times {
(undef,undef,undef,$mday,$month,$year,$wday) = localtime($endtime);
$xlabel .= $FullWeekDay[$wday].' '.
join(' ',($Month[$month],$mday,1900+$year));
+ my $width = 50+2*$bincount;
+ if ($width < 250) {
+ $width = 250;
+ }
$html .= &Apache::loncommon::DrawXYYGraph($title,
$xlabel,
- 'Number of Submissions per hour',
+ 'Submissions vs Time',
$plotcolors,
\@Xlabel,
\@Ydata,
0,$max,
\@AnsData,
- 0,scalar(@$students),
+ 0,100,
(xskip => $bins_per_day,
x_ticks => $bins_per_day,
x_tick_offset => $bins_per_day,
- width => 50+2*$bincount)
+ width => $width,
+ y1_label=>'Number of Submissions per hour',
+ y2_label=>'Percent of Students answering Correctly',
+ 'data.1.label'=>'Submissions per hour',
+ 'data.2.label'=>'Percent correct',
+ )
);
$html .= '
';
return $html;
@@ -316,11 +328,12 @@ sub CreateInterface {
##
## 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 .= ' | ';
$Str .= '
'."\n";
##
##
@@ -331,104 +344,17 @@ sub CreateInterface {
$Str .= '';
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
$Str .= ' | ';
- #
- my $only_seq_with_assessments = sub {
- my $s=shift;
- if ($s->{'num_assess'} < 1) {
- return 0;
- } else {
- return 1;
- }
- };
- &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
- $only_seq_with_assessments);
- ##
- ##
$Str .= ''."\n";
$Str .= '
'."\n";
+ #
+ $Str .= ''.&mt('Status: [_1]',
+ '').
+ ''.'
';
+ ##
return $Str;
}
-sub ProblemSelector {
- my $Str;
- $Str = "\n";
- return $Str;
-}
-
-#########################################################
-#########################################################
-##
-## Misc functions (ought to be put in a module)
-##
-#########################################################
-#########################################################
-sub get_problem_symb {
- my $problemstring = shift();
- my ($symb,$partid) = ($problemstring=~ /^(.*):([^:]*)$/);
- return ($symb,$partid);
-}
-
-sub get_resource_from_symb {
- my ($symb) = @_;
- foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
- foreach my $res (@{$seq->{'contents'}}) {
- if ($res->{'symb'} eq $symb) {
- return $res;
- }
- }
- }
- return undef;
-}
-
1;
__END__