= 2 ? func_get_arg(1) : null; $myWms = new wms(); if (!is_null($appId)) { return parent::createFromDb($id, $myWms, $appId); } return parent::createFromDb($id, $myWms); } //what does this function do? // public function createLayerFromDb ($id) { $wmsId = func_num_args() >= 2 ? func_get_arg(1) : null; $appId = func_num_args() >= 3 ? func_get_arg(2) : null; // // get WMS of this layer // if (!is_null($appId)) { $myWms = $this->createFromDb($wmsId, $appId); } else { $myWms = $this->createFromDb($wmsId); } if (is_null($myWms)) { return null; } // // delete all layers apart from the one mentioned (but keep parents and children) better to use recursive creation // // 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); $keep = array(); $parents = $currentLayer->getParents(); foreach ($parents as $parent) { $keep[]= $parent->layer_uid; } $keep[]= $currentLayer->layer_uid; //TODO: delete the following at each possible position - it is wrong !!! -> $children = $currentLayer->getChildren(); //$children = $currentLayer->getChildren(); //new way: $admin = new administration(); $sublayers = $admin->getSubLayers($id); foreach ($sublayers as $subLayerId) { $keep[] = $subLayerId; } // // 2. delete layers not for keeping // $i = 0; while ($i < count($myWms->objLayer)) { $l = $myWms->objLayer[$i]; if (in_array($l->layer_uid, $keep)) { $i++; continue; } // delete layer array_splice($myWms->objLayer, $i, 1); } return $myWms; } } ?>