--- loncom/interface/loncoursedata.pm 2002/07/22 20:35:05 1.3 +++ loncom/interface/loncoursedata.pm 2002/07/30 21:31:48 1.8 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: loncoursedata.pm,v 1.3 2002/07/22 20:35:05 stredwic Exp $ +# $Id: loncoursedata.pm,v 1.8 2002/07/30 21:31:48 stredwic Exp $ # # Copyright Michigan State University Board of Trustees # @@ -157,7 +157,7 @@ sub DownloadClasslist { =pod -=item &DownloadStudentCourseInformation() +=item &DownloadCourseInformation() 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 @@ -181,22 +181,23 @@ database. =cut -sub DownloadStudentCourseInformation { - my ($name,$courseID,$lastDownloadTime)=@_; +sub DownloadCourseInformation { + my ($namedata,$courseID,$lastDownloadTime)=@_; my %courseData; - my ($studentName,$studentDomain) = split(/\:/,$name); + my ($name,$domain) = split(/\:/,$namedata); - my $modifiedTime = &GetFileTimestamp($studentDomain, $studentName, + my $modifiedTime = &GetFileTimestamp($domain, $name, $courseID.'.db', $Apache::lonnet::perlvar{'lonUsersDir'}); + if($lastDownloadTime >= $modifiedTime) { $courseData{'lastDownloadTime'}=time; $courseData{'UpToDate'} = 'true'; return \%courseData; } - # Download student course data - %courseData=&Apache::lonnet::dump($courseID, $studentDomain, $studentName); + # Download course data + %courseData=&Apache::lonnet::dump($courseID, $domain, $name); $courseData{'UpToDate'} = 'false'; $courseData{'lastDownloadTime'}=time; return \%courseData; @@ -336,6 +337,8 @@ sub ProcessTopResourceMap { ':'.$currentResourceID; } + $cache->{$currentResourceID.':source'} = + $hash{'src_'.$currentResourceID}; my $meta=$hash{'src_'.$currentResourceID}; # $cache->{$currentResourceID.':title'}= # &Apache::lonnet::metdata($meta,'title'); @@ -343,36 +346,49 @@ sub ProcessTopResourceMap { $hash{'title_'.$currentResourceID}; # Get Parts for problem - foreach (split(/\,/,&Apache::lonnet::metadata($meta,'keys'))) { - if($_=~/^stores\_(\d+)\_tries$/) { - my $Part=&Apache::lonnet::metadata($meta,$_.'.part'); - if(!defined($cache->{$currentSequence.':'. - $currentResourceID.':parts'})) { - $cache->{$currentSequence.':'.$currentResourceID. - ':parts'}=$Part; - } else { - $cache->{$currentSequence.':'.$currentResourceID. - ':parts'}.=':'.$Part; + my %beenHere; + foreach (split(/\,/,&Apache::lonnet::metadata($meta,'packages'))) { + if(/^\w+response_\d+.*/) { + my (undef, $partId, $responseId) = split(/_/,$_); + if($beenHere{'p:'.$partId} == 0) { + $beenHere{'p:'.$partId}++; + if(!defined($cache->{$currentSequence.':'. + $currentResourceID.':parts'})) { + $cache->{$currentSequence.':'.$currentResourceID. + ':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(/\,/, - &Apache::lonnet::metadata($meta,'packages'))) { - if($_=~/^optionresponse\_($Part)\_(\w+)$/) { - if(defined($cache->{'OptionResponses'})) { - $cache->{'OptionResponses'}.= ':::'. - $hash{'src_'.$currentResourceID}.'::'. - $hash{'title_'.$currentResourceID}.'::'. - $Part.'::'.$Problem; - } else { - $cache->{'OptionResponses'}= - $hash{'src_'.$currentResourceID}.'::'. - $hash{'title_'.$currentResourceID}.'::'. - $Part.'::'.$Problem; - } + if(/^optionresponse/ && + $beenHere{'o:'.$partId.':'.$currentResourceID} == 0) { + $beenHere{'o:'.$partId.$currentResourceID}++; + if(defined($cache->{'OptionResponses'})) { + $cache->{'OptionResponses'}.= ':::'. + $currentResourceID.':'. + $partId.':'.$responseId; + } else { + $cache->{'OptionResponses'}= $currentResourceID. + ':'.$partId.':'.$responseId; } } } - } - } + } + } # if resource == finish resource, then it is the end of a sequence/page if($currentResourceID eq $lastResourceID) { @@ -449,83 +465,6 @@ sub ProcessTopResourceMap { =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() Taking the class list dumped from &DownloadClasslist(), all the @@ -592,6 +531,7 @@ sub ProcessClasslist { $cache->{$name.':domain'}=$studentDomain; if(!defined($cache->{$name.':lastDownloadTime'})) { $cache->{$name.':lastDownloadTime'}='Not downloaded'; + $cache->{$name.':updateTime'}=' Not updated'; } my ($checkForError)=keys(%$studentInformation); @@ -635,6 +575,17 @@ sub ProcessClasslist { } $cache->{$name.':Status'}=$status; $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; @@ -648,7 +599,7 @@ sub ProcessClasslist { =item &ProcessStudentData() 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 $username:$domain:$keyFromCourseDatabase. The student username:domain is stored away signifying that the student's information has been downloaded and @@ -670,7 +621,7 @@ Output: None *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 will only exist if an error occured. The error is an error from -&DownloadStudentCourseInformation(). +&DownloadCourseInformation(). =back @@ -681,6 +632,12 @@ sub ProcessStudentData { if($courseData->{'UpToDate'} eq 'true') { $cache->{$name.':lastDownloadTime'}=$courseData->{'lastDownloadTime'}; + if($courseData->{'lastDownloadTime'} eq 'Not downloaded') { + $cache->{$name.':updateTime'} = ' Not updated'; + } else { + $cache->{$name.':updateTime'}= + localtime($courseData->{'lastDownloadTime'}); + } return; } @@ -694,6 +651,12 @@ sub ProcessStudentData { } $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) { $cache->{$name.':'.$_}=$courseData->{$_}; } @@ -701,6 +664,30 @@ sub ProcessStudentData { 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 --------------------------------------- =pod