Diff for /loncom/interface/loncoursedata.pm between versions 1.17 and 1.21

version 1.17, 2002/08/14 21:51:51 version 1.21, 2002/08/28 18:29:22
Line 61  use GDBM_File; Line 61  use GDBM_File;
   
 This section contains all the files that get data from other servers   This section contains all the files that get data from other servers 
 and/or itself.  There is one function that has a call to get remote  and/or itself.  There is one function that has a call to get remote
 information but isn't included here which is ProcessTopLevelMap.  The  information but is not included here which is ProcessTopLevelMap.  The
 usage was small enough to be ignored, but that portion may be moved  usage was small enough to be ignored, but that portion may be moved
 here in the future.  here in the future.
   
Line 79  collecting a classlist for the course th Line 79  collecting a classlist for the course th
   
 =over 4  =over 4
   
 Input: $courseID, $c  Input: $courseID, $lastDownloadTime, $c
   
 $courseID:  The id of the course  $courseID:  The id of the course
   
   $lastDownloadTime: I am not sure.
   
 $c: The connection class that can determine if the browser has aborted.  It  $c: The connection class that can determine if the browser has aborted.  It
 is used to short circuit this function so that it doesn't continue to   is used to short circuit this function so that it does not continue to 
 get information when there is no need.  get information when there is no need.
   
 Output: \%classlist  Output: \%classlist
Line 119  sub DownloadClasslist { Line 121  sub DownloadClasslist {
     }      }
   
     %classlist=&Apache::lonnet::dump('classlist',$courseDomain, $courseNumber);      %classlist=&Apache::lonnet::dump('classlist',$courseDomain, $courseNumber);
     my ($checkForError)=keys (%classlist);      foreach(keys (%classlist)) {
     if($checkForError =~ /^(con_lost|error|no_such_host)/i) {          if(/^(con_lost|error|no_such_host)/i) {
         return \%classlist;              return \%classlist;
           }
     }      }
   
     foreach my $name (keys(%classlist)) {      foreach my $name (keys(%classlist)) {
         if($c->aborted()) {          if((defined($c) && ($c->aborted())) {
             $classlist{'error'}='aborted';              $classlist{'error'}='aborted';
             return \%classlist;              return \%classlist;
         }          }
Line 546  sub ProcessClasslist { Line 549  sub ProcessClasslist {
         if($c->aborted()) {          if($c->aborted()) {
             return ();              return ();
         }          }
         push(@names,$name);  
         my $studentInformation = $classlist->{$name.':studentInformation'},          my $studentInformation = $classlist->{$name.':studentInformation'},
         my $sectionData = $classlist->{$name.':sections'},          my $sectionData = $classlist->{$name.':sections'},
         my $date = $classlist->{$name},          my $date = $classlist->{$name},
Line 560  sub ProcessClasslist { Line 562  sub ProcessClasslist {
             $cache->{$name.':updateTime'}=' Not updated';              $cache->{$name.':updateTime'}=' Not updated';
         }          }
   
         my ($checkForError)=keys(%$studentInformation);          my $error = 0;
         if($checkForError =~ /^(con_lost|error|no_such_host)/i) {          foreach(keys(%$studentInformation)) {
             $cache->{$name.':error'}=              if(/^(con_lost|error|no_such_host)/i) {
                 'Could not download student environment data.';                  $cache->{$name.':error'}=
             $cache->{$name.':fullname'}='';                      'Could not download student environment data.';
             $cache->{$name.':id'}='';                  $cache->{$name.':fullname'}='';
         } else {                  $cache->{$name.':id'}='';
             $cache->{$name.':fullname'}=&ProcessFullName(                  $error = 1;
               }
           }
           next if($error);
           push(@names,$name);
           $cache->{$name.':fullname'}=&ProcessFullName(
                                           $studentInformation->{'lastname'},                                            $studentInformation->{'lastname'},
                                           $studentInformation->{'generation'},                                            $studentInformation->{'generation'},
                                           $studentInformation->{'firstname'},                                            $studentInformation->{'firstname'},
                                           $studentInformation->{'middlename'});                                            $studentInformation->{'middlename'});
             $cache->{$name.':id'}=$studentInformation->{'id'};          $cache->{$name.':id'}=$studentInformation->{'id'};
         }  
   
         my ($end, $start)=split(':',$date);          my ($end, $start)=split(':',$date);
         $courseID=~s/\_/\//g;          $courseID=~s/\_/\//g;
Line 1013  sub DownloadStudentCourseData { Line 1019  sub DownloadStudentCourseData {
     my $studentCount = scalar(@$students);      my $studentCount = scalar(@$students);
     my %cache;      my %cache;
   
   
     my $WhatIWant;      my $WhatIWant;
     $WhatIWant = '(^version:(\w|\/|\.|-)+?$|';      $WhatIWant = '(^version:|';
     $WhatIWant .= '^\d+:(\w|\/|\.|-)+?:(resource\.\d+\.';      $WhatIWant .= '^\d+:.+?:(resource\.\d+\.';
     $WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$';      $WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$';
     $WhatIWant .= '|timestamp)';      $WhatIWant .= '|timestamp)';
     $WhatIWant .= ')';      $WhatIWant .= ')';
   #    $WhatIWant = '.';
   
     if($status eq 'true') {      if($status eq 'true') {
         &Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading);          &Apache::lonhtmlcommon::Create_PrgWin($r, $title, $heading);
Line 1078  sub DownloadStudentCourseDataSeparate { Line 1086  sub DownloadStudentCourseDataSeparate {
     my $heading = 'Download Course Data';      my $heading = 'Download Course Data';
   
     my $WhatIWant;      my $WhatIWant;
     $WhatIWant = '(^version:(\w|\/|\.|-)+?$|';      $WhatIWant = '(^version:|';
     $WhatIWant .= '^\d+:(\w|\/|\.|-)+?:(resource\.\d+\.';      $WhatIWant .= '^\d+:.+?:(resource\.\d+\.';
     $WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$';      $WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$';
     $WhatIWant .= '|timestamp)';      $WhatIWant .= '|timestamp)';
     $WhatIWant .= ')';      $WhatIWant .= ')';
Line 1087  sub DownloadStudentCourseDataSeparate { Line 1095  sub DownloadStudentCourseDataSeparate {
     &CheckForResidualDownload($courseID, $cacheDB, $students, $c);      &CheckForResidualDownload($courseID, $cacheDB, $students, $c);
   
     my %cache;      my %cache;
     my %downloadData;  
     unless(tie(%downloadData,'GDBM_File',$residualFile,&GDBM_NEWDB(),0640)) {  
         return 'Failed to tie temporary download hash.';  
     }  
   
     my $studentCount = scalar(@$students);      my $studentCount = scalar(@$students);
     if($status eq 'true') {      if($status eq 'true') {
Line 1100  sub DownloadStudentCourseDataSeparate { Line 1104  sub DownloadStudentCourseDataSeparate {
     my $displayString='';      my $displayString='';
     foreach (@$students) {      foreach (@$students) {
         if($c->aborted()) {          if($c->aborted()) {
             untie(%downloadData);  
             return 'Aborted';              return 'Aborted';
         }          }
   
Line 1118  sub DownloadStudentCourseDataSeparate { Line 1121  sub DownloadStudentCourseDataSeparate {
         }          }
   
         if($c->aborted()) {          if($c->aborted()) {
             untie(%downloadData);  
             return 'Aborted';              return 'Aborted';
         }          }
   
Line 1127  sub DownloadStudentCourseDataSeparate { Line 1129  sub DownloadStudentCourseDataSeparate {
             my $courseData =               my $courseData = 
                 &DownloadCourseInformation($_, $courseID, $downloadTime,                  &DownloadCourseInformation($_, $courseID, $downloadTime,
                                            $WhatIWant);                                             $WhatIWant);
               my %downloadData;
               unless(tie(%downloadData,'GDBM_File',$residualFile,
                          &GDBM_WRCREAT(),0640)) {
                   return 'Failed to tie temporary download hash.';
               }
             foreach my $key (keys(%$courseData)) {              foreach my $key (keys(%$courseData)) {
                 $downloadData{$key} = $courseData->{$key};                  $downloadData{$key} = $courseData->{$key};
                 if($key =~ /^(con_lost|error|no_such_host)/i) {                  if($key =~ /^(con_lost|error|no_such_host)/i) {
Line 1140  sub DownloadStudentCourseDataSeparate { Line 1147  sub DownloadStudentCourseDataSeparate {
                 }                  }
                 $downloadData{$_.':error'} = 'No course data for '.$_;                  $downloadData{$_.':error'} = 'No course data for '.$_;
             }              }
               untie(%downloadData);
         }          }
     }      }
     if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); }      if($status eq 'true') { &Apache::lonhtmlcommon::Close_PrgWin($r); }
   
     untie(%downloadData);  
     return &CheckForResidualDownload($cacheDB, 'true', 'true',       return &CheckForResidualDownload($cacheDB, 'true', 'true', 
                                      $courseID, $r, $c);                                       $courseID, $r, $c);
 }  }
Line 1154  sub CheckForResidualDownload { Line 1161  sub CheckForResidualDownload {
   
     my $residualFile = '/home/httpd/perl/tmp/'.$courseID.'DownloadFile.db';      my $residualFile = '/home/httpd/perl/tmp/'.$courseID.'DownloadFile.db';
     if(!-e $residualFile) {      if(!-e $residualFile) {
         return 'File does not exist';          return 'OK';
     }      }
   
     my %downloadData;      my %downloadData;
Line 1167  sub CheckForResidualDownload { Line 1174  sub CheckForResidualDownload {
         return 'Can not tie database for check for residual download: cacheDB';          return 'Can not tie database for check for residual download: cacheDB';
     }      }
   
     my @dataKeys=keys(%downloadData);  
     my @students=();      my @students=();
     my %checkStudent;      my %checkStudent;
     foreach(@dataKeys) {      my $key;
         my @temp = split(':', $_);      while(($key, undef) = each %downloadData) {
           my @temp = split(':', $key);
         my $student = $temp[0].':'.$temp[1];          my $student = $temp[0].':'.$temp[1];
         if(!defined($checkStudent{$student})) {          if(!defined($checkStudent{$student})) {
             $checkStudent{$student}++;              $checkStudent{$student}++;
Line 1191  sub CheckForResidualDownload { Line 1198  sub CheckForResidualDownload {
         last if($c->aborted());          last if($c->aborted());
   
         if($status eq 'true') {          if($status eq 'true') {
             my $displayString = $count.'/'.$studentCount.': '.$_;              my $displayString = $count.'/'.$studentCount.': '.$name;
             &Apache::lonhtmlcommon::Update_PrgWin($displayString, $r);              &Apache::lonhtmlcommon::Update_PrgWin($displayString, $r);
         }          }
   
Line 1200  sub CheckForResidualDownload { Line 1207  sub CheckForResidualDownload {
         } else {          } else {
             &ProcessStudentData(\%cache, \%downloadData, $name);              &ProcessStudentData(\%cache, \%downloadData, $name);
         }          }
         foreach (@dataKeys) {  
             if(/^$name/) {  
                 delete $downloadData{$_};  
             }  
         }  
         $count++;          $count++;
     }      }
   

Removed from v.1.17  
changed lines
  Added in v.1.21


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