version 1.298, 2004/09/29 19:13:20
|
version 1.303, 2004/11/10 22:20:50
|
Line 35 use Apache::loncommon();
|
Line 35 use Apache::loncommon();
|
use Apache::lonmenu(); |
use Apache::lonmenu(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use POSIX qw (floor strftime); |
use POSIX qw (floor strftime); |
use Data::Dumper; # for debugging, not always used |
use Data::Dumper; # for debugging, not always |
|
|
# symbolic constants |
# symbolic constants |
sub SYMB { return 1; } |
sub SYMB { return 1; } |
Line 119 window.status='Done.';
|
Line 119 window.status='Done.';
|
ENDCLOSE |
ENDCLOSE |
} |
} |
|
|
sub nav_control_js { |
|
my $nav=($ENV{'environment.remotenavmap'} eq 'on'); |
|
return (<<NAVCONTROL); |
|
var w_loncapanav_flag="$nav"; |
|
|
|
|
|
function gonav(url) { |
|
if (w_loncapanav_flag != 1) { |
|
gopost(url,''); |
|
} else { |
|
navwindow=window.open(url, |
|
"loncapanav","height=600,width=400,scrollbars=1"); |
|
} |
|
} |
|
NAVCONTROL |
|
} |
|
|
|
sub update { |
sub update { |
if ($ENV{'environment.remotenavmap'} ne 'on') { return ''; } |
if ($ENV{'environment.remotenavmap'} ne 'on') { return ''; } |
if (!$ENV{'request.course.id'}) { return ''; } |
if (!$ENV{'request.course.id'}) { return ''; } |
Line 410 ENDSUBM
|
Line 393 ENDSUBM
|
'caller' => 'navmapsdisplay', |
'caller' => 'navmapsdisplay', |
'linkitems' => \%toplinkitems}; |
'linkitems' => \%toplinkitems}; |
my $render = render($renderArgs); |
my $render = render($renderArgs); |
$navmap->untieHashes(); |
|
|
|
# If no resources were printed, print a reassuring message so the |
# If no resources were printed, print a reassuring message so the |
# user knows there was no error. |
# user knows there was no error. |
Line 460 sub getLinkForResource {
|
Line 442 sub getLinkForResource {
|
foreach $res (@$stack) { |
foreach $res (@$stack) { |
if (defined($res)) { |
if (defined($res)) { |
if ($res->is_page()) { |
if ($res->is_page()) { |
return $res->src(); |
return $res->link(); |
} |
} |
# in case folder was skipped over as "only sequence" |
# in case folder was skipped over as "only sequence" |
my ($map,$id,$src)=&Apache::lonnet::decode_symb($res->symb()); |
my ($map,$id,$src)=&Apache::lonnet::decode_symb($res->symb()); |
Line 479 sub getLinkForResource {
|
Line 461 sub getLinkForResource {
|
if (defined($_)) { $res = $_; } |
if (defined($_)) { $res = $_; } |
} |
} |
|
|
return $res->src(); |
return $res->link(); |
} |
} |
|
|
# Convenience function: This separates the logic of how to create |
# Convenience function: This separates the logic of how to create |
Line 1585 END
|
Line 1567 END
|
} |
} |
if ($totdisc > 0) { |
if ($totdisc > 0) { |
$haveDisc =~ s/:$//; |
$haveDisc =~ s/:$//; |
my $navurl = $ENV{'QUERY_STRING'}; |
|
$result .= (<<END); |
$result .= (<<END); |
<input type="hidden" name="navmaps" value="$haveDisc" /> |
<input type="hidden" name="navmaps" value="$haveDisc" /> |
</form> |
</form> |
Line 1873 END
|
Line 1854 END
|
my $srcHasQuestion = $src =~ /\?/; |
my $srcHasQuestion = $src =~ /\?/; |
$args->{"resourceLink"} = $src. |
$args->{"resourceLink"} = $src. |
($srcHasQuestion?'&':'?') . |
($srcHasQuestion?'&':'?') . |
'symb=' . &Apache::lonnet::escape($curRes->symb()). |
'symb=' . &Apache::lonnet::escape($curRes->shown_symb()). |
$anchor; |
$anchor; |
|
|
# Now, display each column. |
# Now, display each column. |
Line 1941 if (location.href.indexOf('#curloc')==-1
|
Line 1922 if (location.href.indexOf('#curloc')==-1
|
$r->rflush(); |
$r->rflush(); |
} |
} |
|
|
if ($mustCloseNavMap) { $navmap->untieHashes(); } |
|
|
|
return $result; |
return $result; |
} |
} |
|
|
Line 2043 successful, or B<undef> if not.
|
Line 2022 successful, or B<undef> if not.
|
|
|
=back |
=back |
|
|
When you are done with the $navmap object, you I<must> call |
|
$navmap->untieHashes(), or you'll prevent the current user from using that |
|
course until the web server is restarted. (!) |
|
|
|
=head2 Methods |
=head2 Methods |
|
|
=over 4 |
=over 4 |
Line 2263 sub getIterator {
|
Line 2238 sub getIterator {
|
return $iterator; |
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 |
# Private method: Does the given resource (as a symb string) have |
# current discussion? Returns 0 if chat/mail data not extracted. |
# current discussion? Returns 0 if chat/mail data not extracted. |
sub hasDiscussion { |
sub hasDiscussion { |
Line 2650 sub hasResource {
|
Line 2618 sub hasResource {
|
1; |
1; |
|
|
package Apache::lonnavmaps::iterator; |
package Apache::lonnavmaps::iterator; |
|
use WeakRef; |
=pod |
=pod |
|
|
=back |
=back |
Line 2790 sub new {
|
Line 2758 sub new {
|
my $class = ref($proto) || $proto; |
my $class = ref($proto) || $proto; |
my $self = {}; |
my $self = {}; |
|
|
$self->{NAV_MAP} = shift; |
weaken($self->{NAV_MAP} = shift); |
return undef unless ($self->{NAV_MAP}); |
return undef unless ($self->{NAV_MAP}); |
|
|
# Handle the parameters |
# Handle the parameters |
Line 3126 sub populateStack {
|
Line 3094 sub populateStack {
|
1; |
1; |
|
|
package Apache::lonnavmaps::DFSiterator; |
package Apache::lonnavmaps::DFSiterator; |
|
use WeakRef; |
# Not documented in the perldoc: This is a simple iterator that just walks |
# 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 |
# through the nav map and presents the resources in a depth-first search |
# fashion, ignorant of conditionals, randomized resources, etc. It presents |
# fashion, ignorant of conditionals, randomized resources, etc. It presents |
Line 3154 sub new {
|
Line 3122 sub new {
|
my $class = ref($proto) || $proto; |
my $class = ref($proto) || $proto; |
my $self = {}; |
my $self = {}; |
|
|
$self->{NAV_MAP} = shift; |
weaken($self->{NAV_MAP} = shift); |
return undef unless ($self->{NAV_MAP}); |
return undef unless ($self->{NAV_MAP}); |
|
|
$self->{FIRST_RESOURCE} = shift || $self->{NAV_MAP}->firstResource(); |
$self->{FIRST_RESOURCE} = shift || $self->{NAV_MAP}->firstResource(); |
Line 3308 sub populateStack {
|
Line 3276 sub populateStack {
|
1; |
1; |
|
|
package Apache::lonnavmaps::resource; |
package Apache::lonnavmaps::resource; |
|
use WeakRef; |
use Apache::lonnet; |
use Apache::lonnet; |
|
|
=pod |
=pod |
Line 3390 sub new {
|
Line 3358 sub new {
|
my $class = ref($proto) || $proto; |
my $class = ref($proto) || $proto; |
my $self = {}; |
my $self = {}; |
|
|
$self->{NAV_MAP} = shift; |
weaken($self->{NAV_MAP} = shift); |
$self->{ID} = shift; |
$self->{ID} = shift; |
|
|
# Store this new resource in the parent nav map's cache. |
# Store this new resource in the parent nav map's cache. |
Line 3478 Returns the title of the resource.
|
Line 3446 Returns the title of the resource.
|
# These info functions can be used directly, as they don't return |
# These info functions can be used directly, as they don't return |
# resource information. |
# resource information. |
sub comesfrom { my $self=shift; return $self->navHash("comesfrom_", 1); } |
sub comesfrom { my $self=shift; return $self->navHash("comesfrom_", 1); } |
|
sub encrypted { my $self=shift; return $self->navHash("encrypted_", 1); } |
sub ext { my $self=shift; return $self->navHash("ext_", 1) eq 'true:'; } |
sub ext { my $self=shift; return $self->navHash("ext_", 1) eq 'true:'; } |
sub from { my $self=shift; return $self->navHash("from_", 1); } |
sub from { my $self=shift; return $self->navHash("from_", 1); } |
# considered private and undocumented |
# considered private and undocumented |
Line 3489 sub randompick {
|
Line 3458 sub randompick {
|
return $self->{NAV_MAP}->{PARM_HASH}->{$self->symb . |
return $self->{NAV_MAP}->{PARM_HASH}->{$self->symb . |
'.0.parameter_randompick'}; |
'.0.parameter_randompick'}; |
} |
} |
|
sub link { |
|
my $self=shift; |
|
if ($self->encrypted()) { return &Apache::lonenc::encrypted($self->src); } |
|
return $self->src; |
|
} |
sub src { |
sub src { |
my $self=shift; |
my $self=shift; |
return $self->navHash("src_", 1); |
return $self->navHash("src_", 1); |
} |
} |
|
sub shown_symb { |
|
my $self=shift; |
|
if ($self->encrypted()) {return &Apache::lonenc::encrypted($self->symb());} |
|
return $self->symb(); |
|
} |
sub symb { |
sub symb { |
my $self=shift; |
my $self=shift; |
(my $first, my $second) = $self->{ID} =~ /(\d+).(\d+)/; |
(my $first, my $second) = $self->{ID} =~ /(\d+).(\d+)/; |
Line 3511 sub title {
|
Line 3490 sub title {
|
return $self->navHash("title_", 1); } |
return $self->navHash("title_", 1); } |
# considered private and undocumented |
# considered private and undocumented |
sub to { my $self=shift; return $self->navHash("to_", 1); } |
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 { |
sub compTitle { |
my $self = shift; |
my $self = shift; |
my $title = $self->title(); |
my $title = $self->title(); |
Line 4684 sub getNext {
|
Line 4673 sub getNext {
|
my $to = $self->to(); |
my $to = $self->to(); |
foreach my $branch ( split(/,/, $to) ) { |
foreach my $branch ( split(/,/, $to) ) { |
my $choice = $self->{NAV_MAP}->getById($branch); |
my $choice = $self->{NAV_MAP}->getById($branch); |
|
if (!$choice->condition()) { next; } |
my $next = $choice->goesto(); |
my $next = $choice->goesto(); |
$next = $self->{NAV_MAP}->getById($next); |
$next = $self->{NAV_MAP}->getById($next); |
|
|