--- loncom/interface/loncoursedata.pm 2002/07/30 23:07:10 1.9 +++ loncom/interface/loncoursedata.pm 2002/08/03 18:47:24 1.11 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: loncoursedata.pm,v 1.9 2002/07/30 23:07:10 minaeibi Exp $ +# $Id: loncoursedata.pm,v 1.11 2002/08/03 18:47:24 stredwic Exp $ # # Copyright Michigan State University Board of Trustees # @@ -197,6 +197,12 @@ sub DownloadCourseInformation { } # Download course data + my $WhatIWant = '(version:(\w|\/|\.)+?$|'; + $WhatIWant .= '\d+?:(\w|\/|\.)+?:(resource\.\d+\.'; + $WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))'; + $WhatIWant .= '|timestamp)'; + $WhatIWant .= ')'; +# %courseData=&Apache::lonnet::dump($courseID, $domain, $name, $WhatIWant); %courseData=&Apache::lonnet::dump($courseID, $domain, $name); $courseData{'UpToDate'} = 'false'; $courseData{'lastDownloadTime'}=time; @@ -255,7 +261,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++; @@ -278,13 +284,16 @@ sub ProcessTopResourceMap { $currentSequence=-1; my $topLevelSequenceNumber = $currentSequence; + my %sequenceRecord; while(1) { if($c->aborted()) { last; } # HANDLE NEW SEQUENCE! #if page || sequence - if(defined($hash{'map_pc_'.$hash{'src_'.$currentResourceID}})) { + if(defined($hash{'map_pc_'.$hash{'src_'.$currentResourceID}}) && + !defined($sequenceRecord{$currentResourceID})) { + $sequenceRecord{$currentResourceID}++; push(@sequences, $currentSequence); push(@currentResource, $currentResourceID); push(@finishResource, $lastResourceID); @@ -322,7 +331,10 @@ sub ProcessTopResourceMap { my $partB=$2; if($hash{'src_'.$currentResourceID}=~ /\.(problem|exam|quiz|assess|survey|form)$/ && - $partA eq $currentSequence) { + $partA eq $currentSequence && + !defined($sequenceRecord{$currentSequence.':'. + $currentResourceID})) { + $sequenceRecord{$currentSequence.':'.$currentResourceID}++; my $Problem = &Apache::lonnet::symbclean( &Apache::lonnet::declutter($hash{'map_id_'.$partA}). '___'.$partB.'___'. @@ -337,8 +349,6 @@ sub ProcessTopResourceMap { ':'.$currentResourceID; } - $cache->{$currentResourceID.':source'} = - $hash{'src_'.$currentResourceID}; my $meta=$hash{'src_'.$currentResourceID}; # $cache->{$currentResourceID.':title'}= # &Apache::lonnet::metdata($meta,'title'); @@ -439,17 +449,24 @@ sub ProcessTopResourceMap { if($currentSequence eq $topLevelSequenceNumber) { last; } - } + } # MOVE!!! # move to next resource unless(defined($hash{'to_'.$currentResourceID})) { # big problem, need to handle. Next is probably wrong + my $errorMessage = 'Big problem in '; + $errorMessage .= 'loncoursedata::ProcessTopLevelMap.'; + $errorMessage .= ' bighash to_$currentResourceID not defined!'; + &Apache::lonnet::logthis($errorMessage); last; } my @nextResources=(); foreach (split(/\,/,$hash{'to_'.$currentResourceID})) { - push(@nextResources, $hash{'goesto_'.$_}); + if(!defined($sequenceRecord{$currentSequence.':'. + $hash{'goesto_'.$_}})) { + push(@nextResources, $hash{'goesto_'.$_}); + } } push(@currentResource, @nextResources); # Set the next resource to be processed @@ -531,6 +548,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'; @@ -798,9 +816,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;