Diff for /loncom/interface/loncoursedata.pm between versions 1.3 and 1.9

version 1.3, 2002/07/22 20:35:05 version 1.9, 2002/07/30 23:07:10
Line 157  sub DownloadClasslist { Line 157  sub DownloadClasslist {
   
 =pod  =pod
   
 =item &DownloadStudentCourseInformation()  =item &DownloadCourseInformation()
   
 Dump of all the course information for a single student.  There is no  Dump of all the course information for a single student.  There is no
 pruning of data, it is all stored in a hash and returned.  It also  pruning of data, it is all stored in a hash and returned.  It also
Line 181  database. Line 181  database.
   
 =cut  =cut
   
 sub DownloadStudentCourseInformation {  sub DownloadCourseInformation {
     my ($name,$courseID,$lastDownloadTime)=@_;      my ($namedata,$courseID,$lastDownloadTime)=@_;
     my %courseData;      my %courseData;
     my ($studentName,$studentDomain) = split(/\:/,$name);      my ($name,$domain) = split(/\:/,$namedata);
   
     my $modifiedTime = &GetFileTimestamp($studentDomain, $studentName,      my $modifiedTime = &GetFileTimestamp($domain, $name,
                                       $courseID.'.db',                                         $courseID.'.db', 
                                       $Apache::lonnet::perlvar{'lonUsersDir'});                                        $Apache::lonnet::perlvar{'lonUsersDir'});
   
     if($lastDownloadTime >= $modifiedTime) {      if($lastDownloadTime >= $modifiedTime) {
         $courseData{'lastDownloadTime'}=time;          $courseData{'lastDownloadTime'}=time;
         $courseData{'UpToDate'} = 'true';          $courseData{'UpToDate'} = 'true';
         return \%courseData;          return \%courseData;
     }      }
   
     # Download student course data      # Download course data
     %courseData=&Apache::lonnet::dump($courseID, $studentDomain, $studentName);      %courseData=&Apache::lonnet::dump($courseID, $domain, $name);
     $courseData{'UpToDate'} = 'false';      $courseData{'UpToDate'} = 'false';
     $courseData{'lastDownloadTime'}=time;      $courseData{'lastDownloadTime'}=time;
     return \%courseData;      return \%courseData;
Line 336  sub ProcessTopResourceMap { Line 337  sub ProcessTopResourceMap {
     ':'.$currentResourceID;      ':'.$currentResourceID;
     }      }
   
               $cache->{$currentResourceID.':source'} = 
                   $hash{'src_'.$currentResourceID};
     my $meta=$hash{'src_'.$currentResourceID};      my $meta=$hash{'src_'.$currentResourceID};
 #            $cache->{$currentResourceID.':title'}=  #            $cache->{$currentResourceID.':title'}=
 #                &Apache::lonnet::metdata($meta,'title');  #                &Apache::lonnet::metdata($meta,'title');
             $cache->{$currentResourceID.':title'}=              $cache->{$currentResourceID.':title'}=
                 $hash{'title_'.$currentResourceID};                  $hash{'title_'.$currentResourceID};
               $cache->{$currentResourceID.':source'}=
                   $hash{'src_'.$currentResourceID};
   
             # Get Parts for problem              # Get Parts for problem
     foreach (split(/\,/,&Apache::lonnet::metadata($meta,'keys'))) {              my %beenHere;
  if($_=~/^stores\_(\d+)\_tries$/) {              foreach (split(/\,/,&Apache::lonnet::metadata($meta,'packages'))) {
     my $Part=&Apache::lonnet::metadata($meta,$_.'.part');                  if(/^\w+response_\d+.*/) {
                     if(!defined($cache->{$currentSequence.':'.                      my (undef, $partId, $responseId) = split(/_/,$_);
                                           $currentResourceID.':parts'})) {                      if($beenHere{'p:'.$partId} ==  0) {
                         $cache->{$currentSequence.':'.$currentResourceID.                          $beenHere{'p:'.$partId}++;
                                    ':parts'}=$Part;                          if(!defined($cache->{$currentSequence.':'.
                     } else {                                              $currentResourceID.':parts'})) {
                         $cache->{$currentSequence.':'.$currentResourceID.                              $cache->{$currentSequence.':'.$currentResourceID.
                                    ':parts'}.=':'.$Part;                                       ':parts'}=$partId;
                           } else {
                               $cache->{$currentSequence.':'.$currentResourceID.
                                        ':parts'}.=':'.$partId;
                           }
                       }
                       if($beenHere{'r:'.$partId.':'.$responseId} == 0) {
                           $beenHere{'r:'.$partId.':'.$responseId}++;
                           if(!defined($cache->{$currentSequence.':'.
                                                $currentResourceID.':'.$partId.
                                                ':responseIDs'})) {
                               $cache->{$currentSequence.':'.$currentResourceID.
                                        ':'.$partId.':responseIDs'}=$responseId;
                           } else {
                               $cache->{$currentSequence.':'.$currentResourceID.
                                        ':'.$partId.':responseIDs'}.=':'.
                                                                     $responseId;
                           }
                     }                      }
                     foreach (split(/\,/,                      if(/^optionresponse/ && 
                              &Apache::lonnet::metadata($meta,'packages'))) {                         $beenHere{'o:'.$partId.':'.$currentResourceID} == 0) {
                         if($_=~/^optionresponse\_($Part)\_(\w+)$/) {                          $beenHere{'o:'.$partId.$currentResourceID}++;
                             if(defined($cache->{'OptionResponses'})) {                          if(defined($cache->{'OptionResponses'})) {
                                 $cache->{'OptionResponses'}.= ':::'.                              $cache->{'OptionResponses'}.= ':::'.
                                     $hash{'src_'.$currentResourceID}.'::'.                                  $currentResourceID.':'.
                                     $hash{'title_'.$currentResourceID}.'::'.                                  $partId.':'.$responseId;
                                     $Part.'::'.$Problem;                          } else {
                             } else {                              $cache->{'OptionResponses'}= $currentResourceID.
                                 $cache->{'OptionResponses'}=                                  ':'.$partId.':'.$responseId;
                                     $hash{'src_'.$currentResourceID}.'::'.  
                                     $hash{'title_'.$currentResourceID}.'::'.  
                                     $Part.'::'.$Problem;  
                             }  
                         }                          }
                     }                      }
                 }                  }
     }              }
  }          }
   
  # if resource == finish resource, then it is the end of a sequence/page   # if resource == finish resource, then it is the end of a sequence/page
  if($currentResourceID eq $lastResourceID) {   if($currentResourceID eq $lastResourceID) {
Line 449  sub ProcessTopResourceMap { Line 467  sub ProcessTopResourceMap {
   
 =pod  =pod
   
 =item &ProcessSection()  
   
 Determine the section number for a student for the class.  A student can have   
 multiple sections for the same class.  The correct one is chosen.  
   
 =over 4  
   
 Input: $sectionData, $courseid, $ActiveFlag  
   
 $sectionData:  A pointer to a hash containing all section data for this   
 student for the class  
   
 $courseid:  The course ID.  
   
 $ActiveFlag:  The student's active status (Active/Expired)  
   
 Output: $oldsection, $cursection, or -1  
   
 $oldsection and $cursection and sections number that will be displayed in the   
 chart.  
   
 -1 is returned if an error occurs.  
   
 =back  
   
   
 sub ProcessSection {  
     my ($sectionData,$courseid,$ActiveFlag)=@_;  
     $courseid=~s/\_/\//g;  
     $courseid=~s/^(\w)/\/$1/;  
   
     my $cursection='-1';  
     my $oldend='-1';  
     my $status='Expired';  
     my $section='';  
     foreach my $key (keys (%$sectionData)) {  
  my $value = $sectionData->{$key};  
         if ($key=~/^$courseid(?:\/)*(\w+)*\_st$/) {  
     $section=$1;  
     if($key eq $courseid.'_st') {  
  $section='';  
     }  
   
     my ($dummy,$end,$start)=split(/\_/,$value);  
     my $now=time;  
             my $notactive=0;  
             if ($start) {  
                 if($now<$start) {  
                     $notactive=1;  
                 }  
             }  
             if($end) {  
                 if ($now>$end) {  
                     $notactive=1;  
                 }  
             }  
             if($notactive == 0) {  
                 $status='Active';  
                 $cursection=$section;  
                 last;  
             }  
             if($notactive == 1) {  
                 if($end > $oldend) {  
                     $cursection=$section;  
                     $oldend = $end;  
                 }  
             }  
  }  
     }  
   
     return ($cursections, $status);  
 }  
   
 =cut  
   
 =pod  
   
 =item &ProcessClasslist()  =item &ProcessClasslist()
   
 Taking the class list dumped from &DownloadClasslist(), all the   Taking the class list dumped from &DownloadClasslist(), all the 
Line 592  sub ProcessClasslist { Line 533  sub ProcessClasslist {
         $cache->{$name.':domain'}=$studentDomain;          $cache->{$name.':domain'}=$studentDomain;
         if(!defined($cache->{$name.':lastDownloadTime'})) {          if(!defined($cache->{$name.':lastDownloadTime'})) {
             $cache->{$name.':lastDownloadTime'}='Not downloaded';              $cache->{$name.':lastDownloadTime'}='Not downloaded';
               $cache->{$name.':updateTime'}=' Not updated';
         }          }
   
         my ($checkForError)=keys(%$studentInformation);          my ($checkForError)=keys(%$studentInformation);
Line 635  sub ProcessClasslist { Line 577  sub ProcessClasslist {
         }          }
         $cache->{$name.':Status'}=$status;          $cache->{$name.':Status'}=$status;
         $cache->{$name.':section'}=$sec;          $cache->{$name.':section'}=$sec;
   
           if($sec eq '' || !defined($sec) || $sec eq ' ') {
               $sec = 'none';
           }
           if(defined($cache->{'sectionList'})) {
               if($cache->{'sectionList'} !~ /(^$sec:|^$sec$|:$sec$|:$sec:)/) {
                   $cache->{'sectionList'} .= ':'.$sec;
               }
           } else {
               $cache->{'sectionList'} = $sec;
           }
     }      }
   
     $cache->{'ClasslistTimestamp'}=time;      $cache->{'ClasslistTimestamp'}=time;
Line 648  sub ProcessClasslist { Line 601  sub ProcessClasslist {
 =item &ProcessStudentData()  =item &ProcessStudentData()
   
 Takes the course data downloaded for a student in   Takes the course data downloaded for a student in 
 &DownloadStudentCourseInformation() and breaks it up into key value pairs  &DownloadCourseInformation() and breaks it up into key value pairs
 to be stored in the cached data.  The keys are comprised of the   to be stored in the cached data.  The keys are comprised of the 
 $username:$domain:$keyFromCourseDatabase.  The student username:domain is  $username:$domain:$keyFromCourseDatabase.  The student username:domain is
 stored away signifying that the student's information has been downloaded and   stored away signifying that the student's information has been downloaded and 
Line 670  Output: None Line 623  Output: None
 *NOTE:  There is no output, but an error message is stored away in the cache   *NOTE:  There is no output, but an error message is stored away in the cache 
 data.  This is checked in &FormatStudentData().  The key username:domain:error   data.  This is checked in &FormatStudentData().  The key username:domain:error 
 will only exist if an error occured.  The error is an error from   will only exist if an error occured.  The error is an error from 
 &DownloadStudentCourseInformation().  &DownloadCourseInformation().
   
 =back  =back
   
Line 681  sub ProcessStudentData { Line 634  sub ProcessStudentData {
   
     if($courseData->{'UpToDate'} eq 'true') {      if($courseData->{'UpToDate'} eq 'true') {
         $cache->{$name.':lastDownloadTime'}=$courseData->{'lastDownloadTime'};          $cache->{$name.':lastDownloadTime'}=$courseData->{'lastDownloadTime'};
           if($courseData->{'lastDownloadTime'} eq 'Not downloaded') {
               $cache->{$name.':updateTime'} = ' Not updated';
           } else {
               $cache->{$name.':updateTime'}=
                   localtime($courseData->{'lastDownloadTime'});
           }
         return;          return;
     }      }
   
Line 694  sub ProcessStudentData { Line 653  sub ProcessStudentData {
     }      }
   
     $cache->{$name.':lastDownloadTime'}=$courseData->{'lastDownloadTime'};      $cache->{$name.':lastDownloadTime'}=$courseData->{'lastDownloadTime'};
       if($courseData->{'lastDownloadTime'} eq 'Not downloaded') {
           $cache->{$name.':updateTime'} = ' Not updated';
       } else {
           $cache->{$name.':updateTime'}=
               localtime($courseData->{'lastDownloadTime'});
       }
     foreach (@courseKeys) {      foreach (@courseKeys) {
         $cache->{$name.':'.$_}=$courseData->{$_};          $cache->{$name.':'.$_}=$courseData->{$_};
     }      }
Line 701  sub ProcessStudentData { Line 666  sub ProcessStudentData {
     return;      return;
 }  }
   
   sub LoadDiscussion {
       my ( $courseID)=@_;
       my %Discuss=();
       my %contrib=&Apache::lonnet::dump(
                   $courseID,
                   $ENV{'course.'.$courseID.'.domain'},
                   $ENV{'course.'.$courseID.'.num'});
     
       #my %contrib=&DownloadCourseInformation($name, $courseID, 0);
   
       foreach my $temp(keys %contrib) {
    if ($temp=~/^version/) {
       my $ver=$contrib{$temp};
       my ($dummy,$prb)=split(':',$temp);
       for (my $idx=1; $idx<=$ver; $idx++ ) {
    my $name=$contrib{"$idx:$prb:sendername"};
    $Discuss{"$name:$prb"}=$idx;
       }
    }
       }       
   
       return \%Discuss;
   }
   
 # ----- END PROCESSING FUNCTIONS ---------------------------------------  # ----- END PROCESSING FUNCTIONS ---------------------------------------
   
 =pod  =pod

Removed from v.1.3  
changed lines
  Added in v.1.9


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