Diff for /loncom/interface/lonstatistics.pm between versions 1.111 and 1.120

version 1.111, 2004/09/24 19:41:17 version 1.120, 2005/03/15 21:22:38
Line 50  use vars qw( Line 50  use vars qw(
     @FullClasslist       @FullClasslist 
     @Students      @Students
     @Sections       @Sections 
     @SelectedSections  
     %StudentData      %StudentData
     @StudentDataOrder      @StudentDataOrder
     @SelectedStudentData      @SelectedStudentData
     $top_map   
     @Sequences   
     @SelectedMaps  
     @Assessments  
     $enrollment_status);      $enrollment_status);
   
 use Apache::lonnet();  use Apache::lonnet();
Line 128  undef the following package variables: Line 123  undef the following package variables:
   
 =item @Sections  =item @Sections
   
 =item @SelectedSections  
   
 =item %StudentData  =item %StudentData
   
 =item @StudentDataOrder  =item @StudentDataOrder
Line 152  sub clear_classlist_variables { Line 145  sub clear_classlist_variables {
     undef(@FullClasslist);      undef(@FullClasslist);
     undef(@Students);      undef(@Students);
     undef(@Sections);      undef(@Sections);
     undef(@SelectedSections);  
     undef(%StudentData);      undef(%StudentData);
     undef(@SelectedStudentData);      undef(@SelectedStudentData);
     undef($curr_student);      undef($curr_student);
Line 178  the following package variables: Line 170  the following package variables:
   
 =item @Sections  =item @Sections
   
 =item @SelectedSections  
   
 =item %StudentData  =item %StudentData
   
 =item @SelectedStudentData  =item @SelectedStudentData
Line 209  sub PrepareClasslist { Line 199  sub PrepareClasslist {
     my $cnum = $ENV{'course.'.$cid.'.num'};      my $cnum = $ENV{'course.'.$cid.'.num'};
     my ($classlist,$field_names) = &Apache::loncoursedata::get_classlist($cid,      my ($classlist,$field_names) = &Apache::loncoursedata::get_classlist($cid,
                                                                   $cdom,$cnum);                                                                    $cdom,$cnum);
     if (exists($ENV{'form.Section'})) {      my @selected_sections = &get_selected_sections();
         if (ref($ENV{'form.Section'})) {  
             @SelectedSections = @{$ENV{'form.Section'}};  
         } elsif ($ENV{'form.Section'} !~ /^\s*$/) {  
             @SelectedSections = ($ENV{'form.Section'});  
         }  
     }  
     @SelectedSections = ('all') if (! @SelectedSections);  
     foreach (@SelectedSections) {  
         if ($_ eq 'all') {  
             @SelectedSections = ('all');  
         }  
     }  
     #      #
     # Deal with instructors with restricted section access      # Deal with instructors with restricted section access
     if ($ENV{'request.course.sec'} !~ /^\s*$/) {      if ($ENV{'request.course.sec'} !~ /^\s*$/) {
         @SelectedSections = ($ENV{'request.course.sec'});          @selected_sections = ($ENV{'request.course.sec'});
     }      }
     #      #
     # Set up %StudentData      # Set up %StudentData
Line 266  sub PrepareClasslist { Line 244  sub PrepareClasslist {
         $Sections{$section}++;          $Sections{$section}++;
         #          #
         # Only put in the list those students we are interested in          # Only put in the list those students we are interested in
         foreach my $sect (@SelectedSections) {          foreach my $sect (@selected_sections) {
             if ( (($sect eq 'all') ||               if ( (($sect eq 'all') || 
                   ($section eq $sect)) &&                    ($section eq $sect)) &&
                  (($studenthash->{'status'} eq $enrollment_status) ||                    (($studenthash->{'status'} eq $enrollment_status) || 
Line 338  sub PrepareClasslist { Line 316  sub PrepareClasslist {
     return;      return;
 }  }
   
   
 #######################################################  #######################################################
 #######################################################  #######################################################
   
 =pod  =pod
   
 =item get_students  =item get_selected_sections
   
 Returns a list of the selected students  Returns an array of the selected sections
   
 =cut  =cut
   
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub get_students {  sub get_selected_sections {
     if (! @Students) {      my @selected_sections;
         &PrepareClasslist()      if (exists($ENV{'form.Section'})) {
           if (ref($ENV{'form.Section'})) {
               @selected_sections = @{$ENV{'form.Section'}};
           } elsif ($ENV{'form.Section'} !~ /^\s*$/) {
               @selected_sections = ($ENV{'form.Section'});
           }
     }      }
     return @Students;      @selected_sections = ('all') if (! @selected_sections);
 }      foreach (@selected_sections) {
           if ($_ eq 'all') {
 #######################################################              @selected_sections = ('all');
 #######################################################          }
       }
 =pod      #
       # Deal with instructors with restricted section access
 =item &current_student()      if ($ENV{'request.course.sec'} !~ /^\s*$/) {
           @selected_sections = ($ENV{'request.course.sec'});
 Returns a pointer to a hash containing data about the currently      }
 selected student.      return @selected_sections;
   
 =cut  
   
 #######################################################  
 #######################################################  
 sub current_student {   
     return $curr_student;  
 }  
   
 #######################################################  
 #######################################################  
   
 =pod  
   
 =item &previous_student()  
   
 Returns a pointer to a hash containing data about the student prior  
 in the list of students.  Or something.    
   
 =cut  
   
 #######################################################  
 #######################################################  
 sub previous_student {   
     return $prev_student;  
 }  
   
 #######################################################  
 #######################################################  
   
 =pod  
   
 =item &next_student()  
   
 Returns a pointer to a hash containing data about the next student  
 to be viewed.  
   
 =cut  
   
 #######################################################  
 #######################################################  
 sub next_student {   
     return $next_student;  
 }  }
   
 #######################################################  #######################################################
Line 418  sub next_student { Line 357  sub next_student {
   
 =pod  =pod
   
 =item &clear_sequence_variables()  =item &section_and_enrollment_description
   
 =cut  =cut
   
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub clear_sequence_variables {  sub section_and_enrollment_description {
     undef($top_map);      my @sections = &Apache::lonstatistics::get_selected_sections();
     undef(@Sequences);      my $description = &mt('Unable to determine section and enrollment');
     undef(@Assessments);      if (scalar(@sections) == 1 && $sections[0] ne 'all') {
           $description = &mt('Section [_1]. [_2] enrollment status',
                              $sections[0],$ENV{'form.Status'});
       } elsif (scalar(@sections) && $sections[0] eq 'all') {
           $description = &mt('All sections. [_1] enrollment status',
                              $ENV{'form.Status'});
       } elsif (scalar(@sections)) {
           my $lastsection = pop(@sections);
           $description = &mt('Sections [_1] and [_2]. [_3] enrollment status',
                              join(', ',@sections),$lastsection,
                              $ENV{'form.Status'});
       }
       return $description;
 }  }
   
 #######################################################  #######################################################
Line 435  sub clear_sequence_variables { Line 386  sub clear_sequence_variables {
   
 =pod  =pod
   
 =item &SetSelectedMaps($elementname)  =item get_students
   
 Sets the @SelectedMaps array from $ENV{'form.'.$elementname};  Returns a list of the selected students
   
 =cut  =cut
   
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub SetSelectedMaps {  sub get_students {
     my $elementname = shift;      if (! @Students) {
     if (exists($ENV{'form.'.$elementname})) {          &PrepareClasslist()
         if (ref($ENV{'form.'.$elementname})) {  
             @SelectedMaps = @{$ENV{'form.'.$elementname}};  
         } else {  
             @SelectedMaps = ($ENV{'form.'.$elementname});  
         }  
     } else {  
         @SelectedMaps = ('all');  
     }      }
       return @Students;
 }  }
   
   
 #######################################################  #######################################################
 #######################################################  #######################################################
   
 =pod  =pod
   
 =item &Sequences_with_Assess()  =item &current_student()
   
 Returns an array containing the subset of @Sequences which contain  Returns a pointer to a hash containing data about the currently
 assessments.  selected student.
   
 =cut  =cut
   
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub Sequences_with_Assess {  sub current_student { 
     my ($mode) = @_;      return $curr_student;
     $mode = 'selected' if (! defined($mode));  
     my @Sequences_to_Show;  
     foreach my $sequence (@Sequences) {  
         next if ($sequence->{'num_assess'} < 1);  
         if ($mode eq 'all') {  
             push (@Sequences_to_Show,$sequence);  
         } elsif ($mode eq 'selected') {  
             foreach my $map_symb (@SelectedMaps) {  
                 if ($sequence->{'symb'} eq $map_symb || $map_symb eq 'all'){  
                     push (@Sequences_to_Show,$sequence);  
                     last; # Only put it in once  
                 }  
             }  
         }  
   
     }  
     return @Sequences_to_Show;  
 }  }
   
 #######################################################  #######################################################
Line 497  sub Sequences_with_Assess { Line 424  sub Sequences_with_Assess {
   
 =pod  =pod
   
 =item &PrepareCourseData($r)  =item &previous_student()
   
   Returns a pointer to a hash containing data about the student prior
   in the list of students.  Or something.  
   
 =cut  =cut
   
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub PrepareCourseData {  sub previous_student { 
     my ($r) = @_;      return $prev_student;
     &clear_sequence_variables();  
     my ($top,$sequences,$assessments) =   
         &Apache::loncoursedata::get_sequence_assessment_data();  
     if (! defined($top) || ! ref($top)) {  
         # There has been an error, better report it  
         &Apache::lonnet::logthis('top is undefined');  
         return;  
     }  
     $top_map = $top if (ref($top));  
     @Sequences = @{$sequences} if (ref($sequences) eq 'ARRAY');  
     @Assessments = @{$assessments} if (ref($assessments) eq 'ARRAY');  
     return;  
 }  }
   
 #######################################################  #######################################################
Line 524  sub PrepareCourseData { Line 442  sub PrepareCourseData {
   
 =pod  =pod
   
 =item &log_sequence($sequence,$recursive,$padding)  =item &next_student()
   
 Write data about the sequence to a logfile.  If $recursive is not  Returns a pointer to a hash containing data about the next student
 undef the data is written recursively.  $padding is used for recursive  to be viewed.
 calls.  
   
 =cut  =cut
   
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub log_sequence {  sub next_student { 
     my ($seq,$recursive,$padding) = @_;      return $next_student;
     $padding = '' if (! defined($padding));  
     if (ref($seq) ne 'HASH') {  
         &Apache::lonnet::logthis('log_sequence passed bad sequnce');  
         return;  
     }  
     &Apache::lonnet::logthis($padding.'sequence '.$seq->{'title'});  
     while (my($key,$value) = each(%$seq)) {  
         next if ($key eq 'contents');  
         if (ref($value) eq 'ARRAY') {  
             for (my $i=0;$i< scalar(@$value);$i++) {  
                 &Apache::lonnet::logthis($padding.$key.'['.$i.']='.  
                                          $value->[$i]);  
             }  
         } else {  
             &Apache::lonnet::logthis($padding.$key.'='.$value);  
         }  
     }  
     if (defined($recursive)) {  
         &Apache::lonnet::logthis($padding.'-'x20);  
         &Apache::lonnet::logthis($padding.'contains:');  
         foreach my $item (@{$seq->{'contents'}}) {  
             if ($item->{'type'} eq 'container') {  
                 &log_sequence($item,$recursive,$padding.'    ');  
             } else {  
                 &Apache::lonnet::logthis($padding.'title = '.$item->{'title'});  
                 while (my($key,$value) = each(%$item)) {  
                     next if ($key eq 'title');  
                     if (ref($value) eq 'ARRAY') {  
                         for (my $i=0;$i< scalar(@$value);$i++) {  
                             &Apache::lonnet::logthis($padding.$key.'['.$i.']='.  
                                                      $value->[$i]);  
                         }  
                     } else {  
                         &Apache::lonnet::logthis($padding.$key.'='.$value);  
                     }  
                 }  
             }  
         }  
         &Apache::lonnet::logthis($padding.'end contents of '.$seq->{'title'});  
         &Apache::lonnet::logthis($padding.'-'x20);  
     }  
     return;  
 }  }
   
 ##############################################  ##############################################
Line 643  sub StudentDataSelect { Line 518  sub StudentDataSelect {
     return $Str;      return $Str;
 }  }
   
   #######################################################
   #######################################################
   
   =pod
   
   =item &get_selected_maps($elementname)
   
   Input: Name of the <select> form element used to specify the maps.
   
   Returns: Array of symbs of selected maps or the description 'all'.
      If form.$elementname does not exist, 'all' is returned.
   
   =cut
   
   #######################################################
   #######################################################
   sub get_selected_maps {
       my ($elementname) = @_;
       my @selected_maps;
       if (exists($ENV{'form.'.$elementname})) {
           if (ref($ENV{'form.'.$elementname})) {
               @selected_maps = @{$ENV{'form.'.$elementname}};
           } else {
               @selected_maps = ($ENV{'form.'.$elementname});
           }
       } else {
           @selected_maps = ('all');
       }
       foreach my $map (@selected_maps) {
           if ($map eq 'all') {
               @selected_maps = ('all');
               last;
           }
       }
       return @selected_maps;
   }
   
   
   #######################################################
   #######################################################
   
   =pod
   
   =item &selected_sequences_with_assessments
   
   Retrieve the sequences which were selected by the user to show.  
   
   Input: $mode: scalar.  Either 'selected' or 'all'.  If not specified,
       'selected' is used.
   
   Returns: an array containing a navmap object and navmap resources, 
       or an array containing a scalar with an error message.
   
   =cut
   
   #######################################################
   #######################################################
   sub selected_sequences_with_assessments {
       my ($mode) = @_;
       $mode = 'selected' if (! defined($mode));
       my $navmap = Apache::lonnavmaps::navmap->new();
       if (!defined($navmap)) {
           return ('Can not open Coursemap');
       }
       #
       my @sequences = $navmap->retrieveResources(undef,
                                                  sub { shift->is_map(); },1,0,1);
       my @sequences_with_assessments;
       for my $sequence ($navmap->getById('0.0'), @sequences) {
    if ($navmap->hasResource($sequence,sub { shift->is_problem(); },0,1)){
               push(@sequences_with_assessments,$sequence);
           }
       }
       #
       my @sequences_to_show;
       foreach my $sequence (@sequences_with_assessments) {
           if ($mode eq 'all') {
               push (@sequences_to_show,$sequence);
           } elsif ($mode eq 'selected') {
               foreach my $map_symb (&get_selected_maps('Maps')) {
                   if ($sequence->symb eq $map_symb || $map_symb eq 'all'){
                       push (@sequences_to_show,$sequence);
                       last; # Only put it in once
                   }
               }
           }
   
       }
       return $navmap,@sequences_to_show;
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
 =pod   =pod 
   
 =item &MapSelect($elementname,$status,$numvisible,$restriction)   =item &map_select($elementname,$status,$numvisible,$restriction) 
   
 Returns html for a selection box allowing the user to choose one (or more)   Returns html for a selection box allowing the user to choose one (or more) 
 of the sequences in the course.  The values of the sequences are the symbs.  of the sequences in the course.  The values of the sequences are the symbs.
Line 662  If the top sequence is selected, the val Line 628  If the top sequence is selected, the val
   
 =item $numvisible The number of options to be visible  =item $numvisible The number of options to be visible
   
 =item $restriction Code reference to subroutine which returns true or   
 false.  The code must expect a reference to a sequence data structure.  
   
 =back  =back
   
 =cut  =cut
   
 ##############################################  ##############################################
 ##############################################  ##############################################
 sub MapSelect {  sub map_select {
     my ($elementname,$status,$numvisible,$restriction)=@_;      my ($elementname,$status,$numvisible)=@_;
     if ($numvisible < 1) {      if ($numvisible < 1) {
         return;          return;
     }      }
     #      #
     # Set up array of selected items      # Set up array of selected items
     &SetSelectedMaps($elementname);      my @selected_maps = &get_selected_maps($elementname);
     #  
     # Set up the restriction call  
     if (! defined($restriction)) {  
         $restriction = sub { 1; };  
     }  
     #      #
     # Build the form element      # Build the form element
     my $Str = "\n";      my $form = "\n";
     $Str .= '<select name="'.$elementname.'" ';      $form .= '<select name="'.$elementname.'" ';
     if ($status ne 'single') {      if ($status ne 'single') {
         $Str .= 'multiple="true" ';          $form .= 'multiple="true" ';
     }  
     $Str .= 'size="'.$numvisible.'" >'."\n";  
     #  
     # Deal with 'all'  
     foreach (@SelectedMaps) {  
         if ($_ eq 'all') {  
             @SelectedMaps = ('all');  
             last;  
         }  
     }      }
       $form .= 'size="'.$numvisible.'" >'."\n";
     #      #
     # Put in option for 'all'      # Put in option for 'all'
     $Str .= '    <option value="all" ';      $form .= '    <option value="all" ';
     foreach (@SelectedMaps) {      if ($selected_maps[0] eq 'all') {
         if ($_ eq 'all') {          $form .= 'selected ';
             $Str .= 'selected ';  
             last;  
         }  
     }      }
     $Str .= ">all</option>\n";      $form .= ">all</option>\n";
     #      #
     # Loop through the sequences      # Loop through the sequences
     foreach my $seq (@Sequences) {      my @sequences = &selected_sequences_with_assessments('all');
         next if (! $restriction->($seq));      my $navmap;
         $Str .= '    <option value="'.$seq->{'symb'}.'" ';      if (!ref($sequences[0])) {
         foreach (@SelectedMaps) {          return $sequences[0];
             if ($seq->{'symb'} eq $_) {      } else {
                 $Str .= 'selected ';          $navmap = shift(@sequences);
       }
       foreach my $seq (@sequences){
           $form .= '    <option value="'.$seq->symb.'" ';
           foreach (@selected_maps) {
               if ($seq->symb eq $_) {
                   $form .= 'selected ';
                 last;                  last;
             }              }
         }          }
         $Str .= '>'.$seq->{'title'}."</option>\n";          $form .= '>'.$seq->compTitle."</option>\n";
     }      }
     $Str .= "</select>\n";      $form .= "</select>\n";
     return $Str;      return $form;
 }  }
   
 ##############################################  ##############################################
Line 737  sub MapSelect { Line 690  sub MapSelect {
 Returns html for a selection box allowing the user to choose one (or more)   Returns html for a selection box allowing the user to choose one (or more) 
 of the sections in the course.    of the sections in the course.  
   
 Uses the package variables @Sections and @SelectedSections  Uses the package variables @Sections
 =over 4  =over 4
   
 =item $elementname The name of the HTML form element  =item $elementname The name of the HTML form element
Line 774  sub SectionSelect { Line 727  sub SectionSelect {
     # Loop through the sequences      # Loop through the sequences
     foreach my $s (@Sections) {      foreach my $s (@Sections) {
         $Str .= '    <option value="'.$s.'" ';          $Str .= '    <option value="'.$s.'" ';
         foreach (@SelectedSections) {          foreach (&get_selected_sections()) {
             if ($s eq $_) {              if ($s eq $_) {
                 $Str .= 'selected ';                  $Str .= 'selected ';
                 last;                  last;
Line 786  sub SectionSelect { Line 739  sub SectionSelect {
     return $Str;      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 .= "<h2>Output Modes</h2>\n";  
     $Str .= "<dl>\n";  
     foreach my $outputmode (@OutputOptions) {  
  $Str .="    <dt>".$outputmode->{'name'}."</dt>\n";  
  $Str .="        <dd>".$outputmode->{'description'}."</dd>\n";  
     }  
     $Str .= "</dl>\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/<select size="5" name="$elementname">/;  
     foreach my $option (@OutputOptions) {  
         if (exists($option->{'special'}) &&   
             $option->{'special'} =~ /do not show/) {  
             next;  
         }  
         $Str .= "\n".'    <option value="'.$option->{'value'}.'"';  
         $Str .= " selected " if ($option->{'value'} eq $selected);  
         $Str .= ">".&mt($option->{'name'})."<\/option>";  
     }  
     $Str .= "\n</select>";  
     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,$formname,$inputname) = @_;  
     my $status_type;  
     if (defined($formname)) {  
         $status_type = 'inline';  
     } else {  
         $status_type = 'popup';  
     }  
     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),  
          $status_type,undef,$formname,$inputname);  
     #  
     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 {  sub DisplayClasslist {
Line 970  sub DisplayClasslist { Line 772  sub DisplayClasslist {
     my @Fields = ('fullname','username','domain','id','section','status');      my @Fields = ('fullname','username','domain','id','section','status');
     #      #
     $Str = '';      $Str = '';
       my @selected_sections = &get_selected_sections();
     if (! @Students) {      if (! @Students) {
         if ($SelectedSections[0] eq 'all') {           if ($selected_sections[0] eq 'all') { 
             if (lc($ENV{'form.Status'}) eq 'any') {              if (lc($ENV{'form.Status'}) eq 'any') {
                 $Str .= '<h2>'.                  $Str .= '<h2>'.
                     &mt('There are no students in the course.').                      &mt('There are no students in the course.').
Line 1163  sub handler { Line 966  sub handler {
     td.essay          { border: 1px solid gray; }      td.essay          { border: 1px solid gray; }
 </style>  </style>
 ENDSTYLE  ENDSTYLE
     $r->print('<html><head><title>'.      my $html=&Apache::lonxml::xmlbegin();
       $r->print($html.'<head><title>'.
               &mt('Course Statistics and Charts').                &mt('Course Statistics and Charts').
               '</title>'.$style.                '</title>'.$style.
               "</head>\n".                "</head>\n".
Line 1213  ENDSTYLE Line 1017  ENDSTYLE
         #          #
         my $GoToPage = $ENV{'form.reportSelected'};          my $GoToPage = $ENV{'form.reportSelected'};
         #          #
         # Set up the statistics and chart environment  
         &PrepareCourseData($r);  
         #  
         $r->print('<input type="hidden" name="reportSelected" value="'.          $r->print('<input type="hidden" name="reportSelected" value="'.
                   $GoToPage.'">');                    $GoToPage.'">');
         if($GoToPage eq 'activitylog') {          if($GoToPage eq 'activitylog') {

Removed from v.1.111  
changed lines
  Added in v.1.120


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