[Mapbender-commits] r6718 - trunk/mapbender/http/classes

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Mon Aug 9 08:00:55 EDT 2010


Author: christoph
Date: 2010-08-09 12:00:55 +0000 (Mon, 09 Aug 2010)
New Revision: 6718

Modified:
   trunk/mapbender/http/classes/class_universal_wms_factory.php
   trunk/mapbender/http/classes/class_wms.php
   trunk/mapbender/http/classes/class_wms_1_1_1_factory.php
Log:
extended WMS classes by various functions

Modified: trunk/mapbender/http/classes/class_universal_wms_factory.php
===================================================================
--- trunk/mapbender/http/classes/class_universal_wms_factory.php	2010-08-09 10:44:10 UTC (rev 6717)
+++ trunk/mapbender/http/classes/class_universal_wms_factory.php	2010-08-09 12:00:55 UTC (rev 6718)
@@ -103,7 +103,7 @@
 	
 	public function createFromDb ($id, $appId = null) {
 		try {
-			$version = $this->getVersionByWmsId();
+			$version = $this->getVersionByWmsId($id);
 			if (!is_null($version)) {
 
 				$factory = $this->getFactory($version);

Modified: trunk/mapbender/http/classes/class_wms.php
===================================================================
--- trunk/mapbender/http/classes/class_wms.php	2010-08-09 10:44:10 UTC (rev 6717)
+++ trunk/mapbender/http/classes/class_wms.php	2010-08-09 12:00:55 UTC (rev 6718)
@@ -2432,7 +2432,6 @@
 	*
 	*/ 
 	  function createObjFromDBNoGui($wms_id){
-		
 	   	$sql = "Select * from wms where wms_id = $1 ";
 		$v = array($wms_id);
 		$t = array('i');
@@ -2757,5 +2756,40 @@
 		return $this->layer_title;
 	}
 	
+	public function getChildren () {
+		$children = array();
+		$wmsId = wms::getWmsIdByLayerId($this->layer_uid);
+		$wmsFactory = new UniversalWmsFactory();
+		$wms = $wmsFactory->createFromDb($wmsId);
+		if (!is_null($wms)) {
+			$currentLayer = $wms->getLayerById($this->layer_uid);
+			for ($i = 0; $i < count($wms->objLayer); $i++) {
+				$l = $wms->objLayer[$i];
+				if ($l->layer_parent === $currentLayer->layer_pos) {
+					// add this layer and add its children recursively
+					$children = array_merge($children, array($l), $l->getChildren());
+				}
+			}
+		}
+		return $children;
+	}
+	
+	public function getParents () {
+		$parents = array();
+		$wmsId = wms::getWmsIdByLayerId($this->layer_uid);
+		$wmsFactory = new UniversalWmsFactory();
+		$wms = $wmsFactory->createFromDb($wmsId);
+		if (!is_null($wms)) {
+			$currentLayer = $wms->getLayerById($this->layer_uid);
+			while (!is_null($currentLayer)) {
+				$pos = $currentLayer->layer_parent;
+				$currentLayer = $wms->getLayerByPos($pos);
+				if (!is_null($currentLayer)) {
+					$parents[]= $currentLayer;
+				}
+			}
+		}
+		return $parents;
+	}
 }
 ?>

Modified: trunk/mapbender/http/classes/class_wms_1_1_1_factory.php
===================================================================
--- trunk/mapbender/http/classes/class_wms_1_1_1_factory.php	2010-08-09 10:44:10 UTC (rev 6717)
+++ trunk/mapbender/http/classes/class_wms_1_1_1_factory.php	2010-08-09 12:00:55 UTC (rev 6718)
@@ -60,25 +60,23 @@
 		}
 		
 		//
-		// delete all layers apart from the one mentioned (but keep parents)
+		// delete all layers apart from the one mentioned (but keep parents and children)
 		//
-		// 1. find all layers to keep
-		$keep = array();
+		
+		// Find layers that have both parents and children for testing:
+		// SELECT DISTINCT q.layer_id, q.layer_pos, q.layer_parent FROM layer q, layer r WHERE r.layer_parent <> '' AND q.layer_pos = CAST(r.layer_parent AS numeric) and q.layer_parent = '0' and q.fkey_wms_id = r.fkey_wms_id
 		$currentLayer = $myWms->getLayerById($id);
-
-		do {
-			$keep[]= $currentLayer->layer_pos;
-			$pos = $currentLayer->layer_parent;
-			$currentLayer = $myWms->getLayerByPos($pos);
-		} while (!is_null($currentLayer));
-
+		$children = $currentLayer->getChildren();
+		$parents = $currentLayer->getParents();
+		$keep = array_merge(array($currentLayer), $children, $parents);
+		
 		//
 		// 2. delete layers not for keeping
 		//
 		$i = 0;
 		while ($i < count($myWms->objLayer)) {
 			$l = $myWms->objLayer[$i];
-			if (in_array($l->layer_pos, $keep)) {
+			if (in_array($l, $keep)) {
 				$i++;
 				continue;
 			}



More information about the Mapbender_commits mailing list