0){ return mb_substr($s,$c+1); } else{ return $s; } } /** * checks if a variable name is valid. * Currently a valid name would be sth. like $_SESSION["mb_user_id"] * TODO: this function is also in mod_wfs_result!! Maybe merge someday. */ function isValidVarName ($varname) { if (preg_match("/[\$]{1}_[a-z]+\[\"[a-z_]+\"\]/i", $varname) != 0) { return true; } return false; } /** * If access to the WFS conf is restricted, modify the filter. * TODO: this function is also in mod_wfs_result!! Maybe merge someday. */ function checkAccessConstraint($filter, $wfs_conf_id) { /* wfs_conf_element */ $sql = "SELECT * FROM wfs_conf_element "; $sql .= "JOIN wfs_element ON wfs_conf_element.f_id = wfs_element.element_id "; $sql .= "WHERE wfs_conf_element.fkey_wfs_conf_id = $1 "; $sql .= "ORDER BY wfs_conf_element.f_respos"; $v = array($wfs_conf_id); $t = array('i'); $res = db_prep_query($sql,$v,$t); while($row = db_fetch_array($res)){ if (!empty($row["f_auth_varname"])) { $auth_varname = $row["f_auth_varname"]; $element_name = $row["element_name"]; } } if (!empty($auth_varname)) { if (isValidVarName($auth_varname)) { $user = eval("return " . $auth_varname . ";"); $pattern = "(]*>)(.*)()"; $replacement = "\\1\\2" . $element_name . "" . $user . "\\3"; $filter = eregi_replace($pattern, $replacement, $filter); } } return $filter; } $filter = checkAccessConstraint($filter, $db_wfs_conf_id); $wfsRequest = $url . urlencode($filter); $connection = new connector($wfsRequest); $data = $connection->file; if (!$data) die('wfs not available'); $geometries = array('Point', 'Polygon', 'LineString', 'MultiPolygon', 'MultiLineString'); //TODO: // parsing via class_gml // add method toJSON to classGML $parser = xml_parser_create(); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,CHARSET); xml_parse_into_struct($parser,$data,$values,$tags); xml_parser_free($parser); $member = -1; $section = false; $geom = false; $memberHasBeenCreated = false; $str = array(); $geomtype = array(); $el = -1; $fid = -1; $element_str = ""; $geom_str = ""; foreach ($values as $element) { if(mb_strtoupper($element[tag]) == mb_strtoupper("gml:featureMember") && $element[type] == "open"){ $member++; $section = true; $cnt_geom = 0; } else if(mb_strtoupper($element[tag]) == mb_strtoupper($typename) && $element[type] == "open") { $fid = $element[attributes][fid]; } else if(in_array(sepNameSpace($element[tag]),$geometries) && $element[type] == "open" && $section == true){ $geom = true; if (sepNameSpace($element[tag]) == "MultiLineString") { $geom_str .= "geom.addMember(geomType.line);\n"; $memberHasBeenCreated = true; } else if (sepNameSpace($element[tag]) == "MultiPolygon" ) { $geom_str .= "geom.addMember(geomType.polygon);\n"; $memberHasBeenCreated = true; } elseif (sepNameSpace($element[tag]) == "Point") { $geom_str .= "geom.addMember(geomType.point);\n"; $memberHasBeenCreated = true; $geom_str .= "geom.get(-1).addGeometry();\n"; } elseif (sepNameSpace($element[tag]) == "LineString") { if (!$memberHasBeenCreated) { $geom_str .= "geom.addMember(geomType.line);\n"; $memberHasBeenCreated = true; } $geom_str .= "geom.get(-1).addGeometry();\n"; } else if (sepNameSpace($element[tag]) == "Polygon" ) { if (!$memberHasBeenCreated) { $geom_str .= "geom.addMember(geomType.polygon);\n"; $memberHasBeenCreated = true; } $geom_str .= "geom.get(-1).addGeometry();\n"; } else { $geom_str .= "alert('unknown geomtype ".sepNameSpace($element[tag])."');"; } // TO DO: the following is added twice! Once suffices. $element_str .= "geom.get(" . $member . ").e.setElement('fid', '".$fid."');\n"; $element_str .= "geom.get(" . $member . ").wfs_conf = ".$js_wfs_conf_id.";\n"; } else if(mb_strtoupper($element[tag]) == mb_strtoupper("gml:coordinates") && $geom == true){ $tmp = preg_replace("/,,/","",preg_replace("/ /",",",trim($element[value]))); $geom_str .= "var tmp1 = '".$tmp."';\n"; $geom_str .= "var tmp = tmp1.split(',');\n"; $geom_str .= "for (var i = 0 ; i < tmp.length ; i+=2) {\n"; $geom_str .= "\tgeom.getGeometry(-1,-1).addPointByCoordinates(parseFloat(tmp[i]), parseFloat(tmp[i+1]));\n"; $geom_str .= "}\n"; $geom_str .= "geom.close();\n"; $cnt_geom++; } else if(in_array(sepNameSpace($element[tag]),$geometries) && $element[type] == "close"){ $geom = false; $memberHasBeenCreated = false; } else if($section == true && $geom == false && $element[value]){ $el++; $str = $element[value]; $element_str .= "geom.get(" . $member . ").e.setElement('".sepNameSpace($element[tag])."', '".addslashes($str)."');\n"; } else if(mb_strtoupper($element[tag]) == mb_strtoupper("gml:featureMember") && $element[type] == "close"){ $section = false; $el = -1; } } if ($geom_str != "") { $geom_str = "var geom = new GeometryArray();\n" . $geom_str; } header('Content-type: text/html'); echo $geom_str; echo $element_str; ?>