[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