version 1.551, 2021/04/29 17:45:22
|
version 1.561, 2022/10/04 14:38:08
|
Line 357 user into thinking that if the sequence
|
Line 357 user into thinking that if the sequence
|
under it; for example, see the "Show Uncompleted Homework" view on the |
under it; for example, see the "Show Uncompleted Homework" view on the |
B<NAV> screen. |
B<NAV> screen. |
|
|
=item * B<suppressNavmaps>: default: false |
=item * B<suppressNavmap>: default: false |
|
|
If true, will not display Navigate Content resources. |
If true, will not display Navigate Content resources. |
|
|
Line 1068 sub render_resource {
|
Line 1068 sub render_resource {
|
$nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> '; |
$nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> '; |
} elsif ($params->{'mapUnlisted'}) { |
} elsif ($params->{'mapUnlisted'}) { |
$nonLinkedText .= ' <span class="LC_warning">('.&mt('unlisted').')</span> '; |
$nonLinkedText .= ' <span class="LC_warning">('.&mt('unlisted').')</span> '; |
|
} elsif ($params->{'mapHiddenDeepLink'} || $resource->deeplinkout()) { |
|
$nonLinkedText .= ' <span class="LC_warning">('.&mt('not shown').')</span> '; |
} |
} |
} else { |
} else { |
if ($resource->randomout()) { |
if ($resource->randomout()) { |
$nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> '; |
$nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> '; |
} elsif (($resource->deeplink($params->{caller}) eq 'absent') || |
} elsif ($resource->deeplinkout()) { |
($resource->deeplink($params->{caller}) eq 'grades')) { |
$nonLinkedText .= ' <span class="LC_warning">('.&mt('not shown').')</span> '; |
$nonLinkedText .= ' <span class="LC_warning">('.&mt('unlisted').')</span> '; |
} else { |
|
my $deeplink = $resource->deeplink($params->{caller}); |
|
if ((($deeplink eq 'absent') || ($deeplink eq 'grades')) && |
|
&advancedUser()) { |
|
$nonLinkedText .= ' <span class="LC_warning">('.&mt('unlisted').')</span> '; |
|
} elsif (($deeplink) && ($deeplink) ne 'full') { |
|
if (&advancedUser()) { |
|
$nonLinkedText .= ' <span class="LC_warning">('.&mt('deep-link access'). |
|
')</span> '; |
|
} else { |
|
$nonLinkedText .= ' <span class="LC_warning">('.&mt('access via external site'). |
|
')</span> '; |
|
} |
|
} |
} |
} |
} |
} |
if (!$resource->condval()) { |
if (!$resource->condval()) { |
Line 1401 sub render {
|
Line 1416 sub render {
|
$filterFunc = sub { my $res = shift; return !$res->randomout() && |
$filterFunc = sub { my $res = shift; return !$res->randomout() && |
($res->deeplink($args->{'caller'}) ne 'absent') && |
($res->deeplink($args->{'caller'}) ne 'absent') && |
($res->deeplink($args->{'caller'}) ne 'grades') && |
($res->deeplink($args->{'caller'}) ne 'grades') && |
|
!$res->deeplinkout() && |
&$oldFilterFunc($res);}; |
&$oldFilterFunc($res);}; |
} |
} |
|
|
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'})) { |
if (!$env{'form.folderManip'} && !defined($args->{'iterator'}) && !$args->{'nocurrloc'}) { |
# Step 1: Check to see if we have a navmap |
# Step 1: Check to see if we have a navmap |
if (!defined($navmap)) { |
if (!defined($navmap)) { |
$navmap = Apache::lonnavmaps::navmap->new(); |
$navmap = Apache::lonnavmaps::navmap->new(); |
Line 1448 sub render {
|
Line 1495 sub render {
|
my $mapIterator = $navmap->getIterator(undef, undef, undef, 1); |
my $mapIterator = $navmap->getIterator(undef, undef, undef, 1); |
my $curRes; |
my $curRes; |
my $found = 0; |
my $found = 0; |
|
my $here_is_navmaps = 0; |
|
if ($here =~ m{___\d+___adm/navmaps$}) { |
|
$here_is_navmaps = 1; |
|
} |
|
|
# We only need to do this if we need to open the maps to show the |
# We only need to do this if we need to open the maps to show the |
# current position. This will change the counter so we can't count |
# current position. This will change the counter so we can't count |
# for the jump marker with this loop. |
# for the jump marker with this loop. |
while ($here && ($curRes = $mapIterator->next()) && !$found) { |
while ($here && ($curRes = $mapIterator->next()) && !$found && !$here_is_navmaps) { |
if (ref($curRes) && $curRes->symb() eq $here) { |
if (ref($curRes) && $curRes->symb() eq $here) { |
my $mapStack = $mapIterator->getStack(); |
my $mapStack = $mapIterator->getStack(); |
|
|
Line 1569 sub render {
|
Line 1620 sub render {
|
'&here='.&escape($here); |
'&here='.&escape($here); |
$text='Open all folders'; |
$text='Open all folders'; |
} |
} |
if ($env{'form.register'}) { |
|
$link .= '&register='.$env{'form.register'}; |
|
} |
|
if ($args->{'caller'} eq 'navmapsdisplay') { |
if ($args->{'caller'} eq 'navmapsdisplay') { |
unless ($args->{'notools'}) { |
unless ($args->{'notools'}) { |
&add_linkitem($args->{'linkitems'},'changefolder', |
&add_linkitem($args->{'linkitems'},'changefolder', |
Line 1595 sub render {
|
Line 1643 sub render {
|
<input type="hidden" name="navurl" value="$querystr" /> |
<input type="hidden" name="navurl" value="$querystr" /> |
<input type="hidden" name="navtime" value="$time" /> |
<input type="hidden" name="navtime" value="$time" /> |
END |
END |
if ($env{'form.register'}) { |
|
$result .= '<input type="hidden" name="register" value="'.$env{'form.register'}.'" />'; |
|
} |
|
if ($args->{'sort'} eq 'discussion') { |
if ($args->{'sort'} eq 'discussion') { |
my $totdisc = 0; |
my $totdisc = 0; |
my $haveDisc = ''; |
my $haveDisc = ''; |
Line 1618 END
|
Line 1663 END
|
} |
} |
$result.='</form>'; |
$result.='</form>'; |
} |
} |
if (($args->{'caller'} eq 'navmapsdisplay') && |
if (($args->{'caller'} eq 'navmapsdisplay') && ($env{'request.course.id'})) { |
((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) || |
|
(&Apache::lonnet::allowed('cev',$env{'request.course.id'})))) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
if ($env{'course.'.$env{'request.course.id'}.'.url'} eq |
if ($env{'course.'.$env{'request.course.id'}.'.url'} eq |
"uploaded/$cdom/$cnum/default.sequence") { |
"uploaded/$cdom/$cnum/default.sequence") { |
&add_linkitem($args->{'linkitems'},'edittoplevel', |
if ((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) || |
"javascript:gocmd('/adm/coursedocs','editdocs');", |
(&Apache::lonnet::allowed('cev',$env{'request.course.id'}))) { |
'Content Editor'); |
&add_linkitem($args->{'linkitems'},'edittoplevel', |
|
"javascript:gocmd('/adm/coursedocs','editdocs');", |
|
'Content Editor'); |
|
} |
|
if ($counter) { |
|
&add_linkitem($args->{'linkitems'},'printout', |
|
"javascript:gopost('/adm/printout','/adm/navmaps');", |
|
'Prepare a printable document'); |
|
} |
} |
} |
} |
} |
|
|
Line 1673 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 1696 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 1821 END
|
Line 1893 END
|
# If this is an empty sequence and we're filtering them, continue on |
# If this is an empty sequence and we're filtering them, continue on |
$args->{'mapHidden'} = 0; |
$args->{'mapHidden'} = 0; |
$args->{'mapUnlisted'} = 0; |
$args->{'mapUnlisted'} = 0; |
|
$args->{'mapHiddenDeepLink'} = 0; |
if (($curRes->is_map()) && (!$curRes->{DATA}->{HAS_VISIBLE_CHILDREN})) { |
if (($curRes->is_map()) && (!$curRes->{DATA}->{HAS_VISIBLE_CHILDREN})) { |
if ($args->{'suppressEmptySequences'}) { |
if ($args->{'suppressEmptySequences'}) { |
next; |
next; |
Line 1833 END
|
Line 1906 END
|
} else { |
} else { |
next; |
next; |
} |
} |
|
} elsif ($curRes->deeplinkout) { |
|
if ($userCanSeeHidden) { |
|
$args->{'mapHiddenDeepLink'} = 1; |
|
} else { |
|
next; |
|
} |
} else { |
} else { |
my $deeplink = $navmap->get_mapparam(undef,$mapname,"0.deeplink"); |
my $deeplink = $navmap->get_mapparam(undef,$mapname,"0.deeplink"); |
if ($deeplink =~ /^(absent|grades),/) { |
my ($state,$others,$listed) = split(/,/,$deeplink); |
|
if (($listed eq 'absent') || ($listed eq 'grades')) { |
if ($userCanSeeHidden) { |
if ($userCanSeeHidden) { |
$args->{'mapUnlisted'} = 1; |
$args->{'mapUnlisted'} = 1; |
} else { |
} else { |
Line 1906 END
|
Line 1986 END
|
} |
} |
} |
} |
# If deep-link parameter is set (and is not set to full) suppress link |
# If deep-link parameter is set (and is not set to full) suppress link |
# unless privileged user, or calling context is sequence, and parameter |
# unless privileged user, tinyurl used for login resolved to a map, and |
# set at map level |
# the resource is within the map. |
if ((!$curRes->deeplink($args->{'caller'})) || |
if ((!$curRes->deeplink($args->{'caller'})) || |
($curRes->deeplink($args->{'caller'}) =~ /^full,/) || &advancedUser()) { |
($curRes->deeplink($args->{'caller'}) eq 'full') || &advancedUser()) { |
$args->{'resource_nolink'} = 0; |
$args->{'resource_nolink'} = 0; |
} else { |
} else { |
$args->{'resource_nolink'} = 1; |
$args->{'resource_nolink'} = 1; |
Line 2066 sub show_linkitems_toolbar {
|
Line 2146 sub show_linkitems_toolbar {
|
$result .= '<td align="left">'."\n". |
$result .= '<td align="left">'."\n". |
'<ul id="LC_toolbar">'; |
'<ul id="LC_toolbar">'; |
my @linkorder = ('firsthomework','everything','uncompleted', |
my @linkorder = ('firsthomework','everything','uncompleted', |
'changefolder','clearbubbles','edittoplevel'); |
'changefolder','clearbubbles','printout','edittoplevel'); |
foreach my $link (@linkorder) { |
foreach my $link (@linkorder) { |
if (ref($args->{'linkitems'}{$link}) eq 'HASH') { |
if (ref($args->{'linkitems'}{$link}) eq 'HASH') { |
if ($args->{'linkitems'}{$link}{'text'} ne '') { |
if ($args->{'linkitems'}{$link}{'text'} ne '') { |
Line 2479 sub getIterator {
|
Line 2559 sub getIterator {
|
my $self = shift; |
my $self = shift; |
my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift, |
my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift, |
shift, undef, shift, |
shift, undef, shift, |
shift, shift); |
shift, shift, shift); |
return $iterator; |
return $iterator; |
} |
} |
|
|
Line 2998 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 3011 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,}); |
} |
} |
Line 3243 sub get_mapparam {
|
Line 3331 sub get_mapparam {
|
if (defined($$courseopt{$courselevelm})) { |
if (defined($$courseopt{$courselevelm})) { |
return $$courseopt{$courselevelm}; |
return $$courseopt{$courselevelm}; |
} |
} |
|
if (defined($$courseopt{$courseleveli})) { |
|
return $$courseopt{$courseleveli}; |
|
} |
unless ($recursed) { |
unless ($recursed) { |
@recurseup = $self->recurseup_maps($mapname); |
@recurseup = $self->recurseup_maps($mapname); |
$recursed = 1; |
$recursed = 1; |
Line 3616 getIterator behaves as follows:
|
Line 3707 getIterator behaves as follows:
|
|
|
=over 4 |
=over 4 |
|
|
=item * B<getIterator>(firstResource, finishResource, filterHash, condition, forceTop, returnTopMap): |
=item * B<getIterator>(firstResource, finishResource, filterHash, condition, forceTop, returnTopMap, $deeplinklisted): |
|
|
All parameters are optional. firstResource is a resource reference |
All parameters are optional. firstResource is a resource reference |
corresponding to where the iterator should start. It defaults to |
corresponding to where the iterator should start. It defaults to |
Line 3633 that is not just a single, 'redirecting'
|
Line 3724 that is not just a single, 'redirecting'
|
will return all information, starting with the top-level map, |
will return all information, starting with the top-level map, |
regardless of content. returnTopMap, if true (default false), will |
regardless of content. returnTopMap, if true (default false), will |
cause the iterator to return the top-level map object (resource 0.0) |
cause the iterator to return the top-level map object (resource 0.0) |
before anything else. |
before anything else. deeplinklisted if true (default false), will |
|
check "listed" status of a resource with a deeplink, and unless "absent" |
|
will exclude deeplink checking when retrieving the browsePriv from |
|
lonnet::allowed(). |
|
|
Thus, by default, only top-level resources will be shown. Change the |
Thus, by default, only top-level resources will be shown. Change the |
condition to a 1 without changing the hash, and all resources will be |
condition to a 1 without changing the hash, and all resources will be |
Line 3770 sub new {
|
Line 3864 sub new {
|
# have we done that yet? |
# have we done that yet? |
$self->{HAVE_RETURNED_0} = 0; |
$self->{HAVE_RETURNED_0} = 0; |
|
|
|
# Do we want to check the "listed" status for a resource for which |
|
# deeplinking applies. |
|
$self->{DEEPLINKLISTED} = shift; |
|
|
# Now, we need to pre-process the map, by walking forward and backward |
# 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. |
# over the parts of the map we're going to look at. |
|
|
Line 3861 sub new {
|
Line 3959 sub new {
|
$finishResource, $self->{FILTER}, |
$finishResource, $self->{FILTER}, |
$self->{ALREADY_SEEN}, |
$self->{ALREADY_SEEN}, |
$self->{CONDITION}, |
$self->{CONDITION}, |
$self->{FORCE_TOP}); |
$self->{FORCE_TOP}, |
|
undef,$self->{DEEPLINKLISTED}); |
} |
} |
|
|
# Set up some bookkeeping information. |
# Set up some bookkeeping information. |
Line 4031 sub next {
|
Line 4130 sub next {
|
$finishResource, $self->{FILTER}, |
$finishResource, $self->{FILTER}, |
$self->{ALREADY_SEEN}, |
$self->{ALREADY_SEEN}, |
$self->{CONDITION}, |
$self->{CONDITION}, |
$self->{FORCE_TOP}); |
$self->{FORCE_TOP}, |
|
undef,$self->{DEEPLINKLISTED}); |
} |
} |
|
|
# If this is a blank resource, don't actually return it. |
# If this is a blank resource, don't actually return it. |
# Should you ever find you need it, make sure to add an option to the code |
# Should you ever find you need it, make sure to add an option to the code |
# that you can use; other things depend on this behavior. |
# that you can use; other things depend on this behavior. |
my $browsePriv = $self->{HERE}->browsePriv($noblockcheck); |
my $browsePriv = $self->{HERE}->browsePriv($noblockcheck,$self->{DEEPLINKLISTED}); |
if (!$self->{HERE}->src() || |
if (!$self->{HERE}->src() || |
(!($browsePriv eq 'F') && !($browsePriv eq '2')) ) { |
(!($browsePriv eq 'F') && !($browsePriv eq '2')) ) { |
return $self->next($closeAllPages); |
return $self->next($closeAllPages); |
Line 4465 sub from { my $self=shift; return $self-
|
Line 4565 sub from { my $self=shift; return $self-
|
sub goesto { my $self=shift; return $self->navHash("goesto_", 1); } |
sub goesto { my $self=shift; return $self->navHash("goesto_", 1); } |
sub kind { my $self=shift; return $self->navHash("kind_", 1); } |
sub kind { my $self=shift; return $self->navHash("kind_", 1); } |
sub randomout { my $self=shift; return $self->navHash("randomout_", 1); } |
sub randomout { my $self=shift; return $self->navHash("randomout_", 1); } |
|
sub deeplinkout { my $self=shift; return $self->navHash("deeplinkout_", 1); } |
sub randompick { |
sub randompick { |
my $self = shift; |
my $self = shift; |
my $randompick = $self->parmval('randompick'); |
my $randompick = $self->parmval('randompick'); |
Line 5153 sub slot_control {
|
Line 5254 sub slot_control {
|
return ($useslots,$availablestudent,$available); |
return ($useslots,$availablestudent,$available); |
} |
} |
sub deeplink { |
sub deeplink { |
my ($self,$caller) = @_; |
my ($self,$caller,$action) = @_; |
my $value = $self->parmval("deeplink"); |
my $deeplink = $self->parmval("deeplink"); |
if ($value) { |
if ($deeplink) { |
my @deeplink = split(/,/,$value); |
my ($state,$others,$listed,$scope) = split(/,/,$deeplink); |
if ($caller eq 'sequence') { |
if ($action eq 'getlisted') { |
if ($deeplink[1] ne 'res') { |
return $listed; |
return; |
} |
|
if ($env{'request.deeplink.login'}) { |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom); |
|
if ($deeplink_symb) { |
|
my ($loginmap,$mapname); |
|
if ($deeplink_symb =~ /\.(page|sequence)$/) { |
|
$mapname = $self->enclosing_map_src(); |
|
$loginmap = &Apache::lonnet::clutter((&Apache::lonnet::decode_symb($deeplink_symb))[2]); |
|
return if ($mapname eq $loginmap); |
|
} else { |
|
return if ($deeplink_symb eq $self->symb()); |
|
if (($scope eq 'map') || ($scope eq 'rec')) { |
|
$mapname = $self->enclosing_map_src(); |
|
$loginmap = &Apache::lonnet::clutter((&Apache::lonnet::decode_symb($deeplink_symb))[0]); |
|
return if ($mapname eq $loginmap); |
|
} |
|
} |
|
if ($scope eq 'rec') { |
|
my $map_pc = $self->navHash('map_pc_'.$mapname); |
|
my @recurseup = split(/,/,$self->navHash('map_hierarchy_'.$map_pc)); |
|
my $login_pc = $self->navHash('map_pc_'.$loginmap); |
|
return if (grep(/^\Q$login_pc\E$/,@recurseup)); |
|
} |
} |
} |
} |
} |
return $deeplink[0]; |
unless (($caller eq 'sequence') || ($state eq 'both')) { |
|
return $listed; |
|
} |
} |
} |
return; |
return; |
} |
} |
Line 6357 sub getPrevious {
|
Line 6484 sub getPrevious {
|
sub browsePriv { |
sub browsePriv { |
my $self = shift; |
my $self = shift; |
my $noblockcheck = shift; |
my $noblockcheck = shift; |
|
my $deeplinklisted = shift; |
if (defined($self->{BROWSE_PRIV})) { |
if (defined($self->{BROWSE_PRIV})) { |
return $self->{BROWSE_PRIV}; |
return $self->{BROWSE_PRIV}; |
} |
} |
|
my ($nodeeplinkcheck,$nodeeplinkout); |
|
if ($deeplinklisted) { |
|
my $deeplink = $self->deeplink(undef,'getlisted'); |
|
if (($deeplink) && ($deeplink ne 'absent')) { |
|
$nodeeplinkcheck = 1; |
|
} |
|
$nodeeplinkout = 1; |
|
} |
$self->{BROWSE_PRIV} = &Apache::lonnet::allowed('bre',$self->src(), |
$self->{BROWSE_PRIV} = &Apache::lonnet::allowed('bre',$self->src(), |
$self->{SYMB},undef, |
$self->{SYMB},undef, |
undef,$noblockcheck); |
undef,$noblockcheck, |
|
undef,$nodeeplinkcheck, |
|
$nodeeplinkout); |
} |
} |
|
|
=pod |
=pod |