Diff for /loncom/interface/lonstatistics.pm between versions 1.31 and 1.36

version 1.31, 2002/07/25 19:30:24 version 1.36, 2002/07/29 21:19:44
Line 31 Line 31
 # 11/1,11/4,11/16,12/14,12/16,12/18,12/20,12/31 Behrouz Minaei  # 11/1,11/4,11/16,12/14,12/16,12/18,12/20,12/31 Behrouz Minaei
 # YEAR=2002  # YEAR=2002
 # 1/22,2/1,2/6,2/25,3/2,3/6,3/17,3/21,3/22,3/26,4/7,5/6 Behrouz Minaei  # 1/22,2/1,2/6,2/25,3/2,3/6,3/17,3/21,3/22,3/26,4/7,5/6 Behrouz Minaei
 # 5/12,5/14,5/15,5/19,5/26,7/16,25/7  Behrouz Minaei  # 5/12,5/14,5/15,5/19,5/26,7/16,25/7,29/7  Behrouz Minaei
 #  #
 ###  ###
   
Line 70  sub ProcessFormData{ Line 70  sub ProcessFormData{
     $cache->{'reportKey'} = 'false';      $cache->{'reportKey'} = 'false';
   
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['sort','download','reportSelected',                                              ['sort','download',
                                                'reportSelected',
                                              'StudentAssessmentStudent']);                                               'StudentAssessmentStudent']);
     &CheckFormElement($cache, 'Status', 'Status', 'Active');      &CheckFormElement($cache, 'Status', 'Status', 'Active');
     &CheckFormElement($cache, 'postdata', 'reportSelected', 'Class list');      &CheckFormElement($cache, 'postdata', 'reportSelected', 'Class list');
Line 94  sub ProcessFormData{ Line 95  sub ProcessFormData{
     } else {      } else {
         $cache->{'StudentAssessmentMove'} = 'selected';          $cache->{'StudentAssessmentMove'} = 'selected';
     }      }
     &CheckFormElement($cache, 'StudentAssessmentMap', 'StudentAssessmentMap',   
                       'All Maps');  
     &CheckFormElement($cache, 'StudentAssessmentStudent',       &CheckFormElement($cache, 'StudentAssessmentStudent', 
                       'StudentAssessmentStudent', 'All Students');                        'StudentAssessmentStudent', 'All Students');
     $cache->{'StudentAssessmentStudent'} =       $cache->{'StudentAssessmentStudent'} = 
         &Apache::lonnet::unescape($cache->{'StudentAssessmentStudent'});          &Apache::lonnet::unescape($cache->{'StudentAssessmentStudent'});
       &CheckFormElement($cache, 'DefaultColumns', 'DefaultColumns', 'false');
   
       if(defined($ENV{'form.Section'})) {
           my @sectionsSelected = (ref($ENV{'form.Section'}) ?
                                  @{$ENV{'form.Section'}} :
                                   ($ENV{'form.Section'}));
           $cache->{'sectionsSelected'} = join(':', @sectionsSelected);
       } elsif(!defined($cache->{'sectionsSelected'})) {
           $cache->{'sectionsSelected'} = $cache->{'sectionList'};
       }
   
       my @headingColumns=();
       my @sequenceColumns=();
       my $foundColumn = 0;
       if(defined($ENV{'form.ReselectColumns'})) {
           my @reselected = (ref($ENV{'form.ReselectColumns'}) ? 
                             @{$ENV{'form.ReselectColumns'}}
                             : ($ENV{'form.ReselectColumns'}));
           foreach (@reselected) {
               if(/HeadingColumn/) {
                   push(@headingColumns, $_);
                   $foundColumn = 1;
               } elsif(/SequenceColumn/) {
                   push(@sequenceColumns, $_);
                   $foundColumn = 1;
               }
           }
       }
   
     foreach (keys(%ENV)) {      foreach (keys(%ENV)) {
         if(/form\.Analyze:::/) {          if(/form\.Analyze:::/) {
Line 113  sub ProcessFormData{ Line 140  sub ProcessFormData{
             $cache->{'AnalyzeProblem'} = $problem;              $cache->{'AnalyzeProblem'} = $problem;
                           
             &CheckFormElement($cache, 'Interval', 'Interval', '1');              &CheckFormElement($cache, 'Interval', 'Interval', '1');
           } elsif(/form\.HeadingColumn/) {
               my $value = $_;
               $value =~ s/form\.//;
               push(@headingColumns, $value);
               $foundColumn=1;
           } elsif(/form\.SequenceColumn/) {
               my $value = $_;
               $value =~ s/form\.//;
               push(@sequenceColumns, $value);
               $foundColumn=1;
         }          }
     }      }
   
       if($foundColumn) {
           $cache->{'HeadingsFound'} = join(':', @headingColumns);
           $cache->{'SequencesFound'} = join(':', @sequenceColumns);;
       }
       if(!defined($cache->{'HeadingsFound'}) || 
          $cache->{'DefaultColumns'} ne 'false') {
           $cache->{'HeadingsFound'}='HeadingColumnFull Name';
       }
       if(!defined($cache->{'SequencesFound'}) ||
          $cache->{'DefaultColumns'} ne 'false') {
           $cache->{'SequencesFound'}='All Sequences';
       }
       $cache->{'DefaultColumns'} = 'false';
   
     return;      return;
   
     # Select page to display      # Select page to display
Line 195  sub SortStudents { Line 246  sub SortStudents {
     return \@order;      return \@order;
 }  }
   
   =pod
   
   =item &SpaceColumns()
   
   Determines the width of all the columns in the chart.  It is based on
   the max of the data for that column and its header.
   
   =over 4
   
   Input: $students, $studentInformation, $headings, $ChartDB
   
   $students: An array pointer to a list of students (username:domain)
   
   $studentInformatin: The type of data for the student information.  It is
   used as part of the key in $CacheData.
   
   $headings: The name of the student information columns.
   
   $ChartDB: The name of the cache database which is opened for read/write.
   
   Output: None - All data stored in cache.
   
   =back
   
   =cut
   
   sub SpaceColumns {
       my ($students,$studentInformation,$headings,$cache)=@_;
   
       # Initialize Lengths
       for(my $index=0; $index<(scalar @$headings); $index++) {
           my @titleLength=split(//,$headings->[$index]);
           $cache->{$studentInformation->[$index].':columnWidth'}=
               scalar @titleLength;
       }
   
       foreach my $name (@$students) {
           foreach (@$studentInformation) {
               my @dataLength=split(//,$cache->{$name.':'.$_});
               my $length=(scalar @dataLength);
               if($length > $cache->{$_.':columnWidth'}) {
                   $cache->{$_.':columnWidth'}=$length;
               }
           }
       }
   
       return;
   }
   
 sub PrepareData {  sub PrepareData {
     my ($c, $cacheDB)=@_;      my ($c, $cacheDB, $studentInformation, $headings)=@_;
   
     # Test for access to the cache data      # Test for access to the cache data
     my $courseID=$ENV{'request.course.id'};      my $courseID=$ENV{'request.course.id'};
Line 255  sub PrepareData { Line 355  sub PrepareData {
   
     &ProcessFormData(\%cache);      &ProcessFormData(\%cache);
     my $students = &SortStudents(\%cache);      my $students = &SortStudents(\%cache);
       &SpaceColumns($students, $studentInformation, $headings, \%cache);
       $cache{'updateTime:columnWidth'}=24;
   
     if($cache{'download'} ne 'false') {      if($cache{'download'} ne 'false') {
         my $who = $cache{'download'};          my $who = $cache{'download'};
Line 291  sub PrepareData { Line 393  sub PrepareData {
         return 'aborted';           return 'aborted'; 
     }      }
   
     if($c->aborted()) {  
         untie(%cache);  
         return 'aborted';   
     }  
   
     untie(%cache);      untie(%cache);
   
     return ('OK', $students);      return ('OK', $students);
Line 337  sub Close_PrgWin { Line 434  sub Close_PrgWin {
     $r->rflush();       $r->rflush(); 
 }  }
   
 # For loading the colored table for display or un-colored for print  
 sub setbgcolor {  
     my $PrintTable=shift;  
     my %color;  
     if ($PrintTable){  
  $color{"gb"}="#FFFFFF";  
  $color{"red"}="#FFFFFF";  
  $color{"yellow"}="#FFFFFF";  
  $color{"green"}="#FFFFFF";  
  $color{"purple"}="#FFFFFF";  
     } else {  
  $color{"gb"}="#DDFFFF";  
  $color{"red"}="#FFDDDD";  
  $color{"yellow"}="#EEFFCC";  
  $color{"green"}="#DDFFDD";  
  $color{"purple"}="#FFDDFF";  
     }  
   
     return \%color;  
 }  
   
 sub BuildClasslist {  sub BuildClasslist {
     my ($cacheDB,$students,$studentInformation,$headings,$spacePadding)=@_;      my ($cacheDB,$students,$studentInformation,$headings)=@_;
   
     my %cache;      my %cache;
     unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {      unless(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER,0640)) {
Line 372  sub BuildClasslist { Line 449  sub BuildClasslist {
   
     my $displayString = '<td align="left"><a href="/adm/statistics?';      my $displayString = '<td align="left"><a href="/adm/statistics?';
     $displayString .= 'sort=LINKDATA">DISPLAYDATA&nbsp</a></td>'."\n";      $displayString .= 'sort=LINKDATA">DISPLAYDATA&nbsp</a></td>'."\n";
     $Str .= &Apache::lonhtmlcommon::CreateStudentInformationHeadings(\%cache,      $Str .= &Apache::lonhtmlcommon::CreateHeadings(\%cache, $studentInformation,
                                                            $studentInformation,                                                     $headings, $displayString);
                                                            $headings,  
                                                            $displayString);  
     $Str .= '<td align="left">';  
     $Str .= '<a href="/adm/statistics?sort=lastDownloadTime">';  
     $Str .= 'Last Updated&nbsp</a></td>'."\n";  
     $Str .= '</tr>'."\n";      $Str .= '</tr>'."\n";
     my $alternate=0;      my $alternate=0;
     foreach (@$students) {      foreach (@$students) {
         my ($username, $domain) = split(':', $_);          my ($username, $domain) = split(':', $_);
         if($alternate) {          if($alternate) {
             $Str .= '<tr bgcolor="#ffffe6"><td>';              $Str .= '<tr bgcolor="#ffffe6">';
         } else {          } else {
             $Str .= '<tr bgcolor="#ffffc6"><td>';              $Str .= '<tr bgcolor="#ffffc6">';
         }          }
         $alternate = ($alternate + 1) % 2;          $alternate = ($alternate + 1) % 2;
         foreach my $data (@$studentInformation) {          foreach my $data (@$studentInformation) {
               $Str .= '<td>';
             if($data eq 'fullname') {              if($data eq 'fullname') {
                 $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 .= '&StudentAssessmentStudent=';                  $Str .= '&StudentAssessmentStudent=';
                 $Str .= &Apache::lonnet::escape($cache{$_.':'.$data}).'">';                  $Str .= &Apache::lonnet::escape($cache{$_.':'.$data}).'">';
                 #$Str .= 'Student Assessment'.'">';                  $Str .= $cache{$_.':'.$data}.'&nbsp';
             }  
   
             $Str .= $cache{$_.':'.$data}.'&nbsp';  
   
             if($data eq 'fullname') {  
                 $Str .= '</a>';                  $Str .= '</a>';
               } elsif($data eq 'updateTime') {
                   $Str .= '<a href="/adm/statistics?reportSelected=';
                   $Str .= &Apache::lonnet::escape('Class list');
                   $Str .= '&download='.$_.'">';
                   $Str .= $cache{$_.':'.$data}.'&nbsp';
                   $Str .= '&nbsp</a>';
               } else {
                   $Str .= $cache{$_.':'.$data}.'&nbsp';
             }              }
   
             $Str .= '</td><td>';              $Str .= '</td>'."\n";
         }  
   
         $Str .= '<a href="/adm/statistics?download='.$_.'">';  
         my $downloadTime = $cache{$_.':lastDownloadTime'};  
         if($downloadTime ne 'Not downloaded') {  
             $downloadTime = localtime($downloadTime);  
         }          }
         $Str .= $downloadTime;  
   
         $Str .= '&nbsp</a></td></tr>'."\n";  
     }      }
   
       $Str .= '</tr>'."\n";
     $Str .= '</table></td></tr></table>'."\n";      $Str .= '</table></td></tr></table>'."\n";
   
     untie(%cache);      untie(%cache);
Line 424  sub BuildClasslist { Line 492  sub BuildClasslist {
     return $Str;      return $Str;
 }  }
   
   sub CreateMainMenu {
       my ($status, $reports)=@_;
   
       my $Str = '';
   
       $Str .= '<table border="0"><tbody><tr>'."\n";
       $Str .= '<td></td><td></td>'."\n";
       $Str .= '<td align="center"><b>Analysis Reports:</b></td>'."\n";
       $Str .= '<td align="center"><b>Student Status:</b></td></tr>'."\n";
       $Str .= '<tr>'."\n";
       $Str .= '<td align="center"><input type="submit" name="Refresh" ';
       $Str .= 'value="Refresh" /></td>'."\n";
       $Str .= '<td align="center"><input type="submit" name="DownloadAll" ';
       $Str .= 'value="Update All Student Data" /></td>'."\n";
       $Str .= '<td align="center">';
       $Str .= '<select name="reportSelected" onchange="document.';
       $Str .= 'Statistics.submit()">'."\n";
   
       foreach (sort(keys(%$reports))) {
           next if($_ eq 'reportSelected');
           $Str .= '<option name="'.$_.'"';
           if($reports->{'reportSelected'} eq $reports->{$_}) {
               $Str .= ' selected=""';
           }
           $Str .= '>'.$reports->{$_}.'</option>'."\n";
       }
       $Str .= '</select></td>'."\n";
   
       $Str .= '<td align="center">';
       $Str .= &Apache::lonhtmlcommon::StatusOptions($status, 'Statistics');
       $Str .= '</td>'."\n";
   
       $Str .= '</tr></tbody></table>'."\n";
       $Str .= '<hr>'."\n";
   
       return $Str;
   }
   
 sub BuildStatistics {  sub BuildStatistics {
     my ($r)=@_;      my ($r)=@_;
   
     my $c = $r->connection;      my $c = $r->connection;
     my @studentInformation=('fullname','section','id','domain','username');      my @studentInformation=('fullname','section','id','domain','username',
     my @headings=('Full Name', 'Section', 'PID', 'Domain', 'User Name');                              'updateTime');
     my $spacePadding = '   ';      my @headings=('Full Name', 'Section', 'PID', 'Domain', 'User Name',
                     'Last Updated');
       my $spacing = '   ';
     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',
Line 441  sub BuildStatistics { Line 549  sub BuildStatistics {
     my $cacheDB = "/home/httpd/perl/tmp/$ENV{'user.name'}".      my $cacheDB = "/home/httpd/perl/tmp/$ENV{'user.name'}".
                   "_$ENV{'user.domain'}_$courseID\_statistics.db";                    "_$ENV{'user.domain'}_$courseID\_statistics.db";
   
     my %color=&setbgcolor(0);      my ($returnValue, $students) = &PrepareData($c, $cacheDB, 
     my ($returnValue, $students) = &PrepareData($c, $cacheDB);                                                  \@studentInformation, 
                                                   \@headings);
     if($returnValue ne 'OK') {      if($returnValue ne 'OK') {
         $r->print('<html><body>'.$returnValue."\n".'</body></html>');          $r->print('<html><body>'.$returnValue."\n".'</body></html>');
         return OK;          return OK;
Line 463  sub BuildStatistics { Line 572  sub BuildStatistics {
         $r->print(&Apache::lonhtmlcommon::Title('LON-CAPA Statistics'));          $r->print(&Apache::lonhtmlcommon::Title('LON-CAPA Statistics'));
         $r->print('<form name="Statistics" ');          $r->print('<form name="Statistics" ');
         $r->print('method="post" action="/adm/statistics">');          $r->print('method="post" action="/adm/statistics">');
         $r->print(&Apache::lonhtmlcommon::CreateStatisticsMainMenu(          $r->print(&CreateMainMenu($cache{'Status'}, \%reports));
                                                              $cache{'Status'},   
                                                              \%reports));  
         untie(%cache);          untie(%cache);
     } else {      } else {
         $r->print('<html><body>Unable to tie database.</body></html>');          $r->print('<html><body>Unable to tie database.</body></html>');
Line 475  sub BuildStatistics { Line 582  sub BuildStatistics {
     if($GoToPage eq 'Activity Log') {      if($GoToPage eq 'Activity Log') {
         &Apache::lonproblemstatistics::Activity();          &Apache::lonproblemstatistics::Activity();
     } elsif($GoToPage eq 'Problem Statistics') {      } elsif($GoToPage eq 'Problem Statistics') {
         $r->print(  
         &Apache::lonproblemstatistics::BuildProblemStatisticsPage($cacheDB,           &Apache::lonproblemstatistics::BuildProblemStatisticsPage($cacheDB, 
                                                                   $students,                                                                     $students, 
                                                                   $courseID,                                                                     $courseID, 
                                                                   $c,$r,                                                                    $c,$r);
   \%color));  
     } elsif($GoToPage eq 'Problem Analysis') {      } elsif($GoToPage eq 'Problem Analysis') {
         $r->print(          $r->print(
               &Apache::lonproblemanalysis::BuildProblemAnalysisPage($cacheDB));                &Apache::lonproblemanalysis::BuildProblemAnalysisPage($cacheDB));
     } elsif($GoToPage eq 'Student Assessment') {      } elsif($GoToPage eq 'Student Assessment') {
         $r->print(          $r->print(
             &Apache::lonstudentassessment::BuildStudentAssessmentPage($cacheDB,              &Apache::lonstudentassessment::BuildStudentAssessmentPage($cacheDB,
                                                                      $students,                                                              $students,
                                                                      $courseID,                                                              $courseID,
                                                                      $c));                                                              'Statistics',
                                                               \@headings,
                                                               $spacing,
                                                               \@studentInformation,
                                                               $r, $c));
     } elsif($GoToPage eq 'Analyze') {      } elsif($GoToPage eq 'Analyze') {
         $r->print(&Apache::lonproblemanalysis::BuildAnalyzePage($cacheDB,           $r->print(&Apache::lonproblemanalysis::BuildAnalyzePage($cacheDB, 
                                                                 $students,                                                                   $students, 
Line 500  sub BuildStatistics { Line 609  sub BuildStatistics {
         &Apache::lonproblemstatistics::BuildWrongGraph($r);          &Apache::lonproblemstatistics::BuildWrongGraph($r);
     } elsif($GoToPage eq 'Class list') {      } elsif($GoToPage eq 'Class list') {
         $r->print(&BuildClasslist($cacheDB, $students, \@studentInformation,          $r->print(&BuildClasslist($cacheDB, $students, \@studentInformation,
                                   \@headings, $spacePadding));                                    \@headings));
     }      }
   
     $r->print('</form>'."\n");      $r->print('</form>'."\n");
Line 515  sub BuildStatistics { Line 624  sub BuildStatistics {
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
   
   #    $jr = $r;
   
     unless(&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {      unless(&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";

Removed from v.1.31  
changed lines
  Added in v.1.36


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