--- loncom/interface/lonnavmaps.pm 2002/11/26 16:25:36 1.116 +++ loncom/interface/lonnavmaps.pm 2003/01/14 18:47:50 1.130 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.116 2002/11/26 16:25:36 bowersj2 Exp $ +# $Id: lonnavmaps.pm,v 1.130 2003/01/14 18:47:50 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,8 +46,31 @@ use Apache::Constants qw(:common :http); use Apache::loncommon(); use POSIX qw (floor strftime); +my %navmaphash; +my %parmhash; + +sub cleanup { + if (tied(%navmaphash)){ + &Apache::lonnet::logthis('Cleanup navmaps: navmaphash'); + unless (untie(%navmaphash)) { + &Apache::lonnet::logthis('Failed cleanup navmaps: navmaphash'); + } + } + if (tied(%parmhash)){ + &Apache::lonnet::logthis('Cleanup navmaps: parmhash'); + unless (untie(%parmhash)) { + &Apache::lonnet::logthis('Failed cleanup navmaps: parmhash'); + } + } +} + sub handler { my $r = shift; + real_handler($r); +} + +sub real_handler { + my $r = shift; &Apache::loncommon::get_unprocessed_cgi($ENV{QUERY_STRING}); @@ -84,13 +107,18 @@ sub handler { } $r->print("
\n"); - $r->print("Key: | '); @@ -116,30 +144,63 @@ sub handler { $condition = 1; } - my $currenturl = $ENV{'form.postdata'}; - $currenturl=~s/^http\:\/\///; - $currenturl=~s/^[^\/]+//; + # Determine where the "here" marker is and where the screen jumps to. + my $SYMB = 1; my $URL = 2; my $NOTHING = 3; # symbolic constants + my $hereType; # the type of marker, $SYMB, $URL, or $NOTHING + my $here; # the actual URL or SYMB for the here marker + my $jumpType; # The type of the thing we have a jump for, $SYMB or $URL + my $jump; # the SYMB/URL of the resource we need to jump to + + if ( $ENV{'form.alreadyHere'} ) { # we came from a user's manipulation of the nav page + # If this is a click on a folder or something, we want to preserve the "here" + # from the querystring, and get the new "jump" marker + $hereType = $ENV{'form.hereType'}; + $here = $ENV{'form.here'}; + $jumpType = $ENV{'form.jumpType'} || $NOTHING; + $jump = $ENV{'form.jump'}; + } else { # the user is visiting the nav map from the remote + # We're coming from the remote. We have either a url, a symb, or nothing, + # and we need to figure out what. + # Preference: Symb + + if ($ENV{'form.symb'}) { + $hereType = $jumpType = $SYMB; + $here = $jump = $ENV{'form.symb'}; + } elsif ($ENV{'form.postdata'}) { + # couldn't find a symb, is there a URL? + my $currenturl = $ENV{'form.postdata'}; + $currenturl=~s/^http\:\/\///; + $currenturl=~s/^[^\/]+//; + + $hereType = $jumpType = $URL; + $here = $jump = $currenturl; + } else { + # Nothing + $hereType = $jumpType = $NOTHING; + } + } + # alreadyHere allows us to only open the maps necessary to view # the current location once, while at the same time remembering # the current location. Without that check, the user would never # be able to close those maps; the user would close it, and the # currenturl scan would re-open it. - my $queryAdd = "postdata=" . &Apache::lonnet::escape($currenturl) . - "&alreadyHere=1"; + my $queryAdd = "&alreadyHere=1"; if ($condition) { - $r->print("Close All Folders"); + $r->print("Close All Folders"); } else { - $r->print("Open All Folders"); + $r->print("Open All Folders"); } $r->print('||
\n"); # Print the anchor if necessary - if ($counter == $currentUrlIndex - $currentUrlDelta) { - $r->print(''); + if ($counter == $currentJumpIndex - $currentJumpDelta ) { + $r->print(''); + $displayedJumpMarker = 1; } # print indentation @@ -507,8 +594,10 @@ sub handler { my $curMarkerEnd = ""; # Is this the current resource? - if ($curRes->src() eq $currenturl && !$displayedHereMarker) { - $curMarkerBegin = '> '; + if (!$displayedHereMarker && + (($hereType == $SYMB && $curRes->symb eq $here) || + ($hereType == $URL && $curRes->src eq $here))) { + $curMarkerBegin = '> '; $curMarkerEnd = ' <'; $displayedHereMarker = 1; } @@ -523,15 +612,15 @@ sub handler { $r->print(" $curMarkerBegin$title$partLabel $curMarkerEnd $nonLinkedText"); - if ($curRes->{RESOURCE_ERROR}) { - $r->print(&Apache::loncommon::help_open_topic ("Navmap_Host_Down", - 'Host down')); - } + #if ($curRes->{RESOURCE_ERROR}) { + # $r->print(&Apache::loncommon::help_open_topic ("Navmap_Host_Down", + # 'Host down')); + # } $r->print(" | \n"); # SECOND COL: Is there text, feedback, errors?? - my $discussionHTML = ""; my $feedbackHTML = ""; + my $discussionHTML = ""; my $feedbackHTML = ""; my $errorHTML = ""; if ($curRes->hasDiscussion()) { $discussionHTML = $linkopen . @@ -551,7 +640,19 @@ sub handler { } } - $r->print("$discussionHTML$feedbackHTML | "); + if ($curRes->getErrors()) { + my $errors = $curRes->getErrors(); + foreach (split(/,/, $errors)) { + if ($_) { + $errorHTML .= ' ' + . '$discussionHTML$feedbackHTML$errorHTML | "); # Is this the first displayed part of a multi-part problem # that has not been condensed, so we should suppress these two @@ -596,10 +697,17 @@ sub handler { $curRes = $mapIterator->next(); } - $r->print("