--- loncom/interface/loncoursedata.pm 2002/12/11 21:41:02 1.40 +++ 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.40 2002/12/11 21:41:02 minaeibi Exp $ +# $Id: loncoursedata.pm,v 1.45 2003/02/13 14:49:16 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -218,7 +218,8 @@ sub DownloadCourseInformation { $courseID.'.db', $Apache::lonnet::perlvar{'lonUsersDir'}); - if($lastDownloadTime >= $modifiedTime && $modifiedTime >= 0) { + if($lastDownloadTime ne 'Not downloaded' && + $lastDownloadTime >= $modifiedTime && $modifiedTime >= 0) { # Data is not gathered so return UpToDate as true. This # will be interpreted in ProcessClasslist $courseData{$namedata.':lastDownloadTime'}=time; @@ -260,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() @@ -519,9 +622,9 @@ sub ProcessTopResourceMap { # big problem, need to handle. Next is probably wrong my $errorMessage = 'Big problem in '; $errorMessage .= 'loncoursedata::ProcessTopLevelMap.'; - $errorMessage .= ' bighash to_$currentResourceID not defined!'; + $errorMessage .= " bighash to_$currentResourceID not defined!"; &Apache::lonnet::logthis($errorMessage); - last; + if (!defined($currentResourceID)) {last;} } my @nextResources=(); foreach (split(/\,/,$hash{'to_'.$currentResourceID})) { @@ -1180,7 +1283,7 @@ sub DownloadStudentCourseData { 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 .= ')'; # $WhatIWant = '.'; @@ -1250,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 .= ')';