file;
#$data = implode("",file($url));
if(!$data){
echo "Unable to open document: ".$url;
die;
}
$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,$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 = trim($element[value]);
}
if(strtoupper($element[tag]) == "TITLE" && $element[level] == '3'){
$this->wfs_title = trim($this->stripEndlineAndCarriageReturn($element[value]));
}
if(strtoupper($element[tag]) == "ABSTRACT" && $element[level] == '3'){
$this->wfs_abstract = trim($this->stripEndlineAndCarriageReturn($element[value]));
}
//new WFS 1.0.0 -- SB 2007-08-06
if(strtolower($element[tag]) == "fees"){
$this->fees = trim($element[value]);
}
if(strtolower($element[tag]) == "accessconstraints"){
$this->accessconstraints = trim($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]) == "POST"){
$this->wfs_getcapabilities = trim($element[attributes][onlineResource]);
}
# descriptFeatureType
if(strtoupper($element[tag]) == "DESCRIBEFEATURETYPE" && $element[type] == "open"){
$section = "describefeaturetype";
$this->wfs_describefeaturetype = trim($element[attributes][onlineResource]);
}
if($section == "describefeaturetype" && strtoupper($element[tag]) == "POST"){
$this->wfs_describefeaturetype = trim($element[attributes][onlineResource]);
}
# getFeature
if(strtoupper($element[tag]) == "GETFEATURE" && $element[type] == "open"){
$section = "getfeature";
}
if($section == "getfeature" && strtoupper($element[tag]) == "POST"){
$this->wfs_getfeature = trim($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]) == "POST"){
$this->wfs_transaction = trim($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 = trim($element[value]);
}
if($section == "featuretype" && strtoupper($element[tag]) == "TITLE"){
$featuretype_title = trim($this->stripEndlineAndCarriageReturn($element[value]));
}
if($section == "featuretype" && strtoupper($element[tag]) == "ABSTRACT"){
if(isset($element[value])) {
$featuretype_abstract = trim($element[value]);
}
else {
$featuretype_abstract = "";
}
}
if($section == "featuretype" && strtoupper($element[tag]) == "SRS"){
$featuretype_srs = trim($element[value]);
$this->addFeaturetype($featuretype_name,$featuretype_title,$featuretype_abstract,$featuretype_srs,$this->wfs_describefeaturetype,$this->wfs_version);
}
}
}
function displayWFS(){
echo "id: " . $this->wfs_id . "
";
echo "version: " . $this->wfs_version . "
";
echo "name: " . $this->wfs_name . "
";
echo "title: " . $this->wfs_title . "
";
echo "abstract: " . $this->wfs_abstract . "
";
echo "capabilitiesrequest: " . $this->wfs_getcapabilities . "
";
echo "describefeaturetype: " . $this->wfs_describefeaturetype . "
";
echo "getfeature: " . $this->wfs_getfeature . "
";
echo "transaction: " . $this->wfs_transaction . "
";
for($i=0; $iwfs_featuretype); $i++){
echo "
";
echo "name: ". $this->wfs_featuretype[$i]->featuretype_name . "
";
echo "title: ". $this->wfs_featuretype[$i]->featuretype_title . "
";
echo "abstract: ". $this->wfs_featuretype[$i]->featuretype_abstract . "
";
echo "srs: ". $this->wfs_featuretype[$i]->featuretype_srs . "
";
for($j=0; $jwfs_featuretype[$i]->featuretype_element);$j++){
echo " element: " . $this->wfs_featuretype[$i]->featuretype_element[$j]["name"] ." - ".$this->wfs_featuretype[$i]->featuretype_element[$j]["type"]."
";
}
for($j=0; $jwfs_featuretype[$i]->featuretype_namespace);$j++){
echo " namespace: " . $this->wfs_featuretype[$i]->featuretype_namespace[$j]["name"] ." - ".$this->wfs_featuretype[$i]->featuretype_namespace[$j]["value"]."
";
}
}
}
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 !!');";
die; exit;
}
if($parent){
echo "parent.";
}
print("add_wfs('".
$this->wfs_id ."','".
$this->wfs_version ."','".
$this->wfs_title ."','".
$this->wfs_abstract ."','".
$this->wfs_getcapabilities ."','" .
$this->wfs_describefeaturetype ."');");
for($i=0; $iwfs_featuretype); $i++){
if($parent){
echo "parent.";
}
print ("wfs_add_featuretype('".
$this->wfs_featuretype[$i]->featuretype_name ."','".
$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; $jwfs_featuretype[$i]->featuretype_element);$j++){
if($parent){
echo "parent.";
}
print("wfs_add_featuretype_element('".$this->wfs_featuretype[$i]->featuretype_element[$j]["name"]."', '".$this->wfs_featuretype[$i]->featuretype_element[$j]["type"]."', ".$j.", ".$i.");");
}
for($j=0; $jwfs_featuretype[$i]->featuretype_namespace);$j++){
if($parent){
echo "parent.";
}
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."
";
$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 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);
db_begin();
// 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 = $1;";
$v = array($this->wfs_id);
$t = array("i");
$res = db_prep_query($sql, $v, $t);
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 = $1;";
$v = array($this->wfs_id);
$t = array("i");
$res_ft = db_prep_query($sql, $v, $t);
$cnt = 0;
while(db_fetch_row($res_ft)){
$found = false;
for($i=0; $iwfs_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."
";
$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++;
}
# TABLE wfs_featuretype
for($i=0; $iwfs_featuretype); $i++){
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."
";
$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."
";
$res = db_prep_query($sql,$v,$t);
if(!$res){db_rollback();$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");return;}
}
//delete featuretype elements from db and find the ids
$sql = "SELECT * FROM wfs_element WHERE fkey_featuretype_id = $1;";
$v = array($this->wfs_featuretype[$i]->featuretype_id);
$t = array("i");
$res_el = db_prep_query($sql, $v, $t);
$cnt = 0;
while(db_fetch_row($res_el)){
$found = false;
for($j=0; $jwfs_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(db_result($res_el, $cnt, "element_id"), $this->wfs_featuretype[$i]->featuretype_id);
$t = array('i','i');
//echo $sql."
";
$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++;
}
for($j=0; $jwfs_featuretype[$i]->featuretype_element);$j++){
if(!$this->wfs_featuretype[$i]->featuretype_element[$j]["id"]){
$sql = "INSERT INTO wfs_element(fkey_featuretype_id, element_name,element_type) ";
$sql .= "VALUES($1, $2, $3);";
$v = array($this->wfs_featuretype[$i]->featuretype_id, $this->wfs_featuretype[$i]->featuretype_element[$j]["name"], $this->wfs_featuretype[$i]->featuretype_element[$j]["type"]);
$t = array("s", "s", "s");
$res = db_prep_query($sql, $v, $t);
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 = $1 ";
$sql .= "WHERE element_id = $2 AND ";
$sql .= "fkey_featuretype_id = $3;";
$v = array($this->wfs_featuretype[$i]->featuretype_element[$j]["type"], $this->wfs_featuretype[$i]->featuretype_element[$j]["id"], $this->wfs_featuretype[$i]->featuretype_id);
$t = array("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;
}
}
}
$sql = "DELETE FROM wfs_featuretype_namespace WHERE ";
$sql .= "fkey_wfs_id = $1 AND fkey_featuretype_id = $2";
$v = array($this->wfs_id, $this->wfs_featuretype[$i]->featuretype_id);
$t = array("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;
}
for($j=0; $jwfs_featuretype[$i]->featuretype_namespace);$j++){
$sql = "INSERT INTO wfs_featuretype_namespace ";
$sql .= "(fkey_wfs_id, fkey_featuretype_id, namespace, namespace_location) ";
$sql .= "VALUES ($1, $2, $3, $4);";
$v = array($this->wfs_id, $this->wfs_featuretype[$i]->featuretype_id, $this->wfs_featuretype[$i]->featuretype_namespace[$j]["name"], $this->wfs_featuretype[$i]->featuretype_namespace[$j]["value"]);
$t = array("s", "s", "s", "s");
$res = db_prep_query($sql, $v, $t);
if (!$res) {
db_rollback();
$e = new mb_exception("Error while saving WFS to DB. Rollback performed.");
return;
}
}
}
# TABLE gui_wfs
if($gui_id){
$sql ="INSERT INTO gui_wfs (fkey_gui_id, fkey_wfs_id)";
$sql .= "VALUES($1, $2);";
$v = array($gui_id, $this->wfs_id);
$t = array("s", "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;
}
}
//echo "Successfully saved!
";
db_commit();
return true;
}
/**
* 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]) == "POST"){
$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]) == "POST"){
$this->wfs_describefeaturetype = $element[attributes][onlineResource];
}
# getFeature
if(strtoupper($element[tag]) == "GETFEATURE" && $element[type] == "open"){
$section = "getfeature";
}
if($section == "getfeature" && strtoupper($element[tag]) == "POST"){
$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]) == "POST"){
$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"){
if(isset($element[value])) {
$featuretype_abstract = $this->$element[value];
}
else {
$featuretype_abstract = "";
}
}
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 $DBSERVER,$DB,$OWNER,$PW;
$con = db_connect($DBSERVER,$OWNER,$PW);
db_select_db($DB,$con);
$sql = "SELECT * FROM wfs WHERE wfs_id = $1;";
$v = array($wfs_id);
$t = array("i");
$res = db_prep_query($sql, $v, $t);
$cnt = 0;
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 = $1 ORDER BY featuretype_id";
$v = array($this->wfs_id);
$t = array("i");
$res_fe = db_prep_query($sql_fe, $v, $t);
$cnt_fe = 0;
while(db_fetch_row($res_fe)){
$c = count($this->wfs_featuretype);
// $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 = $1 ORDER BY element_id";
$v = array(db_result($res_fe, $cnt_fe, "featuretype_id"));
$t = array("i");
$res_el = db_prep_query($sql_el, $v, $t);
$cnt_el = 0;
while(db_fetch_row($res_el)){
$z = count($this->wfs_featuretype[$c]->featuretype_element);
$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_ns = "SELECT * FROM wfs_featuretype_namespace WHERE fkey_featuretype_id = $1 ORDER BY namespace";
$v = array(db_result($res_fe, $cnt_fe, "featuretype_id"));
$t = array("i");
$res_ns = db_prep_query($sql_ns, $v, $t);
$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"] = 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 **/
public function getallwfs($userid){
$this->wfs_id = array();
$this->wfs_name = array();
$this->wfs_title = array();
$this->wfs_abstract = array();
global $DBSERVER,$DB,$OWNER,$PW;
$con = db_connect($DBSERVER,$OWNER,$PW);
db_select_db($DB,$con);
if($userid){
$sql = "SELECT * FROM wfs WHERE wfs_owner = $1";
$v = array($userid);
$t = array('i');
$res = db_prep_query($sql,$v,$t);
}
else{
$sql = "SELECT * FROM wfs";
$res = db_query($sql);
}
$cnt = 0;
while ($row = db_fetch_array($res)){
$this->wfs_version[$cnt] = $row["wfs_version"];
$this->wfs_id[$cnt] = $row["wfs_id"];
$this->wfs_name[$cnt] = $row["wfs_name"];
$this->wfs_title[$cnt] = $row["wfs_title"];
$this->wfs_abstract[$cnt] = $row["wfs_abstract"];
$this->wfs_getcapabilities[$cnt] = $row["wfs_getcapabilities"];
$this->wfs_describefeaturetype[$cnt] = $row["wfs_describefeaturetype"];
$this->wfs_getfeature[$cnt] = $row["wfs_getfeature"];
$cnt++;
}
}
}
class featuretype extends wfs{
var $featuretype_element = array();
var $featuretype_namespace = array();
function getConjunctionCharacter ($url) {
// does the URL contain "?"
$pos = strpos($url, "?");
// if yes, ...
if ($pos > -1) {
// if the last character is "?", return ""
if (substr($url, -1) == "?") {
return "";
}
// if the last character is "&", return ""
else if (substr($url, -1) == "&") {
return "";
}
// "?" exists, so the conunction character must be "&"
return "&";
}
// "?" doesn't exist, so the conunction character must be "?"
return "?";
}
function featuretype($name,$title,$abstract,$srs,$url,$version){
$url .= $this->getConjunctionCharacter($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;
$y = new connector($url);
$data = $y->file;
#$data = implode("",file($url));
$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_parse_into_struct($parser,$data,$values,$tags);
xml_parser_free($parser);
foreach ($values as $element) {
if($this->sepNameSpace($element[tag]) == "schema" && $element[type] == "open"){
$section = "namespace";
// echo "namespace
";
}
if($section == "namespace"){
while (list($k, $val) = each ($element[attributes])) {
if (substr($k, 0, 5) == "xmlns") {
$cnt = count($this->featuretype_namespace);
$match = false;
for ($i = 0 ; $i < $cnt && $match == false ; $i++) {
if ($this->sepNameSpace($k) == $this->featuretype_namespace[$i]["name"] && $val == $this->featuretype_namespace[$i]["value"]) {
$match = true;
}
}
if ($match == false) {
$this->featuretype_namespace[$cnt]["name"] = $this->sepNameSpace($k);
$this->featuretype_namespace[$cnt]["value"] = $val;
// echo "namespace: " . $this->sepNameSpace($k) . " -> " . $val . "
";
}
}
}
}
if($this->sepNameSpace($element[tag]) == "complexType" && $element[type] == "open"){
$section = "";
}
if($this->sepNameSpace($element[tag]) == "complexContent" && $element[type] == "open"){
$section = "complexcontent";
// echo "complexcontent
";
}
if($section == "complexcontent" && $this->sepNameSpace($element[tag]) == "element" && $element[attributes][name]){
$cnt = count($this->featuretype_element);
$this->featuretype_element[$cnt]["name"] = $element[attributes]["name"];
$this->featuretype_element[$cnt]["type"] = $this->sepNameSpace($element[attributes]["type"]);
// echo "element: ".$this->featuretype_element[$cnt]["name"]."
";
}
if($this->sepNameSpace($element[tag]) == "complexContent" && $element[type] == "close"){
$section = "";
}
}
}
function sepNameSpace($s){
$c = strpos($s,":");
if($c>0){
return substr($s,$c+1);
}
else{
return $s;
}
}
}
?>