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

matthew lon-capa-cvs@mail.lon-capa.org
Thu, 13 Feb 2003 14:49:16 -0000


matthew		Thu Feb 13 09:49:16 2003 EDT

  Modified files:              
    /loncom/interface	loncoursedata.pm 
  Log:
  Added &get_sequence_assessment_data(), which is entirely experimental and
  should not be used at this time.
  
  
Index: loncom/interface/loncoursedata.pm
diff -u loncom/interface/loncoursedata.pm:1.44 loncom/interface/loncoursedata.pm:1.45
--- loncom/interface/loncoursedata.pm:1.44	Tue Feb  4 20:39:32 2003
+++ loncom/interface/loncoursedata.pm	Thu Feb 13 09:49:16 2003
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # (Publication Handler
 #
-# $Id: loncoursedata.pm,v 1.44 2003/02/05 01:39:32 albertel Exp $
+# $Id: loncoursedata.pm,v 1.45 2003/02/13 14:49:16 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -261,6 +261,108 @@
 
 # ----- PROCESSING FUNCTIONS ---------------------------------------
 
+
+
+=pod
+
+=item &get_sequence_assessment_data()
+
+AT THIS TIME THE USE OF THIS FUNCTION IS *NOT* RECOMMENDED
+
+Use lonnavmaps to build a data structure describing the order and 
+assessment contents of each sequence in the current course.
+
+The returned structure is a hash reference. 
+
+{ title  => 'title',
+  symb   => 'symb',
+  source => '/s/o/u/r/c/e',
+  type  => (container|assessment),
+  contents     => [ {},{},{},{} ], # only for container
+  parts        => [11,13,15],      # only for assessment
+  response_ids => [12,14,16]       # only for assessment
+}
+
+$hash->{'contents'} is a reference to an array of hashes of the same structure.
+
+=cut
+
+sub get_sequence_assessment_data {
+    return undef;
+    my $fn=$ENV{'request.course.fn'};
+    &Apache::lonnet::logthis('filename = '.$fn);
+    ##
+    ## use navmaps
+    my $navmap = Apache::lonnavmaps::navmap->new($fn.".bd",$fn."_parms.db",1,0);
+    if (!defined($navmap)) {
+        return 'Can not open Coursemap';
+    }
+    my $iterator = $navmap->getIterator(undef, undef, undef, 1);
+    ##
+    ## Prime the pump 
+    ## 
+    ## We are going to loop until we run out of sequences/pages to explore for
+    ## resources.  This means we have to start out with something to look
+    ## at.
+    my $curRes = $iterator->next(); # BEGIN_MAP
+    $curRes = $iterator->next(); # The sequence itself
+    #
+    my $title = $curRes->title();
+    my $symb  = $curRes->symb();
+    my $src   = $curRes->src();
+    #
+    my @Nested_Sequences = ();   # Stack of sequences, keeps track of depth
+    my $top = { title    => $title,
+                symb     => $symb,
+                type     => 'container',
+                num_assess => 0,
+                contents   => [], };
+    push (@Nested_Sequences, $top);
+    #
+    # We need to keep track of which sequences contain homework problems
+    # 
+    while (scalar(@Nested_Sequences)) {
+        $curRes = $iterator->next();
+        my $currentmap = $Nested_Sequences[-1]; # Last one on the stack
+        if ($curRes == $iterator->BEGIN_MAP()) {
+            # get the map itself, instead of BEGIN_MAP
+            $curRes = $iterator->next(); 
+            $title = $curRes->title();
+            $symb  = $curRes->symb();
+            $src   = $curRes->src();
+            my $newmap = { title    => $title,
+                           src      => $src,
+                           symb     => $symb,
+                           type     => 'container',
+                           num_assess => 0,
+                           contents   => [],
+                       };
+            push (@{$currentmap->{'contents'}},$newmap); # this is permanent
+            push (@Nested_Sequences, $newmap); # this is a stack
+            next;
+        }
+        if ($curRes == $iterator->END_MAP()) {
+            pop(@Nested_Sequences);
+            next;
+        }
+        next if (! ref($curRes));
+        next if (! $curRes->is_problem() && !$curRes->randomout);
+        # Okay, from here on out we only deal with assessments
+        $title = $curRes->title();
+        $symb  = $curRes->symb();
+        $src   = $curRes->src();
+        my $parts = $curRes->parts();
+        my $assessment = { title => $title,
+                           src   => $src,
+                           symb  => $symb,
+                           type  => 'assessment',
+                       };
+        push(@{$currentmap->{'contents'}},$assessment);
+        $currentmap->{'num_assess'}++;
+    }
+    return $top;
+}
+
 =pod
 
 =item &ProcessTopResourceMap()
@@ -1251,7 +1353,7 @@
     my $WhatIWant;
     $WhatIWant = '(^version:|';
     $WhatIWant .= '^\d+:.+?:(resource\.\d+\.';
-    $WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$';
+    $WhatIWant .= '(solved|tries|previous|awarded|(\d+\.submission))\s*$';#'
     $WhatIWant .= '|timestamp)';
     $WhatIWant .= ')';