--- loncom/interface/lonstatistics.pm 2003/05/29 21:38:32 1.72
+++ loncom/interface/lonstatistics.pm 2003/10/21 20:24:52 1.87
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstatistics.pm,v 1.72 2003/05/29 21:38:32 matthew Exp $
+# $Id: lonstatistics.pm,v 1.87 2003/10/21 20:24:52 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -83,6 +83,7 @@ use Apache::lonproblemstatistics();
use Apache::lonstudentassessment();
use Apache::lonpercentage;
use Apache::lonmysql;
+use Apache::lonlocal;
use Time::HiRes;
#######################################################
@@ -519,10 +520,8 @@ sub PrepareCourseData {
my $name_length = length($seq->{'title'});
my $num_parts = $seq->{'num_assess_parts'};
#
- # The number of columns needed for the summation text:
- # " 1/5" = 1+3 columns, " 10/99" = 1+5 columns
- my $sum_length = 1+1+2*(length($num_parts));
- my $num_col = $num_parts+$sum_length;
+ # Use 3 digits for each the sum and total, which means 7 total...
+ my $num_col = $num_parts+7;
if ($num_col < $name_length) {
$num_col = $name_length;
}
@@ -799,6 +798,150 @@ sub SectionSelect {
return $Str;
}
+#######################################################
+#######################################################
+
+=pod
+
+=item &CreateAndParseOutputSelector()
+
+Construct a selection list of options for output and parse output selections.
+
+=cut
+
+#######################################################
+#######################################################
+sub OutputDescriptions {
+ my (@OutputOptions) = @_;
+ my $Str = '';
+ $Str .= "
Output Modes
\n";
+ $Str .= "
\n";
+ foreach my $outputmode (@OutputOptions) {
+ $Str .="
".$outputmode->{'name'}."
\n";
+ $Str .="
".$outputmode->{'description'}."
\n";
+ }
+ $Str .= "
\n";
+ return $Str;
+}
+
+sub CreateAndParseOutputSelector {
+ my ($elementname,$default,@OutputOptions) = @_;
+ my $output_mode;
+ my $show;
+ my $Str = '';
+ #
+ # Format for output options is 'mode, restrictions';
+ my $selected = $default;
+ if (exists($ENV{'form.'.$elementname})) {
+ if (ref($ENV{'form.'.$elementname} eq 'ARRAY')) {
+ $selected = $ENV{'form.'.$elementname}->[0];
+ } else {
+ $selected = $ENV{'form.'.$elementname};
+ }
+ }
+ #
+ # Set package variables describing output mode
+ $output_mode = 'html';
+ $show = 'all';
+ foreach my $option (@OutputOptions) {
+ next if ($option->{'value'} ne $selected);
+ $output_mode = $option->{'mode'};
+ $show = $option->{'show'};
+ }
+ #
+ # Build the form element
+ $Str = qq/";
+ return ($Str,$output_mode,$show);
+}
+
+###############################################
+###############################################
+
+=pod
+
+=item &Gather_Student_Data()
+
+Ensures all student data is up to date.
+
+=cut
+
+###############################################
+###############################################
+sub Gather_Student_Data {
+ my ($r) = @_;
+ my $c = $r->connection();
+ #
+ &Apache::loncoursedata::clear_internal_caches();
+ #
+ my @Sequences = &Apache::lonstatistics::Sequences_with_Assess();
+ #
+ my @Students = @Apache::lonstatistics::Students;
+ #
+ # Open the progress window
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
+ ($r,'Statistics Compilation Status',
+ 'Statistics Compilation Progress', scalar(@Students));
+ #
+ while (my $student = shift @Students) {
+ return if ($c->aborted());
+ my ($status,undef) = &Apache::loncoursedata::ensure_current_data
+ ($student->{'username'},$student->{'domain'},
+ $ENV{'request.course.id'});
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+ &mt('last student'));
+ }
+ &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
+ $r->rflush();
+}
+
+###############################################
+###############################################
+
+=pod
+
+=item &Gather_Full_Student_Data()
+
+Ensures all student data is up to date.
+
+=cut
+
+###############################################
+###############################################
+sub Gather_Full_Student_Data {
+ my ($r) = @_;
+ my $c = $r->connection();
+ #
+ &Apache::loncoursedata::clear_internal_caches();
+ #
+ my @Students = @Apache::lonstatistics::Students;
+ #
+ # Open the progress window
+ my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
+ ($r,&mt('Student Data Compilation Status'),
+ &mt('Student Data Compilation Progress'), scalar(@Students));
+ #
+ while (my $student = shift @Students) {
+ return if ($c->aborted());
+ my ($status,undef) = &Apache::loncoursedata::ensure_current_full_data
+ ($student->{'username'},$student->{'domain'},
+ $ENV{'request.course.id'});
+ &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+ &mt('last student'));
+ }
+ &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
+ $r->rflush();
+}
+
##################################################
##################################################
sub DisplayClasslist {
@@ -807,6 +950,46 @@ sub DisplayClasslist {
my @Fields = ('fullname','username','domain','id','section');
#
my $Str='';
+ if (! @Students) {
+ if ($SelectedSections[0] eq 'all') {
+ if (lc($ENV{'form.Status'}) eq 'any') {
+ $Str .= '
There are no previously enrolled students '.
+ 'in '.$sections.'.
';
+ }
+ }
+ $Str.= ''.
+ 'Return to the chart.';
+ $r->print($Str);
+ $r->rflush();
+ return;
+ }
+
+ # "Click" is asinine but it is probably not my place to change the world.
+ $Str .= '
Click on a students name or username to view their chart
';
$Str .= '
'."\n";
$Str .= '
'."\n";
foreach my $field (@Fields) {
@@ -827,7 +1010,7 @@ sub DisplayClasslist {
#
foreach my $field (@Fields) {
$Str .= '
';
- if ($field eq 'fullname') {
+ if ($field eq 'fullname' || $field eq 'username') {
$Str .= '
'."\n";
- $Str .= ''."\n";
+ $Str .="\n";
#
return $Str;
}
@@ -933,73 +1118,67 @@ sub handler {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['sort','reportSelected',
'SelectedStudent']);
- if (! exists($ENV{'form.reportSelected'})) {
- $ENV{'form.reportSelected'} = 'student_assessment';
- }
#
# Give the LON-CAPA page header
$r->print(&Apache::lonhtmlcommon::Title('Course Statistics and Charts'));
$r->rflush();
+ #
+ # Either print out a menu for them or send them to a report
+ if (! exists($ENV{'form.reportSelected'}) ||
+ $ENV{'form.reportSelected'} eq '') {
+ $r->print(&CreateMainMenu());
+ } else {
#
- if (! &Apache::lonmysql::verify_sql_connection()) {
- my $serveradmin = $r->dir_config('lonAdmEMail');
- $r->print(<Unable to connect to database!
-
-Please notify the server administrator $serveradmin.
-
-Course Statistics and Charts cannot be retrieved until the database is
-restarted. Your data is intact but cannot be displayed at this time.
-