--- loncom/interface/lonnavmaps.pm 2003/02/13 23:44:30 1.143 +++ loncom/interface/lonnavmaps.pm 2003/02/20 22:08:55 1.144 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.143 2003/02/13 23:44:30 bowersj2 Exp $ +# $Id: lonnavmaps.pm,v 1.144 2003/02/20 22:08:55 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -463,6 +463,8 @@ The pre-packaged column names are refere =item * B: If true (default), the resource will show a part count if the full part list is not displayed. If false, the resource will never show a part count. +=item * B: If true, the resource's folder will not be clickable to open or close it. Default is false. + =back =item B: Whether there is discussion on the resource, email for the user, or (lumped in here) perl errors in the execution of the problem. This is the second column in the main nav map. @@ -491,7 +493,9 @@ Most of these parameters are only useful =over 4 -=item * B: A reference to a fresh ::iterator to use from the navmaps. The rendering will reflect the options passed to the iterator, so you can use that to just render a certain part of the course, if you like. If one is not passed, the renderer will attempt to construct one from ENV{'form.filter'} and ENV{'form.condition'} information. +=item * B: A reference to a fresh ::iterator to use from the navmaps. The rendering will reflect the options passed to the iterator, so you can use that to just render a certain part of the course, if you like. If one is not passed, the renderer will attempt to construct one from ENV{'form.filter'} and ENV{'form.condition'} information, plus the 'iterator_map' parameter if any. + +=item * B: If you are letting the renderer do the iterator handling, you can instruct the renderer to render only a particular map by passing it the source of the map you want to process, like '/res/103/jerf/navmap.course.sequence'. =item * B: A reference to a navmap, used only if an iterator is not passed in. If this is necessary to make an iterator but it is not passed in, a new one will be constructed based on ENV info. This is useful to do basic error checking before passing it off to render. @@ -587,20 +591,31 @@ sub render_resource { if ($it->{CONDITION}) { $nowOpen = !$nowOpen; } - $icon = 'navmap.folder.' . ($nowOpen ? 'closed' : 'open') . '.gif'; - $icon = ""; - - $linkopen = "{'queryString'} . '&filter='; - $linkopen .= ($nowOpen xor $it->{CONDITION}) ? - addToFilter($filter, $mapId) : - removeFromFilter($filter, $mapId); - $linkopen .= "&condition=" . $it->{CONDITION} . '&hereType=' - . $params->{'hereType'} . '&here=' . - &Apache::lonnet::escape($params->{'here'}) . - '&jumpType=' . SYMB() . '&jump=' . - &Apache::lonnet::escape($resource->symb()) . - "&folderManip=1'>"; + + if (!$params->{'resource_no_folder_link'}) { + $icon = 'navmap.folder.' . ($nowOpen ? 'closed' : 'open') . '.gif'; + $icon = ""; + + $linkopen = "{'queryString'} . '&filter='; + $linkopen .= ($nowOpen xor $it->{CONDITION}) ? + addToFilter($filter, $mapId) : + removeFromFilter($filter, $mapId); + $linkopen .= "&condition=" . $it->{CONDITION} . '&hereType=' + . $params->{'hereType'} . '&here=' . + &Apache::lonnet::escape($params->{'here'}) . + '&jumpType=' . SYMB() . '&jump=' . + &Apache::lonnet::escape($resource->symb()) . + "&folderManip=1'>"; + } else { + # Don't allow users to manipulate folder + $icon = 'navmap.folder.' . ($nowOpen ? 'closed' : 'open') . + '.nomanip.gif'; + $icon = ""; + + $linkopen = ""; + $linkclose = ""; + } } if ($resource->randomout()) { @@ -644,7 +659,11 @@ sub render_resource { $nonLinkedText .= ' (' . $resource->countParts() . ' parts)'; } - $result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText"; + if (!$params->{'resource_nolink'}) { + $result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText"; + } else { + $result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText"; + } return $result; } @@ -919,7 +938,19 @@ sub render { # Paranoia: Make sure it's ready $navmap->init(); - $args->{'iterator'} = $it = $navmap->getIterator(undef, undef, $filterHash, $condition); + # See if we're being passed a specific map + if ($args->{'iterator_map'}) { + my $map = $args->{'iterator_map'}; + $map = &Apache::lonnet::clutter($map); + $map = $navmap->{NAV_HASH}->{'ids_' . $map}; + $map = $navmap->getById($map); + my $firstResource = $map->map_start(); + my $finishResource = $map->map_finish(); + + $args->{'iterator'} = $it = $navmap->getIterator($firstResource, $finishResource, $filterHash, $condition); + } else { + $args->{'iterator'} = $it = $navmap->getIterator(undef, undef, $filterHash, $condition); + } } my $showParts = setDefault($args->{'showParts'}, 1); @@ -933,7 +964,7 @@ sub render { if (!defined($printCloseAll)) { $printCloseAll = 1; } my $filterFunc = setDefault($args->{'filterFunc'}, sub {return 1;}); - + # Print key? if ($printKey) { $result .= ''; @@ -2324,6 +2355,7 @@ These methods are useful for getting inf sub map_finish { my $self = shift; my $src = $self->src(); + $src = Apache::lonnet::clutter($src); my $res = $self->navHash("map_finish_$src", 0); $res = $self->{NAV_MAP}->getById($res); return $res; @@ -2336,6 +2368,7 @@ sub map_pc { sub map_start { my $self = shift; my $src = $self->src(); + $src = Apache::lonnet::clutter($src); my $res = $self->navHash("map_start_$src", 0); $res = $self->{NAV_MAP}->getById($res); return $res;