[LON-CAPA-cvs] cvs: loncom /interface loncoursedata.pm

stredwic lon-capa-cvs@mail.lon-capa.org
Sat, 03 Aug 2002 18:47:25 -0000


stredwic		Sat Aug  3 14:47:25 2002 EDT

  Modified files:              
    /loncom/interface	loncoursedata.pm 
  Log:
  Was not handling branches and circle resource paths correctly.  Adding
  in checks for already visited sequences and problems seemed to fix it.
  I get all the sequences in student assessment for BS111 now.
  
  
Index: loncom/interface/loncoursedata.pm
diff -u loncom/interface/loncoursedata.pm:1.10 loncom/interface/loncoursedata.pm:1.11
--- loncom/interface/loncoursedata.pm:1.10	Thu Aug  1 16:49:06 2002
+++ loncom/interface/loncoursedata.pm	Sat Aug  3 14:47:24 2002
@@ -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 @@
     }
 
     # 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 @@
 =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 @@
     $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 @@
         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 @@
 	    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