[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm

bowersj2 lon-capa-cvs@mail.lon-capa.org
Thu, 20 Feb 2003 22:08:55 -0000


bowersj2		Thu Feb 20 17:08:55 2003 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm 
  Log:
  Fix implicit iterator creation in render routine to take the map's URL
  and automatically translate it.
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.143 loncom/interface/lonnavmaps.pm:1.144
--- loncom/interface/lonnavmaps.pm:1.143	Thu Feb 13 18:44:30 2003
+++ loncom/interface/lonnavmaps.pm	Thu Feb 20 17:08:55 2003
@@ -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 @@
 
 =item * B<resource_part_count>: 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<resource_no_folder_link>: If true, the resource's folder will not be clickable to open or close it. Default is false.
+
 =back
 
 =item B<communication_status>: 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 @@
 
 =over 4
 
-=item * B<iterator>: 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<iterator>: 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<iterator_map>: 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<navmap>: 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 @@
         if ($it->{CONDITION}) {
             $nowOpen = !$nowOpen;
         }
-        $icon = 'navmap.folder.' . ($nowOpen ? 'closed' : 'open') . '.gif';
-        $icon = "<img src='/adm/lonIcons/$icon' alt='' border='0' />";
-        
-        $linkopen = "<a href='" . $params->{'url'} . '?' . 
-            $params->{'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 = "<img src='/adm/lonIcons/$icon' alt='' border='0' />";
+
+            $linkopen = "<a href='" . $params->{'url'} . '?' . 
+                $params->{'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 = "<img src='/adm/lonIcons/$icon' alt='' border='0' />";
+
+            $linkopen = "";
+            $linkclose = "";
+        }
     }
 
     if ($resource->randomout()) {
@@ -644,7 +659,11 @@
         $nonLinkedText .= ' (' . $resource->countParts() . ' parts)';
     }
 
-    $result .= "  $curMarkerBegin<a href='$link'>$title$partLabel</a>$curMarkerEnd $nonLinkedText</td>";
+    if (!$params->{'resource_nolink'}) {
+        $result .= "  $curMarkerBegin<a href='$link'>$title$partLabel</a>$curMarkerEnd $nonLinkedText</td>";
+    } else {
+        $result .= "  $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText</td>";
+    }
 
     return $result;
 }
@@ -919,7 +938,19 @@
         # 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 @@
     if (!defined($printCloseAll)) { $printCloseAll = 1; }
     my $filterFunc = setDefault($args->{'filterFunc'},
                                 sub {return 1;});
-
+    
     # Print key?
     if ($printKey) {
         $result .= '<table border="0" cellpadding="2" cellspacing="0">';
@@ -2324,6 +2355,7 @@
 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_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;