--- loncom/interface/lonnavmaps.pm 2016/08/10 21:29:52 1.509.2.3
+++ loncom/interface/lonnavmaps.pm 2019/02/03 22:25:47 1.509.2.9
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.509.2.3 2016/08/10 21:29:52 raeburn Exp $
+# $Id: lonnavmaps.pm,v 1.509.2.9 2019/02/03 22:25:47 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
@@ -643,6 +643,9 @@ sub getDescription {
} elsif ($slot_status == $res->RESERVABLE) {
$slotmsg = &mt('Reservable, reservations close [_1]',
timeToHumanString($slot_time,'end'));
+ } elsif ($slot_status == $res->NEEDS_CHECKIN) {
+ $slotmsg = &mt('Reserved, check-in needed - ends [_1]',
+ timeToHumanString($slot_time,'end'));
} elsif ($slot_status == $res->RESERVABLE_LATER) {
$slotmsg = &mt('Reservable, reservations open [_1]',
timeToHumanString($slot_time,'start'));
@@ -938,7 +941,28 @@ sub render_resource {
# links to open and close the folder
my $whitespace = $location.'/whitespace_21.gif';
- my $linkopen = "
"."";
+ 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;
+ }
+ } 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 .= "";
+ }
+ } else {
+ $linkopen .= "";
+ }
my $linkclose = "";
# Default icon: unknown page
@@ -996,7 +1020,8 @@ sub render_resource {
$linkopen = "";
$linkclose = "";
}
- if ((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) &&
+ if (((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) ||
+ (&Apache::lonnet::allowed('cev',$env{'request.course.id'}))) &&
($resource->symb=~/\_\_\_[^\_]+\_\_\_uploaded/)) {
if (!$params->{'map_no_edit_link'}) {
my $icon = &Apache::loncommon::lonhttpdurl('/res/adm/pages').'/editmap.png';
@@ -1062,10 +1087,19 @@ sub render_resource {
}
if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) {
- $result .= "$curMarkerBegin$title$partLabel$curMarkerEnd$editmapLink$nonLinkedText";
- } else {
- $result .= "$curMarkerBegin$linkopen$title$partLabel$curMarkerEnd$editmapLink$nonLinkedText";
+ $linkclose = '';
+ if ($params->{'modalLink'}) {
+ my $esclink = &js_escape($link);
+ if ($nomodal) {
+ $linkopen = "";
+ } else {
+ $linkopen = "";
+ }
+ } else {
+ $linkopen = "";
+ }
}
+ $result .= "$curMarkerBegin$linkopen$title$partLabel$linkclose$curMarkerEnd$editmapLink$nonLinkedText";
return $result;
}
@@ -1419,10 +1453,13 @@ sub render {
if ($args->{'iterator_map'}) {
my $map = $args->{'iterator_map'};
$map = $navmap->getResourceByUrl($map);
- my $firstResource = $map->map_start();
- my $finishResource = $map->map_finish();
-
- $args->{'iterator'} = $it = $navmap->getIterator($firstResource, $finishResource, $filterHash, $condition);
+ if (ref($map)) {
+ my $firstResource = $map->map_start();
+ my $finishResource = $map->map_finish();
+ $args->{'iterator'} = $it = $navmap->getIterator($firstResource, $finishResource, $filterHash, $condition);
+ } else {
+ return;
+ }
} else {
$args->{'iterator'} = $it = $navmap->getIterator(undef, undef, $filterHash, $condition,undef,$args->{'include_top_level_map'});
}
@@ -1541,7 +1578,8 @@ END
$result.='';
}
if (($args->{'caller'} eq 'navmapsdisplay') &&
- (&Apache::lonnet::allowed('mdc',$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 $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
if ($env{'course.'.$env{'request.course.id'}.'.url'} eq
@@ -1685,6 +1723,11 @@ END
}
+ my $inhibitmenu;
+ if ($args->{'modalLink'}) {
+ $inhibitmenu = '&inhibitmenu=yes';
+ }
+
while (1) {
if ($args->{'sort'}) {
$curRes = shift(@resources);
@@ -1821,7 +1864,7 @@ END
my $srcHasQuestion = $src =~ /\?/;
$args->{"resourceLink"} = $src.
($srcHasQuestion?'&':'?') .
- 'symb=' . &escape($symb).$anchor;
+ 'symb=' . &escape($symb).$inhibitmenu.$anchor;
}
# Now, we've decided what parts to show. Loop through them and
# show them.
@@ -2235,7 +2278,7 @@ sub generate_email_discuss_status {
foreach my $msgid (@keys) {
if ((!$emailstatus{$msgid}) || ($emailstatus{$msgid} eq 'new')) {
my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,
- $symb,$error) = &Apache::lonmsg::unpackmsgid($msgid);
+ $symb,$error) = &Apache::lonmsg::unpackmsgid(&LONCAPA::escape($msgid));
&Apache::lonenc::check_decrypt(\$symb);
if (($fromcid ne '') && ($fromcid ne $cid)) {
next;
@@ -2732,6 +2775,23 @@ sub parmval_real {
if (defined($pack_def)) { return [$pack_def,'resource']; }
return [''];
}
+
+sub recurseup_maps {
+ my ($self,$mapname) = @_;
+ my @recurseup;
+ if ($mapname) {
+ my $res = $self->getResourceByUrl($mapname);
+ if (ref($res)) {
+ my @pcs = split(/,/,$res->map_hierarchy());
+ shift(@pcs);
+ if (@pcs) {
+ @recurseup = map { &Apache::lonnet::declutter($self->getByMapPc($_)->src()); } reverse(@pcs);
+ }
+ }
+ }
+ return @recurseup;
+}
+
#
# Determines the open/close dates for printing a map that
# encloses a resource.
@@ -2812,6 +2872,20 @@ sub get_mapparam {
if (defined($$useropt{$courselevel})) {
return $$useropt{$courselevel};
}
+ if ($what =~ /\.(encrypturl|hiddenresource)$/) {
+ unless ($recursed) {
+ @recurseup = $self->recurseup_maps($mapname);
+ $recursed = 1;
+ }
+ foreach my $item (@recurseup) {
+ my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what;
+ if (defined($$useropt{$norecursechk})) {
+ if ($what =~ /\.(encrypturl|hiddenresource)$/) {
+ return $$useropt{$norecursechk};
+ }
+ }
+ }
+ }
}
# Check course -- group
@@ -2822,6 +2896,20 @@ sub get_mapparam {
if (defined($$courseopt{$grplevel})) {
return $$courseopt{$grplevel};
}
+ if ($what =~ /\.(encrypturl|hiddenresource)$/) {
+ unless ($recursed) {
+ @recurseup = $self->recurseup_maps($mapname);
+ $recursed = 1;
+ }
+ foreach my $item (@recurseup) {
+ my $norecursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(all).'.$what;
+ if (defined($$courseopt{$norecursechk})) {
+ if ($what =~ /\.(encrypturl|hiddenresource)$/) {
+ return $$courseopt{$norecursechk};
+ }
+ }
+ }
+ }
}
# Check course -- section
@@ -2834,6 +2922,20 @@ sub get_mapparam {
if (defined($$courseopt{$seclevel})) {
return $$courseopt{$seclevel};
}
+ if ($what =~ /\.(encrypturl|hiddenresource)$/) {
+ unless ($recursed) {
+ @recurseup = $self->recurseup_maps($mapname);
+ $recursed = 1;
+ }
+ foreach my $item (@recurseup) {
+ my $norecursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(all).'.$what;
+ if (defined($$courseopt{$norecursechk})) {
+ if ($what =~ /\.(encrypturl|hiddenresource)$/) {
+ return $$courseopt{$norecursechk};
+ }
+ }
+ }
+ }
}
# Check the map parameters themselves:
@@ -2852,6 +2954,20 @@ sub get_mapparam {
if (defined($$courseopt{$courselevel})) {
return $$courseopt{$courselevel};
}
+ if ($what =~ /\.(encrypturl|hiddenresource)$/) {
+ unless ($recursed) {
+ @recurseup = $self->recurseup_maps($mapname);
+ $recursed = 1;
+ }
+ foreach my $item (@recurseup) {
+ my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what;
+ if (defined($$courseopt{$norecursechk})) {
+ if ($what =~ /\.(encrypturl|hiddenresource)$/) {
+ return $$courseopt{$norecursechk};
+ }
+ }
+ }
+ }
}
return undef; # Unefined if we got here.
}
@@ -4027,6 +4143,7 @@ sub enclosing_map_src {
}
sub symb {
my $self=shift;
+ if (defined($self->{SYMB})) { return $self->{SYMB}; }
(my $first, my $second) = $self->{ID} =~ /(\d+).(\d+)/;
my $symbSrc = &Apache::lonnet::declutter($self->src());
my $symb = &Apache::lonnet::declutter($self->navHash('map_id_'.$first))
@@ -5466,7 +5583,7 @@ sub check_for_slot {
($checkedin,$checkedinslot) = $self->checkedin();
unless ((grep(/^\Q$checkedin\E/,@proctors)) &&
($checkedinslot eq $slot_name)) {
- return (NEEDS_CHECKIN,undef,$slot_name);
+ return (NEEDS_CHECKIN,$end,$slot_name);
}
}
return (RESERVED,$end,$slot_name);