--- loncom/interface/lonnavmaps.pm 2003/02/21 20:05:00 1.145 +++ loncom/interface/lonnavmaps.pm 2003/02/28 16:16:59 1.150 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.145 2003/02/21 20:05:00 bowersj2 Exp $ +# $Id: lonnavmaps.pm,v 1.150 2003/02/28 16:16:59 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -44,6 +44,7 @@ package Apache::lonnavmaps; use strict; use Apache::Constants qw(:common :http); use Apache::loncommon(); +use Apache::lonmenu(); use POSIX qw (floor strftime); my %navmaphash; @@ -152,11 +153,21 @@ sub real_handler { } $r->print("\n"); - $r->print("Navigate Course Contents"); + $r->print("Navigate Course Contents"); +# ------------------------------------------------------------ Get query string + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['register']); +# ----------------------------------------------------- Force menu registration + my $addentries=''; + if ($ENV{'form.register'}) { + $addentries=' onLoad="'.&Apache::lonmenu::loadevents(). + '" onUnload="'.&Apache::lonmenu::unloadevents().'"'; + $r->print(&Apache::lonmenu::registerurl(1)); + } # Header - $r->print(&Apache::loncommon::bodytag('Navigate Course Contents','', - '')); + $r->print(''. + &Apache::loncommon::bodytag('Navigate Course Contents','', + $addentries)); $r->print(''); $r->rflush(); @@ -178,7 +189,7 @@ sub real_handler { # renderer call my $render = render({ 'cols' => [0,1,2,3], 'url' => '/adm/navmaps', - 'printKey' => 1, + #'printKey' => 1, 'r' => $r}); $navmap->untieHashes(); @@ -1621,6 +1632,12 @@ sub parmval_real { Thus, this is suitable for cases where you don't want the structure, just a list of all resources. It is also suitable for finding out how many resources match a given description; for this use, if all you want to know is if I resources match the description, the bailout parameter will allow you to avoid potentially expensive enumeration of all matching resources. +=item * B(map, filterFunc, recursive): Convience method for + + scalar(retrieveResources($map, $filterFunc, $recursive, 1)) > 0 + +which will tell whether the map has resources matching the description in the filter function. + =cut sub getResourceByUrl { @@ -1661,7 +1678,50 @@ sub retrieveResources { return (); } - # UNFINISHED... I was checking in getResourceByUrl + # Get an iterator. + my $it = $self->getIterator($map->map_start(), $map->map_finish(), + !$recursive); + + my @resources = (); + + # Run down the iterator and collect the resources. + my $depth = 1; + $it->next(); + my $curRes = $it->next(); + + while ($depth > 0) { + if ($curRes == $it->BEGIN_MAP()) { + $depth++; + } + if ($curRes == $it->END_MAP()) { + $depth--; + } + + if (ref($curRes)) { + if (!&$filterFunc($curRes)) { + next; + } + + push @resources, $curRes; + + if ($bailout) { + return @resources; + } + } + + $curRes = $it->next(); + } + + return @resources; +} + +sub hasResource { + my $self = shift; + my $map = shift; + my $filterFunc = shift; + my $recursive = shift; + + return scalar($self->retrieveResources($map, $filterFunc, $recursive, 1)) > 0; } 1; @@ -2647,12 +2707,15 @@ sub extractParts { foreach (split(/\,/,$metadata)) { if ($_ =~ /^parameter\_(.*)\_opendate$/) { - push @{$self->{PARTS}}, $1; + my $part = $1; + # check to see if part is turned off. + if (! Apache::loncommon::check_if_partid_hidden($part, $self->symb())) { + push @{$self->{PARTS}}, $1; + } } } - # Is this possible to do in one line? - Jeremy my @sortedParts = sort @{$self->{PARTS}}; $self->{PARTS} = \@sortedParts; }