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

raeburn lon-capa-cvs@mail.lon-capa.org
Fri, 02 Dec 2005 23:06:04 -0000


raeburn		Fri Dec  2 18:06:04 2005 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm 
  Log:
  Modification to allow getResourceByUrl to return more than one resource object, if a resurce is used multiple times in a course. Former behavior - returning first resource s default. Will only return array if additional argument (multiple) is supplied when method is called. 
  
  Also added a method to return the version number for a supplied url, from the navhash.
  
  Both used by lonwhatsnew.pm rev 1.33.
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.351 loncom/interface/lonnavmaps.pm:1.352
--- loncom/interface/lonnavmaps.pm:1.351	Tue Nov 22 11:39:45 2005
+++ loncom/interface/lonnavmaps.pm	Fri Dec  2 18:06:02 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.351 2005/11/22 16:39:45 www Exp $
+# $Id: lonnavmaps.pm,v 1.352 2005/12/02 23:06:02 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2578,14 +2578,17 @@
 
 =pod
 
-=item * B<getResourceByUrl>(url):
+=item * B<getResourceByUrl>(url,multiple):
 
-Retrieves a resource object by URL of the resource. If passed a
-resource object, it will simply return it, so it is safe to use this
-method in code like "$res = $navmap->getResourceByUrl($res)", if
-you're not sure if $res is already an object, or just a URL. If the
-resource appears multiple times in the course, only the first instance
-will be returned. As a result, this is probably useful only for maps.
+Retrieves a resource object by URL of the resource, unless the optional
+multiple parameter is included in wahich caes an array of resource 
+objects is returned. If passed a resource object, it will simply return  
+it, so it is safe to use this method in code like
+"$res = $navmap->getResourceByUrl($res)"
+if you're not sure if $res is already an object, or just a URL. If the
+resource appears multiple times in the course, only the first instance 
+will be returned (useful for maps), unless the multiple parameter has
+been included, in which case all instances are returned in an array.
 
 =item * B<retrieveResources>(map, filterFunc, recursive, bailout, showall):
 
@@ -2620,22 +2623,45 @@
 which will tell whether the map has resources matching the description
 in the filter function.
 
+=item * B<usedVersion>(url):
+
+Retrieves version infomation for a url. Returns the version (a number, or 
+the string "mostrecent") for resources which have version information in  
+the big hash.
+    
 =cut
 
 
 sub getResourceByUrl {
     my $self = shift;
     my $resUrl = shift;
+    my $multiple = shift;
 
     if (ref($resUrl)) { return $resUrl; }
 
     $resUrl = &Apache::lonnet::clutter($resUrl);
-    my $resId = $self->{NAV_HASH}->{'ids_' . $resUrl};
-    if ($resId =~ /,/) {
-        $resId = (split (/,/, $resId))[0];
+    if (defined($multiple)) {
+        if ($multiple) {
+            my @resIds = $self->{NAV_HASH}->{'ids_' . $resUrl};
+        }
     }
+    my $resId = $self->{NAV_HASH}->{'ids_' . $resUrl};
     if (!$resId) { return ''; }
-    return $self->getById($resId);
+    if ($multiple) {
+        my @resources = ();
+        my @resIds = split (/,/, $resId);
+        foreach my $id (@resIds) {
+            if ($id) { 
+                push(@resources,$self->getById($id));
+            }
+        }
+        return @resources;
+    } else {
+        if ($resId =~ /,/) {
+            $resId = (split (/,/, $resId))[0];
+        }
+        return $self->getById($resId);
+    }
 }
 
 sub retrieveResources {
@@ -2703,6 +2729,12 @@
     return scalar($self->retrieveResources($map, $filterFunc, $recursive, 1, $showall)) > 0;
 }
 
+sub usedVersion {
+    my $self = shift;
+    my $linkurl = shift;
+    return $self->navhash("version_$linkurl");
+}
+
 1;
 
 package Apache::lonnavmaps::iterator;