[LON-CAPA-cvs] cvs: loncom /interface lonstatistics.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Tue, 18 Feb 2003 20:27:33 -0000
matthew Tue Feb 18 15:27:33 2003 EDT
Modified files:
/loncom/interface lonstatistics.pm
Log:
Untested but not borken.
Added POD documentation.
Removed 'use HTML::TokeParser'. May need to re-introduce.
Added package variables for classlist, &clear_classlist_variables(),
and &PrepareClasslist(). More changes to these routines are inevitable.
Index: loncom/interface/lonstatistics.pm
diff -u loncom/interface/lonstatistics.pm:1.58 loncom/interface/lonstatistics.pm:1.59
--- loncom/interface/lonstatistics.pm:1.58 Sun Jan 12 18:45:47 2003
+++ loncom/interface/lonstatistics.pm Tue Feb 18 15:27:33 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# (Publication Handler
#
-# $Id: lonstatistics.pm,v 1.58 2003/01/12 23:45:47 minaeibi Exp $
+# $Id: lonstatistics.pm,v 1.59 2003/02/18 20:27:33 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -35,6 +35,35 @@
#
###
+=pod
+
+=head1 NAME
+
+lonstatistics
+
+=head1 SYNOPSIS
+
+Main handler for statistics and chart.
+
+=head1 PACKAGES USED
+
+use strict;
+use Apache::Constants qw(:common :http);
+use Apache::lonnet();
+use Apache::lonhomework;
+use Apache::loncommon;
+use Apache::loncoursedata;
+use Apache::lonhtmlcommon;
+use Apache::lonproblemanalysis;
+use Apache::lonproblemstatistics;
+use Apache::lonstudentassessment;
+use Apache::lonpercentage;
+use GDBM_File;
+
+=over 4
+
+=cut
+
package Apache::lonstatistics;
use strict;
@@ -48,9 +77,162 @@
use Apache::lonproblemstatistics;
use Apache::lonstudentassessment;
use Apache::lonpercentage;
-use HTML::TokeParser;
use GDBM_File;
+my @FullClasslist;
+my @Students;
+my @Sections;
+my $curr_student;
+my $prev_student;
+my $next_student;
+
+#######################################################
+#######################################################
+
+=pod
+
+=item &clear_classlist_variables()
+
+undef the following package variables:
+
+=over
+
+=item @FullClasslist The full classlist
+
+=item @Students The students we are concerned with for this invocation
+
+=item @Sections The sections available in this class
+
+=item $curr_student The student currently being examined
+
+=item $prev_student The student previous in the classlist
+
+=item $next_student The student next in the classlist
+
+=back
+
+=cut
+
+#######################################################
+#######################################################
+sub clear_classlist_variables {
+ undef(@FullClasslist);
+ undef(@Students);
+ undef(@Sections);
+ undef($curr_student);
+ undef($prev_student);
+ undef($next_student);
+}
+
+#######################################################
+#######################################################
+
+=pod
+
+=item &PrepareClasslist()
+
+Build up the classlist information. The classlist information is kept in
+the following package variables:
+
+=over
+
+=item @FullClasslist The full classlist
+
+=item @Students The students we are concerned with for this invocation
+
+=item @Sections The sections available in this class
+
+=item $curr_student The student currently being examined
+
+=item $prev_student The student previous in the classlist
+
+=item $next_student The student next in the classlist
+
+=back
+
+$curr_student, $prev_student, and $next_student may not be defined, depending
+upon the calling context.
+
+=cut
+
+#######################################################
+#######################################################
+sub PrepareClasslist {
+ my $r = shift;
+ my %Sections;
+ &clear_classlist_variables();
+ #
+ # Retrieve the classlist
+ my $cid = $ENV{'request.course.id'};
+ my $cdom = $ENV{'course.'.$cid.'.domain'};
+ my $cnum = $ENV{'course.'.$cid.'.num'};
+ my ($classlist,$field_names) = &Apache::loncoursedata::get_classlist($cid,
+ $cdom,$cnum);
+ my %valid_section;
+ if (exists($ENV{'form.Section'}) && $ENV{'form.Section'} !~ /(all|any)/) {
+ if (ref($ENV{'form.Section'})) {
+ foreach (@$ENV{'form.section'}) {
+ $valid_section{$_}++;
+ }
+ } else {
+ $valid_section{$_}++;
+ }
+ }
+ #
+ # Process the classlist
+ while (my ($student,$student_data) = each (%$classlist)) {
+ my $studenthash = ();
+ for (my $i=0; $i< scalar(@$field_names);$i++) {
+ $studenthash->{$field_names->[$i]}=$student_data->[$i];
+ }
+ push (@FullClasslist,$studenthash);
+ #
+ # Build up a list of sections
+ my $section = $studenthash->{'section'};
+ $section = 'no section' if (! defined($section) || $section =~/^\s*/ );
+ $Sections{$section}++;
+ #
+ # Only put in the list those students we are interested in
+ if (defined($ENV{'form.Section'}) &&
+ $ENV{'form.Section'} !~ /(all|any)/ &&
+ ! exists($valid_section{$section})) {
+ next;
+ }
+ push (@Students,$studenthash);
+ }
+ #
+ # Put the consolidated section data in the right place
+ @Sections = sort {$a<=>$b} keys(%Sections);
+ #
+ # Sort the Students
+ my $sortby = 'fullname';
+ @Students = sort {$a->{$sortby} <=> $b->{$sortby}} @Students;
+ #
+ # Now deal with that current student thing....
+ if (exists($ENV{'form.StudentAssessmentStudent'})) {
+ my ($current_uname,$current_dom) =
+ split(':',$ENV{'form.StudentAssessmentStudent'});
+ my $i;
+ for ($i = 0; $i<=$#Students; $i++) {
+ next if (($Students[$i]->{'username'} ne $current_uname) ||
+ ($Students[$i]->{'domain'} ne $current_dom));
+ last; # If we get here, we have our student.
+ }
+ if ($i == 0) {
+ $prev_student = 'none';
+ } else {
+ $prev_student = $Students[$i-1];
+ }
+ if ($i == $#Students) {
+ $next_student = 'none';
+ } else {
+ $next_student = $Students[$i+1];
+ }
+ }
+}
+
+#######################################################
+#######################################################
sub CheckFormElement {
my ($cache, $ENVName, $cacheName, $default)=@_;
@@ -679,10 +861,19 @@
$r->content_type('text/html');
$r->send_http_header;
+ &PrepareClasslist($r);
+
&BuildStatistics($r);
return OK;
}
1;
+
+=pod
+
+=back
+
+=cut
+
__END__