version 1.558, 2022/06/11 14:51:49
|
version 1.561, 2022/10/04 14:38:08
|
Line 1423 sub render {
|
Line 1423 sub render {
|
my $condition = 0; |
my $condition = 0; |
if ($env{'form.condition'}) { |
if ($env{'form.condition'}) { |
$condition = 1; |
$condition = 1; |
|
} elsif (($env{'request.deeplink.login'}) && ($env{'request.course.id'}) && (!$userCanSeeHidden)) { |
|
if (!defined($navmap)) { |
|
$navmap = Apache::lonnavmaps::navmap->new(); |
|
} |
|
if (defined($navmap)) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $symb = &Apache::loncommon::symb_from_tinyurl($env{'request.deeplink.login'},$cnum,$cdom); |
|
if ($symb) { |
|
my $deeplink; |
|
my $res = $navmap->getBySymb($symb); |
|
if ($res->is_map()) { |
|
my $mapname = &Apache::lonnet::declutter($res->src()); |
|
$mapname = &Apache::lonnet::deversion($mapname); |
|
$deeplink = $navmap->get_mapparam(undef,$mapname,"0.deeplink"); |
|
} else { |
|
$deeplink = $res->deeplink(); |
|
} |
|
if ($deeplink ne '') { |
|
if ((split(/,/,$deeplink))[1] eq 'hide') { |
|
if ($res->is_map()) { |
|
map { $filterHash->{$_} = 1 if $_ } split(/,/,$res->map_hierarchy()); |
|
} else { |
|
my $mapurl = (&Apache::lonnet::decode_symb($symb))[0]; |
|
my $map = $navmap->getResourceByUrl($mapurl); |
|
map { $filterHash->{$_} = 1 if $_ } split(/,/,$map->map_hierarchy()); |
|
} |
|
} |
|
} |
|
} |
|
} |
} |
} |
|
|
if (!$env{'form.folderManip'} && !defined($args->{'iterator'}) && !$args->{'nocurrloc'}) { |
if (!$env{'form.folderManip'} && !defined($args->{'iterator'}) && !$args->{'nocurrloc'}) { |
Line 1693 END
|
Line 1724 END
|
# mark as hidden for users who have $userCanSeeHidden. |
# mark as hidden for users who have $userCanSeeHidden. |
# Use DFS for speed, since structure actually doesn't matter, |
# Use DFS for speed, since structure actually doesn't matter, |
# except what map has what resources. |
# except what map has what resources. |
|
# |
|
# To ensure the "Selected Resources from selected folder in course" |
|
# printout generation option will work in sessions launched via a |
|
# deep link, the value of $args->{'filterFunc'} included in the |
|
# call to lonnavmaps::render() is omitted from the filter function |
|
# used with the DFS Iterator when $args->{'caller'} is 'printout'. |
|
# |
|
# As a result $sequence->{DATA}->{HAS_VISIBLE_CHILDREN} can be |
|
# set to 1 for folder(s) which include resources only accessible |
|
# for sessions launched via a deep link, when the current session |
|
# is of that type. |
|
|
my $dfsit = Apache::lonnavmaps::DFSiterator->new($navmap, |
my $dfsit = Apache::lonnavmaps::DFSiterator->new($navmap, |
$it->{FIRST_RESOURCE}, |
$it->{FIRST_RESOURCE}, |
$it->{FINISH_RESOURCE}, |
$it->{FINISH_RESOURCE}, |
{}, undef, 1); |
{}, undef, 1); |
|
my $dfsFilterFunc; |
|
if ($args->{'caller'} eq 'printout') { |
|
$dfsFilterFunc = sub { my $res = shift; return !$res->randomout() && |
|
($res->deeplink($args->{'caller'}) ne 'absent') && |
|
($res->deeplink($args->{'caller'}) ne 'grades') && |
|
!$res->deeplinkout();}; |
|
} else { |
|
$dfsFilterFunc = $filterFunc; |
|
} |
my $depth = 0; |
my $depth = 0; |
$dfsit->next(); |
$dfsit->next(); |
my $curRes = $dfsit->next(); |
my $curRes = $dfsit->next(); |
Line 1716 END
|
Line 1767 END
|
} elsif ($curRes->src()) { |
} elsif ($curRes->src()) { |
# Not a sequence: if it's filtered, ignore it, otherwise |
# Not a sequence: if it's filtered, ignore it, otherwise |
# rise up the stack and mark the sequences as having children |
# rise up the stack and mark the sequences as having children |
if (&$filterFunc($curRes)) { |
if (&$dfsFilterFunc($curRes)) { |
for my $sequence (@{$dfsit->getStack()}) { |
for my $sequence (@{$dfsit->getStack()}) { |
|
next unless ($sequence->is_map()); |
$sequence->{DATA}->{HAS_VISIBLE_CHILDREN} = 1; |
$sequence->{DATA}->{HAS_VISIBLE_CHILDREN} = 1; |
} |
} |
} |
} |
Line 3026 sub recursed_crumbs {
|
Line 3078 sub recursed_crumbs {
|
my $pc = $map->map_pc(); |
my $pc = $map->map_pc(); |
next if ((!$pc) || ($pc == 1)); |
next if ((!$pc) || ($pc == 1)); |
push(@links,$map); |
push(@links,$map); |
push(@revmapinfo,{'href' => $env{'request.use_absolute'}.$map->link().'?navmap=1','text' => $map->title(),'no_mt' => 1,}); |
my $text = $map->title(); |
$totallength += length($map->title()); |
if ($text eq '') { |
|
$text = '...'; |
|
} |
|
push(@revmapinfo,{'href' => $env{'request.use_absolute'}.$map->link().'?navmap=1','text' => $text,'no_mt' => 1,}); |
|
$totallength += length($text); |
} |
} |
my $numlinks = scalar(@links); |
my $numlinks = scalar(@links); |
if ($numlinks) { |
if ($numlinks) { |
Line 3039 sub recursed_crumbs {
|
Line 3095 sub recursed_crumbs {
|
} |
} |
@revmapinfo = (); |
@revmapinfo = (); |
foreach my $map (@links) { |
foreach my $map (@links) { |
my $showntitle = &truncate_crumb_text($map->title(),$avg); |
my $title = $map->title(); |
|
if ($title eq '') { |
|
$title = '...'; |
|
} |
|
my $showntitle = &truncate_crumb_text($title,$avg); |
if ($showntitle ne '') { |
if ($showntitle ne '') { |
push(@revmapinfo,{'href' => $env{'request.use_absolute'}.$map->link().'?navmap=1','text' => $showntitle,'no_mt' => 1,}); |
push(@revmapinfo,{'href' => $env{'request.use_absolute'}.$map->link().'?navmap=1','text' => $showntitle,'no_mt' => 1,}); |
} |
} |