Diff for /loncom/interface/lonstatistics.pm between versions 1.57 and 1.59

version 1.57, 2003/01/12 23:31:22 version 1.59, 2003/02/18 20:27:33
Line 35 Line 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;  package Apache::lonstatistics;
   
 use strict;  use strict;
Line 48  use Apache::lonproblemanalysis; Line 77  use Apache::lonproblemanalysis;
 use Apache::lonproblemstatistics;  use Apache::lonproblemstatistics;
 use Apache::lonstudentassessment;  use Apache::lonstudentassessment;
 use Apache::lonpercentage;  use Apache::lonpercentage;
 use HTML::TokeParser;  
 use GDBM_File;  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 {  sub CheckFormElement {
     my ($cache, $ENVName, $cacheName, $default)=@_;      my ($cache, $ENVName, $cacheName, $default)=@_;
Line 546  sub BuildStatistics { Line 728  sub BuildStatistics {
     my %reports = ('classlist'          => 'Class list',      my %reports = ('classlist'          => 'Class list',
                    'problem_statistics' => 'Problem Statistics',                     'problem_statistics' => 'Problem Statistics',
                    'student_assessment' => 'Student Assessment',                     'student_assessment' => 'Student Assessment',
    'percentage'         => 'Percentage Graphs',     'percentage'         => 'Correct-problems Plot',
 #                   'activitylog'        => 'Activity Log',  #                   'activitylog'        => 'Activity Log',
                    'reportSelected'     => 'Class list');                     'reportSelected'     => 'Class list');
   
Line 626  sub BuildStatistics { Line 808  sub BuildStatistics {
     } elsif($GoToPage eq 'Class list') {      } elsif($GoToPage eq 'Class list') {
         &BuildClasslist($cacheDB, $students, \@studentInformation,          &BuildClasslist($cacheDB, $students, \@studentInformation,
                         \@headings, $r);                          \@headings, $r);
     } elsif($GoToPage eq 'Percentage Graphs') {      } elsif($GoToPage eq 'Correct-problems Plot') {
  &Apache::lonpercentage::BuildPercentageGraph($cacheDB, $students,   &Apache::lonpercentage::BuildPercentageGraph($cacheDB, $students,
      $courseID, $c, $r);       $courseID, $c, $r);
     }      }
Line 679  sub handler { Line 861  sub handler {
     $r->content_type('text/html');      $r->content_type('text/html');
     $r->send_http_header;      $r->send_http_header;
   
       &PrepareClasslist($r);
   
     &BuildStatistics($r);      &BuildStatistics($r);
   
     return OK;      return OK;
 }  }
 1;  1;
   
   =pod
   
   =back
   
   =cut
   
 __END__  __END__
   

Removed from v.1.57  
changed lines
  Added in v.1.59


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>