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

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Wed Jun 2 05:50:05 EDT 2010


Author: verenadiewald
Date: 2010-06-02 05:50:04 -0400 (Wed, 02 Jun 2010)
New Revision: 6238

Added:
   trunk/mapbender/http/plugins/mb_metadata_featuretype.js
   trunk/mapbender/http/plugins/mb_metadata_featuretype.php
   trunk/mapbender/http/plugins/mb_metadata_featuretypeTree.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_server.php
   trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginal.html
   trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginal.js
   trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginalLayer.html
   trunk/mapbender/http/plugins/mb_metadata_wfs_submit.js
   trunk/mapbender/http/plugins/mb_original_metadata_wfs_server.php
Log:
added wfs metadata editor scripts

Added: trunk/mapbender/http/plugins/mb_metadata_featuretype.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_featuretype.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_featuretype.js	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,164 @@
+/**
+ * Package: mb_metadata_featuretype
+ *
+ * Description:
+ *
+ * Files:
+ *
+ * SQL:
+ * 
+ * Help:
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License
+ * and Simplified BSD license.
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+var $metadataFeaturetype = $(this);
+var $metadataForm = $("<form>No featuretype selected.</form>").appendTo($metadataFeaturetype);
+
+var MetadataLayerApi = function (o) {
+	var that = this;
+	var validator;
+	var formReady = false;
+	var wfsId;
+	var featuretypeId;
+	
+	var disabledFields = [
+		"featuretype_custom_category_id", 
+		"featuretype_inspire_category_id", 
+		"featuretype_md_topic_category_id", 
+		"featuretype_keyword", 
+		"featuretype_abstract", 
+		"featuretype_title"
+	];
+
+	this.events = {
+		initialized: new Mapbender.Event(),
+		submit: new Mapbender.Event(),
+		showOriginalFeaturetypeMetadata : new Mapbender.Event()
+	};
+		
+	this.valid = function () {
+		if (validator && validator.numberOfInvalids() > 0) {
+			$metadataForm.valid();
+			return false;
+		}
+		return true;
+	};
+
+	this.serialize = function (callback) {
+		$metadataForm.submit();
+		var data = null;
+		if (this.valid()) {
+			data = {
+				featuretype: $metadataForm.easyform("serialize")
+			};
+		}
+		if ($.isFunction(callback)) {
+			callback(data);
+		}
+		return data !== null ? data.featuretype : data;
+	};
+
+	this.fillForm = function (obj) {
+		$(disabledFields).each(function () {
+			$("#" + this).removeAttr("disabled");
+		});
+
+		featuretypeId = obj.featuretype_id;
+
+		$metadataForm.easyform("reset");
+		
+		// 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;
+				}
+				$metadataForm.easyform("fill", obj);
+				that.valid();
+			}
+		});
+		req.send();		
+	};
+	
+	this.fill = function (obj) {
+		$metadataForm.easyform("fill", obj);
+	};
+	
+	var showOriginalFeaturetypeMetadata = function () {
+		that.events.showOriginalFeaturetypeMetadata.trigger({
+			data : {
+				wfsId : wfsId,
+				featuretypeData : $metadataForm.easyform("serialize")
+			}
+		});
+	};
+	
+
+	this.init = function (obj) {
+		delete featuretypeId;
+		$metadataForm.easyform("reset");
+
+		wfsId = obj;
+		
+		var formData = arguments.length >= 2 ? arguments[1] : undefined;
+
+		if (!formReady) {
+			$metadataForm.load("../plugins/mb_metadata_featuretype.php", function () {
+				$metadataForm.find(".help-dialog").helpDialog();
+
+				$metadataForm.find(".original-metadata-featuretype").bind("click", function() {
+					showOriginalFeaturetypeMetadata();
+				});	
+
+				validator = $metadataForm.validate({
+					submitHandler: function () {
+						return false;
+					}
+				});
+
+				that.events.initialized.trigger({
+					wfsId: wfsId
+				});
+				formReady = true;
+				
+				// select layer in tree if set
+				
+				// init map
+				
+				// fill layer form if set
+			});
+			return;
+		}
+		$(disabledFields).each(function () {
+			$("#" + this).attr("disabled", "disabled");
+		});
+		that.events.initialized.trigger({
+			wfsId: wfsId
+		});
+	};
+	
+	Mapbender.events.localize.register(function () {
+		that.valid();
+		var formData = $metadataForm.easyform("serialize");
+		formReady = false;
+		that.init(wfsId, formData);
+	});
+	Mapbender.events.init.register(function () {
+		that.valid();
+	});
+};
+
+$metadataFeaturetype.mapbender(new MetadataLayerApi(options));

Added: trunk/mapbender/http/plugins/mb_metadata_featuretype.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_featuretype.php	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_featuretype.php	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,119 @@
+<?php
+	require_once dirname(__FILE__) . "/../../core/globalSettings.php";
+	
+	function displayCategories ($sql) {
+		if (Mapbender::session()->get("mb_lang") === "de") {
+			$sql = str_replace("category_code_en", "category_code_de", $sql);
+		}
+		
+		$str = "";
+		$res = db_query($sql);
+		while ($row = db_fetch_assoc($res)) {
+			$str .= "<option value='" . $row["id"] . "'>" . 
+				htmlentities($row["name"], ENT_QUOTES, CHARSET) . 
+				"</option>";
+		}
+		return $str;
+	}
+?>
+
+<div id="choose">
+	<fieldset class="">
+		<p>
+			choose featuretype
+		</p>
+	</fieldset>
+</div>
+
+<div id="featuretype">
+	<fieldset class="">
+		<input name="featuretype_name" id="featuretype_name" type="hidden"/>
+
+		<legend>Featuretype Level Metadata: <img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Possibility to adapt and add informations in the separate WFS-Featuretype Metadata. The modified Metadata will be stored in the database of the GeoPortal.rlp, outwardly these metadata overwrite the original Service-Metadata.");?>'}" src="../img/questionmark.png"></img></legend>
+		<p>
+			<label for="wfs_title"><?php echo _mb("Show original Service Metadata from last update");?></label>
+			<img class="original-metadata-featuretype" src="../img/book.png"></img>
+			<img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("The original WFS-Metadata from the last update could be recovered or updated, so that the original Service-Metadata will be shown outward again.");?>'}" src="../img/questionmark.png"></img>
+		</p>
+		<p>
+			<label for="featuretype_id"><?php echo _mb("Number of Featuretype (Registry)");?>:</label>
+			<span class="metadata_span"></span>
+			<input readonly="readonly" name="featuretype_id" id="featuretype_id"/>
+		</p>
+		<p>
+	    	<label for="featuretype_title"><?php echo _mb("Featuretype Title (WFS)");?>:</label>
+			<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	    	<input disabled="disabled" name="featuretype_title" id="featuretype_title" class="required" />
+		</p>
+		<p>
+	    	<label for="featuretype_abstract"><?php echo _mb("Featuretype Abstract (WFS)");?>:</label>
+			<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	    	<input disabled="disabled" name="featuretype_abstract" id="featuretype_abstract"/>
+		</p>
+		<p>
+	    	<label for="featuretype_keyword"><?php echo _mb("Featuretype Keywords (WFS)");?>:</label>
+			<span class="metadata_span"></span>
+		   	<input disabled="disabled" name="featuretype_keyword" id="featuretype_keyword"/>
+		</p>
+		<p>
+		    <div id="buttons">
+		    	<p>
+					<label><?php echo _mb("Add Information about the underlying data");?>:</label>
+					<img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Linking the WFS layer with metadata set (coupled resource), which describes the underlying informations of the representation in more detail (eg Actuality / quality). It occurs via a link to an already existing metadta set in a catalog or a simple metadata set will be generated using a Mapbender Layer Addon-Editor.");?>'}" src="../img/questionmark.png"></img>
+				</p>
+				<p>
+					<input disabled="disabled" class="" type="submit" value="<?php echo _mb("Add new Metadata Record");?>"/>
+				</p>
+				<p>
+					<input disabled="disabled" class="" type="submit" value="<?php echo _mb("Edit Metadata Linkage");?>"/>
+				</p>
+				<p>
+					<input disabled="disabled" class="" type="submit" value="<?php echo _mb("Delete Metadata Linkage");?>"/>
+				</p>
+			</div>
+			<div id="selectbox">
+				<select disabled="disabled" class="metadata_selectbox" size="2" multiple>
+					<option>not</option>
+					<option>yet</option>
+					<option>implemented</option>
+				</select>
+			</div>			
+		</p>
+	</fieldset>
+</div>
+
+<div id="classification">
+	<fieldset class="">
+		<legend><?php echo _mb("Classification");?></legend>
+		<p>
+		    <label for="featuretype_md_topic_category_id" class="label_classification"><?php echo _mb("ISO Topic Category");?>:</label>
+			<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+			<select disabled="disabled" class="metadata_selectbox" id="featuretype_md_topic_category_id" name="featuretype_md_topic_category_id" size="2" multiple="multiple">
+<?php
+	$sql = "SELECT md_topic_category_id AS id, md_topic_category_code_en AS name FROM md_topic_category";
+	echo displayCategories($sql);
+?>
+			</select>
+		</p>
+		<p>
+		    <label for="featuretype_inspire_category_id" class="label_classification"><?php echo _mb("INSPIRE Category");?>:</label>
+			<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+			<select disabled="disabled" class="metadata_selectbox" id="featuretype_inspire_category_id" name="featuretype_inspire_category_id" size="2" multiple="multiple">
+<?php
+	$sql = "SELECT inspire_category_id AS id, inspire_category_code_en AS name FROM inspire_category";
+	echo displayCategories($sql);
+?>
+			</select>
+		</p>
+		<p>
+		    <label for="featuretype_custom_category_id" class="label_classification"><?php echo _mb("Custom Category");?>:</label>
+			<span class="metadata_span"></span>
+			<select disabled="disabled" class="metadata_selectbox" id="featuretype_custom_category_id" name="featuretype_custom_category_id" size="2" multiple="multiple">
+<?php
+	$sql = "SELECT custom_category_id AS id, custom_category_code_en AS name FROM custom_category";
+	echo displayCategories($sql);
+?>
+			</select>
+		</p>
+	</fieldset>
+</div>

Added: trunk/mapbender/http/plugins/mb_metadata_featuretypeTree.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_featuretypeTree.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_featuretypeTree.js	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,153 @@
+/**
+ * Package: mb_metadata_featuretypeTree
+ *
+ * Description:
+ *
+ * Files:
+ *
+ * SQL:
+ * 
+ * Help:
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License
+ * and Simplified BSD license.
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+var $metadataFeaturetypeTree = $(this);
+
+var MetadataFeaturetypeTreeApi = function (o) {
+	var that = this;
+
+	var instanceId = "choose";
+
+	var createFolder = function (set) {
+		return {
+			attributes: {
+				data: $.toJSON(set.attr)
+			},
+			data: set.attr.featuretype_name,
+			state: "closed",
+			children: []
+		};
+	};
+	
+	var createLeaf = function (set) {
+		return {
+			attributes: {
+				data: $.toJSON(set.attr)
+			},
+			data: {
+				title: set.attr.featuretype_name
+			}
+		};
+	};
+	
+	var toJsTreeJson = function (nestedSets) {
+		if (!nestedSets.length && nestedSets.length !== 0) {
+			new Mapbender.Exception("Nested sets not an array.");
+			return [];
+		}
+		var right = null;
+		if (arguments.length === 2) {
+			right = arguments[1];
+		}
+		var children = [];
+		while (nestedSets.length > 0) {
+			set = nestedSets.shift();
+			if (typeof set.left != "number" || typeof set.right != "number") {
+				new Mapbender.Exception("Left or right not set.");
+				return [];
+			}
+
+			// is a different subtree, go back
+			if (right !== null && right < set.right) {
+				nestedSets.unshift(set);
+				return children;
+			}
+			// is a leaf
+			else if (set.right - set.left === 1) {
+				children.push(createLeaf(set));
+			}
+			// is a folder
+			else {
+				var node = createFolder(set);
+				var nodeChildren = toJsTreeJson(nestedSets, set.right);
+				children.push($.extend(node, {
+					children: nodeChildren
+				}));
+			}
+		}
+		return children;
+	};
+
+	var initTree = function (nestedSets) {
+		var jsTreeData = toJsTreeJson(nestedSets);
+		jsTreeData[0].state = "open";
+		
+		var jsTree = $.tree.reference(instanceId);
+		if (jsTree !== null) {
+			jsTree.destroy();
+		}
+		
+		$("#" + instanceId).tree({
+			ui: {
+//				theme_path: "../extensions/jsTree.v.0.9.9a2/themes/checkbox/style.css",
+//				theme_name: "checkbox"
+				theme_path: "../extensions/jsTree.v.0.9.9a2/themes/default/style.css",
+				theme_name: "default"
+			},
+			plugins: {
+//				checkbox: {			
+//				}
+			},
+			data : { 
+				type : "json",
+				opts : {
+					static : jsTreeData
+				}
+			},
+			callback: {
+				onselect: function (node, treeObj) {
+					var data = $(node).metadata({
+						type: "attr",
+						name: "data"
+					});
+					that.events.selected.trigger({
+						"featuretype": data
+					});
+				}
+			}
+		});
+	};
+
+
+	this.events = {
+		selected: new Mapbender.Event()
+	};
+
+	this.init = function (obj) {
+		// get featuretypes from server
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_metadata_wfs_server.php",
+			method: "getFeaturetypeByWfs",
+			parameters: {
+				"id": obj
+			},
+			callback: function (obj, result, message) {
+				if (!result) {
+					return;
+				}
+				initTree(obj.nestedSets);
+			}
+		});
+		req.send();		
+	};
+};
+
+$metadataFeaturetypeTree.mapbender(new MetadataFeaturetypeTreeApi(options));

Added: trunk/mapbender/http/plugins/mb_metadata_wfs_edit.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_edit.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_edit.js	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,140 @@
+/**
+ * Package: mb_metadata_wfs_edit
+ *
+ * Description:
+ *
+ * Files:
+ *
+ * SQL:
+ * 
+ * Help:
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License
+ * and Simplified BSD license.
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+var $metadataEdit = $(this);
+var $metadataForm = $("<form>No WFS selected.</form>").appendTo($metadataEdit);
+
+var MetadataEditApi = function (o) {
+	var that = this;
+	var validator;
+	var formReady = false;
+	var wfsId;
+	
+	this.events = {
+		showOriginalMetadata : new Mapbender.Event(),
+		submit: new Mapbender.Event()
+	};
+
+	this.valid = function () {
+		if (validator && validator.numberOfInvalids() > 0) {
+			$metadataForm.valid();
+			return false;
+		}
+		return true;
+	};
+	
+	this.serialize = function (callback) {
+		$metadataForm.submit();
+		var data = null;
+		if (this.valid()) {
+			data = {
+				wfs: $metadataForm.easyform("serialize")
+			};
+		}
+		if ($.isFunction(callback)) {
+			callback(data);
+		}
+		return data !== null ? data.wfs : data;
+	};
+	
+	// second optional parameter formData
+	var fillForm = function (obj) {
+		
+		if (arguments.length >= 2) {
+			$metadataForm.easyform("reset");
+			$metadataForm.easyform("fill", arguments[1]);
+			that.valid();
+			return;
+		}
+		
+		// get metadata from server
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_metadata_wfs_server.php",
+			method: "getWfsMetadata",
+			parameters: {
+				"id": obj
+			},
+			callback: function (obj, result, message) {
+				if (!result) {
+					return;
+				}
+				$metadataForm.easyform("reset");
+				$metadataForm.easyform("fill", obj);
+				that.valid();
+			}
+		});
+		req.send();		
+	};
+
+	this.fill = function (obj) {
+		$metadataForm.easyform("fill", obj);
+	};
+	
+	var showOriginalMetadata = function () {
+		that.events.showOriginalMetadata.trigger({
+			data : {
+				wfsId : wfsId,
+				wfsData : $metadataForm.easyform("serialize")
+			}
+		});
+	};
+	
+	this.init = function (obj) {
+		wfsId = obj;
+		
+		var formData = arguments.length >= 2 ? arguments[1] : undefined;
+		
+		if (!formReady) {
+			$metadataForm.load("../plugins/mb_metadata_wfs_edit.php", function () {
+				$metadataForm.find(".help-dialog").helpDialog();
+				$metadataForm.find(".original-metadata-wfs").bind("click", function() {
+					showOriginalMetadata();
+				});				
+				validator = $metadataForm.validate({
+					submitHandler: function () {
+						return false;
+					}
+				});
+				if (formData !== undefined) {
+					fillForm(obj, formData);
+				}
+				else {
+					fillForm(obj);
+				}
+				formReady = true;
+			});
+			return;
+		}
+		fillForm(obj);
+	};
+	
+	Mapbender.events.localize.register(function () {
+		that.valid();
+		var formData = $metadataForm.easyform("serialize");
+		formReady = false;
+		that.init(wfsId, formData);
+	});
+	Mapbender.events.init.register(function () {
+		that.valid();
+	});
+};
+
+$metadataEdit.mapbender(new MetadataEditApi(options));

Added: trunk/mapbender/http/plugins/mb_metadata_wfs_edit.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_edit.php	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_edit.php	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,118 @@
+<?php
+	require_once dirname(__FILE__) . "/../../core/globalSettings.php";
+?>
+
+<fieldset>
+	<input name="wfs_id" id="wfs_id" type="hidden"/>
+
+	<legend><?php echo _mb("Service Level Metadata");?>: <img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Possibility to adapt and add informations in the separate WFS-Featuretype Metadata. The modified Metadata is stored in the database of the GeoPortal.rlp, outwardly these metadata overwrite the original Service-Metadata.");?>'}" src="../img/questionmark.png"></img></legend>
+	<p>
+		<label for="wfs_title"><?php echo _mb("Show original Service Metadata from last update");?></label>
+		<img class="original-metadata-wfs" src="../img/book.png"></img>
+		<img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("The original WFS-Metadata from the last update could be recovered or updated, so that the original Service-Metadata will be shown outward again.");?>'}" src="../img/questionmark.png"></img>
+	</p>
+	<p>
+		<label for="title"><?php echo _mb("WFS Title (OWS)");?>:</label>
+		<input name="title" id="title" class="required"/>
+		<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+	<p>
+    	<label for="summary"><?php echo _mb("WFS Abstract (OWS)");?>:</label>
+    	<input name="summary" id="summary"/>
+    	<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+	<p>
+		<label for="keywords"><?php echo _mb("WFS Keywords (OWS)");?>:</label>
+    	<input readonly="readonly" name="keywords" id="keywords"/>
+    	<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+	<p>
+		<label for="fees"><?php echo _mb("WFS Fees (OWS)");?>:</label>
+    	<input name="fees" id="fees"/>
+    	<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+	<p>
+		<label for="accessconstraints"><?php echo _mb("WFS AccessConstraints (OWS)");?>:</label>
+		<input name="accessconstraints" id="accessconstraints"/>
+    	<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+<?php
+	$sql = "SELECT termsofuse_id, name FROM termsofuse";
+	$res = db_query($sql);
+	$termsofuse = array();
+	while ($row = db_fetch_assoc($res)) {
+		$termsofuse[$row["termsofuse_id"]] = $row["name"];
+	}
+?>
+	<p>
+		<label for="wfs_termsofuse"><?php echo _mb("WFS Predefined Licence (Registry)");?>:</label>
+    	<select name="wfs_termsofuse" id="wfs_termsofuse">
+			<option>...</option>
+<?php
+	foreach ($termsofuse as $key => $value) {
+		echo "<option value='" . $key . "'>" . htmlentities($value, ENT_QUOTES, CHARSET) . "</option>";
+	}
+?>
+		</select>
+    	<img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Auswahl von vordefinierten Lizenzen hinsichtlich Gebühren und Zugriffsbeschränkungen.");?>'}" src="../img/questionmark.png"></img>
+	</p>
+</fieldset>
+<fieldset>
+	<legend><?php echo _mb("WFS Provider Section (OWS)");?></legend>
+	<p>
+		<label for="individualName"><?php echo _mb("Contact Individual Name (OWS)");?>:</label>
+    	<input name="individualName" id="individualName"/>
+	</p>
+	<p>
+		<label for="positionName"><?php echo _mb("Contact Position Name (OWS)");?>:</label>
+    	<input name="positionName" id="positionName"/>
+	</p>
+	<p>
+		<label for="voice"><?php echo _mb("Contact Phone Voice (OWS)");?>:</label>
+    	<input name="voice" id="voice"/>
+	</p>
+	<p>
+		<label for="facsimile"><?php echo _mb("Contact Phone Fax (OWS)");?>:</label>
+    	<input name="facsimile" id="facsimile"/>
+	</p>
+	<p>
+		<label for="providerName"><?php echo _mb("Contact Organisation (WFS)");?>:</label>
+    	<input name="providerName" id="providerName"/>
+    	<img  class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+	<p>
+		<label for="deliveryPoint"><?php echo _mb("Contact Address (WFS)");?>:</label>
+    	<input name="deliveryPoint" id="deliveryPoint"/>
+	</p>
+	<p>
+		<label for="city"><?php echo _mb("Contact City (WFS)");?>:</label>
+     	<input name="city" id="city"/>
+	</p>
+	<p>
+	  	<label for="administrativeArea"><?php echo _mb("Contact State or Province (WFS) - ISO 3166-II");?>:</label>
+      	<input name="administrativeArea" id="administrativeArea"/>
+	</p>
+	<p>
+	  	<label for="postalCode"><?php echo _mb("Contact Post Code (WFS)");?>:</label>
+      	<input name="postalCode" id="postalCode"/>
+	</p>
+	<p>
+	  	<label for="country"><?php echo _mb("Contact Post Country (WFS) - ISO 3166");?>:</label>
+      	<input name="country" id="country"/>
+	</p>
+	<p>
+	  	<label for="electronicMailAddress"><?php echo _mb("Contact Electronic Mail Address (WFS)");?>:</label>
+      	<input name="electronicMailAddress" id="electronicMailAddress" class="required email"/>
+     	<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+	<p>
+	  	<label for="wfs_timestamp_create"><?php echo _mb("Date of first registration (Registry)");?>:</label>
+      	<input readonly="readonly" name="wfs_timestamp_create" id="wfs_timestamp_create"/>
+      	<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+	<p>
+	  	<label for="wfs_timestamp"><?php echo _mb("Date of last revision (Registry)");?>:</label>
+      	<td><input readonly="readonly" name="wfs_timestamp" id="wfs_timestamp"/>
+      	<img class="metadata_img" title="<?php echo _mb("Inspire");?>" src="../img/misc/inspire_eu_klein.png"></img>
+	</p>
+</fieldset>

Added: trunk/mapbender/http/plugins/mb_metadata_wfs_select.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_select.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_select.js	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,104 @@
+/**
+ * Package: mb_metadata_wfs_select
+ *
+ * Description:
+ *
+ * Files:
+ *
+ * SQL:
+ * 
+ * Help:
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Christoph_Baudson
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License
+ * and Simplified BSD license.
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+var $metadataSelect = $(this);
+$metadataSelect.prepend("<img src='../img/indicator_wheel.gif'>");
+
+var MetadataSelectApi = function (o) {
+	var table = null;
+	var that = this;
+
+	var fnGetSelected = function (oTableLocal){
+		var aReturn = [];
+		var aTrs = oTableLocal.fnGetNodes();
+		
+		for ( var i=0 ; i<aTrs.length ; i++ ){
+			if ( $(aTrs[i]).hasClass('row_selected') ){
+				aReturn.push( aTrs[i] );
+			}
+		}
+		return aReturn;
+	};
+	
+	this.getData = function () {
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_metadata_wfs_server.php",
+			method: "getWfs",
+			parameters: {
+			},
+			callback: function (obj, result, message) {
+				if (!result) {
+					return;
+				}
+				$metadataSelect.find("img").remove();
+				
+				var aoColumns = [];
+				for (var i in obj.header) {
+					if (obj.header[i] === "WFS ID") {
+						continue;
+					}
+					aoColumns.push({"sTitle": obj.header[i]});
+				}
+
+				// initialize datatables
+				table = $metadataSelect.find("table").dataTable({
+					"aoColumns": aoColumns,
+					"bJQueryUI": true,
+					"bAutoWidth": false
+				});
+				
+				// add rows
+				for (var j in obj.data) {
+					var data = obj.data[j];
+					var wfsId = data[0];
+					data.shift();
+					var index = table.fnAddData(data);
+					var rowNode = table.fnGetNodes(index[0]);
+					$(rowNode).data("wfsId", wfsId);
+				}
+				
+				// make rows selectable
+				$metadataSelect.find("tbody").click(function (e) {
+					$(table.fnSettings().aoData).each(function (){
+						$(this.nTr).removeClass('row_selected');
+					});
+					$(e.target.parentNode).addClass('row_selected');
+					var selectedRow = fnGetSelected(table);
+					$metadataSelect.fadeOut(function () {
+						that.events.selected.trigger({
+							wfsId: $(selectedRow).data("wfsId")
+						});
+						$metadataSelect.show();
+					});
+				});
+			}
+		});
+		req.send();
+	};
+	
+	this.events = {
+		selected: new Mapbender.Event()
+	};
+};
+
+$metadataSelect.mapbender(new MetadataSelectApi(options));
+
+$metadataSelect.mapbender("getData");
\ No newline at end of file

Added: trunk/mapbender/http/plugins/mb_metadata_wfs_server.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_server.php	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_server.php	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,393 @@
+<?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");
+
+$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_array($wfsIdArray) || count($wfsIdArray) === 0) {
+		abort(_mb("No metadata sets available."));
+	}
+	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 
+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['wfs_timestamp'] = $row['wfs_timestamp'] != "" ? date('d.m.Y', $row['wfs_timestamp']) : "";
+		$resultObj['wfs_timestamp_create'] = $row['wfs_timestamp_create'] != "" ? date('d.m.Y', $row['wfs_timestamp_create']) : "";
+		
+		$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;
+		}
+		
+
+		$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 
+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
+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
+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
+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"];
+		}
+
+		$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);
+		break;
+	case "getFeaturetypeByWfs" :
+		$wfsId = $ajaxResponse->getParameter("id");
+//		getWms($wmsId);
+
+		$sql = <<<SQL
+	
+SELECT featuretype_id, featuretype_name, featuretype_title, featuretype_abstract 
+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["layer_parent"] !== "" ? intval($row["layer_parent"]) : null,
+				#"pos" => intval($row["layer_pos"]),
+				"attr" => array (
+					"featuretype_id" => intval($row["featuretype_id"]),
+					"featuretype_name" => $row["featuretype_name"],
+					"featuretype_title" => $row["featuretype_title"],
+					"featuretype_abstract" => $row["featuretype_abstract"]
+				)
+			);
+		}
+
+		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 "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"
+		);
+		foreach ($columns as $c) {
+			$value = $data->wfs->$c;
+			if (!is_null($value)) {
+				$wfs->$c = $value;
+			}
+		}
+		
+		try {
+			$featuretypeId = intval($data->featuretype->featuretype_id);
+		}
+		catch (Exception $e) {
+		}
+
+		if ($featuretypeId) {
+			$featuretype = $wfs->findFeatureTypeById($featuretypeId);
+			if (!is_null($featuretype)) {
+				
+				$columns = array(
+					"summary", 
+					"title",
+					"featuretype_keyword",
+					"featuretype_md_topic_category_id",
+					"featuretype_inspire_category_id",
+					"featuretype_custom_category_id"
+				);			
+	
+				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;
+						}
+					}
+					else {
+						if (!is_null($value)) {
+							$featuretype->$c = $value;
+						}
+					}
+				}
+			}
+		}
+
+		$wfs->update();
+
+		
+		$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();
+?>
\ No newline at end of file

Added: trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginal.html
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginal.html	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginal.html	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,70 @@
+<fieldset class="ui-widget">
+
+	<legend>Original Service Level Metadata: </legend>
+	<p>
+		<label for="original_title">WFS Title (OWS):</label>
+		<input readonly name="original_title" id="original_title" class="required"/>
+	</p>
+	<p>
+    	<label for="original_summary">WFS Abstract (OWS):</label>
+    	<input readonly name="original_summary" id="original_summary"/>
+	</p>
+<!--	<p>
+		<label for="">WFS Keywords (OWS):</label>
+    	<input readonly name="original_wfs_keywords" id="original_wfs_keywords"/>
+	</p>
+-->	
+	<p>
+		<label for="original_fees">WFS Fees (OWS):</label>
+    	<input readonly name="original_fees" id="original_fees"/>
+	</p>
+	<p>
+		<label for="original_accessconstraints">WFS AccessConstraints (OWS):</label>
+		<input readonly name="original_accessconstraints" id="original_accessconstraints"/>
+	</p>
+	
+	<p>
+		<label for="original_individualName">Contact Individual Name (OWS):</label>
+    	<input readonly name="original_individualName" id="original_individualName"/>
+	</p>
+	<p>
+		<label for="original_positionName">Contact Position Name (OWS):</label>
+    	<input readonly name="original_positionName" id="original_positionName"/>
+	</p>
+	<p>
+		<label for="original_voice">Contact Phone Voice (OWS):</label>
+    	<input readonly name="original_voice" id="original_voice"/>
+	</p>
+	<p>
+		<label for="original_facsimile">Contact Phone Fax (OWS):</label>
+    	<input readonly name="original_facsimile" id="original_facsimile"/>
+	</p>
+	<p>
+		<label for="original_providerName">Contact Organisation (WFS):</label>
+    	<input readonly name="original_providerName" id="original_providerName"/>
+    </p>
+	<p>
+		<label for="original_deliveryPoint">Contact Address (WFS):</label>
+    	<input readonly name="original_deliveryPoint" id="original_deliveryPoint"/>
+	</p>
+	<p>
+		<label for="original_city">Contact City (WFS):</label>
+     	<input readonly name="original_city" id="original_city"/>
+	</p>
+	<p>
+	  	<label for="original_administrativeArea">Contact State or Province (WFS) - ISO 3166-II:</label>
+      	<input readonly name="original_administrativeArea" id="original_administrativeArea"/>
+	</p>
+	<p>
+	  	<label for="original_postalCode">Contact Post Code (WFS):</label>
+      	<input readonly name="original_postalCode" id="original_postalCode"/>
+	</p>
+	<p>
+	  	<label for="original_country">Contact Post Country (WFS) - ISO 3166:</label>
+      	<input readonly name="original_country" id="original_country"/>
+	</p>
+	<p>
+	  	<label for="original_electronicMailAddress">Contact Electronic Mail Address (WFS):</label>
+      	<input readonly name="original_electronicMailAddress" id="original_electronicMailAddress"/>
+ 	</p>
+</fieldset>

Added: trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginal.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginal.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginal.js	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,164 @@
+var $showOriginalDiv = $(this);
+var $originalMetadataForm = $("<form></form>").appendTo($showOriginalDiv);
+var $originalMetadataPopup = $("<div></div>");
+
+var ShowOriginalApi = function() {
+	var that = this;
+	var featuretypeName;
+	
+	this.events = {
+		replaceMetadata : new Mapbender.Event()
+	};
+	
+	var replaceMetadata = function (clickedAttr, attrVal) {
+		var returnObj = {};
+		returnObj[clickedAttr] = attrVal;
+		that.events.replaceMetadata.trigger({
+			data : returnObj
+		});
+		//remove background-color of replaced attr
+		$("#" + clickedAttr).removeClass("differentFromOriginal");
+	};
+	
+	var replaceAllMetadata = function (obj) {
+		var returnObj = {};
+		for(metadataAttr in obj) {
+			var attr = metadataAttr.split("original_");
+			returnObj[attr[1]] = obj[metadataAttr];
+		}	
+		that.events.replaceMetadata.trigger({
+			data : returnObj
+		});
+		//remove background-color of all replaced attr
+		$(".differentFromOriginal").removeClass("differentFromOriginal");
+	};
+	
+	var mergeOriginalWithCurrentMetadata = function (originalObj,currentObj) {
+		var differenceFound = false;
+		for(metadataAttr in currentObj) {
+			var origMetadataAttr = "original_" + metadataAttr;
+			
+			//some attr are excluded from check
+			if(metadataAttr != "wfs_id" &&
+				metadataAttr != "wfs_timestamp" && 
+				metadataAttr != "wfs_timestamp_create" && 
+				metadataAttr != "wfs_keywords" && 
+				metadataAttr != "wfs_termsofuse" &&
+				metadataAttr != "featuretype_name" &&
+				metadataAttr != "featuretype_id" &&
+				metadataAttr != "changeEPSG" &&
+				metadataAttr != "scaleSelect") {
+				
+				if(!originalObj[origMetadataAttr]) {
+					originalObj[origMetadataAttr] = "";
+				}
+				
+				if(currentObj[metadataAttr] == originalObj[origMetadataAttr]) {
+					$("#" + origMetadataAttr).parent().hide();
+				}
+				else if(currentObj[metadataAttr] == "" && originalObj[origMetadataAttr] == "") {
+					$("#" + origMetadataAttr).parent().hide();
+				}
+				else {
+					//mark all attr in main form which are different
+					$("#" + metadataAttr).addClass("differentFromOriginal");
+					(function () {
+						var clickedAttr = metadataAttr;
+						var attrValue = $("#" + origMetadataAttr).val();
+						$("#" + origMetadataAttr).parent().append("<input type='button' value='Replace' id='replaceRecord_"+origMetadataAttr+"' />");
+						$("#replaceRecord_" +origMetadataAttr).addClass("ui-state-default ui-corner-all");
+						$("#replaceRecord_" +origMetadataAttr).bind("click", function () {
+							replaceMetadata(clickedAttr, attrValue);
+						});
+					})();
+					var differenceFound = true;
+				}
+			}
+		}
+		if(differenceFound === false) {
+			$originalMetadataPopup.dialog("close");
+			var noDifferenceMsg = "No difference found.";
+			$("<div>" + noDifferenceMsg + "</div>").dialog(
+				{
+					title : "Show original metadata", 
+					bgiframe: true,
+					autoOpen: true,
+					modal: false,
+					position : [600, 75],
+					buttons: {
+						"ok": function(){
+							$(this).dialog('close').remove();
+						}
+					}
+				}
+			);
+		}
+	};
+	
+	var getOriginalMetadata = function (isWFsOrFeaturetype, currentId, currentData) {
+		if(isWFsOrFeaturetype == "featuretype") {
+			featuretypeName = currentData.featuretype_name;
+		} 
+		// get original metadata from server
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_original_metadata_wfs_server.php",
+			method: "getOriginalMetadata",
+			parameters: {
+				"id": currentId,
+				"featuretypeName": featuretypeName
+			},
+			callback: function (obj, result, message) {
+				if (!result) {
+					return;
+				}
+				fillForm(obj);
+				mergeOriginalWithCurrentMetadata(obj,currentData);
+			}
+		});
+		req.send();	
+	};
+	
+	var fillForm = function (obj) {
+		$originalMetadataForm.easyform("reset");
+		$originalMetadataForm.easyform("fill", obj);
+		$originalMetadataPopup.append($originalMetadataForm);
+		$originalMetadataPopup.dialog({
+			title : "Show original metadata", 
+			autoOpen : false, 
+			draggable : true,
+			modal : true,
+			width : 600,
+			position : [600, 75],
+			buttons: {
+				"close": function() {
+					$(this).dialog('close');
+				},
+				"replace all metadata": function() {
+					replaceAllMetadata(obj);
+					$(this).dialog('close');
+				}
+			},
+			close: function() {
+				$(".differentFromOriginal").removeClass("differentFromOriginal");
+			}
+		});
+		$originalMetadataPopup.dialog("open");
+		
+	};
+	
+	this.init = function (obj) {
+		$originalMetadataPopup.dialog("close");
+		$originalMetadataForm.load("../plugins/mb_metadata_wfs_showOriginal.html", function () {
+			getOriginalMetadata("wfs", obj.wfsId, obj.wfsData);
+		});
+	}
+	
+	this.initLayer = function (obj) {
+		$originalMetadataPopup.dialog("close");
+		$originalMetadataForm.load("../plugins/mb_metadata_wfs_showOriginalLayer.html", function () {
+			getOriginalMetadata("featuretype",obj.wfsId, obj.featuretypeData);
+		});
+	}
+};
+
+$showOriginalDiv.mapbender(new ShowOriginalApi());
\ No newline at end of file

Added: trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginalLayer.html
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginalLayer.html	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_showOriginalLayer.html	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,16 @@
+	<fieldset class="">
+		<legend>Original featuretype metadata</legend>
+		
+		<p>
+	    	<label for="original_featuretype_title">Featuretype Title (WFS):</label>
+			<input readonly name="original_featuretype_title" id="original_featuretype_title"/>
+		</p>
+		<p>
+	    	<label for="original_featuretype_abstract">Featuretype Abstract (WFS):</label>
+			<input readonly name="original_featuretype_abstract" id="original_featuretype_abstract"/>
+		</p>
+		<p>
+	    	<label for="original_featuretype_keyword">Featuretype Keywords (WFS):</label>
+			<input readonly name="original_featuretype_keyword" id="original_featuretype_keyword"/>
+		</p>
+	</fieldset>

Added: trunk/mapbender/http/plugins/mb_metadata_wfs_submit.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_wfs_submit.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_wfs_submit.js	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,67 @@
+var $submit = $(this);
+
+var MetadataSubmitApi = function () {
+	var that = this;
+	var formData = {};
+	
+	var serializeCallback = function (data) {
+		if (data === null) {
+			formData = null;
+			return;
+		}
+		if (formData !== null) {
+			formData = $.extend(formData, data);
+		}
+	};
+	
+	this.enable = function () {
+		$submit.find("input[type='submit']").removeAttr("disabled");
+	};
+	
+	this.submit = function () {
+		formData = {};
+		this.events.submit.trigger({
+			callback: serializeCallback
+		});
+
+		if (formData === null) {
+			return;
+		}
+
+		// get metadata from server
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_metadata_wfs_server.php",
+			method: "save",
+			parameters: {
+				"data": formData
+			},
+			callback: function (obj, result, message) {
+				if (!result) {
+					$("<div></div>").text(!message ? "An error occured." : message).dialog({
+						modal: true
+					});
+					return;
+				}
+				$("<div></div>").text(message).dialog({
+					modal: true
+				});
+
+			}
+		});
+		req.send();			
+	};
+	
+	this.events = {
+		submit: new Mapbender.Event()
+	};
+	
+	var init = function () {
+		$submit.find("input[type='submit']").bind("click", function () {
+			that.submit();
+		});
+	};
+
+	init();
+};
+
+$submit.mapbender(new MetadataSubmitApi());

Added: trunk/mapbender/http/plugins/mb_original_metadata_wfs_server.php
===================================================================
--- trunk/mapbender/http/plugins/mb_original_metadata_wfs_server.php	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_original_metadata_wfs_server.php	2010-06-02 09:50:04 UTC (rev 6238)
@@ -0,0 +1,211 @@
+<?php
+require_once dirname(__FILE__) . "/../../core/globalSettings.php";
+require_once dirname(__FILE__) . "/../classes/class_user.php";
+require_once dirname(__FILE__) . "/../classes/class_wfs.php";
+
+$ajaxResponse = new AjaxResponse($_POST);
+
+function abort ($message) {
+	global $ajaxResponse;
+	$ajaxResponse->setSuccess(false);
+	$ajaxResponse->setMessage($message);
+	$ajaxResponse->send();
+	die;
+};
+
+function getWfsMetadataFromXml($capabilitiesDoc) {
+	$xmlDoc = new DOMDocument();
+	$xmlDoc->encoding = CHARSET;
+	$xmlDoc->preserveWhiteSpace = false;
+	$xmlDoc->loadXML($capabilitiesDoc);
+	
+	//define default resultObj
+	$resultObj = array(
+		"original_title" => "",
+		"original_summary" => "",
+		"original_accessconstraints" => "",
+		"original_fees" => "",
+//		"original_wfs_keywords" => "",
+		"original_positionName" => "",
+		"original_electronicMailAddress" => "",
+		"original_facsimile" => "",
+		"original_voice" => "",
+		"original_individualName" => "",
+		"original_providerName" => "",
+		"original_deliveryPoint" => "",
+		"original_city" => "",
+		"original_administrativeArea" => "",
+		"original_postalCde" => "",
+		"original_country" => ""
+	);
+	
+	$service_node = $xmlDoc->getElementsByTagName('Service'); 
+	foreach ($service_node as $node) {
+		$children = $node->childNodes;
+		foreach($children as $child) {
+			$e = new mb_exception(strtoupper($child->nodeName)."------".$child->nodeValue);
+			if (strtoupper($child->nodeName) == "TITLE"){
+				$resultObj["original_title"] = $child->nodeValue;
+			}
+			if (strtoupper($child->nodeName) == "ABSTRACT"){
+				$resultObj["original_summary"] = $child->nodeValue;
+			}
+			if (strtoupper($child->nodeName) == "ACCESSCONSTRAINTS"){
+				$resultObj["original_accessconstraints"] = $child->nodeValue;
+			}
+			if (strtoupper($child->nodeName) == "FEES"){
+				$resultObj["original_fees"] = $child->nodeValue;
+			}
+
+/*			
+			//"Service"-childnode KeywordList	
+			if (strtoupper($child->nodeName) == "KEYWORDLIST"){
+				$keywords_list = $child->childNodes;
+				$keywords = array();
+				foreach ($keywords_list as $keywordlist_child_node) {																		
+					$keyword = $keywordlist_child_node->nodeValue;						
+					array_push($keywords, $keyword);
+				}
+				$resultObj["original_wms_keywords"] = implode(", ", $keywords); 		
+			}
+*/				
+			//"Service"-childnode ContactInformation	
+			if (strtoupper($child->nodeName) == "CONTACTINFORMATION"){
+				$contactinfo_list = $child->childNodes;
+				foreach ($contactinfo_list as $contact_child_node) {
+					if (strtoupper($contact_child_node->nodeName) == "CONTACTPOSITION"){
+						$wms_contactposition = $contact_child_node->nodeValue;
+						$resultObj["original_positionName"] = $contact_child_node->nodeValue;
+					}
+					if (strtoupper($contact_child_node->nodeName) == "CONTACTELECTRONICMAILADDRESS"){
+						$resultObj["original_electronicMailAddress"] = $contact_child_node->nodeValue;
+					}
+					if (strtoupper($contact_child_node->nodeName) == "CONTACTFACSIMILETELEPHONE"){
+						$wms_fax = $contact_child_node->nodeValue;	
+						$resultObj["original_facsimile"] = $contact_child_node->nodeValue;
+					}
+					if (strtoupper($contact_child_node->nodeName) == "CONTACTVOICETELEPHONE"){
+						$wms_telephone = $contact_child_node->nodeValue;
+						$resultObj["original_voice"] = $contact_child_node->nodeValue;
+					}
+					
+					//"ContactInformation"-childnode ContactpersonPrimary
+					if (strtoupper($contact_child_node->nodeName) == "CONTACTPERSONPRIMARY"){
+						$contactpersoninfo_list = $contact_child_node->childNodes;
+						foreach($contactpersoninfo_list as $contactperson_child) {
+							if (strtoupper($contactperson_child->nodeName) == "CONTACTPERSON"){
+								$resultObj["original_individualName"] = $contactperson_child->nodeValue;
+							}
+							if (strtoupper($contactperson_child->nodeName) == "CONTACTORGANIZATION"){
+								$resultObj["original_providerName"] = $contactperson_child->nodeValue;
+							}
+						}
+					}
+					
+					//"ContactInformation"-childnode ContactAddress	
+					if (strtoupper($contact_child_node->nodeName) == "CONTACTADDRESS"){
+						$contactaddress_list = $contact_child_node->childNodes;
+						foreach($contactaddress_list as $contactaddress_child) {
+							if (strtoupper($contactaddress_child->nodeName) == "ADDRESS"){
+								$resultObj["original_deliveryPoint"] = $contactaddress_child->nodeValue;
+							}
+							if (strtoupper($contactaddress_child->nodeName) == "CITY"){
+								$resultObj["original_city"] = $contactaddress_child->nodeValue;
+							}
+							if (strtoupper($contactaddress_child->nodeName) == "STATEORPROVINCE"){
+								$resultObj["original_administrativeArea"] = $contactaddress_child->nodeValue;
+							}
+							if (strtoupper($contactaddress_child->nodeName) == "POSTCODE"){
+								$resultObj["original_postalCode"] = $contactaddress_child->nodeValue;
+							}
+							if (strtoupper($contactaddress_child->nodeName) == "COUNTRY"){
+								$resultObj["original_country"] = $contactaddress_child->nodeValue;
+							}		
+						}	
+					}		
+				}
+			}						
+		}
+	}
+	return $resultObj;
+}
+
+function getfeaturetypeMetadataFromXml($capabilitiesDoc,$featuretypeName) {
+	$xmlDoc = new DOMDocument();
+	$xmlDoc->encoding = CHARSET;
+	$xmlDoc->preserveWhiteSpace = false;
+	$xmlDoc->loadXML($capabilitiesDoc);
+	
+	//define default resultObj
+	$resultObj = array(
+		"original_featuretype_title" => "",
+		"original_featuretype_abstract" => "",
+		"original_featuretype_keyword" => ""
+	);
+	
+	$layer_nodes = $xmlDoc->getElementsByTagName('Featuretype');
+	foreach ($layer_nodes as $node) {
+		$children = $node->childNodes;
+		foreach($children as $child) {
+			if (strtoupper($child->nodeName) == "NAME"){
+				if($child->nodeValue == $layerName) {
+					$layerNode = $node;
+				}	
+			}
+		}
+	}
+	
+	$layerChildren = $layerNode->childNodes;
+	foreach($layerChildren as $layerChild) {
+		if (strtoupper($layerChild->nodeName) == "TITLE") {
+			$resultObj["original_featuretype_title"] = $layerChild->nodeValue;
+		}
+		if (strtoupper($layerChild->nodeName) == "ABSTRACT") {
+			$resultObj["original_featuretype_abstract"] = $layerChild->nodeValue;
+		}
+		//"Service"-childnode KeywordList	
+		if (strtoupper($layerChild->nodeName) == "KEYWORDLIST") {
+			$keywords_list = $layerChild->childNodes;
+			$keywords = array();
+			foreach ($keywords_list as $keywordlist_child_node) {																		
+				$keyword = $keywordlist_child_node->nodeValue;						
+				array_push($keywords, $keyword);
+			}
+			$resultObj["original_featuretype_keyword"] = implode(", ", $keywords); 		
+		}
+	}
+	return $resultObj;
+}
+
+switch ($ajaxResponse->getMethod()) {
+	case "getOriginalMetadata" :
+		$wfsId = $ajaxResponse->getParameter("id");
+		$featuretypeName = $ajaxResponse->getParameter("featuretypeName");
+		$sql = <<<SQL
+	
+SELECT wfs_getcapabilities_doc FROM wfs WHERE wfs_id = $wfsId;
+
+SQL;
+		$res = db_query($sql);
+		$row = db_fetch_array($res);
+		$wfs_getcapabilities_doc = $row["wfs_getcapabilities_doc"];
+		
+		if($featuretypeName != "") {
+			$resultObj = getFeaturetypeMetadataFromXml($wfs_getcapabilities_doc,$featuretypeName);
+		}
+		else {
+			$resultObj = getWfsMetadataFromXml($wfs_getcapabilities_doc);
+		}
+		
+		$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);
+		
+		break;
+	default: 
+		$ajaxResponse->setSuccess(false);
+		$ajaxResponse->setMessage(_mb("An unknown error occured."));
+		break;
+}
+
+$ajaxResponse->send();
+?>
\ No newline at end of file



More information about the Mapbender_commits mailing list