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;
?>