--- loncom/interface/lonnavmaps.pm 2022/01/05 00:41:13 1.509.2.14.2.2
+++ loncom/interface/lonnavmaps.pm 2022/03/25 22:12:52 1.509.2.14.4.1
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.509.2.14.2.2 2022/01/05 00:41:13 raeburn Exp $
+# $Id: lonnavmaps.pm,v 1.509.2.14.4.1 2022/03/25 22:12:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
@@ -945,31 +945,29 @@ sub render_resource {
# links to open and close the folder
my $whitespace = $location.'/whitespace_21.gif';
- my ($nomodal,$linkopen,$linkclose);
- unless ($resource->is_map() || $params->{'resource_nolink'}) {
- $linkopen = "
";
- $linkclose = "";
- if (($params->{'modalLink'}) && (!$resource->is_sequence())) {
- if ($link =~m{^(?:|/adm/wrapper)/ext/([^#]+)}) {
- my $exturl = $1;
- if (($ENV{'SERVER_PORT'} == 443) && ($exturl !~ /^https:/)) {
- $nomodal = 1;
- }
- } elsif (($link eq "/public/$LONCAPA::match_domain/$LONCAPA::match_courseid/syllabus") &&
- ($env{'request.course.id'}) && ($ENV{'SERVER_PORT'} == 443) &&
- ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) {
+ my $linkopen = "
";
+ my $nomodal;
+ if (($params->{'modalLink'}) && (!$resource->is_sequence())) {
+ if ($link =~m{^(?:|/adm/wrapper)/ext/([^#]+)}) {
+ my $exturl = $1;
+ if (($ENV{'SERVER_PORT'} == 443) && ($exturl !~ /^https:/)) {
$nomodal = 1;
}
- my $esclink = &js_escape($link);
- if ($nomodal) {
- $linkopen .= "";
- } else {
- $linkopen .= "";
- }
+ } elsif (($link eq "/public/$LONCAPA::match_domain/$LONCAPA::match_courseid/syllabus") &&
+ ($env{'request.course.id'}) && ($ENV{'SERVER_PORT'} == 443) &&
+ ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) {
+ $nomodal = 1;
+ }
+ my $esclink = &js_escape($link);
+ if ($nomodal) {
+ $linkopen .= "";
} else {
- $linkopen .= "";
+ $linkopen .= "";
}
+ } else {
+ $linkopen .= "";
}
+ my $linkclose = "";
# Default icon: unknown page
my $icon = "
";
@@ -1017,14 +1015,13 @@ sub render_resource {
'&jump=' .
&escape($resource->symb()) .
"&folderManip=1\">";
- $linkclose = '';
+
} else {
# Don't allow users to manipulate folder
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') . '.gif';
$icon = "
"."
";
if ($params->{'caller'} eq 'sequence') {
$linkopen = "";
- $linkclose = '';
} else {
$linkopen = "";
$linkclose = "";
@@ -1043,30 +1040,10 @@ sub render_resource {
}
if ($params->{'mapHidden'} || $resource->randomout()) {
$nonLinkedText .= ' ('.&mt('hidden').') ';
- } elsif ($params->{'mapUnlisted'}) {
- $nonLinkedText .= ' ('.&mt('unlisted').') ';
- } elsif ($params->{'mapHiddenDeepLink'} || $resource->deeplinkout()) {
- $nonLinkedText .= ' ('.&mt('not shown').') ';
}
} else {
if ($resource->randomout()) {
$nonLinkedText .= ' ('.&mt('hidden').') ';
- } elsif ($resource->deeplinkout()) {
- $nonLinkedText .= ' ('.&mt('not shown').') ';
- } else {
- my $deeplink = $resource->deeplink($params->{caller});
- if ((($deeplink eq 'absent') || ($deeplink eq 'grades')) &&
- &advancedUser()) {
- $nonLinkedText .= ' ('.&mt('unlisted').') ';
- } elsif (($deeplink) && ($deeplink) ne 'full') {
- if (&advancedUser()) {
- $nonLinkedText .= ' ('.&mt('deep-link access').
- ') ';
- } else {
- $nonLinkedText .= ' ('.&mt('access via external site').
- ') ';
- }
- }
}
}
if (!$resource->condval()) {
@@ -1391,9 +1368,6 @@ sub render {
# an infinite loop
my $oldFilterFunc = $filterFunc;
$filterFunc = sub { my $res = shift; return !$res->randomout() &&
- ($res->deeplink($args->{'caller'}) ne 'absent') &&
- ($res->deeplink($args->{'caller'}) ne 'grades') &&
- !$res->deeplinkout() &&
&$oldFilterFunc($res);};
}
@@ -1814,8 +1788,6 @@ END
# If this is an empty sequence and we're filtering them, continue on
$args->{'mapHidden'} = 0;
- $args->{'mapUnlisted'} = 0;
- $args->{'mapHiddenDeepLink'} = 0;
if (($curRes->is_map()) && (!$curRes->{DATA}->{HAS_VISIBLE_CHILDREN})) {
if ($args->{'suppressEmptySequences'}) {
next;
@@ -1828,22 +1800,6 @@ END
} else {
next;
}
- } elsif ($curRes->deeplinkout) {
- if ($userCanSeeHidden) {
- $args->{'mapHiddenDeepLink'} = 1;
- } else {
- next;
- }
- } else {
- my $deeplink = $navmap->get_mapparam(undef,$mapname,"0.deeplink");
- my ($state,$others,$listed) = split(/,/,$deeplink);
- if (($listed eq 'absent') || ($listed eq 'grades')) {
- if ($userCanSeeHidden) {
- $args->{'mapUnlisted'} = 1;
- } else {
- next;
- }
- }
}
}
}
@@ -1906,16 +1862,7 @@ END
$args->{'condensed'} = 1;
}
}
- }
- # If deep-link parameter is set (and is not set to full) suppress link
- # unless privileged user, tinyurl used for login resolved to a map, and
- # the resource is within the map.
- if ((!$curRes->deeplink($args->{'caller'})) ||
- ($curRes->deeplink($args->{'caller'}) eq 'full') || &advancedUser()) {
- $args->{'resource_nolink'} = 0;
- } else {
- $args->{'resource_nolink'} = 1;
- }
+ }
# If the multipart problem was condensed, "forget" it was multipart
if (scalar(@parts) == 1) {
@@ -2481,7 +2428,7 @@ sub getIterator {
my $self = shift;
my $iterator = Apache::lonnavmaps::iterator->new($self, shift, shift,
shift, undef, shift,
- shift, shift, shift);
+ shift, shift);
return $iterator;
}
@@ -3447,7 +3394,7 @@ getIterator behaves as follows:
=over 4
-=item * B(firstResource, finishResource, filterHash, condition, forceTop, returnTopMap, $deeplinklisted):
+=item * B(firstResource, finishResource, filterHash, condition, forceTop, returnTopMap):
All parameters are optional. firstResource is a resource reference
corresponding to where the iterator should start. It defaults to
@@ -3464,10 +3411,7 @@ that is not just a single, 'redirecting'
will return all information, starting with the top-level map,
regardless of content. returnTopMap, if true (default false), will
cause the iterator to return the top-level map object (resource 0.0)
-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().
+before anything else.
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
@@ -3604,10 +3548,6 @@ sub new {
# have we done that yet?
$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
# over the parts of the map we're going to look at.
@@ -3699,8 +3639,7 @@ sub new {
$finishResource, $self->{FILTER},
$self->{ALREADY_SEEN},
$self->{CONDITION},
- $self->{FORCE_TOP},
- undef,$self->{DEEPLINKLISTED});
+ $self->{FORCE_TOP});
}
# Set up some bookkeeping information.
@@ -3870,14 +3809,13 @@ sub next {
$finishResource, $self->{FILTER},
$self->{ALREADY_SEEN},
$self->{CONDITION},
- $self->{FORCE_TOP},
- undef,$self->{DEEPLINKLISTED});
+ $self->{FORCE_TOP});
}
# 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
# that you can use; other things depend on this behavior.
- my $browsePriv = $self->{HERE}->browsePriv($noblockcheck,$self->{DEEPLINKLISTED});
+ my $browsePriv = $self->{HERE}->browsePriv($noblockcheck);
if (!$self->{HERE}->src() ||
(!($browsePriv eq 'F') && !($browsePriv eq '2')) ) {
return $self->next($closeAllPages);
@@ -4305,7 +4243,6 @@ sub from { my $self=shift; return $self-
sub goesto { my $self=shift; return $self->navHash("goesto_", 1); }
sub kind { my $self=shift; return $self->navHash("kind_", 1); }
sub randomout { my $self=shift; return $self->navHash("randomout_", 1); }
-sub deeplinkout { my $self=shift; return $self->navHash("deeplinkout_", 1); }
sub randompick {
my $self = shift;
my $randompick = $self->parmval('randompick');
@@ -4561,6 +4498,7 @@ sub is_task {
sub is_empty_sequence {
my $self=shift;
+ my $src = $self->src();
return !$self->is_page() && $self->navHash("is_map_", 1) && !$self->navHash("map_type_" . $self->map_pc());
}
@@ -4881,10 +4819,10 @@ sub duedate {
my $date;
my @interval=$self->parmval("interval", $part);
my $due_date=$self->parmval("duedate", $part);
- if ($interval[0] =~ /(\d+)/) {
+ if ($interval[0] =~ /^(\d+)/) {
my $timelimit = $1;
my $first_access=&Apache::lonnet::get_first_access($interval[1],
- $self->{SYMB});
+ $self->{SYMB});
if (defined($first_access)) {
my $interval = $first_access+$timelimit;
$date = (!$due_date || $interval < $due_date) ? $interval
@@ -4980,46 +4918,6 @@ sub slot_control {
my $available = $self->parmval("available", $part);
return ($useslots,$availablestudent,$available);
}
-sub deeplink {
- my ($self,$caller,$action) = @_;
- my $deeplink = $self->parmval("deeplink");
- if ($deeplink) {
- my ($state,$others,$listed,$scope) = split(/,/,$deeplink);
- if ($action eq 'getlisted') {
- return $listed;
- }
- 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));
- }
- }
- }
- unless (($caller eq 'sequence') || ($state eq 'both')) {
- return $listed;
- }
- }
- return;
-}
# Multiple things need this
sub getReturnHash {
@@ -6151,23 +6049,13 @@ sub getPrevious {
sub browsePriv {
my $self = shift;
my $noblockcheck = shift;
- my $deeplinklisted = shift;
if (defined($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->{SYMB},undef,
- undef,$noblockcheck,
- undef,$nodeeplinkcheck,
- $nodeeplinkout);
+ undef,$noblockcheck);
}
=pod