--- loncom/interface/lonnavmaps.pm 2002/10/29 20:20:45 1.92
+++ loncom/interface/lonnavmaps.pm 2002/11/01 18:47:26 1.95
@@ -2,7 +2,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.92 2002/10/29 20:20:45 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.95 2002/11/01 18:47:26 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -837,19 +837,37 @@ sub new_handle {
''));
$r->print('');
my $desc=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- if (defined($desc)) { $r->print("
$desc
\n"); }
+ $r->print('');
+ my $condition = 0;
+ if ($ENV{'form.condition'}) {
+ $condition = 1;
+ }
+
+ if ($condition) {
+ $r->print('Close All Folders');
} else {
- $r->print(' Discussions'.
- '
New message (click to open)');
+ $r->print('Open All Folders');
}
+ $r->print('
');
+ $r->rflush();
+
# Now that we've displayed some stuff to the user, init the navmap
$navmap->init();
@@ -929,17 +947,6 @@ sub new_handle {
my $queryAdd = "postdata=" . &Apache::lonnet::escape($currenturl) .
"&alreadyHere=1";
- my $condition = 0;
- if ($ENV{'form.condition'}) {
- $condition = 1;
- }
-
- if ($condition) {
- $r->print('Close All Folders
');
- } else {
- $r->print('Open All Folders
');
- }
-
# Begin the HTML table
# four cols: resource + indent, chat+feedback, icon, text string
$r->print('
' ."\n");
@@ -1649,7 +1656,7 @@ sub new {
}
sub init {
- my $self = $self;
+ my $self = shift;
# If the course opt hash and the user opt hash should be generated,
# generate them
@@ -1769,7 +1776,7 @@ sub courseMapDefined {
sub getIterator {
my $self = shift;
- my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift,
+ my $iterator = Apache::lonnavmaps::DFSiterator->new($self, shift, shift,
shift, undef, shift,
$ENV{'form.direction'});
return $iterator;
@@ -2028,6 +2035,59 @@ sub END_BRANCH { return 4; } # end of
sub FORWARD { return 1; } # go forward
sub BACKWARD { return 2; }
+sub new {
+ # magic invocation to create a class instance
+ my $proto = shift;
+ my $class = ref($proto) || $proto;
+ my $self = {};
+
+ $self->{NAV_MAP} = shift;
+ return undef unless ($self->{NAV_MAP});
+
+ # Handle the parameters
+ $self->{FIRST_RESOURCE} = shift || $self->{NAV_MAP}->firstResource();
+ $self->{FINISH_RESOURCE} = shift || $self->{NAV_MAP}->finishResource();
+
+ # If the given resources are just the ID of the resource, get the
+ # objects
+ if (!ref($self->{FIRST_RESOURCE})) { $self->{FIRST_RESOURCE} =
+ $self->{NAV_MAP}->getById($self->{FIRST_RESOURCE}); }
+ if (!ref($self->{FINISH_RESOURCE})) { $self->{FINISH_RESOURCE} =
+ $self->{NAV_MAP}->getById($self->{FINISH_RESOURCE}); }
+
+ $self->{FILTER} = shift;
+
+ # A hash, used as a set, of resource already seen
+ $self->{ALREADY_SEEN} = shift;
+ if (!defined($self->{ALREADY_SEEN})) { $self->{ALREADY_SEEN} = {} };
+ $self->{CONDITION} = shift;
+
+ # Now, we need to pre-process the map, by walking forward and backward
+ # over the parts of the map we're going to look at.
+
+ # Now we're ready to start iterating.
+}
+
+1;
+
+package Apache::lonnavmaps::DFSiterator;
+
+# UNDOCUMENTED: This is a private library, it should not generally be used
+# by the outside world. What it does is walk through the nav map in a
+# depth-first fashion. This is not appropriate for most uses, but it is
+# used by the main iterator for pre-processing. It also is able to isolate
+# much of the complexity of the main iterator, so the main iterator is much
+# simpler.
+
+# Here are the tokens for the iterator, replicated from iterator for convenience:
+
+sub BEGIN_MAP { return 1; } # begining of a new map
+sub END_MAP { return 2; } # end of the map
+sub BEGIN_BRANCH { return 3; } # beginning of a branch
+sub END_BRANCH { return 4; } # end of a branch
+sub FORWARD { return 1; } # go forward
+sub BACKWARD { return 2; }
+
# Params: nav map, start resource, end resource, filter, condition,
# already seen hash ref
@@ -2236,7 +2296,7 @@ sub next {
my $finishResource = $self->{HERE}->map_finish();
$self->{RECURSIVE_ITERATOR} =
- Apache::lonnavmaps::iterator->new ($self->{NAV_MAP}, $firstResource,
+ Apache::lonnavmaps::DFSiterator->new ($self->{NAV_MAP}, $firstResource,
$finishResource, $self->{FILTER}, $self->{ALREADY_SEEN},
$self->{CONDITION}, $self->{DIRECTION});
}