--- loncom/interface/loncoursedata.pm 2003/02/05 01:39:32 1.44 +++ loncom/interface/loncoursedata.pm 2003/02/13 14:49:16 1.45 @@ -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 @@ with stopping downloading then can not t # ----- 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 @@ sub DownloadStudentCourseDataSeparate { 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 .= ')';