version 1.91, 2002/10/29 20:17:39
|
version 1.94, 2002/11/01 18:24:45
|
Line 820 sub new_handle {
|
Line 820 sub new_handle {
|
&Apache::loncommon::no_cache($r); |
&Apache::loncommon::no_cache($r); |
$r->send_http_header; |
$r->send_http_header; |
|
|
# Initialize the nav map |
# Create the nav map the nav map |
my $navmap = Apache::lonnavmaps::navmap->new( |
my $navmap = Apache::lonnavmaps::navmap->new( |
$ENV{"request.course.fn"}.".db", |
$ENV{"request.course.fn"}.".db", |
$ENV{"request.course.fn"}."_parms.db", 1, 1); |
$ENV{"request.course.fn"}."_parms.db", 1, 1); |
Line 850 sub new_handle {
|
Line 850 sub new_handle {
|
'<br><img src="/adm/lonMisc/feedback.gif"> New message (click to open)<p>'); |
'<br><img src="/adm/lonMisc/feedback.gif"> New message (click to open)<p>'); |
} |
} |
|
|
|
# Now that we've displayed some stuff to the user, init the navmap |
|
$navmap->init(); |
|
|
# Check that it's defined |
# Check that it's defined |
if (!($navmap->courseMapDefined())) { |
if (!($navmap->courseMapDefined())) { |
$r->print('<font size="+2" color="red">Coursemap undefined.</font>' . |
$r->print('<font size="+2" color="red">Coursemap undefined.</font>' . |
Line 1640 sub new {
|
Line 1643 sub new {
|
$self->{PARM_HASH} = \%parmhash; |
$self->{PARM_HASH} = \%parmhash; |
$self->{HASH_TIED} = 1; |
$self->{HASH_TIED} = 1; |
|
|
|
bless($self); |
|
|
|
return $self; |
|
} |
|
|
|
sub init { |
|
my $self = shift; |
|
|
# If the course opt hash and the user opt hash should be generated, |
# If the course opt hash and the user opt hash should be generated, |
# generate them |
# generate them |
if ($self->{GENERATE_COURSE_USER_OPT}) { |
if ($self->{GENERATE_COURSE_USER_OPT}) { |
Line 1744 sub new {
|
Line 1755 sub new {
|
} |
} |
|
|
$self->{PARM_CACHE} = {}; |
$self->{PARM_CACHE} = {}; |
|
|
bless($self); |
|
|
|
return $self; |
|
} |
} |
|
|
# Checks to see if coursemap is defined, matching test in old lonnavmaps |
# Checks to see if coursemap is defined, matching test in old lonnavmaps |
Line 1762 sub courseMapDefined {
|
Line 1769 sub courseMapDefined {
|
|
|
sub getIterator { |
sub getIterator { |
my $self = shift; |
my $self = shift; |
my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift, |
my $iterator = Apache::lonnavmaps::DFSiterator->new($self, shift, shift, |
shift, undef, shift, |
shift, undef, shift, |
$ENV{'form.direction'}); |
$ENV{'form.direction'}); |
return $iterator; |
return $iterator; |
Line 2021 sub END_BRANCH { return 4; } # end of
|
Line 2028 sub END_BRANCH { return 4; } # end of
|
sub FORWARD { return 1; } # go forward |
sub FORWARD { return 1; } # go forward |
sub BACKWARD { return 2; } |
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, |
# Params: nav map, start resource, end resource, filter, condition, |
# already seen hash ref |
# already seen hash ref |
|
|
Line 2229 sub next {
|
Line 2289 sub next {
|
my $finishResource = $self->{HERE}->map_finish(); |
my $finishResource = $self->{HERE}->map_finish(); |
|
|
$self->{RECURSIVE_ITERATOR} = |
$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}, |
$finishResource, $self->{FILTER}, $self->{ALREADY_SEEN}, |
$self->{CONDITION}, $self->{DIRECTION}); |
$self->{CONDITION}, $self->{DIRECTION}); |
} |
} |