--- loncom/interface/lonnavmaps.pm 2022/06/11 03:58:58 1.556 +++ loncom/interface/lonnavmaps.pm 2025/01/31 16:07:31 1.568 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.556 2022/06/11 03:58:58 raeburn Exp $ +# $Id: lonnavmaps.pm,v 1.568 2025/01/31 16:07:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -549,6 +549,10 @@ my %colormap = $resObj->EXCUSED => '#3333FF', $resObj->PAST_DUE_ANSWER_LATER => '', $resObj->PAST_DUE_NO_ANSWER => '', + $resObj->PAST_DUE_ATMPT_ANS => '', + $resObj->PAST_DUE_ATMPT_NOANS => '', + $resObj->PAST_DUE_NO_ATMT_ANS => '', + $resObj->PAST_DUE_NO_ATMT_NOANS => '', $resObj->ANSWER_OPEN => '#006600', $resObj->OPEN_LATER => '', $resObj->TRIES_LEFT => '', @@ -694,10 +698,10 @@ sub getDescription { return &Apache::lonhtmlcommon::direct_parm_link(&mt("Open, no due date"),$res->symb(),'duedate',$part).$slotinfo; } } - if ($status == $res->PAST_DUE_ANSWER_LATER) { + if (($status == $res->PAST_DUE_ANSWER_LATER) || ($status == $res->PAST_DUE_ATMPT_ANS) || ($status == $res->PAST_DUE_NO_ATMT_ANS)) { return &mt("Answer open [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($answer,'start'),$res->symb(),'answerdate',$part)); } - if ($status == $res->PAST_DUE_NO_ANSWER) { + if (($status == $res->PAST_DUE_NO_ANSWER) || ($status == $res->PAST_DUE_ATMPT_NOANS) || ($status == $res->PAST_DUE_NO_ATMT_NOANS)) { if ($res->is_practice()) { return &mt("Closed [_1]",&Apache::lonhtmlcommon::direct_parm_link(&timeToHumanString($due,'start'),$res->symb(),'answerdate,duedate',$part)); } else { @@ -1020,8 +1024,12 @@ sub render_resource { if ($it->{CONDITION}) { $nowOpen = !$nowOpen; } - - my $folderType = $resource->is_sequence() ? 'folder' : 'page'; + my $folderType; + if (&advancedUser() && $resource->is_missing_map()) { + $folderType = 'none'; + } else { + $folderType = $resource->is_sequence() ? 'folder' : 'page'; + } my $title=$resource->title; $title=~s/\"/\&qout;/g; if (!$params->{'resource_no_folder_link'}) { @@ -1112,7 +1120,7 @@ sub render_resource { } # Decide what to display - $result .= "$newBranchText$linkopen$icon$linkclose"; + $result .= "$newBranchText$linkopen$icon"; my $curMarkerBegin = ''; my $curMarkerEnd = ''; @@ -1152,7 +1160,7 @@ sub render_resource { $linkopen = ""; } } - $result .= "$curMarkerBegin$linkopen$title$partLabel$linkclose$curMarkerEnd$editmapLink$nonLinkedText"; + $result .= "$curMarkerBegin$title$partLabel$curMarkerEnd$linkclose$editmapLink$nonLinkedText"; return $result; } @@ -1423,9 +1431,40 @@ sub render { my $condition = 0; if ($env{'form.condition'}) { $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 if (!defined($navmap)) { $navmap = Apache::lonnavmaps::navmap->new(); @@ -1589,9 +1628,6 @@ sub render { '&here='.&escape($here); $text='Open all folders'; } - if ($env{'form.register'}) { - $link .= '&register='.$env{'form.register'}; - } if ($args->{'caller'} eq 'navmapsdisplay') { unless ($args->{'notools'}) { &add_linkitem($args->{'linkitems'},'changefolder', @@ -1605,20 +1641,19 @@ sub render { # Check for any unread discussions in all resources. if (($args->{'caller'} eq 'navmapsdisplay') && (!$args->{'notools'})) { + my $markread = 'Mark all posts read'; &add_linkitem($args->{'linkitems'},'clearbubbles', 'document.clearbubbles.submit()', - 'Mark all posts read'); + $markread); my $time=time; + my $submit = &mt($markread); my $querystr = &HTML::Entities::encode($ENV{'QUERY_STRING'},'<>&"'); $result .= (< +