[Mapbender-commits] r9509 - trunk/mapbender/http/plugins

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Tue Jun 7 07:55:40 PDT 2016


Author: armin11
Date: 2016-06-07 07:55:39 -0700 (Tue, 07 Jun 2016)
New Revision: 9509

Removed:
   trunk/mapbender/http/plugins/mb_metadata_showMetadataAddonWfs.js
   trunk/mapbender/http/plugins/mb_metadata_wfs_server.php
Modified:
   trunk/mapbender/http/plugins/mb_metadata_edit.js
   trunk/mapbender/http/plugins/mb_metadata_edit.php
   trunk/mapbender/http/plugins/mb_metadata_featuretype.js
   trunk/mapbender/http/plugins/mb_metadata_featuretypeTree.js
   trunk/mapbender/http/plugins/mb_metadata_layer.js
   trunk/mapbender/http/plugins/mb_metadata_server.php
   trunk/mapbender/http/plugins/mb_metadata_showMetadataAddon.js
   trunk/mapbender/http/plugins/mb_metadata_submit.js
   trunk/mapbender/http/plugins/mb_metadata_wfs_edit.js
   trunk/mapbender/http/plugins/mb_metadata_wfs_edit.php
   trunk/mapbender/http/plugins/mb_metadata_wfs_select.js
   trunk/mapbender/http/plugins/mb_metadata_wfs_submit.js
Log:
Some bugfixes and codecleaning ;-)

Modified: trunk/mapbender/http/plugins/mb_metadata_edit.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_edit.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_edit.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -77,6 +77,7 @@
 				}
 				$metadataForm.easyform("reset");
 				$metadataForm.easyform("fill", obj);
+				$('#license_source').css("display","none");
 				//check if obj.wms_termsofuse not null
 				that.fillLicence(obj.wms_termsofuse);
 				that.valid();
@@ -119,6 +120,7 @@
 			},
 			callback: function (obj, result, message) {
 				if (!result) {
+					$('#license_source').css("display","none");
 					return;
 				}
 				if (obj.termsofuse_id) {
@@ -138,13 +140,13 @@
 					} else {
 						$('#license_source').css("display","none");
 					}
-					$('#licence_info').css('display', 'block');
+					$('#license_info').css('display', 'block');
 				} else {
 					$('#licence_symbol').attr('src', '');
 					$('#licence_descriptionlink').attr('href', '');
 					$('#licence_descriptionlink').text('');
 					$('#open_symbol').attr('src', '');
-					$('#licence_info').css('display', 'none');
+					$('#license_info').css('display', 'none');
 				}
 			}
 		});

Modified: trunk/mapbender/http/plugins/mb_metadata_edit.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_edit.php	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_edit.php	2016-06-07 14:55:39 UTC (rev 9509)
@@ -76,7 +76,7 @@
 		<img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("The amount of pixels is related to 1 dimension. It is asumed, that the image is square! If your server may serve a picture size of 2000x1000px please set this value to 1000. This value is needed to print bigger maps and allow INSPIRE download services of predefined datasets. If no value is given, the portal asumes a minimum of 1000px!");?>'}" src="../img/questionmark.png" alt="" />
 	</p>
 	<p>
-		<label for="inspire_annual_requests"><?php echo _mb("Monthly requests to service  (Registry)");?>:</label>
+		<label for="inspire_annual_requests"><?php echo _mb("Annually requests to service  (Registry)");?>:</label>
       		<input class="digits" name="inspire_annual_requests" id="inspire_annual_requests" type="text"/>
 		<img class="metadata_img" title="<?php echo _mb("INSPIRE Monitoring: Annually requests to View Service");?>" src="../img/misc/inspire_eu_klein.png" alt="" />
 		<img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Annually amount of requests to INSPIRE View Service. This value will be used to build the INSPIRE Monitoring information from mapbender registry!");?>'}" src="../img/questionmark.png" alt="" />

Modified: trunk/mapbender/http/plugins/mb_metadata_featuretype.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_featuretype.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_featuretype.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -77,10 +77,11 @@
 		
 		// get metadata from server
 		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_wfs_server.php",
-			method: "getFeaturetypeMetadata",
+			url: "../plugins/mb_metadata_server.php",
+			method: "getResourceMetadata",
 			parameters: {
-				"id": featuretypeId
+				"resourceId": featuretypeId,
+				"resourceType": "featuretype"
 			},
 			callback: function (obj, result, message) {
 				if (!result) {
@@ -107,34 +108,34 @@
 		for (i=0;i<obj.md_metadata.metadata_id.length;i++) {
 				if (obj.md_metadata.origin[i] == "capabilities") {
 					if (obj.md_metadata.internal[i] == 1) {
-						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/server_map-ilink.png' title='link to metadata from capabilities'/></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage("+obj.md_metadata.metadata_id[i]+","+featuretypeId+");return false;'/></td></tr>").appendTo($("#metadataTable"));
+						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/server_map-ilink.png' title='link to metadata from capabilities'/></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\");return false;'/></td></tr>").appendTo($("#metadataTable"));
 					} else {
 						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/osgeo_graphics/geosilk/server_map.png' title='capabilities'/></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td></td></tr>").appendTo($("#metadataTable"));
 					}
 				}
 				if (obj.md_metadata.origin[i] == "external") {
 					if (obj.md_metadata.internal[i] == 1) {
-						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/link-ilink.png' title='link to external linkage'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage("+obj.md_metadata.metadata_id[i]+","+featuretypeId+");return false;'/></td></tr>").appendTo($("#metadataTable"));
+						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/link-ilink.png' title='link to external linkage'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\");return false;'/></td></tr>").appendTo($("#metadataTable"));
 					} else {
-						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/osgeo_graphics/geosilk/link.png' title='linkage'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteAddedMetadata("+obj.md_metadata.metadata_id[i]+","+featuretypeId+");return false;'/></td></tr>").appendTo($("#metadataTable"));
+						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/osgeo_graphics/geosilk/link.png' title='linkage'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteAddedMetadata("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\");return false;'/></td></tr>").appendTo($("#metadataTable"));
 					}
 				}
 				if (obj.md_metadata.origin[i] == "upload") {
 					if (obj.md_metadata.internal[i] == 1) {
-						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/up-ilink.png' title='link to external uploaded data'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage("+obj.md_metadata.metadata_id[i]+","+featuretypeId+");return false;'/></td></tr>").appendTo($("#metadataTable"));
+						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/up-ilink.png' title='link to external uploaded data'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\");return false;'/></td></tr>").appendTo($("#metadataTable"));
 					} else {
-						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/button_blue_red/up.png' title='uploaded data'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteAddedMetadata("+obj.md_metadata.metadata_id[i]+","+featuretypeId+");return false;'/></td></tr>").appendTo($("#metadataTable"));
+						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/button_blue_red/up.png' title='uploaded data'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteAddedMetadata("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\");return false;'/></td></tr>").appendTo($("#metadataTable"));
 					}
 				}
 				if (obj.md_metadata.origin[i] == "metador") {
 					if (obj.md_metadata.internal[i] == 1) {
-						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/edit-select-all-ilink.png' title='link to external edited metadata'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage("+obj.md_metadata.metadata_id[i]+","+featuretypeId+");return false;'/></td></tr>").appendTo($("#metadataTable"));
+						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/edit-select-all-ilink.png' title='link to external edited metadata'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\");return false;'/></td></tr>").appendTo($("#metadataTable"));
 					} else {
-						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/gnome/edit-select-all.png' title='metadata'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteAddedMetadata("+obj.md_metadata.metadata_id[i]+","+featuretypeId+");return false;'/></td></tr>").appendTo($("#metadataTable"));
+						$("<tr class='metadataEntry'><td>"+obj.md_metadata.metadata_id[i]+"</td><td><img src='../img/gnome/edit-select-all.png' title='metadata'/><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"' target='_blank'>"+obj.md_metadata.uuid[i]+"</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id="+obj.md_metadata.uuid[i]+"&validate=true' target='_blank'>validate</a></td><td><img  class='' title='edit' src='../img/pencil.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\",false);return false;'/></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteAddedMetadata("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\");return false;'/></td></tr>").appendTo($("#metadataTable"));
 					}
 				}
 		}
-		$("<img class='metadataEntry' title='new' src='../img/add.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",true);return false;'/>").appendTo($("#metadataTable"));
+		$("<img class='metadataEntry' title='new' src='../img/add.png' onclick='initMetadataAddon("+obj.md_metadata.metadata_id[i]+","+featuretypeId+",\"featuretype\",true);return false;'/>").appendTo($("#metadataTable"));
 		
 	}
 	

Modified: trunk/mapbender/http/plugins/mb_metadata_featuretypeTree.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_featuretypeTree.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_featuretypeTree.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -240,7 +240,7 @@
 	this.init = function (obj) {
 		// get featuretypes from server
 		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_wfs_server.php",
+			url: "../plugins/mb_metadata_server.php",
 			method: "getFeaturetypeByWfs",
 			parameters: {
 				"id": obj

Modified: trunk/mapbender/http/plugins/mb_metadata_layer.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_layer.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_layer.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -114,7 +114,7 @@
         for (i = 0; i < obj.md_metadata.metadata_id.length; i++) {
             if (obj.md_metadata.origin[i] == "capabilities") {
                 if (obj.md_metadata.internal[i] == 1) {
-                    $("<tr class='metadataEntry'><td>" + obj.md_metadata.metadata_id[i] + "</td><td><img src='../img/server_map-ilink.png' title='link to metadata from capabilities'/></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id=" + obj.md_metadata.uuid[i] + "' target='_blank'>" + obj.md_metadata.uuid[i] + "</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id=" + obj.md_metadata.uuid[i] + "&validate=true' target='_blank'>validate</a></td><td></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage(" + obj.md_metadata.metadata_id[i] + "," + layerId + ");return false;'/></td></tr>").appendTo($("#metadataTable"));
+                    $("<tr class='metadataEntry'><td>" + obj.md_metadata.metadata_id[i] + "</td><td><img src='../img/server_map-ilink.png' title='link to metadata from capabilities'/></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id=" + obj.md_metadata.uuid[i] + "' target='_blank'>" + obj.md_metadata.uuid[i] + "</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id=" + obj.md_metadata.uuid[i] + "&validate=true' target='_blank'>validate</a></td><td></td><td><img class='' title='delete' src='../img/cross.png' onclick='deleteInternalMetadataLinkage(" + obj.md_metadata.metadata_id[i] + "," + layerId + ",\"layer\");return false;'/></td></tr>").appendTo($("#metadataTable"));
                 } else {
                     $("<tr class='metadataEntry'><td>" + obj.md_metadata.metadata_id[i] + "</td><td><img src='../img/osgeo_graphics/geosilk/server_map.png' title='capabilities'/></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id=" + obj.md_metadata.uuid[i] + "' target='_blank'>" + obj.md_metadata.uuid[i] + "</a></td><td><a href='../php/mod_dataISOMetadata.php?outputFormat=iso19139&id=" + obj.md_metadata.uuid[i] + "&validate=true' target='_blank'>validate</a></td><td></td></tr>").appendTo($("#metadataTable"));
                 }

Modified: trunk/mapbender/http/plugins/mb_metadata_server.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_server.php	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_server.php	2016-06-07 14:55:39 UTC (rev 9509)
@@ -3,6 +3,8 @@
 require_once dirname(__FILE__) . "/../classes/class_user.php";
 require_once dirname(__FILE__) . "/../classes/class_wms.php";//already includes iso19139!
 require_once dirname(__FILE__) . "/../classes/class_Uuid.php";
+require_once dirname(__FILE__) . "/../classes/class_wfs.php";
+require_once(dirname(__FILE__)."/../classes/class_universal_wfs_factory.php");
 require_once dirname(__FILE__) . "/../../tools/wms_extent/extent_service.conf";
 
 $ajaxResponse = new AjaxResponse($_POST);
@@ -36,6 +38,16 @@
 	return $wmsIdArray;
 }
 
+function getWfs ($wfsId = null) {
+	$user = new User(Mapbender::session()->get("mb_user_id"));
+	$wfsIdArray = $user->getOwnedWfs();
+
+	if (!is_null($wfsId) && !in_array($wfsId, $wfsIdArray)) {
+		abort(_mb("You are not allowed to access this WFS."));
+	}
+	return $wfsIdArray;
+}
+
 function getLayer ($layerId = null) {
 	$user = new User(Mapbender::session()->get("mb_user_id"));
 	$wmsIdArray = $user->getOwnedWms();
@@ -49,6 +61,20 @@
 	return;
 }
 
+function getFeaturetype ($featuretypeId = null) {
+	$user = new User(Mapbender::session()->get("mb_user_id"));
+	$wfsIdArray = $user->getOwnedWfs();
+	if (!is_array($wfsIdArray) || count($wfsIdArray) === 0) {
+		abort(_mb("No metadata sets available."));
+	}
+	$wfsId = wfs::getWfsIdByFeaturetypeId($featuretypeId);
+	if (is_null($wfsId) || !in_array($wfsId, $wfsIdArray)) {
+		abort(_mb("You are not allowed to access this WFS " . $wfsId));
+	}
+	return;
+}
+
+//NOTE: independend
 function extractPolygonArray($domXpath, $path) {
 	$polygonalExtentExterior = array();
 	if ($domXpath->query($path.'/gml:Polygon/gml:exterior/gml:LinearRing/gml:posList')) {
@@ -81,7 +107,7 @@
 	}
 	return $polygonalExtentExterior;
 }
-
+//NOTE: independend
 function gml2wkt($gml) {
 	//function to create wkt from given gml multipolygon
 	//DOM
@@ -132,19 +158,16 @@
 		return $wkt;
 	}
 }
-
+//routines to do the ajax server side things
 switch ($ajaxResponse->getMethod()) {
 	case "getWms" :
 		$wmsIdArray = getWms();
-
 		$wmsList = implode(",", $wmsIdArray);
 		$sql = <<<SQL
-
 SELECT wms.wms_id, wms.wms_title, to_timestamp(wms.wms_timestamp),to_timestamp(wms.wms_timestamp_create), wms_version, m.status_comment, wms_id
 FROM wms LEFT JOIN mb_wms_availability AS m
 ON wms.wms_id = m.fkey_wms_id
 WHERE wms_id IN ($wmsList);
-
 SQL;
 		$res = db_query($sql);
 		$resultObj = array(
@@ -159,7 +182,6 @@
 			),
 			"data" => array()
 		);
-
 		while ($row = db_fetch_row($res)) {
 			// convert NULL to '', NULL values cause datatables to crash
 			$walk = array_walk($row, create_function('&$s', '$s=strval($s);'));
@@ -168,7 +190,31 @@
 		$ajaxResponse->setResult($resultObj);
 		$ajaxResponse->setSuccess(true);
 		break;
-
+	case "getWfs" :
+		$wfsIdArray = getWfs();
+		$wfsList = implode(",", $wfsIdArray);
+		$sql = <<<SQL
+SELECT wfs.wfs_id, wfs.wfs_title, wfs.wfs_timestamp, wfs_version
+FROM wfs WHERE wfs_id IN ($wfsList);
+SQL;
+		$res = db_query($sql);
+		$resultObj = array(
+			"header" => array(
+				"WFS ID",
+				"Titel",
+				"Timestamp",
+				"Version"
+			), 
+			"data" => array()
+		);
+		while ($row = db_fetch_row($res)) {
+			// convert NULL to '', NULL values cause datatables to crash
+			$walk = array_walk($row, create_function('&$s', '$s=strval($s);'));
+			$resultObj["data"][]= $row;
+		}
+		$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);
+		break;
 	case "getWmsMetadata" :
 		$wmsId = $ajaxResponse->getParameter("id");
 		getWms($wmsId);
@@ -216,7 +262,6 @@
 				//$e = new mb_exception("mb_metadata_server: resultObject[".$field."]=".$wms->$field);
 			}
 		}
-
 		// layer searchable
 		$resultObj["layer_searchable"] = array();
 		foreach ($wms->objLayer as $layer) {
@@ -226,15 +271,12 @@
 		}
 
 		$keywordSql = <<<SQL
-
 SELECT DISTINCT keyword FROM keyword, layer_keyword
 WHERE keyword_id = fkey_keyword_id AND fkey_layer_id IN (
 	SELECT layer_id from layer, wms
 	WHERE fkey_wms_id = wms_id AND wms_id = $wmsId
 ) ORDER BY keyword
-
 SQL;
-
 		$keywordRes = db_query($keywordSql);
 		$keywords = array();
 		while ($keywordRow = db_fetch_assoc($keywordRes)) {
@@ -246,7 +288,6 @@
 		$termsofuseSql = <<<SQL
 SELECT fkey_termsofuse_id FROM wms_termsofuse WHERE fkey_wms_id = $wmsId
 SQL;
-
 		$termsofuseRes = db_query($termsofuseSql);
 		if ($termsofuseRes) {
 			$termsofuseRow = db_fetch_assoc($termsofuseRes);
@@ -268,9 +309,7 @@
 			$userId = $user->id;
 			//$e = new mb_exception("user id:".$userId);
 			$sql = <<<SQL
-
 SELECT fkey_mb_group_id, mb_group_name, mb_group_title, mb_group_address, mb_group_email, mb_group_postcode, mb_group_city, mb_group_logo_path, mb_group_voicetelephone FROM (SELECT fkey_mb_group_id FROM mb_user_mb_group WHERE fkey_mb_user_id = $1 AND mb_user_mb_group_type = 2) AS a LEFT JOIN mb_group ON a.fkey_mb_group_id = mb_group.mb_group_id
-
 SQL;
 			$v = array($userId);
 			$t = array('i');
@@ -290,9 +329,7 @@
 		} else {
 			//get current fkey_mb_group_id and the corresponding data
 			$sql = <<<SQL
-
 SELECT mb_group_name, mb_group_title, mb_group_address, mb_group_email, mb_group_postcode, mb_group_city, mb_group_logo_path, mb_group_voicetelephone FROM mb_group WHERE mb_group_id = $1
-
 SQL;
 			$v = array($resultObj["fkey_mb_group_id"]);
 			$t = array('i');
@@ -314,9 +351,125 @@
 		}
 		$ajaxResponse->setResult($resultObj);
 		$ajaxResponse->setSuccess(true);
-
 	break;
-//*****************************
+	//TODO make function get service metadata - easier!!!
+	case "getWfsMetadata" :
+		$wfsId = $ajaxResponse->getParameter("id");
+		getWfs($wfsId);
+		$sql = <<<SQL
+SELECT wfs_id, wfs_abstract, wfs_title, fees, accessconstraints, 
+individualname, positionname, providername, voice, 
+facsimile, deliverypoint, city, 
+administrativearea, postalcode, country, electronicmailaddress,
+wfs_timestamp, wfs_timestamp_create, wfs_network_access, fkey_mb_group_id, wfs_max_features, inspire_annual_requests, wfs_license_source_note  
+FROM wfs WHERE wfs_id = $wfsId;
+SQL;
+		$res = db_query($sql);
+		$resultObj = array();
+		$row = db_fetch_assoc($res);
+		$resultObj['wfs_id'] = $row['wfs_id'];
+		$resultObj['summary'] = $row['wfs_abstract'];
+		$resultObj['title'] = $row['wfs_title'];
+		$resultObj['fees'] = $row['fees'];
+		$resultObj['accessconstraints'] = $row['accessconstraints'];
+		$resultObj['individualName'] = $row['individualname'];
+		$resultObj['positionName'] = $row['positionname'];
+		$resultObj['providerName'] = $row['providername'];
+		$resultObj['voice'] = $row['voice'];
+		$resultObj['facsimile'] = $row['facsimile'];
+		$resultObj['deliveryPoint'] = $row['deliverypoint'];
+		$resultObj['city'] = $row['city'];
+		$resultObj['administrativeArea'] = $row['administrativearea'];
+		$resultObj['postalCode'] = $row['postalcode'];
+		$resultObj['country'] = $row['country'];
+		$resultObj['electronicMailAddress'] = $row['electronicmailaddress'];
+		$resultObj['timestamp'] = $row['wfs_timestamp'] != "" ? date('d.m.Y', $row['wfs_timestamp']) : "";
+		$resultObj['timestamp_create'] = $row['wfs_timestamp_create'] != "" ? date('d.m.Y', $row['wfs_timestamp_create']) : "";
+		$resultObj['wfs_network_access'] = $row['wfs_network_access'];
+		$resultObj['wfs_max_features'] = $row['wfs_max_features'];
+		$resultObj['fkey_mb_group_id'] = $row['fkey_mb_group_id'];
+		$resultObj['inspire_annual_requests'] = $row['inspire_annual_requests'];
+		$resultObj['wfs_license_source_note'] = $row['wfs_license_source_note'];
+		$keywordSql = <<<SQL
+SELECT DISTINCT keyword FROM keyword, wfs_featuretype_keyword 
+WHERE keyword_id = fkey_keyword_id AND fkey_featuretype_id IN (
+	SELECT featuretype_id from wfs_featuretype, wfs 
+	WHERE fkey_wfs_id = wfs_id AND wfs_id = $wfsId
+) ORDER BY keyword
+SQL;
+		$keywordRes = db_query($keywordSql);
+		$keywords = array();
+		while ($keywordRow = db_fetch_assoc($keywordRes)) {
+			$keywords[]= $keywordRow["keyword"];
+		}
+		$resultObj["wfs_keywords"] = implode(", ", $keywords);
+		$termsofuseSql = <<<SQL
+SELECT fkey_termsofuse_id FROM wfs_termsofuse WHERE fkey_wfs_id = $wfsId
+SQL;
+		$termsofuseRes = db_query($termsofuseSql);
+		if ($termsofuseRes) {
+			$termsofuseRow = db_fetch_assoc($termsofuseRes);
+			$resultObj["wfs_termsofuse"] = $termsofuseRow["fkey_termsofuse_id"];
+		}
+		else {
+			$resultObj["wfs_termsofuse"] = null;
+		}
+		$resultObj['wfs_network_access'] = $resultObj['wfs_network_access'] == 1 ? true : false;
+		if (is_null($resultObj['inspire_annual_requests']) || $resultObj['inspire_annual_requests'] == "") {
+			$resultObj['inspire_annual_requests'] = "0";
+		}
+		//get contact information from group relation
+		//check if fkey_mb_group_id has been defined before - in service table
+		if ($resultObj["fkey_mb_group_id"] == "" || !isset($resultObj["fkey_mb_group_id"])){
+			$e = new mb_notice("fkey_mb_group_id is null or empty");
+			//check if primary group is set 
+			$user = new User;
+			$userId = $user->id;
+			$sql = <<<SQL
+SELECT fkey_mb_group_id, mb_group_name, mb_group_title, mb_group_address, mb_group_email, mb_group_postcode, mb_group_city, mb_group_logo_path, mb_group_voicetelephone FROM (SELECT fkey_mb_group_id FROM mb_user_mb_group WHERE fkey_mb_user_id = $1 AND mb_user_mb_group_type = 2) AS a LEFT JOIN mb_group ON a.fkey_mb_group_id = mb_group.mb_group_id
+SQL;
+			$v = array($userId);
+			$t = array('i');
+			$res = db_prep_query($sql,$v,$t);
+			$row = array();
+			if ($res) {
+				$row = db_fetch_assoc($res);
+				$resultObj["fkey_mb_group_id"] = $row["fkey_mb_group_id"];
+				$resultObj["mb_group_title"] = $row["mb_group_title"];
+				$resultObj["mb_group_address"] = $row["mb_group_address"];
+				$resultObj["mb_group_email"] = $row["mb_group_email"];
+				$resultObj["mb_group_postcode"] = $row["mb_group_postcode"];
+				$resultObj["mb_group_city"] = $row["mb_group_city"];
+				$resultObj["mb_group_logo_path"] = $row["mb_group_logo_path"];
+				$resultObj["mb_group_voicetelephone"] = $row["mb_group_voicetelephone"];
+			}
+		} else {
+			//get current fkey_mb_group_id and the corresponding data
+			$sql = <<<SQL
+SELECT mb_group_name, mb_group_title, mb_group_address, mb_group_email, mb_group_postcode, mb_group_city, mb_group_logo_path, mb_group_voicetelephone FROM mb_group WHERE mb_group_id = $1
+SQL;
+			$v = array($resultObj["fkey_mb_group_id"]);
+			$t = array('i');
+			$res = db_prep_query($sql,$v,$t);
+			$row = array();
+			if ($res) {
+				$row = db_fetch_assoc($res);
+				$resultObj["mb_group_title"] = $row["mb_group_title"];
+				$resultObj["mb_group_address"] = $row["mb_group_address"];
+				$resultObj["mb_group_email"] = $row["mb_group_email"];
+				$resultObj["mb_group_postcode"] = $row["mb_group_postcode"];
+				$resultObj["mb_group_city"] = $row["mb_group_city"];
+				$resultObj["mb_group_logo_path"] = $row["mb_group_logo_path"];
+				$resultObj["mb_group_voicetelephone"] = $row["mb_group_voicetelephone"];
+			}
+			else {
+				$resultObj["fkey_mb_group_id"] = null;
+			}
+		}
+		$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);
+		break;
+	//NOTE: independend
 	case "getResourceMetadata" :
 		$resourceId = $ajaxResponse->getParameter("resourceId");
 		$resourceType = $ajaxResponse->getParameter("resourceType");
@@ -325,14 +478,18 @@
 				getLayer($resourceId);
 				//new - only layers with latlonbboxes are supported!
 				$sql = <<<SQL
-
 SELECT layer_id, layer_name, layer_title, layer_abstract, layer_searchable, inspire_download, fkey_wms_id as wms_id
 FROM layer WHERE layer_id = $resourceId;
-
 SQL;
 				$tablename = "layer";
 			break;
 			case "featuretype":
+				$featuretypeId = $ajaxResponse->getParameter("resourceId");
+				getFeaturetype($featuretypeId);
+				$sql = <<<SQL
+SELECT featuretype_id, featuretype_name, featuretype_title, featuretype_abstract, featuretype_searchable, inspire_download 
+FROM wfs_featuretype WHERE featuretype_id = $featuretypeId;
+SQL;
 				$tablename = "wfs_featuretype";
 			break;
 		}
@@ -409,7 +566,6 @@
 		$ajaxResponse->setResult($resultObj);
 		$ajaxResponse->setSuccess(true);
 	break;
-//*****************************
 	case "getLayerByWms" :
 		$wmsId = $ajaxResponse->getParameter("id");
 		$sql = <<<SQL
@@ -492,187 +648,403 @@
 		$ajaxResponse->setResult($resultObj);
 		$ajaxResponse->setSuccess(true);
 		break;
-	case "save":
-		$data = $ajaxResponse->getParameter("data");
-		try {
-			$wmsId = intval($data->wms->wms_id);
+	case "getFeaturetypeByWfs" :
+		$wfsId = $ajaxResponse->getParameter("id");
+		$sql = <<<SQL
+SELECT featuretype_id, featuretype_name, f_count_featuretype_couplings(featuretype_id) as count_coupling, f_collect_inspire_cat_wfs_featuretype(featuretype_id) AS inspire_cats, featuretype_abstract, featuretype_searchable, inspire_download  
+FROM wfs_featuretype WHERE fkey_wfs_id = $wfsId ORDER BY featuretype_id;
+SQL;
+		$res = db_query($sql);
+		$rows = array();
+		while ($row = db_fetch_assoc($res)) {
+			$rows[] = $row;
 		}
-		catch (Exception $e) {
-			$ajaxResponse->setSuccess(false);
-			$ajaxResponse->setMessage(_mb("Invalid WMS ID."));
-			$ajaxResponse->send();
+		$left = 1;
+		function createNode ($left, $right, $row) {
+			return array(
+				"left" => $left,
+				"right" => $right,
+				#"parent" => $row["featuretype_parent"] !== "" ? intval($row["featuretype_parent"]) : null,
+				#"pos" => intval($row["featuretype_pos"]),
+				"attr" => array (
+					"featuretype_id" => intval($row["featuretype_id"]),
+					"featuretype_name" => $row["featuretype_name"],
+					"featuretype_title" => $row["featuretype_title"],
+					"featuretype_abstract" => $row["featuretype_abstract"],
+					"featuretype_searchable" => intval($row["featuretype_searchable"]),
+					"inspire_download" => intval($row["inspire_download"]),
+					"featuretype_coupling" => intval($row["count_coupling"]),
+					"inspire_cats" => intval($inspireCats)
+				)
+			);
 		}
-		getWms($wmsId);
-		$wms = new wms();
-		$wms->createObjFromDBNoGui($wmsId,false);//here the original urls will be used - cause the object will used to update the wms table
-		$columns = array(
-			"wms_abstract",
-			"wms_title",
-			"fees",
-			"accessconstraints",
-			"contactperson",
-			"contactposition",
-			"contactvoicetelephone",
-			"contactfacsimiletelephone",
-			"contactorganization",
-			"address",
-			"city",
-			"stateorprovince",
-			"postcode",
-			"country",
-			"contactelectronicmailaddress",
-			"wms_termsofuse",
-			"wms_network_access",
-			"wms_max_imagesize",
-			"fkey_mb_group_id",
-			"inspire_annual_requests",
-			"wms_license_source_note"
-		);
-		foreach ($columns as $c) {
-			if ($c == 'wms_termsofuse' && $data->wms->$c == "0") {
-				$value = null;
-			} else {
-				if ($c == 'inspire_annual_requests' && $data->wms->$c == "") {
-					$value = "0";
-				} else {
-					$value = $data->wms->$c;
+
+		function addSubTree ($rows, $i, $left) {
+			$nodeArray = array();
+			$addNewNode = true;
+			for ($j = $i; $j < count($rows); $j++) {
+				$row = $rows[$j];
+				$pos = $j;
+				
+				// first node of subtree
+				if ($addNewNode) {
+					$nodeArray[]= createNode($left, null, $row);
+					$addNewNode = false;
 				}
+				else {
+					$nodeArray[count($nodeArray)-1]["right"] = ++$left;
+					$nodeArray[]= createNode(++$left, null, $row);
+				}
 			}
-			if (!is_null($value)) {
-				$wms->$c = $value;
+			if (is_null($nodeArray[count($nodeArray)-1]["right"])) {
+				$nodeArray[count($nodeArray)-1]["right"] = ++$left;
 			}
+			return $nodeArray;
 		}
-		if (is_array($data->wms->layer_searchable)) {
-			foreach ($wms->objLayer as &$layer) {
-				$layer->layer_searchable = 0;//why
-				$e = new mb_notice("mb_metadata_server.php: Check layer with id ".$layer->layer_uid." to be searchable");
-				for ($i = 0; $i < count($data->wms->layer_searchable); $i++) {
-					//$e = new mb_exception("mb_metadata_server.php: Layer with id ".$id." found to be searchable");
-					$id = $data->wms->layer_searchable[$i];
-					$e = new mb_notice("mb_metadata_server.php: Layer with id ".$id." found to be searchable");
-					if ($id == intval($layer->layer_uid)) {
-						$e = new mb_notice("mb_metadata_server.php: Layer identical - update it in wms object");
-						$layer->layer_searchable = 1;
+		$nodeArray = addSubTree($rows, 0, 1);
+		$resultObj = array(
+			"nestedSets" => $nodeArray
+		);
+		$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);	
+		break;
+	case "save":
+		$data = $ajaxResponse->getParameter("data");
+		$serviceType = $ajaxResponse->getParameter("serviceType");
+		switch ($serviceType) {
+			case "wms":
+				try {
+					$wmsId = intval($data->wms->wms_id);
+				}
+				catch (Exception $e) {
+					$ajaxResponse->setSuccess(false);
+					$ajaxResponse->setMessage(_mb("Invalid WMS ID."));
+					$ajaxResponse->send();
+				}
+				getWms($wmsId);
+				$wms = new wms();
+				$wms->createObjFromDBNoGui($wmsId,false);//here the original urls will be used - cause the object will used to update the wms table
+				$columns = array(
+					"wms_abstract",
+					"wms_title",
+					"fees",
+					"accessconstraints",
+					"contactperson",
+					"contactposition",
+					"contactvoicetelephone",
+					"contactfacsimiletelephone",
+					"contactorganization",
+					"address",
+					"city",
+					"stateorprovince",
+					"postcode",
+					"country",
+					"contactelectronicmailaddress",
+					"wms_termsofuse",
+					"wms_network_access",
+					"wms_max_imagesize",
+					"fkey_mb_group_id",
+					"inspire_annual_requests",
+					"wms_license_source_note"
+				);
+				foreach ($columns as $c) {
+					if ($c == 'wms_termsofuse' && $data->wms->$c == "0") {
+						$value = null;
 					} else {
-						continue; //with next
+						if ($c == 'inspire_annual_requests' && $data->wms->$c == "") {
+							$value = "0";
+						} else {
+							$value = $data->wms->$c;
+						}
 					}
-					unset($id);
-					//$layer->layer_searchable = 1;
-					//break;
+					if (!is_null($value)) {
+						$wms->$c = $value;
+					}
 				}
-			}
-		}
-		try {
-			$layerId = intval($data->layer->layer_id);
-		}
-		catch (Exception $e) {
-		  	$ajaxResponse->setSuccess(false);
-			$ajaxResponse->setMessage(_mb("Could not read layer ID ".$data->layer->layer_id));
-			$ajaxResponse->send();
-		}
-		if ($layerId) {
-			$e = new mb_notice("Got following layer id from wms metadata editor client: ".$layerId);
-			try {
-				$layer = &$wms->getLayerReferenceById($layerId);
-			}
-			catch (Exception $e) {
-				$ajaxResponse->setSuccess(false);
-				$ajaxResponse->setMessage(_mb("Could not get layer with ID ".$layerId." from wms object by reference!"));
-				$ajaxResponse->send();
-			}
-			$columns = array(
-				"layer_abstract",
-				"layer_title",
-				"layer_keyword",
-				"inspire_download",
-				"layer_md_topic_category_id",
-				"layer_inspire_category_id",
-				"layer_custom_category_id"
-			);
-			//extract relevant information from json and fill them into the wms object // both are filled together!!
-			foreach ($columns as $c) {
-				$value = $data->layer->$c;
-				$e = new mb_notice("plugins/mb_metadata_server.php: layer entry for ".$c.": ".$data->layer->$c);
-				if ($c === "layer_keyword") {
-					$layer->$c = explode(",", $value);
-					foreach ($layer->$c as &$val) {
-						$val = trim($val);
+				if (is_array($data->wms->layer_searchable)) {
+					foreach ($wms->objLayer as &$layer) {
+						$layer->layer_searchable = 0;//why
+						$e = new mb_notice("mb_metadata_server.php: Check layer with id ".$layer->layer_uid." to be searchable");
+						for ($i = 0; $i < count($data->wms->layer_searchable); $i++) {
+							//$e = new mb_exception("mb_metadata_server.php: Layer with id ".$id." found to be searchable");
+							$id = $data->wms->layer_searchable[$i];
+							$e = new mb_notice("mb_metadata_server.php: Layer with id ".$id." found to be searchable");
+							if ($id == intval($layer->layer_uid)) {
+								$e = new mb_notice("mb_metadata_server.php: Layer identical - update it in wms object");
+								$layer->layer_searchable = 1;
+							} else {
+								continue; //with next
+							}
+							unset($id);
+							//$layer->layer_searchable = 1;
+							//break;
+						}
 					}
 				}
-				elseif ($c === "layer_md_topic_category_id"
-					|| $c === "layer_inspire_category_id"
-					|| $c === "layer_custom_category_id"
-				) {
-					if (!is_array($value)) {
-						$layer->$c = array($value);
+				try {
+					$layerId = intval($data->layer->layer_id);
+				}
+				catch (Exception $e) {
+		  			$ajaxResponse->setSuccess(false);
+					$ajaxResponse->setMessage(_mb("Could not read layer ID ".$data->layer->layer_id));
+					$ajaxResponse->send();
+				}
+				if ($layerId) {
+					$e = new mb_notice("Got following layer id from wms metadata editor client: ".$layerId);
+					try {
+						$layer = &$wms->getLayerReferenceById($layerId);
 					}
-					else {
-						$layer->$c = $value;
+					catch (Exception $e) {
+						$ajaxResponse->setSuccess(false);
+						$ajaxResponse->setMessage(_mb("Could not get layer with ID ".$layerId." from wms object by reference!"));
+						$ajaxResponse->send();
 					}
+					$columns = array(
+						"layer_abstract",
+						"layer_title",
+						"layer_keyword",
+						"inspire_download",
+						"layer_md_topic_category_id",
+						"layer_inspire_category_id",
+						"layer_custom_category_id"
+					);
+					//extract relevant information from json and fill them into the wms object // both are filled together!!
+					foreach ($columns as $c) {
+						$value = $data->layer->$c;
+						$e = new mb_notice("plugins/mb_metadata_server.php: layer entry for ".$c.": ".$data->layer->$c);
+						if ($c === "layer_keyword") {
+							$layer->$c = explode(",", $value);
+							foreach ($layer->$c as &$val) {
+								$val = trim($val);
+							}
+						}
+						elseif ($c === "layer_md_topic_category_id"
+							|| $c === "layer_inspire_category_id"
+							|| $c === "layer_custom_category_id"
+						) {
+							if (!is_array($value)) {
+								$layer->$c = array($value);
+							}
+							else {
+								$layer->$c = $value;
+							}
+						}
+						elseif ($c === "inspire_download") {
+							if ($value == "on") {
+								$layer->$c = intval('1');
+							} else {
+								$layer->$c = intval('0');
+							}
+						}
+						else {
+							if (!is_null($value)) {
+								$layer->$c = $value;
+							}
+						}
+					}
 				}
-				elseif ($c === "inspire_download") {
-					if ($value == "on") {
-						$layer->$c = intval('1');
+				if ($wms->wms_network_access == "on") {
+					$wms->wms_network_access = intval('1');
+				} else {
+					$wms->wms_network_access = intval('0');
+				}
+
+				if (defined("TWITTER_NEWS") && TWITTER_NEWS == true && $ajaxResponse->getParameter("twitterNews") == true) {
+    	    				$wms->twitterNews = true;
+					$twitterIsConfigured = true;
+					//$e = new mb_exception("twitter configured");
+    				} else {
+					$wms->twitterNews = false;
+					$twitterIsConfigured = false;
+					//$e = new mb_exception("twitter not configured");
+				}
+    				if(defined("GEO_RSS_FILE") && GEO_RSS_FILE != "" && $ajaxResponse->getParameter("setGeoRss") == true) {
+        				$wms->setGeoRss = true;
+					$rssIsConfigured = true;
+					//$e = new mb_exception("rss configured");
+    				} else {
+					$rssIsConfigured = false;
+					$wms->setGeoRss = false;
+					//$e = new mb_exception("rss not configured");
+				}
+
+				$messResult = "Updated WMS metadata for ID " . $wmsId.". ";
+				//Add helpful hint if publishing is demanded, but not configured in mapbender.conf - do this before update object - cause otherwise it will not give back the right attributes
+				if (!$wms->twitterNews && ($ajaxResponse->getParameter("twitterNews") == true)) {
+					$messResult .= " Publishing via twitter was requested, but this is not configured. Please check your mapbender.conf! ";
+				}
+				if (!$wms->setGeoRss && ($ajaxResponse->getParameter("setGeoRss") == true)) {
+					$messResult .= " Publishing via rss was requested, but this is not configured. Please check your mapbender.conf! ";
+				}
+
+				//try {
+				$wms->overwriteCategories = true;
+				$wms->updateObjInDB($wmsId,true);
+				//}
+				//catch (Exception $e) {
+				//	$ajaxResponse->setSuccess(false);
+				//	$ajaxResponse->setMessage(_mb("Could not update wms object in database!"));
+				//	$ajaxResponse->send();
+				//}
+				break;
+			case "wfs":
+				try {
+					$wfsId = intval($data->wfs->wfs_id);
+				}
+				catch (Exception $e) {
+					$ajaxResponse->setSuccess(false);
+					$ajaxResponse->setMessage(_mb("Invalid WFS ID."));
+					$ajaxResponse->send();						
+				}
+				getWfs($wfsId);
+				$wfsFactory = new UniversalWfsFactory();
+				$wfs = $wfsFactory->createFromDb($wfsId);
+				if (is_null($wfs)) {
+					$ajaxResponse->setSuccess(false);
+					$ajaxResponse->setMessage(_mb("Invalid WFS ID."));
+					$ajaxResponse->send();	
+				}
+				$columns = array(
+					"summary", 
+					"title", 
+					"fees", 
+					"accessconstraints", 
+					"individualName", 
+					"positionName", 
+					"voice", 
+					"facsimile", 
+					"providerName", 
+					"deliveryPoint", 
+					"city", 
+					"administrativeArea", 
+					"postalCode", 
+					"country", 
+					"electronicMailAddress",
+					"wfs_termsofuse",
+					"timestamp",
+					"timestamp_create",
+					"wfs_network_access",
+					"wfs_max_features",
+					"fkey_mb_group_id",
+					"inspire_annual_requests",
+					"uuid",
+					"wfs_license_source_note"
+				);
+				foreach ($columns as $c) {
+					if ($c == 'wfs_termsofuse' && $data->wfs->$c == "0") {
+						$value = null;
 					} else {
-						$layer->$c = intval('0');
+						$value = $data->wfs->$c;
 					}
-				}
-				else {
 					if (!is_null($value)) {
-						$layer->$c = $value;
+						$wfs->$c = $value;
 					}
 				}
+				if (is_array($data->wfs->featuretype_searchable)) {
+					foreach ($wfs->featureTypeArray as &$featuretype) {//for each existing featuretype
+						$featuretype->searchable = 0;//initialize new
+						$e = new mb_notice("mb_metadata_server.php: Check ft with id ".$featuretype->id." to be searchable");
+						for ($i = 0; $i < count($data->wfs->featuretype_searchable); $i++) {
+							$id = $data->wfs->featuretype_searchable[$i];
+							$e = new mb_notice("mb_metadata_server.php: ft with id ".$id." found to be searchable");
+							if ($id == intval($featuretype->id)) {
+								$e = new mb_notice("mb_metadata_server.php: ft identical - update it in wfs object");
+								$featuretype->searchable = 1;					
+							} else {
+								continue; //with next 
+							}
+							unset($id);
+							//$layer->layer_searchable = 1;
+							//break;
+						}
+					}
+				}
+				try {
+					$featuretypeId = intval($data->featuretype->featuretype_id);
+				}
+				catch (Exception $e) {
+					$ajaxResponse->setSuccess(false);
+					$ajaxResponse->setMessage(_mb("Could not read featuretype with ID ".$data->featuretype->featuretype_id));
+					$ajaxResponse->send();		
+				}
+				if ($featuretypeId) {
+					$e = new mb_notice("Got following featuretype id from wfs metadata editor client: ".$featuretypeId);
+					try {
+						$featuretype = &$wfs->findFeatureTypeReferenceById($featuretypeId);
+					}
+					catch (Exception $e) {
+						$ajaxResponse->setSuccess(false);
+						$ajaxResponse->setMessage(_mb("Could not get featuretype with ID ".$featuretypeId." from wfs object by reference!"));
+						$ajaxResponse->send();
+					}
+					$columns = array(
+						"summary", 
+						"title",
+						"featuretype_keyword",
+						"inspire_download",
+						"featuretype_md_topic_category_id",
+						"featuretype_inspire_category_id",
+						"featuretype_custom_category_id"
+					);			
+					//extract relevant information from json and fill them into the wfs object
+					foreach ($columns as $c) {
+						if ($c === "summary") {
+							$value = $data->featuretype->featuretype_abstract;
+						}
+						elseif ($c === "title") {
+							$value = $data->featuretype->featuretype_title;
+						}
+						else {
+							$value = $data->featuretype->$c;
+						}	
+						if ($c === "featuretype_keyword") {
+							$featuretype->$c = explode(",", $value);
+							foreach ($featuretype->$c as &$val) {
+								$val = trim($val);
+							}
+						}
+						elseif ($c === "featuretype_md_topic_category_id" 
+							|| $c === "featuretype_inspire_category_id"
+							|| $c === "featuretype_custom_category_id"
+						) {
+							if (!is_array($value)) {
+								$featuretype->$c = array($value);
+							}
+							else {
+								$featuretype->$c = $value;
+							}
+						}
+						elseif ($c === "inspire_download") {
+							if ($value == "on") {
+								$featuretype->$c = intval('1');
+							} else {
+								$featuretype->$c = intval('0');
+							}
+						}
+						else {
+							if (!is_null($value)) {
+								$featuretype->$c = $value;
+							}
+						}
+					}
+				}
+				if ($wfs->wfs_network_access == "on") {
+					$wfs->wfs_network_access = intval('1');
+				} else {
+					$wfs->wfs_network_access = intval('0');
+				}
+		
+				if($wfs->wfs_max_features == "") {
+					$wfs->wfs_max_features = intval('1000');
+				}
+				$wfs->update($wfsId, true, true); //parameter for metadata only update - some things are not pulled when creating object from database and some things need not to be updated.
+				$messResult = "Updated WFS metadata for ID " . $wfsId.".";
+				break;
 			}
-		}
-		if ($wms->wms_network_access == "on") {
-			$wms->wms_network_access = intval('1');
-		} else {
-			$wms->wms_network_access = intval('0');
-		}
-
-		if (defined("TWITTER_NEWS") && TWITTER_NEWS == true && $ajaxResponse->getParameter("twitterNews") == true) {
-    	    		$wms->twitterNews = true;
-			$twitterIsConfigured = true;
-			//$e = new mb_exception("twitter configured");
-    		} else {
-			$wms->twitterNews = false;
-			$twitterIsConfigured = false;
-			//$e = new mb_exception("twitter not configured");
-		}
-    		if(defined("GEO_RSS_FILE") && GEO_RSS_FILE != "" && $ajaxResponse->getParameter("setGeoRss") == true) {
-        		$wms->setGeoRss = true;
-			$rssIsConfigured = true;
-			//$e = new mb_exception("rss configured");
-    		} else {
-			$rssIsConfigured = false;
-			$wms->setGeoRss = false;
-			//$e = new mb_exception("rss not configured");
-		}
-
-		$messResult = "Updated WMS metadata for ID " . $wmsId.". ";
-		//Add helpful hint if publishing is demanded, but not configured in mapbender.conf - do this before update object - cause otherwise it will not give back the right attributes
-		if (!$wms->twitterNews && ($ajaxResponse->getParameter("twitterNews") == true)) {
-			$messResult .= " Publishing via twitter was requested, but this is not configured. Please check your mapbender.conf! ";
-		}
-		if (!$wms->setGeoRss && ($ajaxResponse->getParameter("setGeoRss") == true)) {
-			$messResult .= " Publishing via rss was requested, but this is not configured. Please check your mapbender.conf! ";
-		}
-
-		//try {
-		$e = new mb_exception("update object in db");
-		$wms->overwriteCategories = true;
-		$wms->updateObjInDB($wmsId,true);
-		//}
-		//catch (Exception $e) {
-		//	$ajaxResponse->setSuccess(false);
-		//	$ajaxResponse->setMessage(_mb("Could not update wms object in database!"));
-		//	$ajaxResponse->send();
-		//}
-		$e = new mb_exception("object in db updated");
-
 		$ajaxResponse->setMessage($messResult);
 		$ajaxResponse->setSuccess(true);
 		break;
+	//NOTE: independend
 	case "getContactMetadata" :
 		$mbGroupId = $ajaxResponse->getParameter("id");
 		$sql = <<<SQL
@@ -697,6 +1069,7 @@
 		$ajaxResponse->setResult($resultObj);
 		$ajaxResponse->setSuccess(true);
 		break;
+	//NOTE: independend
 	case "getLicenceInformation" :
 		$termsofuseId = $ajaxResponse->getParameter("id");
 		$sql = <<<SQL
@@ -882,50 +1255,37 @@
 					$row = db_fetch_assoc($res);
 					$resultObj["md_termsofuse"]= $row['fkey_termsofuse_id']; //serial
 				}
-				$ajaxResponse->setResult($resultObj);
-				$ajaxResponse->setSuccess(true);
 			break;
 			case "featuretype":
-				//TODO
+				$featuretypeId = $resourceId;
+				//TODO: check like operator and ambigious wfs_featuretype_epsg - are they not deleted on update? Get rid of the limit 1
+				$sql = <<<SQL
+SELECT featuretype_title, featuretype_abstract, featuretype_latlon_bbox    
+FROM  wfs_featuretype WHERE featuretype_id = $1
+SQL;
+				$v = array($featuretypeId);
+				$t = array('i');
+				$res = db_prep_query($sql,$v,$t);
+				$row = array();
+				if ($res) {
+					$row = db_fetch_assoc($res);
+					$resultObj["title"]= $row['featuretype_title']; //serial
+					$resultObj["abstract"] = $row["featuretype_abstract"]; //char
+					if (isset($resultObj["featuretype_latlon_bbox"]) && $resultObj["featuretype_latlon_bbox"] != '') {	
+						$bbox = explode(',',$resultObj["featuretype_latlon_bbox"]);
+					} else {
+						$bbox = array(-180,-90,180,90);
+					}
+					$resultObj["west"] = $bbox[0]; //double
+					$resultObj["south"] = $bbox[1]; //double
+					$resultObj["east"]= $bbox[2]; //double
+					$resultObj["north"] = $bbox[3]; //double
+				}
 			break;
 		}
-		break;
-/*	case "getInitialLayerMetadata" :
-		$layerId = $ajaxResponse->getParameter("layerId");
-		$metadataId = $ajaxResponse->getParameter("metadataId");
-		$sql = <<<SQL
-SELECT layerpart.*, wms.accessconstraints, wms.fees FROM (SELECT layer_title, fkey_wms_id, layer_abstract, minx as west, miny as south, maxx as east, maxy as north FROM layer INNER JOIN layer_epsg ON layer.layer_id = layer_epsg.fkey_layer_id WHERE layer_id = $1 AND epsg = 'EPSG:4326') as layerpart INNER JOIN wms ON layerpart.fkey_wms_id = wms.wms_id
-SQL;
-		$v = array($layerId);
-		$t = array('i');
-		$res = db_prep_query($sql,$v,$t);
-		$row = array();
-		if ($res) {
-			$row = db_fetch_assoc($res);
-			$resultObj["title"]= $row['layer_title']; //serial
-			$resultObj["abstract"] = $row["layer_abstract"]; //char
-			$resultObj["west"]= $row['west']; //double
-			$resultObj["south"] = $row["south"]; //double
-			$resultObj["east"]= $row['east']; //double
-			$resultObj["north"] = $row["north"]; //double
-			$resultObj["accessconstraints_md"] = $row["accessconstraints"]; //
-			$resultObj["fees_md"] = $row["fees"]; //
-		}
-		$sql = <<<SQL
-SELECT fkey_termsofuse_id FROM wms_termsofuse WHERE fkey_wms_id = $1;
-SQL;
-		$v = array($row['fkey_wms_id']);
-		$t = array('i');
-		$res = db_prep_query($sql,$v,$t);
-		$row = array();
-		if ($res) {
-			$row = db_fetch_assoc($res);
-			$resultObj["md_termsofuse"]= $row['fkey_termsofuse_id']; //serial
-		}
 		$ajaxResponse->setResult($resultObj);
 		$ajaxResponse->setSuccess(true);
 		break;
-*/
 	case "updateMetadataAddon" :
 		$metadataId = $ajaxResponse->getParameter("metadataId");
 		$resourceId = $ajaxResponse->getParameter("resourceId");
@@ -1065,25 +1425,10 @@
 		}
 		break;
 	case "getOwnedMetadata" :
-		$layerId = $ajaxResponse->getParameter("layerId");
 		$user = new User(Mapbender::session()->get("mb_user_id"));
-		//$e = new mb_exception("plugins/mb_metadata_wfs_server.php: user_id: ".$user->id);
-		//Here a new handling is needed. Get coupled metadata entries from owned services - ows / content /md_relation / title of the coupled metadata maybe extented with union on owned metadata entries from big metador
-
-$sql = <<<SQL
-select distinct metadata_id, title from (
-select metadata_id, title from (select fkey_metadata_id from (select layer_id from
- (select wms_id from wms where wms_owner = $1) wms inner join layer on wms.wms_id = layer.fkey_wms_id) layer
-inner join ows_relation_metadata on layer.layer_id = ows_relation_metadata.fkey_layer_id where layer.layer_id <> $2) ows_r_m inner
-join mb_metadata on ows_r_m.fkey_metadata_id = mb_metadata.metadata_id union
-select distinct metadata_id, title from (select fkey_metadata_id from (select featuretype_id
-from (select wfs_id from wfs where wfs_owner = $1) wfs inner join wfs_featuretype on
-wfs.wfs_id = wfs_featuretype.fkey_wfs_id) featuretype inner join ows_relation_metadata on
-featuretype.featuretype_id = ows_relation_metadata.fkey_featuretype_id) ows_r_m inner
-join mb_metadata on ows_r_m.fkey_metadata_id = mb_metadata.metadata_id) as foo order by metadata_id DESC
-SQL;
-		$v = array($user->id, $layerId);
-		$t = array('i','i');
+		$sql = "SELECT metadata_id, title FROM mb_metadata WHERE fkey_mb_user_id = $1";
+		$v = array($user->id);
+		$t = array('i');
 		$res = db_prep_query($sql,$v,$t);
 		$row = array();
 		$resultObj = array();

Modified: trunk/mapbender/http/plugins/mb_metadata_showMetadataAddon.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_showMetadataAddon.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_showMetadataAddon.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -50,7 +50,7 @@
 			url: "../plugins/mb_metadata_server.php",
 			method: "getOwnedMetadata",
 			parameters: {
-				"layerId": Mapbender.modules.mb_md_layer.getLayerId()
+				//"layerId": Mapbender.modules.mb_md_layer.getLayerId()
 			},
 			callback: function (obj, result, message) {
 				if (!result) {
@@ -200,14 +200,7 @@
 					modal: true
 				});
 				//update resource form to show edited data
-				switch (resourceType) {
-					case "layer":
-						that.fillResourceForm(resourceId, resourceType);
-					break;
-					case "featuretype":
-						//TODO
-					break;
-				}
+				that.fillResourceForm(resourceId, resourceType);
 			}
 		});
 		req.send();	
@@ -231,23 +224,16 @@
 				$("<div></div>").text(message).dialog({
 					modal: true
 				});
-				//update layer form to show edited data
-				switch (resourceType) {
-					case "layer":
-						that.fillResourceForm(resourceId, resourceType);
-					break;
-					case "featuretype":
-						//TODO
-					break;
-				}
+				//update resource form to show edited data
+				that.fillResourceForm(resourceId, resourceType);
 			}
 		});
 		req.send();	
 	}	
 
-	//function to fill resource form with changed metadata entries TODO: this function is defined in mb_metadata_layer.js before but it cannot be called - maybe s.th. have to be changed
+	//function to fill resource form with changed metadata entries TODO: this function is defined in mb_metadata_layer[featuretype].js before but it cannot be called - maybe s.th. have to be changed
 	this.fillResourceForm = function (resourceId, resourceType) {
-		// get metadata from server
+		//get metadata from server
 		var req = new Mapbender.Ajax.Request({
 			url: "../plugins/mb_metadata_server.php",
 			method: "getResourceMetadata",
@@ -270,6 +256,10 @@
 					break;
 					case "featuretype":
 						//TODO
+						//fill MetadataURLs into metadata_selectbox_id - notice: the name of the module is fix!
+						Mapbender.modules.mb_md_featuretype.fillMetadataURLs(obj);
+						//reload featuretype tree for showing symbols
+						Mapbender.modules.mb_md_featuretype_tree.init(Mapbender.modules.mb_md_featuretype.getWfsId());
 					break;
 				}
 			}

Deleted: trunk/mapbender/http/plugins/mb_metadata_showMetadataAddonWfs.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_showMetadataAddonWfs.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_showMetadataAddonWfs.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -1,419 +0,0 @@
-var $showMetadataAddonDiv = $(this);
-var $metadataAddonForm = $("<form></form>").appendTo($showMetadataAddonDiv);
-//var $metadataUploadForm = $("<form></form>").appendTo($showMetadataAddonDiv);
-
-var $metadataAddonPopup = $("<div></div>");
-var $metadataUploadPopup = $("<div></div>");
-
-var ShowMetadataAddonApi = function() {
-	var that = this;
-	var featuretypeId;
-	var metadataId;
-        //var wfsId;
-	//Function, which pulls the metadata out off the mapbender registry and give a possibility to edit the record or link
-	this.valid = function () {
-		if (validator && validator.numberOfInvalids() > 0) {
-			$metadataAddonForm.valid();
-			return false;
-		}
-		return true;
-	};
-	this.getInitialFeaturetypeMetadata = function(metadataId, featuretypeId){
-		// get metadata from server
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_wfs_server.php",
-			method: "getInitialFeaturetypeMetadata",
-			parameters: {
-				"featuretypeId": featuretypeId,
-				"metadataId": metadataId
-			},
-			callback: function (obj, result, message) {
-				if (!result) {
-					return;
-				}
-				$metadataAddonForm.easyform("reset");
-				$metadataAddonForm.easyform("fill", obj);
-				$('#license_source_md').css("display","none");
-				if (obj.md_termsofuse !== "0") {
-					//alert(JSON.stringify(obj));
-					that.fillLicence(obj.md_termsofuse);
-				}
-				
-				//that.showForm(metadataId, featuretypeId);
-				/*
-				//enable link element to edit link!
-				$("#link").removeAttr("disabled");
-
-				switch (obj.origin) {
-					case "external":
-						$("#metadataUrlEditor").css("display","block");
-						$("#link_editor").css("display","block");
-    						break;
-  					case "metador":
-						$("#metadataUrlEditor").css("display","block");
-						$("#simple_metadata_editor").css("display","block");
-    						break;
-  					case "capabilities":
-						$("#metadataUrlEditor").css("display","block");
-    						$("#simple_metadata_editor").css("display","block");
-    						break;			
-					default:
-    						break;
-				}
-				*/
-			}
-		});
-		req.send();	
-	}
-
-	getOwnedMetadata = function (){
-		// get metadata from server
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_wfs_server.php",
-			method: "getOwnedMetadata",
-			parameters: {
-				"featuretypeId": Mapbender.modules.mb_md_featuretype.getFeaturetypeId()
-			},
-			callback: function (obj, result, message) {
-				if (!result) {
-					return;
-				}
-				//fill options for of internal linkages
-				$("#internal_relation").empty();
-				var emptyOption = '<option value="">---</option>';
-				$("#internal_relation").append(emptyOption);
-				for ( var i=0 ; i<obj.length ; i++ ) {
-					var optionVal = obj[i].metadataId;
-	                		var optionName = obj[i].metadataId + " : " + obj[i].metadataTitle;
-	                		var optionHtml = "<option value='" + optionVal + "'>" + optionName + "</option>";
-	                		$("#internal_relation").append(optionHtml);
-				}				
-
-			}
-		});
-		req.send();	
-	}		
-
-	this.getAddedMetadata = function(metadataId){
-		// get metadata from server
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_server.php",
-			method: "getMetadataAddon",
-			parameters: {
-				"metadataId": metadataId
-			},
-			callback: function (obj, result, message) {
-				if (!result) {
-					return;
-				}
-				$metadataAddonForm.easyform("reset");
-				$metadataAddonForm.easyform("fill", obj);
-				
-				//enable link element to edit link!
-				$("#link").removeAttr("disabled");
-
-				switch (obj.origin) {
-					case "external":
-						$("#metadataUrlEditor").css("display","block");
-						$("#link_editor").css("display","block");
-    						break;
-  					case "metador":
-						$("#metadataUrlEditor").css("display","block");
-						$("#simple_metadata_editor").css("display","block");
-    						break;
-  					case "capabilities":
-						$("#metadataUrlEditor").css("display","block");
-    						$("#simple_metadata_editor").css("display","block");
-    						break;			
-					default:
-    						break;
-				}
-				//select the right list entries:
-				$(".format_selectbox").val(obj.format); 				
-				$(".charset_selectbox").val(obj.inspire_charset);
-				$(".ref_system_selectbox").val(obj.ref_system);
-				$(".cyclic_selectbox").val(obj.update_frequency);
-				$(".radioRes").filter('[value='+obj.spatial_res_type+']').attr('checked', true);
-
-			}
-		});
-		req.send();	
-	}	
-
-	//Show more information about the licences of the metadata 
-	this.fillLicence = function(obj) {
-		// get licence information from server per termsofuse_id
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_server.php",
-			method: "getLicenceInformation",
-			parameters: {
-				"id": obj
-			},
-			callback: function (obj, result, message) {
-				if (!result) {
-					return;
-				}
-				if (obj.termsofuse_id) {
-					//alert(JSON.stringify(obj));
-					$('#licence_symbol_md').attr('src', obj.symbollink);
-					$('#licence_descriptionlink_md').text(obj.description);
-					$('#licence_descriptionlink_md').attr('href', obj.descriptionlink);
-					if (obj.isopen == 1) {
-						$('#open_symbol_md').attr('src', '../img/od_80x15_blue.png');
-						$('#open_symbol_md').css("display","block");
-					} else {
-						$('#open_symbol_md').attr('src', '');
-						$('#open_symbol_md').css("display","none");
-					}
-					if (obj.source_required == 1) {
-						$('#license_source_md').css("display","block");
-					} else {
-						$('#license_source_md').css("display","none");
-					}
-					$('#license_info_md').css('display', 'block');
-				} else {
-					$('#licence_symbol_md').attr('src', '');
-					$('#licence_descriptionlink_md').attr('href', '');
-					$('#licence_descriptionlink_md').text('');
-					$('#open_symbol_md').attr('src', '');
-					$('#license_info_md').css('display', 'none');
-				}
-			}
-		});
-		req.send();
-	}	
-	
-	this.insertAddedMetadata = function(featuretypeId, data){
-		// push metadata from server
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_server.php",
-			method: "insertMetadataAddon",
-			parameters: {
-				"resourceId": featuretypeId,
-				"resourceType": "featuretype",
-				"data": data
-			},
-			callback: function (obj, result, message) {
-				$("<div></div>").text(message).dialog({
-					modal: true
-				});
-				//update featuretype form to show edited data
-				that.fillFeaturetypeForm(featuretypeId);
-			}
-		});
-		req.send();	
-	}
-
-
-	this.updateAddedMetadata = function(metadataId, featuretypeId, data){
-		// push metadata from server
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_server.php",
-			method: "updateMetadataAddon",
-			parameters: {
-				"metadataId": metadataId,
-				"resourceId": featuretypeId,
-				"resourceType": "featuretype",
-				"data": data
-			},
-			callback: function (obj, result, message) {
-				if (!result) {
-					return;
-				}
-				$("<div></div>").text(message).dialog({
-					modal: true
-				});
-				//update featuretype form to show edited data
-				that.fillFeaturetypeForm(featuretypeId);
-			}
-		});
-		req.send();	
-	}	
-	//function to fill featuretype form with changed metadata entries TODO: this function is defined in mb_metadata_featuretype.js before but it cannot be called - maybe s.th. have to be changed
-	this.fillFeaturetypeForm = function (featuretypeId) {
-		// get metadata from server
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_wfs_server.php",
-			method: "getFeaturetypeMetadata",
-			parameters: {
-				"id": featuretypeId
-			},
-			callback: function (obj, result, message) {
-				if (!result) {
-					return;
-				}
-				//this.wfsId = obj.wfs_id;
-				//delete metadataURL entries
-				$('.metadataEntry').remove();
-				//fill MetadataURLs into metadata_selectbox_id - notice: the name of the module is fix!
-				Mapbender.modules.mb_md_featuretype.fillMetadataURLs(obj);
-				//reload featuretype tree for showing symbols
-				Mapbender.modules.mb_md_featuretype_tree.init(Mapbender.modules.mb_md_featuretype.getWfsId());
-			}
-		});
-		req.send();		
-	};
-	
-	deleteAddedMetadata = function(metadataId, featuretypeId){
-		// push metadata from server
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_server.php",
-			method: "deleteMetadataAddon",
-			parameters: {
-				"metadataId": metadataId,
-				"resourceType": "featuretype",
-				"resourceId": featuretypeId
-			},
-			callback: function (obj, result, message) {
-				if (!result) {
-					return;
-				}	
-				//delete metadataURL entries
-				$('.metadataEntry').remove();
-				//fill MetadataURLs into metadata_selectbox_id
-				//update featuretype form to show edited data
-				that.fillFeaturetypeForm(featuretypeId);
-				//alert(wfsId);
-				$("<div></div>").text(message).dialog({
-					modal: true
-				});
-			}
-		});
-		req.send();
-	
-		
-	}	
-
-	deleteInternalMetadataLinkage = function(metadataId, featuretypeId){
-		// push metadata from server
-		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_server.php",
-			method: "deleteInternalMetadataLinkage",
-			parameters: {
-				"metadataId": metadataId,
-				"resourceType": "featuretype",
-				"resourceId": featuretypeId
-			},
-			callback: function (obj, result, message) {
-				if (!result) {
-					return;
-				}	
-				//delete metadataURL entries
-				$('.metadataEntry').remove();
-				//fill MetadataURLs into metadata_selectbox_id
-				//update featuretype form to show edited data
-				that.fillFeaturetypeForm(featuretypeId);
-				//alert(wfsId);
-				$("<div></div>").text(message).dialog({
-					modal: true
-				});
-			}
-		});
-		req.send();
-	
-		
-	}			
-
-	this.showForm = function (metadataId, featuretypeId, isNew) {
-		$metadataAddonPopup.append($metadataAddonForm);
-		$metadataAddonPopup.dialog({
-			title : "Metadata Addon Editor", 
-			autoOpen : false, 
-			draggable : true,
-			modal : true,
-			width : 700,
-			position : [600, 75],
-			buttons: {
-				"close": function() {
-					$(this).dialog('close');
-				},
-				"save": function() {
-					//get data from form
-					//supress validation for the link only way
-					//example $("#myform").validate().element( "#myselect" );
-					//$("#myform").validate({
-					// ignore: ".ignore"
-					//})
-					if ($("#addonChooser").css("display") == "block") {
-						//don't allow saving but do something else
-						return;
-						
-					}
-					if ($("#simple_metadata_editor").css("display") == "block") {
-						//validate form before send it!
-						if ($metadataAddonForm.valid() != true) {
-							alert("Form not valid - please check your input!"); //TODO use translations and make a php file from this
-							return;
-						}
-					}
-					var formData = $metadataAddonForm.easyform("serialize");
-					if (!isNew) {
-						that.updateAddedMetadata(metadataId, featuretypeId, formData);
-					} else {
-						that.insertAddedMetadata(featuretypeId, formData);
-						
-					}
-					//$('#mb_md_featuretype_tree').refresh;
-					$(this).dialog('close');
-				}
-			},
-			close: function() {
-				//what to do when the dialog is closed
-				
-			}
-		});
-		$metadataAddonPopup.dialog("open");
-	};
-	
-	initGeometryUpload = function () {
-		//start upload form
-		//check if edit or create new - or store it in tmp folder to hold it later
-		//
-		//after upload send 
-		//generate bbox if upload successful
-		//
-		
-	}
-
-	initUploadForm = function (featuretypeId) {
-		$metadataAddonPopup.dialog("close");
-		initXmlImport(featuretypeId);
-		that.fillFeaturetypeForm(featuretypeId);
-	}
-
-	this.init = function (metadataId, featuretypeId, isNew) {
-		$metadataAddonPopup.dialog("close");
-		$metadataAddonForm.load("../plugins/mb_metadata_addon.php", function () {
-			//push infos to help dialogs
-			$metadataAddonForm.find(".help-dialog").helpDialog();
-			//initialize datepicker
-			$('.hasdatepicker').datepicker({dateFormat:'yy-mm-dd', yearRange: '1900:2050', buttonImageOnly: true, changeYear: true,
-constraintInput: true});
-			//first get json
-			if (!isNew) {
-				that.getAddedMetadata(metadataId);
-			} else {
-				//show chooser
-				$("#metadataUrlEditor").css("display","block"); 
-				$("#addonChooser").css("display","block");
-				//get initial values (title/abstract)
-				that.getInitialFeaturetypeMetadata(metadataId, featuretypeId);
-				
-			}
-			that.showForm(metadataId, featuretypeId, isNew);
-			$("#uploadImage").click(function () {
-				initUploadForm(featuretypeId);
-			});
-			//alert($("#uploadImage").attr('onclick')); //there has been a bigger problem when setting an onclick attribut with jquery :-(
-			//TODO: make the fields resizable 
-			//$( "#abstract" ).resizable({ minWidth: 75 });
-		});
-	}
-	initMetadataAddon = function(metadataId, featuretypeId, isNew) {
-		//close old window and load form
-		that.init(metadataId, featuretypeId, isNew);	
-		//fill form
-	}
-};
-
-$showMetadataAddonDiv.mapbender(new ShowMetadataAddonApi());

Modified: trunk/mapbender/http/plugins/mb_metadata_submit.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_submit.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_submit.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -48,6 +48,7 @@
 			method: "save",
 			parameters: {
 				"data": formData,
+				"serviceType": "wms",
 				"twitterNews": twitterNews,
 				"setGeoRss": setGeoRss
 			},

Modified: trunk/mapbender/http/plugins/mb_metadata_wfs_edit.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_edit.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_edit.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -67,7 +67,7 @@
 		
 		// get metadata from server
 		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_wfs_server.php",
+			url: "../plugins/mb_metadata_server.php",
 			method: "getWfsMetadata",
 			parameters: {
 				"id": obj
@@ -78,6 +78,7 @@
 				}
 				$metadataForm.easyform("reset");
 				$metadataForm.easyform("fill", obj);
+				$('#license_source').css("display","none");
 				that.fillLicence(obj.wfs_termsofuse);
 				that.valid();
 			}
@@ -119,6 +120,7 @@
 			},
 			callback: function (obj, result, message) {
 				if (!result) {
+					$('#license_source').css("display","none");
 					return;
 				}
 				if (obj.termsofuse_id) {
@@ -128,14 +130,23 @@
 					$('#licence_descriptionlink').attr('href', obj.descriptionlink);
 					if (obj.isopen == 1) {
 						$('#open_symbol').attr('src', '../img/od_80x15_blue.png');
+						$('#open_symbol').css("display","block");
 					} else {
 						$('#open_symbol').attr('src', '');
+						$('#open_symbol').css("display","none");
 					}
+					if (obj.source_required == 1) {
+						$('#license_source').css("display","block");
+					} else {
+						$('#license_source').css("display","none");
+					}
+					$('#license_info').css('display', 'block');
 				} else {
 					$('#licence_symbol').attr('src', '');
 					$('#licence_descriptionlink').attr('href', '');
 					$('#licence_descriptionlink').text('');
 					$('#open_symbol').attr('src', '');
+					$('#license_info').css('display', 'none');
 				}
 			}
 		});

Modified: trunk/mapbender/http/plugins/mb_metadata_wfs_edit.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_edit.php	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_edit.php	2016-06-07 14:55:39 UTC (rev 9509)
@@ -57,10 +57,10 @@
 		</select>
     	<img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Selection of predefined licences.");?>'}" src="../img/questionmark.png" alt="" />
 	</p>
-	<p>
+	<p id="license_info">
 	<img id="licence_symbol"> <a id='licence_descriptionlink' target='_blank'><a/> <img id="open_symbol">
 	</p>
-	<p>
+	<p id="license_source">
 		<label for="wfs_license_source_note"><?php echo _mb("Source note if license require it (Registry)");?>:</label>
       		<input name="wfs_license_source_note" id="wfs_license_source_note" type="text"/>
 		<img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Source note that should be mentioned if such an information is required by the license.");?>'}" src="../img/questionmark.png" alt="" />

Modified: trunk/mapbender/http/plugins/mb_metadata_wfs_select.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_select.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_select.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -40,7 +40,7 @@
 	
 	this.getData = function () {
 		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_wfs_server.php",
+			url: "../plugins/mb_metadata_server.php",
 			method: "getWfs",
 			parameters: {
 			},
@@ -101,4 +101,4 @@
 
 $metadataSelect.mapbender(new MetadataSelectApi(options));
 
-$metadataSelect.mapbender("getData");
\ No newline at end of file
+$metadataSelect.mapbender("getData");

Deleted: trunk/mapbender/http/plugins/mb_metadata_wfs_server.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_server.php	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_server.php	2016-06-07 14:55:39 UTC (rev 9509)
@@ -1,563 +0,0 @@
-<?php
-require_once dirname(__FILE__) . "/../../core/globalSettings.php";
-require_once dirname(__FILE__) . "/../classes/class_user.php";
-require_once dirname(__FILE__) . "/../classes/class_wfs.php";
-require_once(dirname(__FILE__)."/../classes/class_universal_wfs_factory.php");
-require_once dirname(__FILE__) . "/../classes/class_iso19139.php";
-
-$ajaxResponse = new AjaxResponse($_POST);
-
-function abort ($message) {
-	global $ajaxResponse;
-	$ajaxResponse->setSuccess(false);
-	$ajaxResponse->setMessage($message);
-	$ajaxResponse->send();
-	die;
-};
-
-function getWfs ($wfsId = null) {
-	$user = new User(Mapbender::session()->get("mb_user_id"));
-	$wfsIdArray = $user->getOwnedWfs();
-
-	if (!is_null($wfsId) && !in_array($wfsId, $wfsIdArray)) {
-		abort(_mb("You are not allowed to access this WFS."));
-	}
-	return $wfsIdArray;
-}
-
-function getFeaturetype ($featuretypeId = null) {
-	$user = new User(Mapbender::session()->get("mb_user_id"));
-	$wfsIdArray = $user->getOwnedWfs();
-	if (!is_array($wfsIdArray) || count($wfsIdArray) === 0) {
-		abort(_mb("No metadata sets available."));
-	}
-	$wfsId = wfs::getWfsIdByFeaturetypeId($featuretypeId);
-	if (is_null($wfsId) || !in_array($wfsId, $wfsIdArray)) {
-		abort(_mb("You are not allowed to access this WFS " . $wfsId));
-	}
-	return;
-}
-
-switch ($ajaxResponse->getMethod()) {
-	case "getWfs" :
-		$wfsIdArray = getWfs();
-		$wfsList = implode(",", $wfsIdArray);
-		$sql = <<<SQL
-SELECT wfs.wfs_id, wfs.wfs_title, wfs.wfs_timestamp, wfs_version
-FROM wfs WHERE wfs_id IN ($wfsList);
-SQL;
-		$res = db_query($sql);
-		$resultObj = array(
-			"header" => array(
-				"WFS ID",
-				"Titel",
-				"Timestamp",
-				"Version"
-			), 
-			"data" => array()
-		);
-		while ($row = db_fetch_row($res)) {
-			// convert NULL to '', NULL values cause datatables to crash
-			$walk = array_walk($row, create_function('&$s', '$s=strval($s);'));
-			$resultObj["data"][]= $row;
-		}
-		$ajaxResponse->setResult($resultObj);
-		$ajaxResponse->setSuccess(true);
-		break;
-	case "getWfsMetadata" :
-		$wfsId = $ajaxResponse->getParameter("id");
-		getWfs($wfsId);
-		$sql = <<<SQL
-SELECT wfs_id, wfs_abstract, wfs_title, fees, accessconstraints, 
-individualname, positionname, providername, voice, 
-facsimile, deliverypoint, city, 
-administrativearea, postalcode, country, electronicmailaddress,
-wfs_timestamp, wfs_timestamp_create, wfs_network_access, fkey_mb_group_id, wfs_max_features, inspire_annual_requests, wfs_license_source_note  
-FROM wfs WHERE wfs_id = $wfsId;
-SQL;
-		$res = db_query($sql);
-		$resultObj = array();
-		$row = db_fetch_assoc($res);
-		$resultObj['wfs_id'] = $row['wfs_id'];
-		$resultObj['summary'] = $row['wfs_abstract'];
-		$resultObj['title'] = $row['wfs_title'];
-		$resultObj['fees'] = $row['fees'];
-		$resultObj['accessconstraints'] = $row['accessconstraints'];
-		$resultObj['individualName'] = $row['individualname'];
-		$resultObj['positionName'] = $row['positionname'];
-		$resultObj['providerName'] = $row['providername'];
-		$resultObj['voice'] = $row['voice'];
-		$resultObj['facsimile'] = $row['facsimile'];
-		$resultObj['deliveryPoint'] = $row['deliverypoint'];
-		$resultObj['city'] = $row['city'];
-		$resultObj['administrativeArea'] = $row['administrativearea'];
-		$resultObj['postalCode'] = $row['postalcode'];
-		$resultObj['country'] = $row['country'];
-		$resultObj['electronicMailAddress'] = $row['electronicmailaddress'];
-		$resultObj['timestamp'] = $row['wfs_timestamp'] != "" ? date('d.m.Y', $row['wfs_timestamp']) : "";
-		$resultObj['timestamp_create'] = $row['wfs_timestamp_create'] != "" ? date('d.m.Y', $row['wfs_timestamp_create']) : "";
-		$resultObj['wfs_network_access'] = $row['wfs_network_access'];
-		$resultObj['wfs_max_features'] = $row['wfs_max_features'];
-		$resultObj['fkey_mb_group_id'] = $row['fkey_mb_group_id'];
-		$resultObj['inspire_annual_requests'] = $row['inspire_annual_requests'];
-		$resultObj['wfs_license_source_note'] = $row['wfs_license_source_note'];
-		$keywordSql = <<<SQL
-SELECT DISTINCT keyword FROM keyword, wfs_featuretype_keyword 
-WHERE keyword_id = fkey_keyword_id AND fkey_featuretype_id IN (
-	SELECT featuretype_id from wfs_featuretype, wfs 
-	WHERE fkey_wfs_id = wfs_id AND wfs_id = $wfsId
-) ORDER BY keyword
-SQL;
-		$keywordRes = db_query($keywordSql);
-		$keywords = array();
-		while ($keywordRow = db_fetch_assoc($keywordRes)) {
-			$keywords[]= $keywordRow["keyword"];
-		}
-		$resultObj["wfs_keywords"] = implode(", ", $keywords);
-		$termsofuseSql = <<<SQL
-SELECT fkey_termsofuse_id FROM wfs_termsofuse WHERE fkey_wfs_id = $wfsId
-SQL;
-		$termsofuseRes = db_query($termsofuseSql);
-		if ($termsofuseRes) {
-			$termsofuseRow = db_fetch_assoc($termsofuseRes);
-			$resultObj["wfs_termsofuse"] = $termsofuseRow["fkey_termsofuse_id"];
-		}
-		else {
-			$resultObj["wfs_termsofuse"] = null;
-		}
-		$resultObj['wfs_network_access'] = $resultObj['wfs_network_access'] == 1 ? true : false;
-		if (is_null($resultObj['inspire_annual_requests']) || $resultObj['inspire_annual_requests'] == "") {
-			$resultObj['inspire_annual_requests'] = "0";
-		}
-		//get contact information from group relation
-		//check if fkey_mb_group_id has been defined before - in service table
-		if ($resultObj["fkey_mb_group_id"] == "" || !isset($resultObj["fkey_mb_group_id"])){
-			$e = new mb_notice("fkey_mb_group_id is null or empty");
-			//check if primary group is set 
-			$user = new User;
-			$userId = $user->id;
-			$sql = <<<SQL
-SELECT fkey_mb_group_id, mb_group_name, mb_group_title, mb_group_address, mb_group_email, mb_group_postcode, mb_group_city, mb_group_logo_path, mb_group_voicetelephone FROM (SELECT fkey_mb_group_id FROM mb_user_mb_group WHERE fkey_mb_user_id = $1 AND mb_user_mb_group_type = 2) AS a LEFT JOIN mb_group ON a.fkey_mb_group_id = mb_group.mb_group_id
-SQL;
-			$v = array($userId);
-			$t = array('i');
-			$res = db_prep_query($sql,$v,$t);
-			$row = array();
-			if ($res) {
-				$row = db_fetch_assoc($res);
-				$resultObj["fkey_mb_group_id"] = $row["fkey_mb_group_id"];
-				$resultObj["mb_group_title"] = $row["mb_group_title"];
-				$resultObj["mb_group_address"] = $row["mb_group_address"];
-				$resultObj["mb_group_email"] = $row["mb_group_email"];
-				$resultObj["mb_group_postcode"] = $row["mb_group_postcode"];
-				$resultObj["mb_group_city"] = $row["mb_group_city"];
-				$resultObj["mb_group_logo_path"] = $row["mb_group_logo_path"];
-				$resultObj["mb_group_voicetelephone"] = $row["mb_group_voicetelephone"];
-			}
-		} else {
-			//get current fkey_mb_group_id and the corresponding data
-			$sql = <<<SQL
-SELECT mb_group_name, mb_group_title, mb_group_address, mb_group_email, mb_group_postcode, mb_group_city, mb_group_logo_path, mb_group_voicetelephone FROM mb_group WHERE mb_group_id = $1
-SQL;
-			$v = array($resultObj["fkey_mb_group_id"]);
-			$t = array('i');
-			$res = db_prep_query($sql,$v,$t);
-			$row = array();
-			if ($res) {
-				$row = db_fetch_assoc($res);
-				$resultObj["mb_group_title"] = $row["mb_group_title"];
-				$resultObj["mb_group_address"] = $row["mb_group_address"];
-				$resultObj["mb_group_email"] = $row["mb_group_email"];
-				$resultObj["mb_group_postcode"] = $row["mb_group_postcode"];
-				$resultObj["mb_group_city"] = $row["mb_group_city"];
-				$resultObj["mb_group_logo_path"] = $row["mb_group_logo_path"];
-				$resultObj["mb_group_voicetelephone"] = $row["mb_group_voicetelephone"];
-			}
-			else {
-				$resultObj["fkey_mb_group_id"] = null;
-			}
-		}
-		$ajaxResponse->setResult($resultObj);
-		$ajaxResponse->setSuccess(true);
-		break;
-	case "getFeaturetypeMetadata" :
-		$featuretypeId = $ajaxResponse->getParameter("id");
-		getFeaturetype($featuretypeId);
-		$sql = <<<SQL
-SELECT featuretype_id, featuretype_name, featuretype_title, featuretype_abstract, featuretype_searchable, inspire_download 
-FROM wfs_featuretype WHERE featuretype_id = $featuretypeId;
-SQL;
-		$res = db_query($sql);
-		$resultObj = array();
-		while ($row = db_fetch_assoc($res)) {
-			foreach ($row as $key => $value) {
-				$resultObj[$key] = $value;
-			}
-		}
-		$sql = <<<SQL
-SELECT fkey_md_topic_category_id
-FROM wfs_featuretype_md_topic_category 
-WHERE fkey_featuretype_id = $featuretypeId AND fkey_metadata_id ISNULL
-SQL;
-		$res = db_query($sql);
-		while ($row = db_fetch_assoc($res)) {
-			$resultObj["featuretype_md_topic_category_id"][]= $row["fkey_md_topic_category_id"];
-		}
-		$sql = <<<SQL
-SELECT fkey_inspire_category_id 
-FROM wfs_featuretype_inspire_category 
-WHERE fkey_featuretype_id = $featuretypeId AND fkey_metadata_id ISNULL
-SQL;
-		$res = db_query($sql);
-		while ($row = db_fetch_assoc($res)) {
-			$resultObj["featuretype_inspire_category_id"][]= $row["fkey_inspire_category_id"];
-		}
-		$sql = <<<SQL
-SELECT fkey_custom_category_id 
-FROM wfs_featuretype_custom_category 
-WHERE fkey_featuretype_id = $featuretypeId AND fkey_metadata_id ISNULL
-SQL;
-		$res = db_query($sql);
-		while ($row = db_fetch_assoc($res)) {
-			$resultObj["featuretype_custom_category_id"][]= $row["fkey_custom_category_id"];
-		}
-		$sql = <<<SQL
-SELECT keyword FROM keyword, wfs_featuretype_keyword 
-WHERE keyword_id = fkey_keyword_id AND fkey_featuretype_id = $featuretypeId
-SQL;
-		$res = db_query($sql);
-		$resultObj["featuretype_keyword"] = array();
-		while ($row = db_fetch_assoc($res)) {
-			$resultObj["featuretype_keyword"][]= $row["keyword"];
-		}
-		$resultObj['inspire_download'] = $resultObj['inspire_download'] == 1 ? true : false;
-		//get MetadataURLs from md_metadata and ows_relation_metadata table
-		$sql = <<<SQL
-SELECT metadata_id, uuid, link, linktype, md_format, relation.relation_type, origin FROM mb_metadata 
-INNER JOIN (SELECT * from ows_relation_metadata 
-WHERE fkey_featuretype_id = $featuretypeId ) as relation ON 
-mb_metadata.metadata_id = relation.fkey_metadata_id WHERE relation.relation_type IN ('capabilities','external','metador','upload', 'internal')
-SQL;
-		$res = db_query($sql);
-		$resultObj["md_metadata"]->metadata_id = array();
-		$resultObj["md_metadata"]->uuid = array();
-		$resultObj["md_metadata"]->origin = array();
-		$resultObj["md_metadata"]->linktype = array();
-		$resultObj["md_metadata"]->link = array();
-		$resultObj["md_metadata"]->internal = array();
-		$i = 0;
-		while ($row = db_fetch_assoc($res)) {
-			$resultObj["md_metadata"]->metadata_id[$i]= $row["metadata_id"];
-			$resultObj["md_metadata"]->link[$i]= $row["link"];
-			$resultObj["md_metadata"]->uuid[$i]= $row["uuid"];
-			$resultObj["md_metadata"]->origin[$i]= $row["origin"];
-			$resultObj["md_metadata"]->linktype[$i]= $row["linktype"];
-			if ( $row["relation_type"] == "internal") {
-				$resultObj["md_metadata"]->internal[$i] = 1;
-			}
-			else {
-				$resultObj["md_metadata"]->internal[$i] = 0;
-			}
-			//$resultObj["md_metadata"]->internal[$i]= $row["internal"];
-			$i++;
-		}
-		$ajaxResponse->setResult($resultObj);
-		$ajaxResponse->setSuccess(true);
-		break;
-	case "getFeaturetypeByWfs" :
-		$wfsId = $ajaxResponse->getParameter("id");
-//		getWms($wmsId);
-		$sql = <<<SQL
-	
-SELECT featuretype_id, featuretype_name, f_count_featuretype_couplings(featuretype_id) as count_coupling, f_collect_inspire_cat_wfs_featuretype(featuretype_id) AS inspire_cats, featuretype_abstract, featuretype_searchable, inspire_download  
-FROM wfs_featuretype WHERE fkey_wfs_id = $wfsId ORDER BY featuretype_id;
-SQL;
-		$res = db_query($sql);
-		$rows = array();
-		while ($row = db_fetch_assoc($res)) {
-			$rows[] = $row;
-		}
-		$left = 1;
-		function createNode ($left, $right, $row) {
-			return array(
-				"left" => $left,
-				"right" => $right,
-				#"parent" => $row["featuretype_parent"] !== "" ? intval($row["featuretype_parent"]) : null,
-				#"pos" => intval($row["featuretype_pos"]),
-				"attr" => array (
-					"featuretype_id" => intval($row["featuretype_id"]),
-					"featuretype_name" => $row["featuretype_name"],
-					"featuretype_title" => $row["featuretype_title"],
-					"featuretype_abstract" => $row["featuretype_abstract"],
-					"featuretype_searchable" => intval($row["featuretype_searchable"]),
-					"inspire_download" => intval($row["inspire_download"]),
-					"featuretype_coupling" => intval($row["count_coupling"]),
-					"inspire_cats" => intval($inspireCats)
-				)
-			);
-		}
-
-		function addSubTree ($rows, $i, $left) {
-			$nodeArray = array();
-			$addNewNode = true;
-			for ($j = $i; $j < count($rows); $j++) {
-				$row = $rows[$j];
-				$pos = $j;
-				
-				// first node of subtree
-				if ($addNewNode) {
-					$nodeArray[]= createNode($left, null, $row);
-					$addNewNode = false;
-				}
-				else {
-					$nodeArray[count($nodeArray)-1]["right"] = ++$left;
-					$nodeArray[]= createNode(++$left, null, $row);
-				}
-			}
-			if (is_null($nodeArray[count($nodeArray)-1]["right"])) {
-				$nodeArray[count($nodeArray)-1]["right"] = ++$left;
-			}
-			return $nodeArray;
-		}
-		$nodeArray = addSubTree($rows, 0, 1);
-		$resultObj = array(
-			"nestedSets" => $nodeArray
-		);
-		$ajaxResponse->setResult($resultObj);
-		$ajaxResponse->setSuccess(true);	
-		break;
-	case "getInitialFeaturetypeMetadata" :
-		$featuretypeId = $ajaxResponse->getParameter("featuretypeId");
-		$metadataId = $ajaxResponse->getParameter("metadataId");
-		//TODO: check like operator and ambigious wfs_featuretype_epsg - are they not deleted on update? Get rid of the limit 1
-		$sql = <<<SQL
-SELECT featuretype_title, featuretype_abstract, featuretype_latlon_bbox    
-FROM  wfs_featuretype WHERE featuretype_id = $1
-SQL;
-		$v = array($featuretypeId);
-		$t = array('i');
-		$res = db_prep_query($sql,$v,$t);
-		$row = array();
-		if ($res) {
-			$row = db_fetch_assoc($res);
-			$resultObj["title"]= $row['featuretype_title']; //serial
-			$resultObj["abstract"] = $row["featuretype_abstract"]; //char
-			if (isset($resultObj["featuretype_latlon_bbox"]) && $resultObj["featuretype_latlon_bbox"] != '') {	
-				$bbox = explode(',',$resultObj["featuretype_latlon_bbox"]);
-			} else {
-				$bbox = array(-180,-90,180,90);
-			}
-			$resultObj["west"] = $bbox[0]; //double
-			$resultObj["south"] = $bbox[1]; //double
-			$resultObj["east"]= $bbox[2]; //double
-			$resultObj["north"] = $bbox[3]; //double
-		}
-		$ajaxResponse->setResult($resultObj);
-		$ajaxResponse->setSuccess(true);
-		break;
-	case "getOwnedMetadata" :
-		$featuretypeId = $ajaxResponse->getParameter("featuretypeId");
-		
-		$user = new User(Mapbender::session()->get("mb_user_id"));
-		//Here a new handling is needed. Get coupled metadata entries from owned services - ows / content /md_relation / title of the coupled metadata maybe extented with union on owned metadata entries from big metador
-
-$sql = <<<SQL
-
-select metadata_id, title from (select fkey_metadata_id from (select layer_id from
- (select wms_id from wms where wms_owner = $1) wms inner join layer on wms.wms_id = layer.fkey_wms_id) layer 
-inner join ows_relation_metadata on layer.layer_id = ows_relation_metadata.fkey_layer_id) ows_r_m inner 
-join mb_metadata on ows_r_m.fkey_metadata_id = mb_metadata.metadata_id union 
-select distinct metadata_id, title from (select fkey_metadata_id from (select featuretype_id 
-from (select wfs_id from wfs where wfs_owner = $1) wfs inner join wfs_featuretype on 
-wfs.wfs_id = wfs_featuretype.fkey_wfs_id) featuretype inner join ows_relation_metadata on 
-featuretype.featuretype_id = ows_relation_metadata.fkey_featuretype_id) ows_r_m inner 
-join mb_metadata on ows_r_m.fkey_metadata_id = mb_metadata.metadata_id
-
-SQL;
-
-		$v = array($user->id);
-		$t = array('i');
-		$res = db_prep_query($sql,$v,$t);
-		$row = array();
-		$resultObj = array();
-		$i = 0;
-		while ($row = db_fetch_assoc($res)) {
-			$resultObj[$i]->metadataId = $row['metadata_id']; //integer
-			$resultObj[$i]->metadataTitle = $row["title"]; //char	
-			$i++;
-		}
-		
-		$ajaxResponse->setResult($resultObj);
-		$ajaxResponse->setSuccess(true);
-		break;
-	case "save":
-		$data = $ajaxResponse->getParameter("data");
-		try {
-			$wfsId = intval($data->wfs->wfs_id);
-		}
-		catch (Exception $e) {
-			$ajaxResponse->setSuccess(false);
-			$ajaxResponse->setMessage(_mb("Invalid WFS ID."));
-			$ajaxResponse->send();						
-		}
-		getWfs($wfsId);
-		
-		$wfsFactory = new UniversalWfsFactory();
-		
-		$wfs = $wfsFactory->createFromDb($wfsId);
-		
-		if (is_null($wfs)) {
-			$ajaxResponse->setSuccess(false);
-			$ajaxResponse->setMessage(_mb("Invalid WFS ID."));
-			$ajaxResponse->send();	
-		}
-		
-		$columns = array(
-			"summary", 
-			"title", 
-			"fees", 
-			"accessconstraints", 
-			"individualName", 
-			"positionName", 
-			"voice", 
-			"facsimile", 
-			"providerName", 
-			"deliveryPoint", 
-			"city", 
-			"administrativeArea", 
-			"postalCode", 
-			"country", 
-			"electronicMailAddress",
-			"wfs_termsofuse",
-			"timestamp",
-			"timestamp_create",
-			"wfs_network_access",
-			"wfs_max_features",
-			"fkey_mb_group_id",
-			"inspire_annual_requests",
-			"uuid",
-			"wfs_license_source_note"
-		);
-		foreach ($columns as $c) {
-			if ($c == 'wfs_termsofuse' && $data->wfs->$c == "0") {
-				$value = null;
-			} else {
-				$value = $data->wfs->$c;
-			}
-			if (!is_null($value)) {
-				$wfs->$c = $value;
-			}
-		}
-		
-		if (is_array($data->wfs->featuretype_searchable)) {
-			foreach ($wfs->featureTypeArray as &$featuretype) {//for each existing featuretype
-				$featuretype->searchable = 0;//initialize new
-				$e = new mb_notice("mb_metadata_wfs_server.php: Check ft with id ".$featuretype->id." to be searchable");
-				for ($i = 0; $i < count($data->wfs->featuretype_searchable); $i++) {
-					$id = $data->wfs->featuretype_searchable[$i];
-					$e = new mb_notice("mb_metadata_wfs_server.php: ft with id ".$id." found to be searchable");
-					if ($id == intval($featuretype->id)) {
-						$e = new mb_notice("mb_metadata_wfs_server.php: ft identical - update it in wfs object");
-						$featuretype->searchable = 1;					
-					} else {
-						continue; //with next 
-					}
-					unset($id);
-					//$layer->layer_searchable = 1;
-					//break;
-				}
-			}
-		}
-
-		try {
-			$featuretypeId = intval($data->featuretype->featuretype_id);
-		}
-		catch (Exception $e) {
-			$ajaxResponse->setSuccess(false);
-			$ajaxResponse->setMessage(_mb("Could not read featuretype with ID ".$data->featuretype->featuretype_id));
-			$ajaxResponse->send();		
-		}
-
-		if ($featuretypeId) {
-			$e = new mb_notice("Got following featuretype id from wfs metadata editor client: ".$featuretypeId);
-			try {
-				$featuretype = &$wfs->findFeatureTypeReferenceById($featuretypeId);
-			}
-			catch (Exception $e) {
-				$ajaxResponse->setSuccess(false);
-				$ajaxResponse->setMessage(_mb("Could not get featuretype with ID ".$featuretypeId." from wfs object by reference!"));
-				$ajaxResponse->send();
-			}
-			
-			$columns = array(
-				"summary", 
-				"title",
-				"featuretype_keyword",
-				"inspire_download",
-				"featuretype_md_topic_category_id",
-				"featuretype_inspire_category_id",
-				"featuretype_custom_category_id"
-			);			
-			
-			//extract relevant information from json and fill them into the wfs object
-			foreach ($columns as $c) {
-				if ($c === "summary") {
-					$value = $data->featuretype->featuretype_abstract;
-				}
-				elseif ($c === "title") {
-					$value = $data->featuretype->featuretype_title;
-				}
-				else {
-					$value = $data->featuretype->$c;
-				}	
-				if ($c === "featuretype_keyword") {
-					$featuretype->$c = explode(",", $value);
-					foreach ($featuretype->$c as &$val) {
-						$val = trim($val);
-					}
-				}
-				elseif ($c === "featuretype_md_topic_category_id" 
-					|| $c === "featuretype_inspire_category_id"
-					|| $c === "featuretype_custom_category_id"
-				) {
-					if (!is_array($value)) {
-						$featuretype->$c = array($value);
-					}
-					else {
-						$featuretype->$c = $value;
-					}
-				}
-				elseif ($c === "inspire_download") {
-					if ($value == "on") {
-						$featuretype->$c = intval('1');
-					} else {
-						$featuretype->$c = intval('0');
-					}
-				}
-				else {
-					if (!is_null($value)) {
-						$featuretype->$c = $value;
-					}
-				}
-			}
-		}
-		if ($wfs->wfs_network_access == "on") {
-			$wfs->wfs_network_access = intval('1');
-		} else {
-			$wfs->wfs_network_access = intval('0');
-		}
-		
-		if($wfs->wfs_max_features == "") {
-			$wfs->wfs_max_features = intval('1000');
-		}
-		$wfs->update($wfsId, true, true); //parameter for metadata only update - some things are not pulled when creating object from database and some things need not to be updated.
-		$ajaxResponse->setMessage("Updated WFS metadata for ID " . $wfsId);
-		$ajaxResponse->setSuccess(true);		
-		break;
-	default: 
-		$ajaxResponse->setSuccess(false);
-		$ajaxResponse->setMessage(_mb("An unknown error occured."));
-		break;
-}
-$ajaxResponse->send();
-?>

Modified: trunk/mapbender/http/plugins/mb_metadata_wfs_submit.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_submit.js	2016-06-07 10:25:53 UTC (rev 9508)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_submit.js	2016-06-07 14:55:39 UTC (rev 9509)
@@ -39,10 +39,11 @@
 
 		// get metadata from server
 		var req = new Mapbender.Ajax.Request({
-			url: "../plugins/mb_metadata_wfs_server.php",
+			url: "../plugins/mb_metadata_server.php",
 			method: "save",
 			parameters: {
-				"data": formData
+				"data": formData,
+				"serviceType": "wfs"
 			},
 			callback: function (obj, result, message) {
 				if (!result) {



More information about the Mapbender_commits mailing list