[Mapbender-commits] r1760 - trunk/mapbender/http/classes
svn_mapbender at osgeo.org
svn_mapbender at osgeo.org
Fri Oct 26 11:22:11 EDT 2007
Author: christoph
Date: 2007-10-26 11:22:11 -0400 (Fri, 26 Oct 2007)
New Revision: 1760
Modified:
trunk/mapbender/http/classes/class_wfs.php
Log:
a great mix of new, breathtaking features (I have no idea what these changes are about)
Modified: trunk/mapbender/http/classes/class_wfs.php
===================================================================
--- trunk/mapbender/http/classes/class_wfs.php 2007-10-26 15:17:16 UTC (rev 1759)
+++ trunk/mapbender/http/classes/class_wfs.php 2007-10-26 15:22:11 UTC (rev 1760)
@@ -22,7 +22,10 @@
*/
include_once(dirname(__FILE__)."/../../conf/mapbender.conf");
-require_once(dirname(__FILE__)."/class_connector.php");
+require_once(dirname(__FILE__)."/class_connector.php");
+require_once(dirname(__FILE__)."/class_mb_exception.php");
+require_once(dirname(__FILE__)."/class_administration.php");
+
class wfs {
var $wfs_id;
@@ -31,23 +34,25 @@
var $wfs_title;
var $wfs_abstract;
var $wfs_getcapabilities;
+ var $wfs_getcapabilities_doc; //new SB 2007-08-09
var $wfs_describefeaturetype;
var $wfs_describefeaturetype_namespace = array();
var $wfs_getfeature;
- //neu
var $wfs_transaction;
+ var $wfs_upload_url; //new SB 2007-08-09
+ //new WFS 1.0.0 -- SB 2007-08-06
+ var $fees;
+ var $accessconstraints;
+
var $wfs_featuretype = array();
-
function wfs() {
}
function createObjFromXML($url){
- $values = null;
- $tags = null;
$x = new connector($url);
$data = $x->file;
@@ -57,93 +62,111 @@
die;
}
- # for temporary wms a id has to be created...
+ $values = null;
+ $tags = null;
+ $admin = new administration();
+ $this->wfs_getcapabilities_doc = $admin->char_encode($data);
+ $this->wfs_upload_url = $url;
+
+ # for temporary wfs a id has to be created...
$this->wfs_id = "id_" . substr(md5(rand()),0,6);
$parser = xml_parser_create(CHARSET);
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_parse_into_struct($parser,$this->wfs_getcapabilities_doc,$values,$tags);
+ //xml_parse_into_struct($parser,$data,$values,$tags);
+
xml_parser_free($parser);
$section = false;
$request = false;
$featuretype_name = false;
$featuretype_title = false;
+ $featuretype_abstract = false;
$featuretype_srs = false;
foreach ($values as $element) {
- if(mb_strtoupper($element[tag]) == "WFS_CAPABILITIES" && $element[type] == "open"){
+ if(strtoupper($element[tag]) == "WFS_CAPABILITIES" && $element[type] == "open"){
$this->wfs_version = $element[attributes][version];
}
- if(mb_strtoupper($element[tag]) == "NAME" && $element[level] == '3'){
+ if(strtoupper($element[tag]) == "NAME" && $element[level] == '3'){
$this->wfs_name = $element[value];
}
- if(mb_strtoupper($element[tag]) == "TITLE" && $element[level] == '3'){
- $this->wfs_title = $element[value];
+ if(strtoupper($element[tag]) == "TITLE" && $element[level] == '3'){
+ $this->wfs_title = $this->stripEndlineAndCarriageReturn($element[value]);
}
- if(mb_strtoupper($element[tag]) == "ABSTRACT" && $element[level] == '3'){
- $this->wfs_abstract = $element[value];
+ if(strtoupper($element[tag]) == "ABSTRACT" && $element[level] == '3'){
+ $this->wfs_abstract = $this->stripEndlineAndCarriageReturn($element[value]);
}
+ //new WFS 1.0.0 -- SB 2007-08-06
+ if(strtolower($element[tag]) == "fees"){
+ $this->fees = $element[value];
+ }
+ if(strtolower($element[tag]) == "accessconstraints"){
+ $this->accessconstraints = $element[value];
+ }
-
/*capability section*/
if($this->wfs_version == "1.0.0"){
# getCapabilities
- if(mb_strtoupper($element[tag]) == "GETCAPABILITIES" && $element[type] == "open"){
+ if(strtoupper($element[tag]) == "GETCAPABILITIES" && $element[type] == "open"){
$section = "getcapabilities";
}
- if($section == "getcapabilities" && mb_strtoupper($element[tag]) == "GET"){
+ if($section == "getcapabilities" && strtoupper($element[tag]) == "GET"){
$this->wfs_getcapabilities = $element[attributes][onlineResource];
}
# descriptFeatureType
- if(mb_strtoupper($element[tag]) == "DESCRIBEFEATURETYPE" && $element[type] == "open"){
+ if(strtoupper($element[tag]) == "DESCRIBEFEATURETYPE" && $element[type] == "open"){
$section = "describefeaturetype";
$this->wfs_describefeaturetype = $element[attributes][onlineResource];
}
- if($section == "describefeaturetype" && mb_strtoupper($element[tag]) == "GET"){
+ if($section == "describefeaturetype" && strtoupper($element[tag]) == "GET"){
$this->wfs_describefeaturetype = $element[attributes][onlineResource];
}
# getFeature
- if(mb_strtoupper($element[tag]) == "GETFEATURE" && $element[type] == "open"){
+ if(strtoupper($element[tag]) == "GETFEATURE" && $element[type] == "open"){
$section = "getfeature";
}
- if($section == "getfeature" && mb_strtoupper($element[tag]) == "GET"){
+ if($section == "getfeature" && strtoupper($element[tag]) == "GET"){
$this->wfs_getfeature = $element[attributes][onlineResource];
}
- if(mb_strtoupper($element[tag]) == "GETFEATURE" && $element[type] == "close"){
+ if(strtoupper($element[tag]) == "GETFEATURE" && $element[type] == "close"){
$section = "";
}
# transaction
- if(mb_strtoupper($element[tag]) == "TRANSACTION" && $element[type] == "open"){
+ if(strtoupper($element[tag]) == "TRANSACTION" && $element[type] == "open"){
$section = "transaction";
}
- if($section == "transaction" && mb_strtoupper($element[tag]) == "GET"){
+ if($section == "transaction" && strtoupper($element[tag]) == "GET"){
$this->wfs_transaction = $element[attributes][onlineResource];
}
- if(mb_strtoupper($element[tag]) == "TRANSACTION" && $element[type] == "close"){
+ if(strtoupper($element[tag]) == "TRANSACTION" && $element[type] == "close"){
$section = "";
}
}
- if(mb_strtoupper($element[tag]) == "FEATURETYPE" && $element[type] == "open"){
+ if(strtoupper($element[tag]) == "FEATURETYPE" && $element[type] == "open"){
$section = "featuretype";
}
- if($section == "featuretype" && mb_strtoupper($element[tag]) == "NAME"){
+ if($section == "featuretype" && strtoupper($element[tag]) == "NAME"){
$featuretype_name = $element[value];
}
- if($section == "featuretype" && mb_strtoupper($element[tag]) == "TITLE"){
- $featuretype_title = $element[value];
+ if($section == "featuretype" && strtoupper($element[tag]) == "TITLE"){
+ $featuretype_title = $this->stripEndlineAndCarriageReturn($element[value]);
}
- if($section == "featuretype" && mb_strtoupper($element[tag]) == "SRS"){
+ if($section == "featuretype" && strtoupper($element[tag]) == "ABSTRACT"){
+ $featuretype_abstract = $this->$element[value];
+ }
+ if($section == "featuretype" && strtoupper($element[tag]) == "SRS"){
$featuretype_srs = $element[value];
- $this->addFeaturetype($featuretype_name,$featuretype_title,$featuretype_srs,$this->wfs_describefeaturetype,$this->wfs_version);
+ $this->addFeaturetype($featuretype_name,$featuretype_title,$featuretype_abstract,$featuretype_srs,$this->wfs_describefeaturetype,$this->wfs_version);
}
}
}
@@ -161,6 +184,7 @@
echo "<hr>";
echo "name: ". $this->wfs_featuretype[$i]->featuretype_name . "<br>";
echo "title: ". $this->wfs_featuretype[$i]->featuretype_title . "<br>";
+ echo "abstract: ". $this->wfs_featuretype[$i]->featuretype_abstract . "<br>";
echo "srs: ". $this->wfs_featuretype[$i]->featuretype_srs . "<br>";
for($j=0; $j<count($this->wfs_featuretype[$i]->featuretype_element);$j++){
echo " element: " . $this->wfs_featuretype[$i]->featuretype_element[$j]["name"] ." - ".$this->wfs_featuretype[$i]->featuretype_element[$j]["type"]."<br>";
@@ -170,9 +194,12 @@
}
}
}
-function addFeaturetype($name,$title,$srs,$url,$version){
- $this->wfs_featuretype[count($this->wfs_featuretype)] = new featuretype($name,$title,$srs,$url,$version);
-}
+function addFeaturetype($name,$title,$abstract,$srs,$url,$version){
+ $this->wfs_featuretype[count($this->wfs_featuretype)] = new featuretype($name,$title,$abstract,$srs,$url,$version);
+}
+ function stripEndlineAndCarriageReturn($string) {
+ return preg_replace("/\n/", "", preg_replace("/\r/", " ", $string));
+ }
function createJsObjFromWFS($parent){
if(!$this->wfs_title || $this->wfs_title == ""){
echo "alert('Error: no valid capabilities-document !!');";
@@ -196,7 +223,8 @@
}
print ("wfs_add_featuretype('".
$this->wfs_featuretype[$i]->featuretype_name ."','".
- $this->wfs_featuretype[$i]->featuretype_title . "','".
+ $this->wfs_featuretype[$i]->featuretype_title . "','".
+ $this->wfs_featuretype[$i]->featuretype_abstract . "','".
$this->wfs_featuretype[$i]->featuretype_srs ."','".
$this->wfs_featuretype[$i]->featuretype_geomtype ."');");
for($j=0; $j<count($this->wfs_featuretype[$i]->featuretype_element);$j++){
@@ -212,171 +240,451 @@
print("wfs_add_featuretype_namespace('".$this->wfs_featuretype[$i]->featuretype_namespace[$j]["name"]."', '".$this->wfs_featuretype[$i]->featuretype_namespace[$j]["value"]."', ".$j.", ".$i.");");
}
}
- }
+}
+
/**
+ * Inserts this WFS in the database
+ */
+function insertWfs() {
+ global $DBSERVER,$DB,$OWNER,$PW;
+ $con = db_connect($DBSERVER,$OWNER,$PW);
+ db_select_db($DB,$con);
+
+ $sql = "INSERT INTO wfs (wfs_version, wfs_name, wfs_title, wfs_abstract, ";
+ $sql .= "wfs_getcapabilities, wfs_getcapabilities_doc, wfs_upload_url, ";
+ $sql .= "wfs_describefeaturetype, wfs_getfeature, wfs_transaction, fees, ";
+ $sql .= "accessconstraints, wfs_owner, wfs_timestamp) ";
+ $sql .= "VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)";
+
+ $v = array($this->wfs_version, $this->wfs_name, $this->wfs_title,
+ $this->wfs_abstract, $this->wfs_getcapabilities, $this->wfs_getcapabilities_doc,
+ $this->wfs_upload_url, $this->wfs_describefeaturetype, $this->wfs_getfeature,
+ $this->wfs_transaction, $this->fees, $this->accessconstraints,
+ $_SESSION["mb_user_id"], strtotime("now"));
+
+ $t = array('s', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 'i', 'i');
+
+ $res = db_prep_query($sql,$v,$t);
+
+ if(!$res){
+ db_rollback();
+ $e = new mb_exception("Error while saving WFS to DB. Rollback performed.");
+ return false;
+ }
+ $this->wfs_id = db_insert_id($con,'wfs','wfs_id');
+ return true;
+}
+
+function updateWfs() {
+ global $DBSERVER,$DB,$OWNER,$PW;
+ $con = db_connect($DBSERVER,$OWNER,$PW);
+ db_select_db($DB,$con);
+
+ $sql = "UPDATE wfs SET wfs_version = $1, wfs_name = $2, wfs_title = $3, ";
+ $sql .= "wfs_abstract = $4, wfs_getcapabilities = $5, wfs_getcapabilities_doc = $6, ";
+ $sql .= "wfs_upload_url = $7, wfs_describefeaturetype = $8, wfs_getfeature = $9, ";
+ $sql .= "wfs_transaction = $10, fees = $11, accessconstraints = $12, wfs_owner = $13, ";
+ $sql .= "wfs_timestamp = $14 ";
+ $sql .= "WHERE wfs_id = $15";
+ //echo $sql."<br />";
+ $v = array($this->wfs_version, $this->wfs_name, $this->wfs_title, $this->wfs_abstract,
+ $this->wfs_getcapabilities, $this->wfs_getcapabilities_doc, $this->wfs_upload_url,
+ $this->wfs_describefeaturetype, $this->wfs_getfeature, $this->wfs_transaction,
+ $this->fees, $this->accessconstraints, $_SESSION["mb_user_id"],strtotime("now"),
+ $this->wfs_id);
+
+ $t = array('s', 's', 's', 's', 's', 's', 's', 's' ,'s' ,'s' ,'s' ,'s' ,'i' ,'i' ,'i');
+ $res = db_prep_query($sql,$v,$t);
+ if(!$res){
+ db_rollback();
+ $e = new mb_exception("Error while saving WFS to DB. Rollback performed.");
+ return false;
+ }
+ return true;
+}
+/**
* wfs2db
*
-* this function exports the information from the xml to the mapbender database
+* this function saves the class information to the mapbender database
+* @return boolean true if sucessful false otherwise
*/
function wfs2db($gui_id){
global $DBSERVER,$DB,$OWNER,$PW;
$con = db_connect($DBSERVER,$OWNER,$PW);
db_select_db($DB,$con);
-
- # TABLE wfs
- $sql = "INSERT INTO wfs (wfs_version, wfs_name, wfs_title, wfs_abstract, wfs_getcapabilities, wfs_describefeaturetype, wfs_getfeature, wfs_transaction) ";
- $sql .= "VALUES(";
- $sql .= "'" . $this->wfs_version ."', ";
- $sql .= "'" . db_escape_string(preg_replace("/'/","",$this->wfs_name)) ."', ";
- $sql .= "'" . db_escape_string(preg_replace("/'/","",$this->wfs_title)) ."', ";
- $sql .= "'" . db_escape_string(preg_replace("/'/","",$this->wfs_abstract)) . "', ";
- $sql .= "'" . $this->wfs_getcapabilities ."', ";
- $sql .= "'" . $this->wfs_describefeaturetype . "', ";
- $sql .= "'". $this->wfs_getfeature . "', ";
- $sql .= "'". $this->wfs_transaction . "'";
- $sql .= ");";
- #echo "sql wfs: <br>".$sql;
+ db_begin();
- $res = db_query($sql)or die(db_error());
+ // check if WFS already might exists (it might exist when wfs_id is numeric)
+ $wfs_exists = is_numeric($this->wfs_id);
+
+ // if it might exist, update it
+ if ($wfs_exists) {
+ // but check first if it really exists in the database
+ $sql = "SELECT * FROM wfs WHERE wfs_id = ".$this->wfs_id.";";
+ $res = db_query($sql);
+ if($res){
+ $this->updateWfs();
+ }
+ // if not, insert as new WFS
+ else {
+ $this->insertWfs();
+ }
+ }
+ // if it does not exist, insert as new WFS
+ else {
+ $this->insertWfs();
+ }
+
+ # delete featuretypes from DB that does not exist and find the ids
+ $sql = "SELECT * FROM wfs_featuretype WHERE fkey_wfs_id = ".$this->wfs_id.";";
+ $res_ft = db_query($sql);
+ $cnt = 0;
+ while(db_fetch_row($res_ft)){
+ $found = false;
+ for($i=0; $i<count($this->wfs_featuretype); $i++){
+ if($this->wfs_featuretype[$i]->featuretype_name == db_result($res_ft, $cnt, "featuretype_name")){
+ $this->wfs_featuretype[$i]->featuretype_id = db_result($res_ft, $cnt, "featuretype_id");
+ $found = true;
+ break;
+ }
+ }
+
+ if(!$found){
+ $sql = "DELETE FROM wfs_featuretype WHERE featuretype_id = $1 AND fkey_wfs_id = $2";
+ $v = array(db_result($res_ft, $cnt, "featuretype_id"), $this->wfs_id);
+ $t = array('i','i');
+ //echo $sql."<br />";
+ $res = db_prep_query($sql,$v,$t);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
+ }
+ $cnt++;
+ }
- $myWFS = db_insert_id($con,'wfs','wfs_id');
- #echo "<br> myWFS: ".$myWFS;
# TABLE wfs_featuretype
for($i=0; $i<count($this->wfs_featuretype); $i++){
- $sql = "INSERT INTO wfs_featuretype(fkey_wfs_id, featuretype_name, featuretype_title, featuretype_srs) ";
- $sql .= "VALUES(";
- $sql .= $myWFS . ",";
- $sql .= "'".$this->wfs_featuretype[$i]->featuretype_name . "',";
- $sql .= "'".$this->wfs_featuretype[$i]->featuretype_title."',";
- $sql .= "'".$this->wfs_featuretype[$i]->featuretype_srs."'";
- $sql .= ")";
+ if(!$this->wfs_featuretype[$i]->featuretype_id){
+ $sql = "INSERT INTO wfs_featuretype(fkey_wfs_id, featuretype_name, featuretype_title, featuretype_abstract, featuretype_srs) ";
+ $sql .= "VALUES($1,$2,$3,$4,$5)";
+ $v = array($this->wfs_id,$this->wfs_featuretype[$i]->featuretype_name,$this->wfs_featuretype[$i]->featuretype_title,$this->wfs_featuretype[$i]->featuretype_abstract,$this->wfs_featuretype[$i]->featuretype_srs);
+ $t = array('i','s','s','s','s');
+ //echo $sql."<br />";
+ $res = db_prep_query($sql,$v,$t);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
+
+ # save the id of each featuretype:
+ $this->wfs_featuretype[$i]->featuretype_id = db_insert_id($con,'wfs_featuretype','featuretype_id');
+ }
+ else{
+ $sql = "UPDATE wfs_featuretype SET ";
+ $sql .= "featuretype_title = $1,";
+ $sql .= "featuretype_abstract = $2,";
+ $sql .= "featuretype_srs = $3 ";
+ $sql .= "WHERE featuretype_id = $4";
+ $v = array($this->wfs_featuretype[$i]->featuretype_title,$this->wfs_featuretype[$i]->featuretype_abstract,$this->wfs_featuretype[$i]->featuretype_srs,$this->wfs_featuretype[$i]->featuretype_id);
+ $t = array('s','s','s','i');
+ //echo $sql."<br />";
+ $res = db_prep_query($sql,$v,$t);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
+ }
- #$res = mysql_query($sql) or $this->cleanDB($myWFS,$sql);
-
- $res = db_query($sql) or $this->cleanDB($myWFS,$sql);
+ //delete featuretype elements from db and find the ids
+ $sql = "SELECT * FROM wfs_element WHERE fkey_featuretype_id = ".$this->wfs_featuretype[$i]->featuretype_id.";";
+ //echo $sql."<br />";
+ $res_el = db_query($sql);
+ $cnt = 0;
+ while(db_fetch_row($res_el)){
+ $found = false;
+ for($j=0; $j<count($this->wfs_featuretype[$i]->featuretype_element); $j++){
+ if($this->wfs_featuretype[$i]->featuretype_element[$j]["name"] == db_result($res_el, $cnt, "element_name")){
+ $this->wfs_featuretype[$i]->featuretype_element[$j]["id"] = db_result($res_el, $cnt, "element_id");
+ $found = true;
+ break;
+ }
+ }
+
+ if(!$found){
+ $sql = "DELETE FROM wfs_element WHERE element_id = $1 AND fkey_featuretype_id = $2";
+ $v = array(mysql_result($res_el, $cnt, "element_id"), $this->wfs_featuretype[$i]->featuretype_id);
+ $t = array('i','i');
+ //echo $sql."<br />";
+ $res = db_prep_query($sql,$v,$t);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
+ }
+ $cnt++;
+ }
-
- # save the id of each featuretype:
- $this->wfs_featuretype[$i]->mysql_id = db_insert_id($con,'wfs_featuretype','featuretype_id');
-
+
for($j=0; $j<count($this->wfs_featuretype[$i]->featuretype_element);$j++){
- $sql = "INSERT INTO wfs_element(fkey_featuretype_id, element_name,element_type) ";
- $sql .= "VALUES(";
- $sql .= "'" .$this->wfs_featuretype[$i]->mysql_id. "', ";
- $sql .= "'" .$this->wfs_featuretype[$i]->featuretype_element[$j]["name"]. "', ";
- $sql .= "'" .$this->wfs_featuretype[$i]->featuretype_element[$j]["type"]. "' ";
- $sql .= ")";
-
- $res = db_query($sql) or $this->cleanDB($myWFS,$sql);
+ if(!$this->wfs_featuretype[$i]->featuretype_element[$j]["id"]){
+ $sql = "INSERT INTO wfs_element(fkey_featuretype_id, element_name,element_type) ";
+ $sql .= "VALUES(";
+ $sql .= "'" .$this->wfs_featuretype[$i]->featuretype_id. "', ";
+ $sql .= "'" .$this->wfs_featuretype[$i]->featuretype_element[$j]["name"]. "', ";
+ $sql .= "'" .$this->wfs_featuretype[$i]->featuretype_element[$j]["type"]. "' ";
+ $sql .= ");";
+ //echo $sql."<br />";
+ $res = db_query($sql);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
+ }
+ else{
+ $sql = "UPDATE wfs_element SET element_type = '".$this->wfs_featuretype[$i]->featuretype_element[$j]["type"]."' ";
+ $sql .= "WHERE element_id = ".$this->wfs_featuretype[$i]->featuretype_element[$j]["id"]." AND ";
+ $sql .= "fkey_featuretype_id = ".$this->wfs_featuretype[$i]->featuretype_id.";";
+ //echo $sql."<br />";
+ $res = db_query($sql);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
+ }
}
+ $sql = "DELETE FROM wfs_featuretype_namespace WHERE ";
+ $sql .= "fkey_wfs_id = ".$this->wfs_id." AND ";
+ $sql .= "fkey_featuretype_id = ".$this->wfs_featuretype[$i]->featuretype_id.";";
+ //echo $sql."<br />";
+ $res = db_query($sql);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
+
for($j=0; $j<count($this->wfs_featuretype[$i]->featuretype_namespace);$j++){
$sql = "INSERT INTO wfs_featuretype_namespace(fkey_wfs_id, fkey_featuretype_id, namespace, namespace_location) ";
$sql .= "VALUES(";
- $sql .= "'" .$myWFS. "',";
- $sql .= "'" .$this->wfs_featuretype[$i]->mysql_id. "', ";
+ $sql .= "'" .$this->wfs_id. "',";
+ $sql .= "'" .$this->wfs_featuretype[$i]->featuretype_id. "', ";
$sql .= "'" .$this->wfs_featuretype[$i]->featuretype_namespace[$j]["name"]. "', ";
$sql .= "'" .$this->wfs_featuretype[$i]->featuretype_namespace[$j]["value"]. "' ";
- $sql .= ")";
-
- $res = db_query($sql) or $this->cleanDB($myWFS,$sql);
+ $sql .= ");";
+ //echo $sql."<br />";
+ $res = db_query($sql);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
}
}
# TABLE gui_wfs
- $sql ="INSERT INTO gui_wfs (fkey_gui_id, fkey_wfs_id)";
- $sql .= "VALUES(";
- $sql .= "'" . $gui_id . "', ";
- $sql .= $myWFS;
- $sql .= ");";
+ if($gui_id){
+ $sql ="INSERT INTO gui_wfs (fkey_gui_id, fkey_wfs_id)";
+ $sql .= "VALUES(";
+ $sql .= "'" . $gui_id . "', ";
+ $sql .= $this->wfs_id;
+ $sql .= ");";
+ //echo $sql."<br />";
+ $res = db_query($sql);
+ if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
+ }
- $res = db_query($sql) or $this->cleanDB($myWFS,$sql);
+ //echo "Successfully saved!<br />";
+ db_commit();
+
+ return true;
}
-function cleanDB($wfsid,$sql){
- global $DBSERVER,$DB,$OWNER,$PW;
- $con = db_connect($DBSERVER,$OWNER,$PW);
- db_select_db($DB,$con);
- $s = "DELETE FROM wfs WHERE wfs_id = ".$wfsid;
- $res = db_query($s);
- echo "<br>Error in :".$sql."<br>";
- echo "<br>Db cleaned.<br>";
- die;
+/**
+* updateObjFromXML
+*
+* this function regets the information from the xml (update)
+* @return boolean true if successful, false otherwise
+*/
+function updateObjFromXML($url){
+ $x = new connector($url);
+ $data = $x->file;
+ #$data = implode("",file($url));
+ if(!$data){
+ $e = new mb_exception("Unable to open document: ".$url);
+ return false;
+ }
+
+ $values = null;
+ $tags = null;
+ $admin = new administration();
+ $this->wfs_getcapabilities_doc = $admin->char_encode($data);
+ $this->wfs_featuretype = array();
+ $this->wfs_upload_url = $url;
+
+ # for temporary wfs a id has to be created...
+ //$this->wfs_id = "id_" . substr(md5(rand()),0,6);
+ $parser = xml_parser_create(CHARSET);
+ 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,$this->wfs_getcapabilities_doc,$values,$tags);
+ //xml_parse_into_struct($parser,$data,$values,$tags);
+
+ xml_parser_free($parser);
+
+ $section = false;
+ $request = false;
+ $featuretype_name = false;
+ $featuretype_title = false;
+ $featuretype_abstract = false;
+ $featuretype_srs = false;
+
+ foreach ($values as $element) {
+
+ if(strtoupper($element[tag]) == "WFS_CAPABILITIES" && $element[type] == "open"){
+ $this->wfs_version = $element[attributes][version];
+ }
+ if(strtoupper($element[tag]) == "NAME" && $element[level] == '3'){
+ $this->wfs_name = $element[value];
+ }
+/* if(strtoupper($element[tag]) == "TITLE" && $element[level] == '3'){
+ $this->wfs_title = $this->stripEndlineAndCarriageReturn($element[value]);
+ }
+ if(strtoupper($element[tag]) == "ABSTRACT" && $element[level] == '3'){
+ $this->wfs_abstract = $this->stripEndlineAndCarriageReturn($element[value]);
+ }
+ //new WFS 1.0.0 -- SB 2007-08-06
+ if(strtolower($element[tag]) == "fees"){
+ $this->fees = $element[value];
+ }
+ if(strtolower($element[tag]) == "accessconstraints"){
+ $this->accessconstraints = $element[value];
+ }
+*/
+ /*capability section*/
+
+ if($this->wfs_version == "1.0.0"){
+
+ # getCapabilities
+ if(strtoupper($element[tag]) == "GETCAPABILITIES" && $element[type] == "open"){
+ $section = "getcapabilities";
+ }
+ if($section == "getcapabilities" && strtoupper($element[tag]) == "GET"){
+ $this->wfs_getcapabilities = $element[attributes][onlineResource];
+ }
+
+ # descriptFeatureType
+ if(strtoupper($element[tag]) == "DESCRIBEFEATURETYPE" && $element[type] == "open"){
+ $section = "describefeaturetype";
+ $this->wfs_describefeaturetype = $element[attributes][onlineResource];
+
+
+ }
+ if($section == "describefeaturetype" && strtoupper($element[tag]) == "GET"){
+ $this->wfs_describefeaturetype = $element[attributes][onlineResource];
+ }
+
+ # getFeature
+ if(strtoupper($element[tag]) == "GETFEATURE" && $element[type] == "open"){
+ $section = "getfeature";
+ }
+ if($section == "getfeature" && strtoupper($element[tag]) == "GET"){
+ $this->wfs_getfeature = $element[attributes][onlineResource];
+ }
+ if(strtoupper($element[tag]) == "GETFEATURE" && $element[type] == "close"){
+ $section = "";
+ }
+ # transaction
+ if(strtoupper($element[tag]) == "TRANSACTION" && $element[type] == "open"){
+ $section = "transaction";
+ }
+ if($section == "transaction" && strtoupper($element[tag]) == "GET"){
+ $this->wfs_transaction = $element[attributes][onlineResource];
+ }
+ if(strtoupper($element[tag]) == "TRANSACTION" && $element[type] == "close"){
+ $section = "";
+ }
+ }
+ if(strtoupper($element[tag]) == "FEATURETYPE" && $element[type] == "open"){
+ $section = "featuretype";
+ }
+ if($section == "featuretype" && strtoupper($element[tag]) == "NAME"){
+ $featuretype_name = $element[value];
+ }
+ if($section == "featuretype" && strtoupper($element[tag]) == "TITLE"){
+ $featuretype_title = $this->stripEndlineAndCarriageReturn($element[value]);
+ }
+ if($section == "featuretype" && strtoupper($element[tag]) == "ABSTRACT"){
+ $featuretype_abstract = $this->$element[value];
+ }
+ if($section == "featuretype" && strtoupper($element[tag]) == "SRS"){
+ $featuretype_srs = $element[value];
+ $this->addFeaturetype($featuretype_name,$featuretype_title,$featuretype_abstract,$featuretype_srs,$this->wfs_describefeaturetype,$this->wfs_version);
+ }
+ }
+ return true;
}
-
- /**
+/**
* creatObjfromDB
*
+* this function fills the object with wfs information from db
+*
+* @param int the id of wfs to get the information from
*/
-function createObjFromDB________($wfs_id){
- global $server,$db,$owner,$pw;
- $con = mysql_connect($server,$owner,$pw);
- mysql_select_db($db, $con);
+function createObjFromDB($wfs_id){
+ global $DBSERVER,$DB,$OWNER,$PW;
+ $con = db_connect($DBSERVER,$OWNER,$PW);
+ db_select_db($DB,$con);
$sql = "SELECT * FROM wfs WHERE wfs_id = ".$wfs_id.";";
- $res = mysql_query($sql);
+ $res = db_query($sql);
$cnt = 0;
- while(mysql_fetch_row($res)){
- $this->wfs_id = mysql_result($res, $cnt, "wfs_id");
- $this->wfs_version = mysql_result($res, $cnt, "wfs_version");
- $this->wfs_title = mysql_result($res, $cnt, "wfs_title");
- $this->wfs_abstract = mysql_result($res, $cnt, "wfs_abstract");
- $this->wfs_getcapabilities = mysql_result($res, $cnt, "wfs_getcapabilities");
- $this->wfs_describefeaturetype = mysql_result($res, $cnt, "wfs_describefeaturetype");
+ while(db_fetch_row($res)){
+ $this->wfs_id = db_result($res, $cnt, "wfs_id");
+ $this->wfs_version = db_result($res, $cnt, "wfs_version");
+ $this->wfs_name = db_result($res, $cnt, "wfs_name");
+ $this->wfs_title = db_result($res, $cnt, "wfs_title");
+ $this->wfs_abstract = db_result($res, $cnt, "wfs_abstract");
+ $this->wfs_getcapabilities = db_result($res, $cnt, "wfs_getcapabilities");
+ $this->wfs_getcapabilities_doc = db_result($res, $cnt, "wfs_getcapabilities_doc");
+ $this->wfs_upload_url = db_result($res, $cnt, "wfs_upload_url");
+ $this->wfs_describefeaturetype = db_result($res, $cnt, "wfs_describefeaturetype");
+ $this->wfs_getfeature = db_result($res, $cnt, "wfs_getfeature");
+ $this->wfs_transaction = db_result($res, $cnt, "wfs_transaction");
+ $this->fees = db_result($res, $cnt, "fees");
+ $this->accessconstraints = db_result($res, $cnt, "accessconstraints");
+ $this->wfs_owner = db_result($res, $cnt, "wfs_owner");
+ $this->wfs_timestamp = db_result($res, $cnt, "wfs_timestamp");
- $sql_fe = "SELECT * FROM wfs_featuretype WHERE fkey_wfs_id = " . $this->wfs_id . " ORDER BY featuretype_id";
- $res_fe = mysql_query($sql_fe);
+ $sql_fe = "SELECT * FROM wfs_featuretype WHERE fkey_wfs_id = '" . $this->wfs_id . "' ORDER BY featuretype_id";
+ $res_fe = db_query($sql_fe);
$cnt_fe = 0;
- while(mysql_fetch_row($res_fe)){
+ while(db_fetch_row($res_fe)){
$c = count($this->wfs_featuretype);
- $this->wfs_featuretype[$c]->featuretype_name = mysql_result($res_fe, $cnt_fe, "featuretype_name");
- $this->wfs_featuretype[$c]->featuretype_title = mysql_result($res_fe, $cnt_fe, "featuretype_title");
- $this->wfs_featuretype[$c]->featuretype_srs = mysql_result($res_fe, $cnt_fe, "featuretype_srs");
- $this->wfs_featuretype[$c]->featuretype_geomtype = mysql_result($res_fe, $cnt_fe, "featuretype_geomtype");
+// $this->wfs_featuretype[$c]->featuretype_id = db_result($res_fe, $cnt_fe, "featuretype_id");
+ $this->wfs_featuretype[$c]->featuretype_name = db_result($res_fe, $cnt_fe, "featuretype_name");
+ $this->wfs_featuretype[$c]->featuretype_title = db_result($res_fe, $cnt_fe, "featuretype_title");
+ $this->wfs_featuretype[$c]->featuretype_abstract = db_result($res_fe, $cnt_fe, "featuretype_abstract");
+ $this->wfs_featuretype[$c]->featuretype_srs = db_result($res_fe, $cnt_fe, "featuretype_srs");
- $sql_el = "SELECT * FROM wfs_element WHERE fkey_featuretype_id = ". mysql_result($res_fe, $cnt_fe, "featuretype_id")." ORDER BY element_id";
- $res_el = mysql_query($sql_el);
+ $sql_el = "SELECT * FROM wfs_element WHERE fkey_featuretype_id = ". db_result($res_fe, $cnt_fe, "featuretype_id")." ORDER BY element_id";
+ $res_el = db_query($sql_el);
$cnt_el = 0;
- while(mysql_fetch_row($res_el)){
+ while(db_fetch_row($res_el)){
$z = count($this->wfs_featuretype[$c]->featuretype_element);
- $this->wfs_featuretype[$c]->featuretype_element[$z]["name"] = mysql_result($res_el, $cnt_el, "element_name");
- $this->wfs_featuretype[$c]->featuretype_element[$z]["type"] = mysql_result($res_el, $cnt_el, "element_type");
+ $this->wfs_featuretype[$c]->featuretype_element[$z]["name"] = db_result($res_el, $cnt_el, "element_name");
+ $this->wfs_featuretype[$c]->featuretype_element[$z]["type"] = db_result($res_el, $cnt_el, "element_type");
$cnt_el++;
}
- $sql_el = "SELECT * FROM wfs_featuretype_namespace WHERE fkey_featuretype_id = ". mysql_result($res_fe, $cnt_fe, "featuretype_id")." ORDER BY namespace";
- $res_el = mysql_query($sql_el);
- $cnt_el = 0;
- while(mysql_fetch_row($res_el)){
+ $sql_ns = "SELECT * FROM wfs_featuretype_namespace WHERE fkey_featuretype_id = ". db_result($res_fe, $cnt_fe, "featuretype_id")." ORDER BY namespace";
+ $res_ns = db_query($sql_ns);
+ $cnt_ns = 0;
+ while(db_fetch_row($res_ns)){
$z = count($this->wfs_featuretype[$c]->featuretype_namespace);
- $this->wfs_featuretype[$c]->featuretype_namespace[$z]["name"] = mysql_result($res_el, $cnt_el, "namespace");
- $this->wfs_featuretype[$c]->featuretype_namespace[$z]["value"] = mysql_result($res_el, $cnt_el, "namespace_location");
- $cnt_el++;
+ $this->wfs_featuretype[$c]->featuretype_namespace[$z]["name"] = db_result($res_ns, $cnt_ns, "namespace");
+ $this->wfs_featuretype[$c]->featuretype_namespace[$z]["value"] = db_result($res_ns, $cnt_ns, "namespace_location");
+ $cnt_ns++;
}
$cnt_fe++;
}
$cnt++;
- }
- }
+ }
}
/** end createObjfromDB **/
+}
class featuretype extends wfs{
var $featuretype_element = array();
var $featuretype_namespace = array();
- function featuretype($name,$title,$srs,$url,$version){
- $values = null;
- $tags = null;
-
+ function featuretype($name,$title,$abstract,$srs,$url,$version){
+
$url .= "&SERVICE=WFS&VERSION=".$version."&REQUEST=DescribeFeatureType&TYPENAME=".$name;
$this->featuretype_name = $name;
$this->featuretype_title = $title;
+ $this->featuretype_abstract = $abstract;
$this->featuretype_srs = $srs;
$data = implode("",file($url));
@@ -389,12 +697,12 @@
foreach ($values as $element) {
if($this->sepNameSpace($element[tag]) == "schema" && $element[type] == "open"){
$section = "namespace";
- echo "namespace<br>";
+// echo "namespace<br>";
}
if($section == "namespace"){
while (list($k, $val) = each ($element[attributes])) {
- if (mb_substr($k, 0, 5) == "xmlns") {
+ if (substr($k, 0, 5) == "xmlns") {
$cnt = count($this->featuretype_namespace);
$match = false;
for ($i = 0 ; $i < $cnt && $match == false ; $i++) {
@@ -405,7 +713,7 @@
if ($match == false) {
$this->featuretype_namespace[$cnt]["name"] = $this->sepNameSpace($k);
$this->featuretype_namespace[$cnt]["value"] = $val;
- echo "namespace: " . $this->sepNameSpace($k) . " -> " . $val . "<br>";
+// echo "namespace: " . $this->sepNameSpace($k) . " -> " . $val . "<br>";
}
}
}
@@ -415,29 +723,23 @@
}
if($this->sepNameSpace($element[tag]) == "complexContent" && $element[type] == "open"){
$section = "complexcontent";
- echo "complexcontent<br>";
+// echo "complexcontent<br>";
}
if($section == "complexcontent" && $this->sepNameSpace($element[tag]) == "element" && $element[attributes][name]){
$cnt = count($this->featuretype_element);
$this->featuretype_element[$cnt]["name"] = $element[attributes]["name"];
-
- if (array_key_exists("type", $element[attributes])) {
- $this->featuretype_element[$cnt]["type"] = $this->sepNameSpace($element[attributes]["type"]);
- }
- echo "element: ".$this->featuretype_element[$cnt]["name"]."<br>";
+ $this->featuretype_element[$cnt]["type"] = $this->sepNameSpace($element[attributes]["type"]);
+// echo "element: ".$this->featuretype_element[$cnt]["name"]."<br>";
}
- if($section == "complexcontent" && $this->sepNameSpace($element[tag]) == "restriction" && $element[attributes][base]){
- $this->featuretype_element[$cnt]["type"] = $this->sepNameSpace($element[attributes]["base"]);
- }
if($this->sepNameSpace($element[tag]) == "complexContent" && $element[type] == "close"){
$section = "";
}
}
}
function sepNameSpace($s){
- $c = mb_strpos($s,":");
+ $c = strpos($s,":");
if($c>0){
- return mb_substr($s,$c+1);
+ return substr($s,$c+1);
}
else{
return $s;
More information about the Mapbender_commits
mailing list