[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