--- loncom/interface/loncoursedata.pm 2002/08/01 20:49:06 1.10 +++ 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.10 2002/08/01 20:49:06 stredwic 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; @@ -246,7 +252,7 @@ smoothly. =cut sub ProcessTopResourceMap { - my ($cache,$c,$r)=@_; + my ($cache,$c)=@_; my %hash; my $fn=$ENV{'request.course.fn'}; if(-e "$fn.db") { @@ -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.'___'. @@ -437,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