[fusion-commits] r2285 - in trunk/layers/MapServer: . php

svn_fusion at osgeo.org svn_fusion at osgeo.org
Tue Nov 23 15:04:02 EST 2010


Author: madair
Date: 2010-11-23 12:04:02 -0800 (Tue, 23 Nov 2010)
New Revision: 2285

Modified:
   trunk/layers/MapServer/MapServer.js
   trunk/layers/MapServer/php/LoadMap.php
Log:
re #79: allow for multi-level of nested groups by using a "parentGroup" metadata element in the mapfile to list the parent group name.  List parent groups first, separated by the '|' char to build nested groups.  Lowest level group (ie. the one that holds the layer) is still specified in the mapfile using the GROUP keyword.

Modified: trunk/layers/MapServer/MapServer.js
===================================================================
--- trunk/layers/MapServer/MapServer.js	2010-11-22 18:58:02 UTC (rev 2284)
+++ trunk/layers/MapServer/MapServer.js	2010-11-23 20:04:02 UTC (rev 2285)
@@ -569,6 +569,11 @@
         } else {
             this.aVisibleGroups.push(group.uniqueId);
             this.deferredDraw = true;
+            for (var i=0; i<group.groups.length; ++i) {
+              if (group.groups[i].wasVisibleInGroup) {
+                this.showGroup(group.groups[i], true);
+              }
+            }
             for (var i=0; i<group.layers.length; ++i) {
               if (group.layers[i].wasVisibleInGroup) {
                 group.layers[i].show();
@@ -591,6 +596,12 @@
                 }
             }
             this.deferredDraw = true;
+            for (var i=0; i<group.groups.length; ++i) {
+              if (group.groups[i].visible) {
+                group.groups[i].wasVisibleInGroup = true;
+                this.hideGroup(group.groups[i], true);
+              }
+            }
             for (var i=0; i<group.layers.length; ++i) {
               if (group.layers[i].visible) {
                 group.layers[i].wasVisibleInGroup = true;

Modified: trunk/layers/MapServer/php/LoadMap.php
===================================================================
--- trunk/layers/MapServer/php/LoadMap.php	2010-11-22 18:58:02 UTC (rev 2284)
+++ trunk/layers/MapServer/php/LoadMap.php	2010-11-23 20:04:02 UTC (rev 2285)
@@ -407,18 +407,25 @@
         array_push($mapObj->layers, $layerObj);
         
         //allow for nested groups using a "parentGroup" piece of metadata
-        $parent = $layer->getMetaData('parentGroup');
-        if (strlen($parent)>0) {
-          $alreadyListed = false;
-          foreach($mapObj->groups as $pGroup){
-              if ($pGroup->groupName == $parent) {
-                $alreadyListed = true;
-                break;
-              }
+        //nesting of groups is accomplished by using the | as a separator
+        $parentStr = $layer->getMetaData('parentGroup');
+        $nestedParents = explode('|',$parentStr);
+        $parentParent = '';
+        foreach($nestedParents as $parent) {
+          //echo "testing:".$parent;
+          if (strlen($parent)>0) {
+            $alreadyListed = false;
+            foreach($mapObj->groups as $pGroup){
+                if ($pGroup->groupName == $parent) {
+                  $alreadyListed = true;
+                  break;
+                }
+            }
+            if (!$alreadyListed) {
+              array_push($mapObj->groups, getParentGroupObject($layer, $parent, $parentParent));
+            }
           }
-          if (!$alreadyListed) {
-            array_push($mapObj->groups, getParentGroupObject($layer));
-          }
+          $parentParent = $parent;
         }
 
     }
@@ -447,7 +454,9 @@
     $group->expandInLegend = ($b == 'false') ? false : true;
     $group->layerGroupType = '';
     /* parent group for nested groups */
-    $parent = $layer->getMetaData('parentGroup');
+    $parentStr = $layer->getMetaData('parentGroup');
+    $nestedParents = explode('|',$parentStr);
+    $parent = array_pop($nestedParents);
     $group->parentUniqueId = $parent;
     $group->parent = $parent;
     $b = $layer->getMetaData('groupVisible');
@@ -458,10 +467,10 @@
     return $group;
 }
 
-function getParentGroupObject($layer) {
+function getParentGroupObject($layer,$groupName,$parent) {
     $parentGroup = $layer->getMetaData('parentGroup');
     $group = NULL;
-    $group->groupName = $parentGroup;
+    $group->groupName = $groupName;
     $ll = $layer->getMetaData('parentGroupLegendLabel');
     $group->legendLabel = $ll != '' ? $ll : $group->groupName;
     $group->uniqueId = $group->groupName;
@@ -471,8 +480,8 @@
     $group->expandInLegend = ($b == 'false') ? false : true;
     $group->layerGroupType = '';
     /* maybe do some parsing of the metadata to get parents of paretns? */
-    $group->parentUniqueId = '';
-    $group->parent = '';
+    $group->parentUniqueId = $parent;
+    $group->parent = $parent;
     $b = $layer->getMetaData('groupVisible');
     $group->visible = ($b == 'false') ? false : true;
     $group->actuallyVisible = $layer->isVisible();



More information about the fusion-commits mailing list