--- loncom/interface/loncoursedata.pm 2002/07/26 16:22:09 1.7 +++ loncom/interface/loncoursedata.pm 2002/08/01 20:49:06 1.10 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: loncoursedata.pm,v 1.7 2002/07/26 16:22:09 stredwic Exp $ +# $Id: loncoursedata.pm,v 1.10 2002/08/01 20:49:06 stredwic Exp $ # # Copyright Michigan State University Board of Trustees # @@ -246,7 +246,7 @@ smoothly. =cut sub ProcessTopResourceMap { - my ($cache,$c)=@_; + my ($cache,$c,$r)=@_; my %hash; my $fn=$ENV{'request.course.fn'}; if(-e "$fn.db") { @@ -255,7 +255,7 @@ sub ProcessTopResourceMap { if($c->aborted()) { return; } - if(tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER,0640)) { + if(tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) { last; } $tieTries++; @@ -342,38 +342,53 @@ sub ProcessTopResourceMap { # &Apache::lonnet::metdata($meta,'title'); $cache->{$currentResourceID.':title'}= $hash{'title_'.$currentResourceID}; + $cache->{$currentResourceID.':source'}= + $hash{'src_'.$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) { @@ -514,6 +529,7 @@ sub ProcessClasslist { $cache->{$name.':username'}=$studentName; $cache->{$name.':domain'}=$studentDomain; + # Initialize timestamp for student if(!defined($cache->{$name.':lastDownloadTime'})) { $cache->{$name.':lastDownloadTime'}='Not downloaded'; $cache->{$name.':updateTime'}=' Not updated'; @@ -781,9 +797,9 @@ sub TestCacheData { while($tieTries < $totalDelay) { my $result=0; if($isCached) { - $result=tie(%testData,'GDBM_File',$ChartDB,&GDBM_READER,0640); + $result=tie(%testData,'GDBM_File',$ChartDB,&GDBM_READER(),0640); } else { - $result=tie(%testData,'GDBM_File',$ChartDB,&GDBM_NEWDB,0640); + $result=tie(%testData,'GDBM_File',$ChartDB,&GDBM_NEWDB(),0640); } if($result) { last;