--- loncom/interface/lonnavmaps.pm 2003/01/14 01:42:52 1.127 +++ loncom/interface/lonnavmaps.pm 2003/02/04 16:28:50 1.135 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.127 2003/01/14 01:42:52 bowersj2 Exp $ +# $Id: lonnavmaps.pm,v 1.135 2003/02/04 16:28:50 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,6 +46,52 @@ use Apache::Constants qw(:common :http); use Apache::loncommon(); use POSIX qw (floor strftime); +my %navmaphash; +my %parmhash; + +# symbolic constants +sub SYMB { return 1; } +sub URL { return 2; } +sub NOTHING { return 3; } + +# Some data + +# Keep these mappings in sync with lonquickgrades, which uses the colors +# instead of the icons. +my %statusIconMap = + ( Apache::lonnavmaps::resource->NETWORK_FAILURE => '', + Apache::lonnavmaps::resource->NOTHING_SET => '', + Apache::lonnavmaps::resource->CORRECT => 'navmap.correct.gif', + Apache::lonnavmaps::resource->EXCUSED => 'navmap.correct.gif', + Apache::lonnavmaps::resource->PAST_DUE_NO_ANSWER => 'navmap.wrong.gif', + Apache::lonnavmaps::resource->PAST_DUE_ANSWER_LATER => 'navmap.wrong.gif', + Apache::lonnavmaps::resource->ANSWER_OPEN => 'navmap.wrong.gif', + Apache::lonnavmaps::resource->OPEN_LATER => '', + Apache::lonnavmaps::resource->TRIES_LEFT => 'navmap.open.gif', + Apache::lonnavmaps::resource->INCORRECT => 'navmap.wrong.gif', + Apache::lonnavmaps::resource->OPEN => 'navmap.open.gif', + Apache::lonnavmaps::resource->ATTEMPTED => 'navmap.open.gif' ); + +my %iconAltTags = + ( 'navmap.correct.gif' => 'Correct', + 'navmap.wrong.gif' => 'Incorrect', + 'navmap.open.gif' => 'Open' ); + +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); @@ -127,10 +173,9 @@ sub real_handler { } # 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 $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 $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 @@ -138,7 +183,7 @@ sub real_handler { # from the querystring, and get the new "jump" marker $hereType = $ENV{'form.hereType'}; $here = $ENV{'form.here'}; - $jumpType = $ENV{'form.jumpType'} || $NOTHING; + $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, @@ -146,7 +191,7 @@ sub real_handler { # Preference: Symb if ($ENV{'form.symb'}) { - $hereType = $jumpType = $SYMB; + $hereType = $jumpType = SYMB(); $here = $jump = $ENV{'form.symb'}; } elsif ($ENV{'form.postdata'}) { # couldn't find a symb, is there a URL? @@ -154,11 +199,11 @@ sub real_handler { $currenturl=~s/^http\:\/\///; $currenturl=~s/^[^\/]+//; - $hereType = $jumpType = $URL; + $hereType = $jumpType = URL; $here = $jump = $currenturl; } else { # Nothing - $hereType = $jumpType = $NOTHING; + $hereType = $jumpType = NOTHING(); } } @@ -214,27 +259,6 @@ sub real_handler { # is not yet done and due in less then 24 hours my $hurryUpColor = "#FF0000"; - # Keep these mappings in sync with lonquickgrades, which uses the colors - # instead of the icons. - my %statusIconMap = - ( $res->NETWORK_FAILURE => '', - $res->NOTHING_SET => '', - $res->CORRECT => 'navmap.correct.gif', - $res->EXCUSED => 'navmap.correct.gif', - $res->PAST_DUE_NO_ANSWER => 'navmap.wrong.gif', - $res->PAST_DUE_ANSWER_LATER => 'navmap.wrong.gif', - $res->ANSWER_OPEN => 'navmap.wrong.gif', - $res->OPEN_LATER => '', - $res->TRIES_LEFT => 'navmap.open.gif', - $res->INCORRECT => 'navmap.wrong.gif', - $res->OPEN => 'navmap.open.gif', - $res->ATTEMPTED => 'navmap.open.gif' ); - - my %iconAltTags = - ( 'navmap.correct.gif' => 'Correct', - 'navmap.wrong.gif' => 'Incorrect', - 'navmap.open.gif' => 'Open' ); - my %condenseStatuses = ( $res->NETWORK_FAILURE => 1, $res->NOTHING_SET => 1, @@ -273,7 +297,7 @@ sub real_handler { $mapIterator->next(); # discard the first BEGIN_MAP my $curRes = $mapIterator->next(); my $counter = 0; - my $foundJump = ($jumpType == $NOTHING); # look for jump point if we have one + my $foundJump = ($jumpType == NOTHING()); # look for jump point if we have one my $looped = 0; # We only need to do this if we need to open the maps to show the @@ -284,8 +308,8 @@ sub real_handler { if ($curRes == $mapIterator->END_MAP()) { $depth--; } if (ref($curRes) && !$ENV{'form.alreadyHere'} && - ($hereType == $SYMB && $curRes->symb() eq $here) || - (ref($curRes) && $hereType == $URL && $curRes->src() eq $here)) { + ($hereType == SYMB() && $curRes->symb() eq $here) || + (ref($curRes) && $hereType == URL() && $curRes->src() eq $here)) { my $mapStack = $mapIterator->getStack(); # Ensure the parent maps are open @@ -314,8 +338,8 @@ sub real_handler { if (ref($curRes)) { $counter++; } if (ref($curRes) && - (($jumpType == $SYMB && $curRes->symb() eq $jump) || - ($jumpType == $URL && $curRes->src() eq $jump))) { + (($jumpType == SYMB() && $curRes->symb() eq $jump) || + ($jumpType == URL() && $curRes->src() eq $jump))) { # If this is the correct resource, be sure to # show it by making sure the containing maps # are open. @@ -332,7 +356,7 @@ sub real_handler { undef $res; # so we don't accidentally use it later my $indentLevel = 0; - my $indentString = ""; + my $indentString = ""; my $isNewBranch = 0; my $now = time(); @@ -370,13 +394,6 @@ sub real_handler { if (ref($curRes)) { $counter++; } - # Is this resource being ignored because it is in a random-out - # map and it was not selected? - if (ref($curRes) && !advancedUser() && $curRes->randomout()) { - $curRes = $mapIterator->next(); - next; # if yes, then just ignore this resource - } - if (ref($curRes)) { my $deltalevel = $isNewBranch? 1 : 0; # reserves space for branch icon @@ -409,6 +426,9 @@ sub real_handler { # Otherwise, only display part 0 if we want to # attach feedback or email information to it if ($curRes->hasDiscussion() || $curRes->getFeedback()) { + # Is this right? I think this will toss it + # if it DOES have discussion, not if it doesn't? + # - Jeremy (yes, commenting on his own code) shift @parts; } else { # Now, we decide whether to condense the @@ -431,7 +451,7 @@ sub real_handler { } } - # $allSame is true if all the statuses were + # $*allSame is true if all the statuses were # the same. Now, if they are all the same and # match one of the statuses to condense, or they # are all open with the same due date, or they are @@ -528,7 +548,7 @@ sub real_handler { removeFromFilter(\%filterHash, $mapId); $linkopen .= "&condition=$condition&$queryAdd" . "&hereType=$hereType&here=" . - Apache::lonnet::escape($here) . "&jumpType=$SYMB&" . + Apache::lonnet::escape($here) . "&jumpType=".SYMB()."&" . "jump=" . Apache::lonnet::escape($curRes->symb()) ."\">"; $linkclose = ""; @@ -577,8 +597,8 @@ sub real_handler { # Is this the current resource? if (!$displayedHereMarker && - (($hereType == $SYMB && $curRes->symb eq $here) || - ($hereType == $URL && $curRes->src eq $here))) { + (($hereType == SYMB() && $curRes->symb eq $here) || + ($hereType == URL() && $curRes->src eq $here))) { $curMarkerBegin = '> '; $curMarkerEnd = ' <'; $displayedHereMarker = 1; @@ -686,9 +706,17 @@ sub real_handler { $r->print(''); } + # renderer call + $mapIterator = $navmap->getIterator(undef, undef, \%filterHash, 0); + my $render = render({ 'cols' => [0,1,2,3], 'iterator' => $mapIterator, + 'url' => '/adm/navmaps', + 'queryString' => 'alreadyHere=1' }); + $r->print('|' . $render . '|'); + $navmap->untieHashes(); - $r->print("