';
}
@@ -1584,7 +1584,6 @@ END
}
if ($totdisc > 0) {
$haveDisc =~ s/:$//;
- my $navurl = $ENV{'QUERY_STRING'};
$result .= (<
@@ -1639,7 +1638,9 @@ END
$args->{'indentLevel'} = 0;
$args->{'isNewBranch'} = 0;
$args->{'condensed'} = 0;
- $args->{'indentString'} = setDefault($args->{'indentString'}, "");
+ my $location=
+ &Apache::loncommon::lonhttpdurl("/adm/lonIcons/whitespace1.gif");
+ $args->{'indentString'} = setDefault($args->{'indentString'}, "");
$args->{'displayedHereMarker'} = 0;
# If we're suppressing empty sequences, look for them here. Use DFS for speed,
@@ -1938,8 +1939,6 @@ if (location.href.indexOf('#curloc')==-1
$r->rflush();
}
- if ($mustCloseNavMap) { $navmap->untieHashes(); }
-
return $result;
}
@@ -1979,6 +1978,7 @@ ENDBLOCK
$result .= '
'."\n";
+
return $result;
}
@@ -2039,10 +2039,6 @@ successful, or B if not.
=back
-When you are done with the $navmap object, you I call
-$navmap->untieHashes(), or you'll prevent the current user from using that
-course until the web server is restarted. (!)
-
=head2 Methods
=over 4
@@ -2259,13 +2255,6 @@ sub getIterator {
return $iterator;
}
-# unties the hash when done
-sub untieHashes {
- my $self = shift;
- untie %{$self->{NAV_HASH}};
- untie %{$self->{PARM_HASH}};
-}
-
# Private method: Does the given resource (as a symb string) have
# current discussion? Returns 0 if chat/mail data not extracted.
sub hasDiscussion {
@@ -2646,7 +2635,7 @@ sub hasResource {
1;
package Apache::lonnavmaps::iterator;
-
+use WeakRef;
=pod
=back
@@ -2786,7 +2775,7 @@ sub new {
my $class = ref($proto) || $proto;
my $self = {};
- $self->{NAV_MAP} = shift;
+ weaken($self->{NAV_MAP} = shift);
return undef unless ($self->{NAV_MAP});
# Handle the parameters
@@ -3122,7 +3111,7 @@ sub populateStack {
1;
package Apache::lonnavmaps::DFSiterator;
-
+use WeakRef;
# Not documented in the perldoc: This is a simple iterator that just walks
# through the nav map and presents the resources in a depth-first search
# fashion, ignorant of conditionals, randomized resources, etc. It presents
@@ -3150,7 +3139,7 @@ sub new {
my $class = ref($proto) || $proto;
my $self = {};
- $self->{NAV_MAP} = shift;
+ weaken($self->{NAV_MAP} = shift);
return undef unless ($self->{NAV_MAP});
$self->{FIRST_RESOURCE} = shift || $self->{NAV_MAP}->firstResource();
@@ -3304,7 +3293,7 @@ sub populateStack {
1;
package Apache::lonnavmaps::resource;
-
+use WeakRef;
use Apache::lonnet;
=pod
@@ -3386,7 +3375,7 @@ sub new {
my $class = ref($proto) || $proto;
my $self = {};
- $self->{NAV_MAP} = shift;
+ weaken($self->{NAV_MAP} = shift);
$self->{ID} = shift;
# Store this new resource in the parent nav map's cache.
@@ -3507,6 +3496,16 @@ sub title {
return $self->navHash("title_", 1); }
# considered private and undocumented
sub to { my $self=shift; return $self->navHash("to_", 1); }
+sub condition {
+ my $self=shift;
+ my $undercond=$self->navHash("undercond_", 1);
+ if (!defined($undercond)) { return 1; };
+ my $condid=$self->navHash("condid_$undercond");
+ if (!defined($condid)) { return 1; };
+ my $condition=&Apache::lonnet::directcondval($condid);
+ return $condition;
+}
+
sub compTitle {
my $self = shift;
my $title = $self->title();
@@ -4680,6 +4679,7 @@ sub getNext {
my $to = $self->to();
foreach my $branch ( split(/,/, $to) ) {
my $choice = $self->{NAV_MAP}->getById($branch);
+ if (!$choice->condition()) { next; }
my $next = $choice->goesto();
$next = $self->{NAV_MAP}->getById($next);