more searchwords) * @$timestamp_beg integer Timebegin of the Search in TIMESTAMP-Format * @$timestamp_end integer Timeend of the Search in TIMESTAMP-Format * @$limit integer Limit of the whole Result of the Metadata Search * @$search_bbox array BoundingBox * @$search_epsg string EPSG like: "EPSG:4326" */ function logit($text){ if($h = fopen("/data/mapbender/http/tmp/gregor.txt","a")){ $content = $text .chr(13).chr(10); if(!fwrite($h,$content)){ #exit; } fclose($h); } } function __construct($user_id, $departments, $categories, $searchtext, $timestamp_beg, $timestamp_end, $limit, $search_bbox, $search_epsg){ $this->user_id = $user_id; $this->departments = $departments; $this->categories = $categories; $this->searchtext = $searchtext; $this->timestamp_beg = $timestamp_beg; $this->timestamp_end = $timestamp_end; $this->limit = $limit; $this->search_bbox = $search_bbox; $this->search_epsg = $search_epsg; $this->availabilityTime = 60*60*24*90; // sec*min*hour*days // $e = new mb_notice("Search extended => user_id: ".$this->user_id.""); // $e = new mb_notice("Search extended => searchtext: ".$this->searchtext.""); // $e = new mb_notice("Search extended => timestamp_beg: ".$this->timestamp_beg.""); // $e = new mb_notice("Search extended => timestamp_end: ".$this->timestamp_end.""); // $e = new mb_notice("Search extended => limit: ".$this->limit.""); // $e = new mb_notice("Search extended => search_epsg: ".$this->search_epsg.""); // // $e = new mb_notice("Search extended => count departments: ".count($this->departments).""); // $e = new mb_notice("Search extended => count categories: ".count($this->categories).""); // $e = new mb_notice("Search extended => count search_bbox: ".count($this->search_bbox).""); // echo "Search extended => user_id: ".$this->user_id."
"; // echo "Search extended => searchtext: ".$this->searchtext."
"; // echo "Search extended => timestamp_beg: ".$this->timestamp_beg."
"; // echo "Search extended => timestamp_end: ".$this->timestamp_end."
"; // echo "Search extended => limit: ".$this->limit."
"; // echo "Search extended => search_epsg: ".$this->search_epsg."
"; // echo "Search extended => count search_bbox: ".count($this->search_bbox)."
"; // // echo "Search extended => count departments: ".count($this->departments)."
"; // echo "Search extended => count categories: ".count($this->categories)."
"; // echo "Search extended => count search_bbox: ".count($this->search_bbox)."
"; // // echo "Search extended => count departments: ".$this->departments[0]."
"; // echo "Search extended => count categories: ".$this->categories[0]."
"; // echo "Search extended => count search_bbox: ".$this->search_bbox[0]."
"; $this->logit("searchtext: ".$this->searchtext); $this->logit("count categories: ".count($this->categories)); $this->logit("count departments: ".count($this->departments)); $this->logit("count search_bbox: ".count($this->search_bbox)); $cat_id=""; for ($index = 0; $index < sizeof($this->categories); $index++) { $array_element = $this->categories[$index]; $cat_id .= $array_element.", "; } $this->isOverLimit; $this->anz_wms=0; $this->anz_wfs=0; $cat = array(); $this->cat = $cat; $this->user_authorization(); $this->set_categories(); $this->doc = new DOMDocument('1.0'); $this->generate_xml_output(); } /* * user authorization */ function user_authorization(){ $n = new administration(); $this->n = $n; $myguis = $this->n->getGuisByPermission($this->user_id,true); $mywms = $this->n->getWmsByOwnGuis($myguis); $myWFSconfs = $this->n->getWfsConfByPermission($this->user_id); $this->myWFSConfs = $myWFSconfs; for ($index = 0; $index < sizeof($this->myWFSConfs); $index++) { $array_element = $this->myWFSConfs[$index]; // echo $index."wfs_conf_id: ".$array_element."
"; } $mylayer = array(); $this->mylayer = $mylayer; if($mywms == false){ $mywms = array(); } } /* set categories as array */ function set_categories(){ $sql = "SELECT * FROM md_topic_category "; $sql .= "ORDER BY md_topic_category_id"; $res = db_query($sql); $this->cat[0] = array(); $this->cat[0]['md_topic_category_code_de'] = ''; $this->cat[0]['member'] = array(); $cnt = 1; while($row = db_fetch_array($res)){ $this->cat[$cnt] = array(); $this->cat[$cnt]['md_topic_category_code_de'] = $row['md_topic_category_code_de']; $this->cat[$cnt]['member'] = array(); $cnt++; // echo " => ".$row['md_topic_category_code_de']; // echo " => ".$row['md_topic_category_id']."
"; } $cat_de=""; for ($index = 0; $index < sizeof($this->cat); $index++) { $array_element = $this->cat[$index]; $cat_de .= "'".$this->cat[$index]['md_topic_category_code_de']."', "; } // $this->logit("set cat => count categories in [][]: ".count($this->cat)); // $this->logit("set cat => categories: ".$cat_de); } /* * replace german letters (for example � => ae) */ function replaceChars($text){ $search = array( "�", "�", "�", "�", "�", "�", "�"); $repwith = array("ae", "oe", "ue", "AE", "OE", "UE", "ss"); if(CHARSET=="UTF-8") $text = utf8_decode($text); $ret = str_replace($search, $repwith, $text); if(CHARSET=="UTF-8") $ret = utf8_encode($ret); return $ret; } function replaceString($string , $replaceString, $newString){ $newstr = str_replace($string, $replaceString, $newString); return $newstr; } function generate_xml_output(){ $this->writeXmlhead(); $this->writeXmlWMSPart(); $this->writeXmlWFSPart(); $this->writeXmlEnd(); } function writeXmlhead(){ $this->doc->encoding = CHARSET; $result = $this->doc->createElement("result"); $this->doc->appendChild($result); //Trefferanzahl $overLimit = $this->doc->createElement('overLimit'); $result->appendChild($overLimit); $tr_text = $this->doc->createTextNode($this->isOverLimit); $overLimit->appendChild($tr_text); $rd = $this->doc->createElement("redirect"); $result->appendChild($rd); $trd = $this->doc->createTextNode("muss noch..."); $rd->appendChild($trd); } function writeXmlEnd(){ $overLimitText = $this->doc->createTextNode($this->isOverLimit); $overLimits = $this->doc->getElementsByTagName("overLimit"); foreach ($overLimits as $overLimit) { $overLimit->appendChild($overLimitText); } $ready = $this->doc->createElement('ready'); $tready = $this->doc->createTextNode("true"); $ready->appendChild($tready); $results = $this->doc->getElementsByTagName("result"); foreach ($results as $result) { $result->appendChild($ready); } echo $this->doc->saveXML(); // Ausgabe $e = new mb_notice("Wrote the XML-File"); } /* * generats categories with members in the xml-File */ function writeXmlWMSPart(){ $asstr = array(); if ($this->searchtext!="false"){ $asstr = split(" ",$this->searchtext); } $isTextSearch = "false"; for ($index = 0; $index < count($asstr); $index++) { $array_element = $asstr[$index]; $e = new mb_notice("Search-Text: ".$index.". ".$array_element.""); } $v = array(); $t = array(); $sql = "SELECT DISTINCT * from service_metadata where "; for($i=0; $i0){$sql .= " AND ";} $sql .= "searchtext LIKE $".($i+1); $va = "%".trim(strtoupper($this->replaceChars($asstr[$i])))."%"; array_push($v,$va); array_push($t,"s"); } $whereBedArray = array(); //layer_searchable condition array_push($whereBedArray, "(layer_searchable = 1)"); //date condition if ($this->timestamp_beg!="false" && $this->timestamp_end!="false"){ $time ="(wms_timestamp BETWEEN ".$this->timestamp_beg." AND ".$this->timestamp_end.")"; array_push($whereBedArray, $time); } else if ($this->timestamp_beg!="false" && $this->timestamp_end=="false"){ $time ="(wms_timestamp > ".$this->timestamp_beg.")"; array_push($whereBedArray, $time); } else if ($this->timestamp_beg=="false" && $this->timestamp_end!="false"){ $time ="(wms_timestamp < ".$this->timestamp_end.")"; array_push($whereBedArray, $time); } //department condition if(count($this->departments)>0){ $txt = $this->getDepartmentBed("wms_owner", "mb_user_department", $this->departments, "OR"); $dep = " (". $txt . ") "; array_push($whereBedArray, $dep); } // //Testausgabe // for ($index = 0; $index < sizeof($this->whereBedArray); $index++) { // $array_element = $this->whereBedArray[$index]; // echo $index." el: ".$array_element."
"; // // } //Creating the Where Clausel, based on a Array if(count($whereBedArray)>0){ $txt_whereBed=""; for ($index = 0; $index < sizeof($whereBedArray); $index++) { $array_element = $whereBedArray[$index]; if($isTextSearch=="true") { $txt_whereBed .=" AND ".$array_element; } else { if($index>0){ $txt_whereBed .=" AND ".$array_element; } else { $txt_whereBed .=" ".$array_element; } } } $sql .= $txt_whereBed; } //order by $sql .= " ORDER BY load_count DESC"; //Beschr�nkung $lim = $this->limit; $overLimit = $lim+1; $sql .= " LIMIT ".$overLimit; for ($index = 0; $index < sizeof($asstr); $index++) { $array_element = $asstr[$index]; $this->logit($index.".Suchwort : ".$array_element); } $this->logit("SQL_WMS: ".$sql); $e = new mb_notice("Search extended => SQL-Request of view service_metadata: ".$sql.""); $res = db_prep_query($sql, $v, $t); // spatial search // for ($index = 0; $index < sizeof($this->cat); $index++) { // $array_element = $this->cat[$index]; // // $this->logit("0. vor Kategorieeinordnung => Kategorie: ".$this->cat[$index]['md_topic_category_code_de'].", Anzahl Member: ".count($this->cat[$index]['member'])); // } if(count($this->search_bbox)>0){ $anz = 0; $resultColumns = array(); $resultColumns = $this->generateNewReaArray($res); $e = new mb_notice("count service_metadata: ".count($resultColumns).""); for ($index = 0; $index < count($resultColumns); $index++) { $row = $resultColumns[$index]; if ($this->n->getLayerPermission($row['wms_id'], $row['layer_name'], $this->user_id)) { array_push($this->mylayer,$row['layer_id']); } //accessconstraints -> email subadmin // $sql_ac = "SELECT mb_user_email FROM mb_user WHERE mb_user_id = $1"; // $v = array($row["wms_owner"]); // $t = array('i'); // $res_ac = db_prep_query($sql_ac, $v, $t); // if($row_ac = db_fetch_array($res_ac)){ // $row["accessconstraints"] = $row_ac["mb_user_email"]; // } $ns = $this->make_members($row); $anz++; } $e = new mb_notice("count service_metadata(spatial-search): ".$anz.""); $this->logit("ANZ_WMS mit bbox: ".$anz); } else { $anz = 0; while($row = db_fetch_array($res)){ if ($this->n->getLayerPermission($row['wms_id'], $row['layer_name'], $this->user_id)) { array_push($this->mylayer,$row['layer_id']); } //accessconstraints -> email subadmin // $sql_ac = "SELECT mb_user_email FROM mb_user WHERE mb_user_id = $1"; // $v = array($row["wms_owner"]); // $t = array('i'); // $res_ac = db_prep_query($sql_ac, $v, $t); // // if ($row_ac = db_fetch_array($res_ac)){ // $row["accessconstraints"] = $row_ac["mb_user_email"]; // } $ns = $this->make_members($row); $anz++; } $e = new mb_notice("count service_metadata(no spatial-search): ".$anz.""); $this->logit("ANZ_WMS ohne bbox: ".$anz); } // for ($index = 0; $index < sizeof($this->cat); $index++) { // $array_element = $this->cat[$index]; // // $this->logit("1.nach Kategorieeinordnung => Kategorie: ".$this->cat[$index]['md_topic_category_code_de'].", Anzahl Member: ".count($this->cat[$index]['member'])); // } if ($this->limit < $anz ){ $this->isOverLimit="true"; } else { $this->isOverLimit="false"; } $ns = $this->make_xml(); } /* * fills an array[][] with members based on categories */ function make_members($r){ // $sql = "SELECT fkey_md_topic_category_id FROM layer_md_topic_category WHERE fkey_layer_id = $1"; $sql = "SELECT fkey_md_topic_category_id, md_topic_category_code_de, fkey_layer_id " . "FROM layer_md_topic_category, md_topic_category " . "WHERE layer_md_topic_category.fkey_md_topic_category_id = md_topic_category.md_topic_category_id " . "AND fkey_layer_id = $1"; $sql .= " ORDER BY fkey_md_topic_category_id"; $v = array($r['layer_id']); $t = array('i'); $res = db_prep_query($sql, $v, $t); $c = 0; //layer with category while($row = db_fetch_array($res)){ if (count($this->categories)>0){ if (in_array($row['fkey_md_topic_category_id'], $this->categories) ){ $this->cat[$row['fkey_md_topic_category_id']]['member'][count($this->cat[$row['fkey_md_topic_category_id']]['member'])] = $r; } } else { $this->cat[$row['fkey_md_topic_category_id']]['member'][count($this->cat[$row['fkey_md_topic_category_id']]['member'])] = $r; } // $this->cat[$row['fkey_md_topic_category_id']]['member'][count($this->cat[$row['fkey_md_topic_category_id']]['member'])] = $r; // $catID = $row['fkey_md_topic_category_id']; // array_push($this->cat[$catID]['member'],$r); $c++; } // no category for this layer if($c == 0){ array_push($this->cat[0]['member'],$r); } return true; } /* * generats the xml-document */ function make_xml(){ // for ($index = 0; $index < sizeof($this->cat); $index++) { // $array_element = $this->cat[$index]; // // echo "Kategorie: ".$this->cat[$index]['md_topic_category_code_de'].", Anzahl Member: ".count($this->cat[$index]['member'])."
"; // } $i=0; if (count($this->categories) == 0){ // Wenn eine Kategorieauswahl werde WMSe/Layer die keiner Kategorie zugeordnet sind nicht angezeigt $i=0; } else { $i=1; } for($i; $icat); $i++){ if(count($this->cat[$i]['member'])>0){ $c = $this->doc->createElement("category"); $results = $this->doc->getElementsByTagName("result"); foreach ($results as $result) { $result->appendChild($c); $c->setAttribute('name',$this->cat[$i]['md_topic_category_code_de']); $c->setAttribute('count',count($this->cat[$i]['member'])); } $this->logit("IM XML-Aufbau: category: ".$this->cat[$i]['md_topic_category_code_de'].", Anzahl: ".count($this->cat[$i]['member'])); for($ii=0; $iicat[$i]['member']); $ii++){ // ################### // Schachtelung Start $m = $this->doc->createElement('member'); $m->setAttribute('wms_id',$this->cat[$i]['member'][$ii]['wms_id']); // Attribut muss gesetzt werden um es wieder zu finden $m->setAttribute('layer_pos',$this->cat[$i]['member'][$ii]['layer_pos']); // Attribut muss gesetzt werden um es wieder zu finden // $m->setAttribute('layer_parent',$this->cat[$i]['member'][$ii]['layer_parent']); if ($ii != 0){ $members = $c->getElementsByTagName('member'); $sub = "false"; $mem = null; foreach ($members as $member) { $tmp_wms_id = $member -> getAttribute('wms_id'); $tmp_layer_pos = $member -> getAttribute('layer_pos'); /* * Wiederfinden des Members �ber die Attribute */ if ($this->cat[$i]['member'][$ii]['wms_id'] == $tmp_wms_id){ if ($this->cat[$i]['member'][$ii]['layer_parent'] == $tmp_layer_pos){ $sub = "true"; $member->appendChild($m); // dem member $member wird ein weiteres member $m hinzugef�gt break; } else { $sub = "false"; } } } if ($sub == "true"){ // member konnte schon in der foreach-schleife eingefuegt werden } else { $c->appendChild($m); // member kategorie 1 (anderer WMS) } } else { $c->appendChild($m); // member kategorie 1 (erstes member) } // Schachtelung Ende // ################### // LayerName $state = $this->doc->createElement('layername'); $m->appendChild($state); $name = ""; $layname = $this->cat[$i]['member'][$ii]['layer_name']; if ($layname == "NULL" || $layname == "") { $name = ""; } else { $name = $layname; } $lay_name_text = $this->doc->createTextNode($name); $state->appendChild($lay_name_text); //Abfragbarkeit $queryable = $this->doc->createElement('queryable'); $m->appendChild($queryable); if ($this->cat[$i]['member'][$ii]['layer_queryable']==1){ $lay_queryable = "true"; } else { $lay_queryable = "false"; } $abf_text = $this->doc->createTextNode($lay_queryable); $queryable->appendChild($abf_text); // Epsg $epsg = $this->doc->createElement('epsg'); $m->appendChild($epsg); $equalEPSG = $this->checkEPSG($this->cat[$i]['member'][$ii]['wms_id']); $epsg_text = $this->doc->createTextNode($equalEPSG); $epsg->appendChild($epsg_text); // L�nderkennung $state = $this->doc->createElement('federalstate'); $m->appendChild($state); $spatialSource = ""; $stateorprovince = $this->cat[$i]['member'][$ii]['stateorprovince']; if ($stateorprovince == "NULL" || $stateorprovince == "") { $spatialSource = $this->cat[$i]['member'][$ii]['country']; } else { $spatialSource = $this->cat[$i]['member'][$ii]['stateorprovince']; } $countr_code_text = $this->doc->createTextNode($spatialSource); $state->appendChild($countr_code_text); // Satus des letzten Monitorings $last_monitoring = $this->doc->createElement('last_monitoring'); $m->appendChild($last_monitoring); $lastMonitoring = $this->getLastMonitoringDate($this->cat[$i]['member'][$ii]['wms_id']); $last_monitoring_text = $this->doc->createTextNode($lastMonitoring); $last_monitoring->appendChild($last_monitoring_text); // Verf�gbarkeit - Prozentzahl $availability = $this->doc->createElement('availability'); $m->appendChild($availability); $availabilityPercent = $this->getWMSavailability($this->cat[$i]['member'][$ii]['wms_id'], $this->availabilityTime); $availability_text = $this->doc->createTextNode($availabilityPercent); $availability->appendChild($availability_text); // Relevanz / Count $relevance = $this->doc->createElement('relevance'); $m->appendChild($relevance); $lay_count=0; if($this->cat[$i]['member'][$ii]['load_count'] != null){ $lay_count=$this->cat[$i]['member'][$ii]['load_count']; } $relevance_text = $this->doc->createTextNode($lay_count); $relevance->appendChild($relevance_text); //type $type = $this->doc->createElement('type'); $m->appendChild($type); if($this->cat[$i]['member'][$ii]['layer_pos'] > 0){ $ttype = $this->doc->createTextNode("layer"); } else{ $ttype = $this->doc->createTextNode("wms"); } $type->appendChild($ttype); //wms_id $wms__id = $this->doc->createElement('wms_id'); $m->appendChild($wms__id); $id_text = $this->doc->createTextNode($this->cat[$i]['member'][$ii]['wms_id']); $wms__id->appendChild($id_text); //layer_id $id = $this->doc->createElement('id'); $m->appendChild($id); $tid = $this->doc->createTextNode($this->cat[$i]['member'][$ii]['layer_id']); $id->appendChild($tid); //title $title = $this->doc->createElement('title'); $m->appendChild($title); $ttitle = $this->doc->createTextNode($this->cat[$i]['member'][$ii]['layer_title']); $title->appendChild($ttitle); //abstract $abst = $this->doc->createElement('abstract'); $m->appendChild($abst); $tabst = $this->doc->createTextNode($this->cat[$i]['member'][$ii]['layer_abstract']); $abst->appendChild($tabst); // accesscontraints $ac = $this->doc->createElement('accessconstraints'); $m->appendChild($ac); $myac = $this->doc->createTextNode($this->cat[$i]['member'][$ii]['accessconstraints']); $ac->appendChild($myac); //data $date = $this->doc->createElement('date'); $m->appendChild($date); $tdate = $this->doc->createTextNode(date("d.m.Y",$this->cat[$i]['member'][$ii]['wms_timestamp'])); $date->appendChild($tdate); //department $dm = $this->doc->createElement('department'); $m->appendChild($dm); $tdm = $this->doc->createTextNode($this->cat[$i]['member'][$ii]['mb_group_name']); $dm->appendChild($tdm); //permission // Leseberechtigung des Benutzers(true), sonst Email zur Beantragung(email) $per = $this->doc->createElement('permission'); $m->appendChild($per); $per_text = $this->getPermissionValue( $this->cat[$i]['member'][$ii]['wms_id'], $this->cat[$i]['member'][$ii]['layer_id']); $pe = $this->doc->createTextNode($per_text); $per->appendChild($pe); // termsofuse $ter = $this->doc->createElement('termsofuse'); $m->appendChild($ter); $myter_text = $this->getTermOfUse($this->cat[$i]['member'][$ii]['wms_id']); $myter = $this->doc->createTextNode($myter_text); $ter->appendChild($myter); // $this->logit("Ende member: ".$ii); // echo "ende member: ".$ii."
"; } } } } function writeXmlWFSPart(){ // $asstr = split(" ",$this->searchtext); $asstr = array(); if ($this->searchtext!="false"){ $asstr = split(" ",$this->searchtext); } for ($index = 0; $index < count($asstr); $index++) { $array_element = $asstr[$index]; $e = new mb_notice("Search-Text: ".$index.". ".$array_element.""); } $v = array(); $t = array(); $sql = "SELECT DISTINCT * from wfs_service_metadata where "; $whereBedArray = array(); $isTextSearch="false"; //textsearch for($i=0; $i0){$sql .= " AND ";} $sql .= "searchtext LIKE $".($i+1); $va = "%".trim(strtoupper($this->replaceChars($asstr[$i])))."%"; array_push($v,$va); array_push($t,"s"); } //date condition if ($this->timestamp_beg!="false" && $this->timestamp_end!="false"){ $time ="(wfs_timestamp BETWEEN ".$this->timestamp_beg." AND ".$this->timestamp_end.")"; array_push($whereBedArray, $time); } else if ($this->timestamp_beg!="false" && $this->timestamp_end=="false"){ $time ="(wfs_timestamp > ".$this->timestamp_beg.")"; array_push($whereBedArray, $time); } else if ($this->timestamp_beg=="false" && $this->timestamp_end!="false"){ $time ="(wfs_timestamp < ".$this->timestamp_end.")"; array_push($whereBedArray, $time); } //department condition if(count($this->departments)>0){ $txt = $this->getDepartmentBed("wfs_owner", "mb_user_department", $this->departments, "OR"); $dep = " (". $txt . ") "; array_push($whereBedArray, $dep); } //featuretype_searchable condition array_push($whereBedArray, "(featuretype_searchable = 1)"); // Creating the Where Clausel, based on a Array if(count($whereBedArray)>0){ $txt_whereBed=""; for ($index = 0; $index < sizeof($whereBedArray); $index++) { $array_element = $whereBedArray[$index]; if($isTextSearch=="true") { $txt_whereBed .=" AND ".$array_element; } else { if($index>0){ $txt_whereBed .=" AND ".$array_element; } else { $txt_whereBed .=" ".$array_element; } } // $txt_whereBed .=" AND ".$array_element; } $sql .= $txt_whereBed; } //order by $sql .= " ORDER BY featuretype_id "; // echo "WFS-SQL:
".$sql."
"; $this->logit("WFS_SQL: ".$sql); $e = new mb_notice("Search extended => SQL-Request of view service_metadata: ".$sql.""); $res = db_prep_query($sql, $v, $t); $c = $this->doc->createElement("category"); $results = $this->doc->getElementsByTagName("result"); foreach ($results as $result) { $result->appendChild($c); $c->setAttribute('name', "Geometriedienste"); $c->setAttribute('count', "0"); } $i = 0; while($row = db_fetch_array($res)){ $m = $this->doc->createElement('member'); $m->setAttribute('wfs_id', $row['wfs_id']); $m->setAttribute('layer_pos', ""); $c->appendChild($m); // member kategorie 1 (erstes member) //Abfragbarkeit $queryable = $this->doc->createElement('queryable'); $m->appendChild($queryable); if ($row['featuretype_searchable'] == "1"){ $lay_queryable = "true"; } else { $lay_queryable = "false"; } $search_text = $this->doc->createTextNode($lay_queryable); $queryable->appendChild($search_text); // Epsg $epsg = $this->doc->createElement('epsg'); $m->appendChild($epsg); $equalEPSG = $row['featuretype_srs']; $epsg_text = $this->doc->createTextNode($equalEPSG); $epsg->appendChild($epsg_text); // L�nderkennung $state = $this->doc->createElement('federalstate'); $m->appendChild($state); $spatialSource = ""; $stateorprovince = $row['administrativearea']; if ($stateorprovince == "NULL" || $stateorprovince == "") { $spatialSource = $row['country']; } else { $spatialSource = $row['administrativearea']; } $countr_code_text = $this->doc->createTextNode($spatialSource); $state->appendChild($countr_code_text); //type $type = $this->doc->createElement('type'); $m->appendChild($type); $ttype = $this->doc->createTextNode("wfs"); $type->appendChild($ttype); // // FeaturetypeName // $state = $this->doc->createElement('name'); // $m->appendChild($state); // // $name = ""; // $stateorprovince = $row['featuretype_name']; // if ($stateorprovince == "NULL" || $stateorprovince == "") { // //// $name = $row['']; // } else { // $name = $row['featuretype_name']; // } // // $countr_code_text = $this->doc->createTextNode($name); // $state->appendChild($countr_code_text); //id $id = $this->doc->createElement('featuretype_id'); $m->appendChild($id); $tid = $this->doc->createTextNode($row['featuretype_id']); $id->appendChild($tid); //wfs_conf_id $conf_id = $this->doc->createElement('wfs_conf_id'); $m->appendChild($conf_id); $c_id = $this->doc->createTextNode($row['wfs_conf_id']); $conf_id->appendChild($c_id); //title $title = $this->doc->createElement('title'); $m->appendChild($title); $ttitle = $this->doc->createTextNode($row['wfs_conf_abstract']); //title $title = $this->doc->createElement('title'); $m->appendChild($title); $ttitle = $this->doc->createTextNode($row['wfs_conf_abstract']); $title->appendChild($ttitle); //abstract $abst = $this->doc->createElement('abstract'); $m->appendChild($abst); $tabst = $this->doc->createTextNode($row['wfs_conf_description']); $abst->appendChild($tabst); // Geomtype $geo = $this->doc->createElement('geomtype'); $m->appendChild($geo); $geo_text = $this->getGeoType($row['wfs_id'], $row['featuretype_id']); $ge = $this->doc->createTextNode($geo_text); $geo->appendChild($ge); // accesscontraints $ac = $this->doc->createElement('accessconstraints'); $m->appendChild($ac); // $myac = $this->getAccessConstraints($this->cat[$i]['member'][$ii]['wms_id'], $this->cat[$i]['member'][$ii]['accessconstraints'], $this->cat[$i]['member'][$ii]['layer_id']); $myac = $this->doc->createTextNode($row['accessconstraints']); $ac->appendChild($myac); //data $date = $this->doc->createElement('date'); $m->appendChild($date); $tdate = $this->doc->createTextNode(date("d.m.Y",$row['wfs_timestamp'])); $date->appendChild($tdate); //department $dm = $this->doc->createElement('department'); $m->appendChild($dm); $tdm = $this->doc->createTextNode($row['mb_group_name']); $dm->appendChild($tdm); //permission Leseberechtigung des Benutzers(true), sonst Email zur Beantragung(email) $per = $this->doc->createElement('permission'); $m->appendChild($per); $per_text = $this->getPermissionValueForWFS($row['wfs_id'], $row['wfs_conf_id']); $pe = $this->doc->createTextNode($per_text); $per->appendChild($pe); // // termsofuse // $ter = $this->doc->createElement('termsofuse'); // $m->appendChild($ter); //// $myter = $this->getAccessConstraints($this->cat[$i]['member'][$ii]['wms_id'], $this->cat[$i]['member'][$ii]['accessconstraints'], $this->cat[$i]['member'][$ii]['layer_id']); // $myter_text = ""; // $myter = $this->doc->createTextNode($myter_text); // $ter->appendChild($myter); $i++; } $c->setAttribute('count', $i); $this->anz_wfs = $i; } function getLastMonitoringDate($wms_id){ $sql = "SELECT max(upload_id) as last_time, status FROM mb_monitor WHERE fkey_wms_id=$1 GROUP BY (status)"; $v = array($wms_id); $t = array('i'); $res = db_prep_query($sql, $v, $t); $c = 0; $status = ""; while($row = db_fetch_array($res)){ $status = $row['status']; $c++; } return $status; } /* * Returns the availability of a WMS/Layer during a period of time * in percent */ function getWMSavailability ($wms_id, $time_period){ $timestamp = time(); $datum = date("d.m.Y - H:i", $timestamp); $last_timestamp = $timestamp - $time_period; $last_date = date("d.m.Y - H:i", $last_timestamp); // Vorr�bergehend auskommentiert da keine aktuellen (auf Timestamp basierten) Daten vorliegen // $sql = "SELECT upload_id as time, status FROM mb_monitor WHERE fkey_wms_id=$1 AND upload_id > ".$last_timestamp; $sql = "SELECT upload_id as time, status FROM mb_monitor WHERE fkey_wms_id=$1"; $v = array($wms_id); $t = array('i'); $res = db_prep_query($sql, $v, $t); $c = 0; $positivStatus=0; while($row = db_fetch_array($res)){ if ($row['status'] == "1" || $row['status'] == "0"){ $positivStatus++; } $c++; } $percent=0; if ($c!=0){ $percent = ($positivStatus*100) / $c; } else { $percent = 0; } return number_format($percent,0, ",", ".") ; } function checkEPSG ($wms_id){ $sql = "SELECT wms.wms_id, wms_srs.wms_srs FROM wms, wms_srs where wms.wms_id=fkey_wms_id and wms.wms_id=$1"; $v = array($wms_id); $t = array('i'); $res = db_prep_query($sql, $v, $t); $c = 0; $isequal = "false"; while($row = db_fetch_array($res)){ $wms_epsg = $row['wms_srs.wms_srs']; $c++; } if ($wms_epsg==$this->epsg){ $isequal="true"; } return $isequal; } function isPermissioned() { } function getPermissionValue($wms_id, $lay_id){ $return_permission=""; // get permission if (in_array($lay_id, $this->mylayer)){ $return_permission = "true"; } else { $sql = "SELECT wms.wms_id, mb_user.mb_user_email as email FROM wms, mb_user where wms.wms_owner=mb_user.mb_user_id " . "and wms.wms_id=$1"; $v = array($wms_id); $t = array('i'); $res = db_prep_query($sql, $v, $t); // get email $mail=""; while($row = db_fetch_array($res)){ $mail = $row['email']; $return_permission = $mail; } } return $return_permission; } function getPermissionValueForWFS($wfs_id, $wfs_conf_id){ $return_permission=""; // get permission if (in_array($wfs_conf_id, $this->myWFSConfs)){ $return_permission = "true"; } else { $sql = "SELECT wfs.wfs_id, mb_user.mb_user_email as email FROM wfs, mb_user where wfs.wfs_owner=mb_user.mb_user_id " . "and wfs.wfs_id=$1"; $v = array($wfs_id); $t = array('i'); $res = db_prep_query($sql, $v, $t); // get email $mail=""; while($row = db_fetch_array($res)){ $mail = $row['email']; $return_permission = $mail; } } return $return_permission; } function getTermOfUse($wms_id){ $return_tou_id=""; $sql = "SELECT wms.wms_id, wms_termsofuse.fkey_wms_id, wms_termsofuse.fkey_termsofuse_id, termsofuse.termsofuse_id as tid " . "FROM wms, wms_termsofuse, termsofuse " . "where wms.wms_id=wms_termsofuse.fkey_wms_id " . "and wms_termsofuse.fkey_termsofuse_id=termsofuse.termsofuse_id " . "and wms.wms_id=$1"; $v = array($wms_id); $t = array('i'); $res = db_prep_query($sql, $v, $t); // get termsofuse_id $termsofuse_id=""; while($row = db_fetch_array($res)){ $termsofuse_id = $row['tid']; // $return_tou_id = "mapbender/php/mod_termsofuse_service.php?id=".$termsofuse_id; $return_tou_id = $termsofuse_id; } return $return_tou_id; } function generateNewReaArray($result){ global $con; // echo "func generateNewReaArray
"; // $this->search_bbox; // $this->search_epsg; $delColumns = array(); $columnsResult = array(); $db_epsg=""; $db_minx=""; $db_miny=""; $db_maxx=""; $db_maxy=""; $isIntersecting = ""; $anz = 0; while($row = db_fetch_array($result)){ $status=""; // echo $anz.". layer_id: ".$row['layer_id']; //EPSG Vergleich $sql_ac = "SELECT * FROM layer_epsg WHERE fkey_layer_id = $1"; $v = array($row["layer_id"]); $t = array('i'); $res_ac = db_prep_query($sql_ac, $v, $t); $tra_epsg=""; $tra_minx=""; $tra_miny=""; $tra_maxx=""; $tra_maxy=""; $i=0; while($row_ac = db_fetch_array($res_ac)){ if ($row_ac["epsg"]=="EPSG:4326"){ // maybe for transformation needed $db_epsg=$row_ac["epsg"]; $db_minx=$row_ac["minx"]; $db_miny=$row_ac["miny"]; $db_maxx=$row_ac["maxx"]; $db_maxy=$row_ac["maxy"]; } if ($row_ac["epsg"]==$this->search_epsg){ // if ($row_ac["epsg"]=="EPSG:31467"){ $db_epsg=$row_ac["epsg"]; $db_minx=$row_ac["minx"]; $db_miny=$row_ac["miny"]; $db_maxx=$row_ac["maxx"]; $db_maxy=$row_ac["maxy"]; $status="match"; break; } else { } $i++; } if ($status=="match"){ // echo "match
"; $temp = $this->search_bbox; $isIntersecting = $this->intersect($temp[0], $temp[1], $temp[2], $temp[3], $db_minx, $db_miny, $db_maxx, $db_maxy, $this->search_epsg); } else if ($status != "match" && $i>0){ // echo "Transformation
"; // Transformation $temp = $this->search_bbox; $sqlMinx = "SELECT X(transform(GeometryFromText('POINT(".$temp[0]." ".$temp[1].")',".str_replace("EPSG:","",$this->search_epsg)."), 4326)) as minx"; $resMinx = @pg_query($con,$sqlMinx); $s_minx = pg_result($resMinx,0,"minx"); $sqlMiny = "SELECT Y(transform(GeometryFromText('POINT(".$temp[0]." ".$temp[1].")',".str_replace("EPSG:","",$this->search_epsg)."), 4326)) as miny"; $resMiny = @pg_query($con,$sqlMiny); $s_miny = pg_result($resMiny,0,"miny"); $sqlMaxx = "SELECT X(transform(GeometryFromText('POINT(".$temp[2]." ".$temp[3].")',".str_replace("EPSG:","",$this->search_epsg)."), 4326)) as maxx"; $resMaxx = @pg_query($con,$sqlMaxx); $s_maxx = pg_result($resMaxx,0,"maxx"); $sqlMaxy = "SELECT Y(transform(GeometryFromText('POINT(".$temp[2]." ".$temp[3].")',".str_replace("EPSG:","",$this->search_epsg)."), 4326)) as maxy"; $resMaxy = @pg_query($con,$sqlMaxy); $s_maxy = pg_result($resMaxy,0,"maxy"); $isIntersecting = $this->intersect($s_minx, $s_miny, $s_maxx, $s_maxy, $db_minx, $db_miny, $db_maxx, $db_maxy, "EPSG:4326"); } else { // "no intersection possible()
"; $isIntersecting="f"; } if ($isIntersecting=="t"){ // Datensatz loeschen array_push($columnsResult, $row); } $anz++; } return $columnsResult; } function intersect($s_minx, $s_miny, $s_maxx, $s_maxy, $db_minx, $db_miny, $db_maxx, $db_maxy, $epsg){ global $con; $result=""; $sqlint = "SELECT intersects(envelope(geometryFROMtext('LINESTRING(".$s_minx." ".$s_miny.", ".$s_maxx." ".$s_maxy.")',".str_replace("EPSG:","",$epsg).")) " . ",envelope(geometryFROMtext('LINESTRING(".$db_minx." ".$db_miny.", ".$db_maxx." ".$db_maxy.")',".str_replace("EPSG:","",$epsg).")))"; $resInt = @pg_query($con,$sqlint); $result = pg_result($resInt,0,"intersects"); return $result; } /* * Checks whether the keyword exist in the table keywords * * @todo is UPPER() working with mysql * @param string the keyword * @return integer the ID of the keyword */ function exists($keyword){ global $con; $sql = "SELECT keyword_id FROM keyword WHERE UPPER(keyword) = UPPER($1)"; $v = array($keyword); $t = array('s'); $res = db_prep_query($sql,$v,$t); if($row = db_fetch_array($res)){ return $row['keyword_id']; } else{ return false; } } function getSQLBedfromArray($culumnName, $columnValues, $additionalChar){ $a = array(); $a = $columnValues; $a_char = $additionalChar; $colName=$culumnName; $resultSql=""; for ($index = 0; $index < sizeof($a); $index++) { $array_element = $a[$index]; if ($index<1){ $resultSql .= $colName."='".$a[$index]."'"; }else{ $resultSql .= " ".$a_char." " .$colName."='".$a[$index]."'"; } } return $resultSql; } function getDepartmentBed ($columnFkey, $culumnName, $columnValues, $additionalChar){ $a = array(); $a = $columnValues; $colName=$culumnName; $a_char = $additionalChar; $resultSql = $columnFkey." in (SELECT mb_user_id FROM mb_user WHERE "; for ($index = 0; $index < count($a); $index++) { $array_element = $a[$index]; if ($index<1){ $resultSql .= $colName."='".$a[$index]."'"; }else{ $resultSql .= " ".$a_char." " .$colName."='".$a[$index]."'"; } } $resultSql .=")"; return $resultSql; } function getGeoType($wfs_id, $featureType_id){ $return_geoType=""; $sql = "SELECT element_type FROM wfs_element, wfs_featuretype " . "where wfs_featuretype.featuretype_id=wfs_element.fkey_featuretype_id " . "and element_name='the_geom'" . "and wfs_featuretype.fkey_wfs_id = $1" . "and wfs_element.fkey_featuretype_id=$2"; $v = array($wfs_id, $featureType_id); $t = array('i', 'i'); $res = db_prep_query($sql, $v, $t); // get element_type while($row = db_fetch_array($res)){ $return_geoType = $row['element_type'];; } return $return_geoType; } } ?>