Diff for /loncom/interface/lonstatistics.pm between versions 1.121 and 1.129

version 1.121, 2005/03/18 00:19:35 version 1.129, 2006/03/15 19:41:26
Line 55  use vars qw( Line 55  use vars qw(
     @SelectedStudentData      @SelectedStudentData
     $enrollment_status);      $enrollment_status);
   
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::lonhomework;  use Apache::lonhomework;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::loncoursedata;  use Apache::loncoursedata;
Line 73  use Apache::lonstudentassessment(); Line 73  use Apache::lonstudentassessment();
 use Apache::lonpercentage;  use Apache::lonpercentage;
 use Apache::lonstudentsubmissions();  use Apache::lonstudentsubmissions();
 use Apache::lonsurveyreports();  use Apache::lonsurveyreports();
   use Apache::longradinganalysis();
   
 #######################################################  #######################################################
 #######################################################  #######################################################
Line 194  sub PrepareClasslist { Line 195  sub PrepareClasslist {
     &clear_classlist_variables();      &clear_classlist_variables();
     #      #
     # Retrieve the classlist      # Retrieve the classlist
     my $cid  = $ENV{'request.course.id'};      my $cid  = $env{'request.course.id'};
     my $cdom = $ENV{'course.'.$cid.'.domain'};      my $cdom = $env{'course.'.$cid.'.domain'};
     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($cdom,
                                                                   $cdom,$cnum);   $cnum);
     my @selected_sections = &get_selected_sections();      my @selected_sections = &get_selected_sections();
     #      #
     # 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*$/) {
         @selected_sections = ($ENV{'request.course.sec'});          @selected_sections = ($env{'request.course.sec'});
     }      }
     #      #
     # Set up %StudentData      # Set up %StudentData
Line 217  sub PrepareClasslist { Line 218  sub PrepareClasslist {
     #      #
     # get the status requested      # get the status requested
     $enrollment_status = 'Active';      $enrollment_status = 'Active';
     $enrollment_status = $ENV{'form.Status'} if (exists($ENV{'form.Status'}));      $enrollment_status = $env{'form.Status'} if (exists($env{'form.Status'}));
     #      #
     # Process the classlist      # Process the classlist
     while (my ($student,$student_data) = each (%$classlist)) {      while (my ($student,$student_data) = each (%$classlist)) {
Line 257  sub PrepareClasslist { Line 258  sub PrepareClasslist {
     }      }
     #      #
     # Put the consolidated section data in the right place      # Put the consolidated section data in the right place
     if ($ENV{'request.course.sec'} !~ /^\s*$/) {      if ($env{'request.course.sec'} !~ /^\s*$/) {
         @Sections = ($ENV{'request.course.sec'});          @Sections = ($env{'request.course.sec'});
     } else {      } else {
         @Sections = sort {$a cmp $b} keys(%Sections);          @Sections = sort {$a cmp $b} keys(%Sections);
         unshift(@Sections,'all'); # Put 'all' at the front of the list          unshift(@Sections,'all'); # Put 'all' at the front of the list
Line 266  sub PrepareClasslist { Line 267  sub PrepareClasslist {
     #      #
     # Sort the Students      # Sort the Students
     my $sortby = 'fullname';      my $sortby = 'fullname';
     $sortby = $ENV{'form.sort'} if (exists($ENV{'form.sort'}));      $sortby = $env{'form.sort'} if (exists($env{'form.sort'}));
     my @TmpStudents = sort { $a->{$sortby} cmp $b->{$sortby} ||      my @TmpStudents = sort { lc($a->{$sortby}) cmp lc($b->{$sortby}) ||
                              $a->{'fullname'} cmp $b->{'fullname'} } @Students;                               lc($a->{'fullname'}) cmp lc($b->{'fullname'}) ||
        lc($a->{'username'}) cmp lc($b->{'username'}) } @Students;
     @Students = @TmpStudents;      @Students = @TmpStudents;
     #       # 
     # Now deal with that current student thing....      # Now deal with that current student thing....
     $curr_student = undef;      $curr_student = undef;
     if (exists($ENV{'form.SelectedStudent'})) {      if (exists($env{'form.SelectedStudent'})) {
         my ($current_uname,$current_dom) =           my ($current_uname,$current_dom) = 
             split(':',$ENV{'form.SelectedStudent'});              split(':',$env{'form.SelectedStudent'});
         my $i;          my $i;
         for ($i = 0; $i<=$#Students; $i++) {          for ($i = 0; $i<=$#Students; $i++) {
             next if (($Students[$i]->{'username'} ne $current_uname) ||               next if (($Students[$i]->{'username'} ne $current_uname) || 
Line 297  sub PrepareClasslist { Line 299  sub PrepareClasslist {
         }          }
     }      }
     #      #
     if (exists($ENV{'form.StudentData'})) {      if (exists($env{'form.StudentData'})) {
         if (ref($ENV{'form.StudentData'}) eq 'ARRAY') {   @SelectedStudentData = 
             @SelectedStudentData = @{$ENV{'form.StudentData'}};      &Apache::loncommon::get_env_multiple('form.StudentData');
         } else {  
             @SelectedStudentData = ($ENV{'form.StudentData'});  
         }  
     } else {      } else {
         @SelectedStudentData = ('username');          @SelectedStudentData = ('username');
     }      }
Line 330  Returns an array of the selected section Line 329  Returns an array of the selected section
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub get_selected_sections {  sub get_selected_sections {
     my @selected_sections;      my @selected_sections = 
     if (exists($ENV{'form.Section'})) {   &Apache::loncommon::get_env_multiple('form.Section');
         if (ref($ENV{'form.Section'})) {  
             @selected_sections = @{$ENV{'form.Section'}};  
         } elsif ($ENV{'form.Section'} !~ /^\s*$/) {  
             @selected_sections = ($ENV{'form.Section'});  
         }  
     }  
     @selected_sections = ('all') if (! @selected_sections);      @selected_sections = ('all') if (! @selected_sections);
     foreach (@selected_sections) {      foreach (@selected_sections) {
         if ($_ eq 'all') {          if ($_ eq 'all') {
Line 346  sub get_selected_sections { Line 339  sub get_selected_sections {
     }      }
     #      #
     # 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*$/) {
         @selected_sections = ($ENV{'request.course.sec'});          @selected_sections = ($env{'request.course.sec'});
     }      }
     return @selected_sections;      return @selected_sections;
 }  }
Line 359  sub get_selected_sections { Line 352  sub get_selected_sections {
   
 =item &section_and_enrollment_description  =item &section_and_enrollment_description
   
   Returns a string describing the currenly selected section(s) and 
   enrollment status.  
   
   Inputs: mode = 'plaintext' or 'localized'  (defaults to 'localized')
       'plaintext' is used for example in Excel spreadsheets.
   Returns: scalar description string.
   
 =cut  =cut
   
 #######################################################  #######################################################
 #######################################################  #######################################################
 sub section_and_enrollment_description {  sub section_and_enrollment_description {
       my ($mode) = @_;
       if (! defined($mode)) { $mode = 'localized'; }
     my @sections = &Apache::lonstatistics::get_selected_sections();      my @sections = &Apache::lonstatistics::get_selected_sections();
     my $description = &mt('Unable to determine section and enrollment');      my $description;
       if ($mode eq 'localized') {
           $description = &mt('Unable to determine section and enrollment');
       } elsif ($mode eq 'plaintext') {
           $description = 'Unable to determine section and enrollment';
       } else {
           $description = 'Bad parameter passed to lonstatistics::section_and_enrollment_description';
           &Apache::lonnet::logthis($description);
       }
     if (scalar(@sections) == 1 && $sections[0] ne 'all') {      if (scalar(@sections) == 1 && $sections[0] ne 'all') {
         $description = &mt('Section [_1]. [_2] enrollment status.',          if ($mode eq 'localized') {
                            $sections[0],$ENV{'form.Status'});              $description = &mt('Section [_1]. [_2] enrollment status.',
                                  $sections[0],$env{'form.Status'});
           } elsif ($mode eq 'plaintext') {
               $description = 'Section '.$sections[0].'. '.
                   $env{'form.Status'}.' enrollment status.';
           }
     } elsif (scalar(@sections) && $sections[0] eq 'all') {      } elsif (scalar(@sections) && $sections[0] eq 'all') {
         $description = &mt('All sections. [_1] enrollment status.',          if ($mode eq 'localized') {
                            $ENV{'form.Status'});              $description = &mt('All sections. [_1] enrollment status.',
                                  $env{'form.Status'});
           } elsif ($mode eq 'plaintext') {
               $description = 'All sections. '.
                   $env{'form.Status'}.' enrollment status.';
           }
     } elsif (scalar(@sections)) {      } elsif (scalar(@sections)) {
         my $lastsection = pop(@sections);          my $lastsection = pop(@sections);
         $description = &mt('Sections [_1] and [_2]. [_3] enrollment status.',          if ($mode eq 'localized') {
                            join(', ',@sections),$lastsection,              $description = &mt('Sections [_1] and [_2]. [_3] enrollment status.',
                            $ENV{'form.Status'});                                 join(', ',@sections),$lastsection,
                                  $env{'form.Status'});
           } elsif ($mode eq 'plaintext') {
               $description = 
                   'Sections '.join(', ',@sections).' and '.$lastsection.'. '.
                   $env{'form.Status'}.' enrollment status.';
           }
     }      }
     return $description;      return $description;
 }  }
Line 536  Returns: Array of symbs of selected maps Line 562  Returns: Array of symbs of selected maps
 #######################################################  #######################################################
 sub get_selected_maps {  sub get_selected_maps {
     my ($elementname) = @_;      my ($elementname) = @_;
     my @selected_maps;      my @selected_maps = 
     if (exists($ENV{'form.'.$elementname})) {   &Apache::loncommon::get_env_multiple('form.'.$elementname);
         if (ref($ENV{'form.'.$elementname})) {      @selected_maps = ('all') if (! @selected_maps);
             @selected_maps = @{$ENV{'form.'.$elementname}};  
         } else {  
             @selected_maps = ($ENV{'form.'.$elementname});  
         }  
     } else {  
         @selected_maps = ('all');  
     }  
     foreach my $map (@selected_maps) {      foreach my $map (@selected_maps) {
         if ($map eq 'all') {          if ($map eq 'all') {
             @selected_maps = ('all');              @selected_maps = ('all');
Line 775  sub DisplayClasslist { Line 794  sub DisplayClasslist {
     my @selected_sections = &get_selected_sections();      my @selected_sections = &get_selected_sections();
     if (! @Students) {      if (! @Students) {
         if ($selected_sections[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.').
                     '</h2>';                      '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'active') {              } elsif (lc($env{'form.Status'}) eq 'active') {
                 $Str .= '<h2>'.                  $Str .= '<h2>'.
                 &mt('There are no currently enrolled students in the course.').                  &mt('There are no currently enrolled students in the course.').
                     '</h2>';                      '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'expired') {              } elsif (lc($env{'form.Status'}) eq 'expired') {
                 $Str .= '<h2>'.                  $Str .= '<h2>'.
                     &mt('There are no previously enrolled students in the course.').                      &mt('There are no previously enrolled students in the course.').
                         '</h2>';                          '</h2>';
             }              }
         } else {           } else { 
             my $sections;              my $sections;
             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 selected sections.').                      &mt('There are no students in the selected sections.').
                     '</h2>';                      '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'active') {              } elsif (lc($env{'form.Status'}) eq 'active') {
                 $Str .= '<h2>'.                  $Str .= '<h2>'.
                     &mt('There are no currently enrolled students in the selected sections.').                      &mt('There are no currently enrolled students in the selected sections.').
                     '</h2>';                      '</h2>';
             } elsif (lc($ENV{'form.Status'}) eq 'expired') {              } elsif (lc($env{'form.Status'}) eq 'expired') {
                 $Str .= '<h2>'.                  $Str .= '<h2>'.
                     &mt('There are no previously enrolled students in the selected sections.').                      &mt('There are no previously enrolled students in the selected sections.').
                     '</h2>';                      '</h2>';
Line 839  sub DisplayClasslist { Line 858  sub DisplayClasslist {
             if ($field eq 'fullname' || $field eq 'username') {              if ($field eq 'fullname' || $field eq 'username') {
                 $Str .= '<a href="/adm/statistics?reportSelected=';                  $Str .= '<a href="/adm/statistics?reportSelected=';
                 $Str .= &Apache::lonnet::escape('student_assessment');                  $Str .= &Apache::lonnet::escape('student_assessment');
                 $Str .= '&sort='.&Apache::lonnet::escape($ENV{'form.sort'});                  $Str .= '&sort='.&Apache::lonnet::escape($env{'form.sort'});
                 $Str .= '&SelectedStudent=';                  $Str .= '&SelectedStudent=';
                 $Str .= &Apache::lonnet::escape($sname).'">';                  $Str .= &Apache::lonnet::escape($sname).'">';
                 $Str .= $student->{$field}.'&nbsp';                  $Str .= $student->{$field}.'&nbsp';
Line 896  sub CreateMainMenu { Line 915  sub CreateMainMenu {
                      short_description =>                        short_description => 
     &mt('Display a histogram of student performance in the course.'),      &mt('Display a histogram of student performance in the course.'),
                  },                   },
   #                   { internal_name => 'grading_analysis',
   #                     name => &mt('Detailed Grading Analysis'),
   #                     short_description => 
   #    &mt('Display statistics about who graded who.'),
   #                 },
 #                   { internal_name => 'student_assessment',  #                   { internal_name => 'student_assessment',
 #                     name => &mt('Problem Status Chart'),  #                     name => &mt('Problem Status Chart'),
 #                     short_description =>   #                     short_description => 
Line 931  sub handler { Line 955  sub handler {
     if ($loaderror) { return $loaderror; }      if ($loaderror) { return $loaderror; }
     $loaderror=      $loaderror=
        &Apache::lonnet::overloaderror($r,         &Apache::lonnet::overloaderror($r,
          $ENV{'course.'.$ENV{'request.course.id'}.'.home'});           $env{'course.'.$env{'request.course.id'}.'.home'});
     if ($loaderror) { return $loaderror; }      if ($loaderror) { return $loaderror; }
     #      #
     # Check for access      # Check for access
     if (! &Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {      if (! &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) {
         $ENV{'user.error.msg'}=          $env{'user.error.msg'}=
             $r->uri.":vgr:0:0:Cannot view grades for complete course";              $r->uri.":vgr:0:0:Cannot view grades for complete course";
         if (! &Apache::lonnet::allowed('vgr',          if (! &Apache::lonnet::allowed('vgr',
                       $ENV{'request.course.id'}.'/'.$ENV{'request.course.sec'})) {                        $env{'request.course.id'}.'/'.$env{'request.course.sec'})) {
             $ENV{'user.error.msg'}=              $env{'user.error.msg'}=
                 $r->uri.":vgr:0:0:Cannot view grades with given role";                  $r->uri.":vgr:0:0:Cannot view grades with given role";
             return HTTP_NOT_ACCEPTABLE;              return HTTP_NOT_ACCEPTABLE;
         }          }
Line 966  sub handler { Line 990  sub handler {
     td.essay          { border: 1px solid gray; }      td.essay          { border: 1px solid gray; }
 </style>  </style>
 ENDSTYLE  ENDSTYLE
     my $html=&Apache::lonxml::xmlbegin();        
     $r->print($html.'<head><title>'.      $r->print(&Apache::loncommon::start_page('Course Statistics and Charts',
               &mt('Course Statistics and Charts').       $style));
               '</title>'.$style.  
               "</head>\n".  
               &Apache::loncommon::bodytag('Course Statistics and Charts'));  
     $r->rflush();      $r->rflush();
     #       # 
     # Either print out a menu for them or send them to a report      # Either print out a menu for them or send them to a report
Line 981  ENDSTYLE Line 1002  ENDSTYLE
                                             text =>'Statistics',                                              text =>'Statistics',
                                             faq=>139,                                              faq=>139,
                                             bug=>'Statistics and Charts'});                                              bug=>'Statistics and Charts'});
     if (! exists($ENV{'form.reportSelected'}) ||       if (! exists($env{'form.reportSelected'}) || 
         $ENV{'form.reportSelected'} eq '') {          $env{'form.reportSelected'} eq '') {
         $r->print(&Apache::lonhtmlcommon::breadcrumbs          $r->print(&Apache::lonhtmlcommon::breadcrumbs
                   (undef,&mt('Statistics Main Page')).                    (undef,&mt('Statistics Main Page')).
                   &CreateMainMenu());                    &CreateMainMenu());
Line 1001  ENDSTYLE Line 1022  ENDSTYLE
                           'retrieved until the database is restarted.  '.                            'retrieved until the database is restarted.  '.
                           'Your data is intact but cannot be displayed '.                            'Your data is intact but cannot be displayed '.
                           'at this time.').'</p>');                            'at this time.').'</p>');
             $r->print('</body></html>');              $r->print(&Apache::loncommon::end_page());
             return;              return;
         }          }
         #          #
         # Clean out the caches          # Clean out the caches
         if (exists($ENV{'form.ClearCache'})) {          if (exists($env{'form.ClearCache'})) {
             &Apache::loncoursedata::delete_caches($ENV{'requres.course.id'});              &Apache::loncoursedata::delete_caches($env{'requres.course.id'});
         }          }
         #          #
         # Begin form output          # Begin form output
Line 1015  ENDSTYLE Line 1036  ENDSTYLE
         $r->print('method="post" action="/adm/statistics">');          $r->print('method="post" action="/adm/statistics">');
         $r->rflush();          $r->rflush();
         #          #
         my $GoToPage = $ENV{'form.reportSelected'};          my $GoToPage = $env{'form.reportSelected'};
         #          #
         $r->print('<input type="hidden" name="reportSelected" value="'.          $r->print('<input type="hidden" name="reportSelected" value="'.
                   $GoToPage.'">');                    $GoToPage.'">');
Line 1060  ENDSTYLE Line 1081  ENDSTYLE
                 ({href=>'/adm/statistics?reportselected=student_assessment',                  ({href=>'/adm/statistics?reportselected=student_assessment',
                   text=>'Chart'});                    text=>'Chart'});
             &Apache::lonstudentassessment::BuildStudentAssessmentPage($r,$c);              &Apache::lonstudentassessment::BuildStudentAssessmentPage($r,$c);
         }          } elsif($GoToPage eq 'grading_analysis') {
               &Apache::lonhtmlcommon::add_breadcrumb
                   ({href=>'/adm/statistics?reportselected=grading_anaylsis',
                     text=>'Grading Analysis'});
               &Apache::longradinganalysis::build_grading_analysis_page($r,$c);
    }
         #          #
         $r->print("</form>\n");          $r->print("</form>\n");
     }      }
     $r->print("</body>\n</html>\n");      $r->print(&Apache::loncommon::end_page());
     $r->rflush();      $r->rflush();
     #      #
     return OK;      return OK;

Removed from v.1.121  
changed lines
  Added in v.1.129


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