--- loncom/interface/lonnavmaps.pm 2003/02/21 21:40:07 1.146 +++ loncom/interface/lonnavmaps.pm 2003/03/08 21:16:38 1.155 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.146 2003/02/21 21:40:07 bowersj2 Exp $ +# $Id: lonnavmaps.pm,v 1.155 2003/03/08 21:16:38 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,12 +38,15 @@ # YEAR=2002 # 1/1 Gerd Kortemeyer # Oct-Nov Jeremy Bowers +# YEAR=2003 +# Jeremy Bowers ... lots of days 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 +155,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,'','',$ENV{'form.register'})); $r->print(''); $r->rflush(); @@ -175,10 +188,36 @@ sub real_handler { return OK; } + # See if there's only one map in the top-level... if so, + # automatically display it + my $iterator = $navmap->getIterator(undef, undef, undef, 0); + my $depth = 1; + $iterator->next(); + my $curRes = $iterator->next(); + my $sequenceCount = 0; + my $sequenceId; + while ($depth > 0) { + if ($curRes == $iterator->BEGIN_MAP()) { $depth++; } + if ($curRes == $iterator->END_MAP()) { $depth--; } + + if (ref($curRes) && $curRes->is_sequence()) { + $sequenceCount++; + $sequenceId = $curRes->map_pc(); + } + + $curRes = $iterator->next(); + } + + if ($sequenceCount == 1) { + # The automatic iterator creation in the render call + # will pick this up. + $ENV{'form.filter'} = "$sequenceId"; + } + # renderer call my $render = render({ 'cols' => [0,1,2,3], 'url' => '/adm/navmaps', - 'printKey' => 1, + 'suppressNavmap' => 1, 'r' => $r}); $navmap->untieHashes(); @@ -525,7 +564,9 @@ Most of these parameters are only useful =item * B: If true, print the "Close all folders" or "open all folders" links. Default is true. -=item * B: A function that takes the resource object as its only parameter and returns a true or false value. If true, the resource is displayed. If false, it is simply skipped in the display. By default, all resources are showne. +=item * B: A function that takes the resource object as its only parameter and returns a true or false value. If true, the resource is displayed. If false, it is simply skipped in the display. By default, all resources are shown. + +=item * B: If true, will not display Navigate Content resources. Default to false. =back @@ -804,6 +845,7 @@ sub render { my $here; my $jump; my $currentJumpIndex = setDefault($args->{'currentJumpIndex'}, 0); + my $suppressNavmap = setDefault($args->{'suppressNavmap'}, 0); my $currentJumpDelta = 2; # change this to change how many resources are displayed # before the current resource when using #current @@ -1070,6 +1112,12 @@ sub render { next; } + # If we're suppressing navmaps and this is a navmap, continue on + if ($suppressNavmap && $curRes->src() =~ /^\/adm\/navmaps/) { + $curRes = $it->next(); + next; + } + # Does it have multiple parts? $args->{'multipart'} = 0; $args->{'condensed'} = 0; @@ -1181,7 +1229,7 @@ sub render { $result .= " \n"; $args->{'isNewBranch'} = 0; } - + if ($r && $rownum % 20 == 0) { $r->print($result); $result = ""; @@ -2680,32 +2728,39 @@ sub countParts { sub extractParts { my $self = shift; - return if ($self->{PARTS}); + return if (defined($self->{PARTS})); return if ($self->ext); $self->{PARTS} = []; # Retrieve part count, if this is a problem if ($self->is_problem()) { - my $metadata = &Apache::lonnet::metadata($self->src(), 'allpossiblekeys'); + my $metadata = &Apache::lonnet::metadata($self->src(), 'packages'); if (!$metadata) { $self->{RESOURCE_ERROR} = 1; $self->{PARTS} = []; return; } - foreach (split(/\,/,$metadata)) { - if ($_ =~ /^parameter\_(.*)\_opendate$/) { - push @{$self->{PARTS}}, $1; + if ($_ =~ /^part_(.*)$/) { + 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; } + # Ensure part 0 is included at the beginning. + if ($self->{PARTS}->[0] ne '0') { + unshift @{$self->{PARTS}}, '0'; + } + return; }