[Mapbender-commits] r8706 - in trunk/mapbender: conf http/classes http/geoportal http/php http/plugins

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Fri Oct 4 00:16:37 PDT 2013


Author: armin11
Date: 2013-10-04 00:16:36 -0700 (Fri, 04 Oct 2013)
New Revision: 8706

Modified:
   trunk/mapbender/conf/mimetype.conf
   trunk/mapbender/http/classes/class_ckanApi.php
   trunk/mapbender/http/classes/class_iso19139.php
   trunk/mapbender/http/classes/class_map.php
   trunk/mapbender/http/geoportal/authentication.php
   trunk/mapbender/http/geoportal/mod_readCSWResults.php
   trunk/mapbender/http/geoportal/updateUserDataIntoDb.php
   trunk/mapbender/http/php/mod_callMetadata.php
   trunk/mapbender/http/php/mod_exportMapbenderLayer2CkanObjects.php
   trunk/mapbender/http/php/mod_getDownloadOptions.php
   trunk/mapbender/http/php/mod_inspireAtomFeedISOMetadata.php
   trunk/mapbender/http/php/mod_inspireDownloadFeed.php
   trunk/mapbender/http/php/mod_syncCkan.php
   trunk/mapbender/http/plugins/mb_metadata_addon.php
   trunk/mapbender/http/plugins/mb_metadata_server.php
   trunk/mapbender/http/plugins/mb_metadata_showMetadataAddon.js
Log:
Some more options for generating INSPIRE conformant downloadservices.

Modified: trunk/mapbender/conf/mimetype.conf
===================================================================
--- trunk/mapbender/conf/mimetype.conf	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/conf/mimetype.conf	2013-10-04 07:16:36 UTC (rev 8706)
@@ -21,6 +21,7 @@
 	"MapInfo Tab file",
 	"CSV",
 	"GML",
+	"Zipped GML",
 	"GeoTIFF"
 );
 ?>

Modified: trunk/mapbender/http/classes/class_ckanApi.php
===================================================================
--- trunk/mapbender/http/classes/class_ckanApi.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/classes/class_ckanApi.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -495,6 +495,15 @@
 		$data);
 	}
 
+	public function get_group_by_name($name)
+	{
+		$e = new mb_exception("testckan: get group: ".$this->resources['group_register'] . "/" . urlencode($name));
+		return $this->make_request('GET', 
+		$this->resources['group_register'] . "/" . urlencode($name));
+	}
+
+
+
 	// package entity resouce
 
 	/**
@@ -505,7 +514,7 @@
 	 */
 	public function get_package_entity($package)
 	{
-		$e = new mb_exception($this->resources['package_entity'] . '/' . urlencode($package));
+		//$e = new mb_exception($this->resources['package_entity'] . '/' . urlencode($package));
 		return $this->make_request('GET', 
 			$this->resources['package_entity'] . '/' . urlencode($package));
 	}
@@ -533,7 +542,7 @@
 
 	public function delete_package_entity($data)
 	{
-		$e = new mb_exception("post: ".$data);
+		//$e = new mb_exception("post: ".$data);
 		return $this->make_request('POST', 
 			'../action/package_delete', 
 			$data);
@@ -841,14 +850,14 @@
 		// Set cURL method.
 		curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));
 		// Set cURL URI.
-		$e = new mb_exception($this->base_url . $url);
+		$e = new mb_exception("testckan: ckan url to request: ".$this->base_url . $url);
 		$curlUrl = $this->base_url . $url;
 		curl_setopt($this->ch, CURLOPT_URL, $curlUrl);
 		// If POST or PUT, add Authorization: header and request body
 		if ($method === 'POST' || $method === 'PUT')
 		{
 			// We needs a key and some data, yo!
-			$e = new mb_exception("method: ".$method." new url: ".$this->base_url . $url." data: ".$data);
+			//$e = new mb_exception("method: ".$method." new url: ".$this->base_url . $url." data: ".$data);
 			if ( ! ($this->api_key && $data))
 			{
 				// throw exception
@@ -887,7 +896,7 @@
 				$this->http_status_codes[$info['http_code']]);
 		} else {
 			$e = new mb_exception("Returned 200 - OK");
-			$e = new mb_exception($response);
+			//$e = new mb_exception($response);
 		}
 		// Determine how to parse
 		if (isset($info['content_type']) && $info['content_type'])

Modified: trunk/mapbender/http/classes/class_iso19139.php
===================================================================
--- trunk/mapbender/http/classes/class_iso19139.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/classes/class_iso19139.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -161,7 +161,7 @@
 				//$e = new mb_exception("customCatHash: ".$row['custom_category_key'] ." : ". $row['custom_category_id'] );	
 			}
 			//add namespaces to xml if not given - how? - it is to late now - maybe they were given in the csw tag!
-			$e = new mb_exception("Parsing of xml metadata file was successfull"); 
+			$e = new mb_notice("Parsing of xml metadata file was successfull"); 
 			$this->fileIdentifier = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString');
 			$this->fileIdentifier = $this->fileIdentifier[0];
 			$this->createDate = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:dateStamp/gco:Date');

Modified: trunk/mapbender/http/classes/class_map.php
===================================================================
--- trunk/mapbender/http/classes/class_map.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/classes/class_map.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -707,7 +707,7 @@
 		//define key name cache
 		$mapByAppKey = 'mapApp_'.$appId.'_'.$frameName;
 		if ($cache->isActive && $activatedGuiHtmlCache && $cache->cachedVariableExists($mapByAppKey)) {
-			$e = new mb_exception("class_map.php: read ".$mapByAppKey." from ".$cache->cacheType." cache!");
+			$e = new mb_notice("class_map.php: read ".$mapByAppKey." from ".$cache->cacheType." cache!");
 			return $cache->cachedVariableFetch($mapByAppKey);
 		} else {
 			// find the mapframe in the application elements...

Modified: trunk/mapbender/http/geoportal/authentication.php
===================================================================
--- trunk/mapbender/http/geoportal/authentication.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/geoportal/authentication.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -1,78 +1,79 @@
-<?php
-include_once(dirname(__FILE__)."/../../core/globalSettings.php");
-
-$pw = $_REQUEST['password'];
-$name = $_REQUEST['name'];
-
-$e = new mb_exception('SESSION[mb_user_name]: '.Mapbender::session()->get("mb_user_name"));
-
-# Q4U - Michael Spitz - 16.08.2006 - Falls Cookies deaktiviert sind, muss die Session-ID an die Folgeseiten weitergereicht werden
-$URLAdd="";
-if($_COOKIE[session_name()]=="") {
-	$URLAdd="?".session_name()."=".$_REQUEST[session_name()];
-}
-
-$isAuthenticated = authenticate($name,$pw);
-
-if($isAuthenticated != false) {
-	setSession();
-	Mapbender::session()->set("mb_user_password",$pw); 
-  	Mapbender::session()->set("mb_user_id",$isAuthenticated["mb_user_id"]);
-	Mapbender::session()->set("mb_user_name",$isAuthenticated["mb_user_name"]);
-	Mapbender::session()->set("mb_user_ip",$_SERVER['REMOTE_ADDR']);
-	Mapbender::session()->set("mb_user_email",$isAuthenticated["mb_user_email"]);
-	Mapbender::session()->set("mb_user_department",$isAuthenticated["mb_user_department"]);
-	Mapbender::session()->set("mb_user_organisation_name",$isAuthenticated["mb_user_organisation_name"]);
-	Mapbender::session()->set("mb_user_position_name",$isAuthenticated["mb_user_position_name"]);
-	Mapbender::session()->set("mb_user_phone",$isAuthenticated["mb_user_phone"]);
-	Mapbender::session()->set("Textsize",$isAuthenticated["mb_user_textsize"]);
-	Mapbender::session()->set("Glossar",$isAuthenticated["mb_user_glossar"]);
-	Mapbender::session()->set("mb_user_description",$isAuthenticated["mb_user_description"]);
-	Mapbender::session()->set("mb_user_city",$isAuthenticated["mb_user_city"]);
-	Mapbender::session()->set("mb_user_postal_code",$isAuthenticated["mb_user_postal_code"]);
-	Mapbender::session()->set("epsg","EPSG:31466");
-	Mapbender::session()->set("HTTP_HOST",$_SERVER["HTTP_HOST"]);
-//INSERT LAST LOGIN DATE AND TIME
-//NEW Filed required "ALTER TABLE mapbender.mb_user ADD COLUMN mb_user_last_login_date date;"
-	$sql = "UPDATE mb_user SET";
-	$sql .= " mb_user_last_login_date = now()";
-	$V[0] = Mapbender::session()->get('mb_user_id');
-	$T[0] = 'i';
-	$sql .= 'WHERE mb_user_id = $1';
-	$res = db_prep_query($sql, $V, $T);
-	//UPDATE USER LOGIN DATE and TIME	
-	require_once(dirname(__FILE__)."/../php/mb_getGUIs.php");
-	$arrayGUIs = mb_getGUIs($isAuthenticated["mb_user_id"]);
-	Mapbender::session()->set("mb_user_guis",$arrayGUIs);
-	header ("Location: http://".$_SERVER['HTTP_HOST']."/portal/success.html".$URLAdd);
-	session_write_close();
-} else {
-	header ("Location: http://".$_SERVER['HTTP_HOST']."/portal/failed.html".$URLAdd);
-}
-
-function authenticate ($name,$pw){
- $con = db_connect(DBSERVER,OWNER,PW);
- db_select_db(DB,$con);
-
- $sql = "SELECT * FROM mb_user WHERE mb_user_name = $1 AND mb_user_password = $2";
- $v = array($name,md5($pw)); // is md5 used really?
- $t = array('s','s');
- $res = db_prep_query($sql,$v,$t);
-
- if($row = db_fetch_array($res)){
-   $e = new mb_exception('row mb_user_name: '.$row['mb_user_name']);
-   return $row;	
-  }
-  else 
-  {
-  return false;
-  }
-}
-function setSession(){
-	session_start(); //function is ok cause the session will be closed directly after starting it!
-	session_write_close();
-}
-function killSession(){
-	Mapbender::session()->kill();
-}
-?>
+<?php
+include_once(dirname(__FILE__)."/../../core/globalSettings.php");
+
+$pw = $_REQUEST['password'];
+$name = $_REQUEST['name'];
+
+$e = new mb_exception('SESSION[mb_user_name]: '.Mapbender::session()->get("mb_user_name"));
+
+# Q4U - Michael Spitz - 16.08.2006 - Falls Cookies deaktiviert sind, muss die Session-ID an die Folgeseiten weitergereicht werden
+$URLAdd="";
+if($_COOKIE[session_name()]=="") {
+	$URLAdd="?".session_name()."=".$_REQUEST[session_name()];
+}
+
+$isAuthenticated = authenticate($name,$pw);
+
+if($isAuthenticated != false) {
+	setSession();
+	Mapbender::session()->set("mb_user_password",$pw); 
+  	Mapbender::session()->set("mb_user_id",$isAuthenticated["mb_user_id"]);
+	Mapbender::session()->set("mb_user_name",$isAuthenticated["mb_user_name"]);
+	Mapbender::session()->set("mb_user_ip",$_SERVER['REMOTE_ADDR']);
+	Mapbender::session()->set("mb_user_email",$isAuthenticated["mb_user_email"]);
+	Mapbender::session()->set("mb_user_department",$isAuthenticated["mb_user_department"]);
+	Mapbender::session()->set("mb_user_organisation_name",$isAuthenticated["mb_user_organisation_name"]);
+	Mapbender::session()->set("mb_user_position_name",$isAuthenticated["mb_user_position_name"]);
+	Mapbender::session()->set("mb_user_phone",$isAuthenticated["mb_user_phone"]);
+	Mapbender::session()->set("Textsize",$isAuthenticated["mb_user_textsize"]);
+	Mapbender::session()->set("Glossar",$isAuthenticated["mb_user_glossar"]);
+	Mapbender::session()->set("mb_user_spatial_suggest",$isAuthenticated["mb_user_spatial_suggest"]);
+	Mapbender::session()->set("mb_user_description",$isAuthenticated["mb_user_description"]);
+	Mapbender::session()->set("mb_user_city",$isAuthenticated["mb_user_city"]);
+	Mapbender::session()->set("mb_user_postal_code",$isAuthenticated["mb_user_postal_code"]);
+	Mapbender::session()->set("epsg","EPSG:31466");
+	Mapbender::session()->set("HTTP_HOST",$_SERVER["HTTP_HOST"]);
+//INSERT LAST LOGIN DATE AND TIME
+//NEW Filed required "ALTER TABLE mapbender.mb_user ADD COLUMN mb_user_last_login_date date;"
+	$sql = "UPDATE mb_user SET";
+	$sql .= " mb_user_last_login_date = now()";
+	$V[0] = Mapbender::session()->get('mb_user_id');
+	$T[0] = 'i';
+	$sql .= 'WHERE mb_user_id = $1';
+	$res = db_prep_query($sql, $V, $T);
+	//UPDATE USER LOGIN DATE and TIME	
+	require_once(dirname(__FILE__)."/../php/mb_getGUIs.php");
+	$arrayGUIs = mb_getGUIs($isAuthenticated["mb_user_id"]);
+	Mapbender::session()->set("mb_user_guis",$arrayGUIs);
+	header ("Location: http://".$_SERVER['HTTP_HOST']."/portal/success.html".$URLAdd);
+	session_write_close();
+} else {
+	header ("Location: http://".$_SERVER['HTTP_HOST']."/portal/failed.html".$URLAdd);
+}
+
+function authenticate ($name,$pw){
+ $con = db_connect(DBSERVER,OWNER,PW);
+ db_select_db(DB,$con);
+
+ $sql = "SELECT * FROM mb_user WHERE mb_user_name = $1 AND mb_user_password = $2";
+ $v = array($name,md5($pw)); // is md5 used really?
+ $t = array('s','s');
+ $res = db_prep_query($sql,$v,$t);
+
+ if($row = db_fetch_array($res)){
+   $e = new mb_exception('row mb_user_name: '.$row['mb_user_name']);
+   return $row;	
+  }
+  else 
+  {
+  return false;
+  }
+}
+function setSession(){
+	session_start(); //function is ok cause the session will be closed directly after starting it!
+	session_write_close();
+}
+function killSession(){
+	Mapbender::session()->kill();
+}
+?>

Modified: trunk/mapbender/http/geoportal/mod_readCSWResults.php
===================================================================
--- trunk/mapbender/http/geoportal/mod_readCSWResults.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/geoportal/mod_readCSWResults.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -102,6 +102,8 @@
 //extract query string - explode by +
 $queryString  = $_REQUEST["q"];
 $queryStringParts = explode("+",$queryString);
+
+//$e = new mb_exception($queryString);
 //extract single elements into variables
 //first entry is allways the query string for any text
 $queryText = $queryStringParts[0];
@@ -132,7 +134,7 @@
 	}	
 }
 //build bbox if all infos are given
-$e = new mb_notice("q= : ".$_REQUEST["q"]);
+$e = new mb_notice("q=: ".$_REQUEST["q"]);
 $e = new mb_notice("ranking: ".$ranking);
 $e = new mb_notice("coord: ".$coord);
 //$e = new mb_exception("geoportal/mod_readCSWResults.php queryText: ".$queryText);
@@ -192,7 +194,7 @@
 //set kind of filter
 
 //debug output
-$e = new mb_notice($spatialFilter);
+$e = new mb_exception($spatialFilter);
 
 
 #get the information out of the mapbender-db
@@ -214,7 +216,6 @@
 	//echo "<br>CAT ID from DB: ".$row_csw["fkey_cat_id"]."<br>";
 	//get urls for getrecords and getrecordbyid from table cat
         $v = $row_csw["fkey_cat_id"];
-	$e = new mb_notice("<br>cat id: ".$row_csw["fkey_cat_id"]);
 	$t = 'i';
 	$sql_gr = "select param_value, param_name from cat_op_conf where fk_cat_id = $1 and param_type = 'getrecords'";
 	$res_gr = db_prep_query($sql_gr, $v, $t);
@@ -223,22 +224,21 @@
 		switch ($row_gr['param_name']) {
 			case "get" :
 				$csw_list[$cnt_csw] ['getrecordsurl_param_name'] = "get";
-				if (isset($row_gr['param_value']) && $row_gr['param_value'] != '') {
+				if (isset($row_gr['param_value']) || $row_gr['param_value'] != '') {
 					$csw_list[$cnt_csw] ['getrecordsurl'] = $row_gr['param_value'];
 					break 2;
 				}
 			break 1;	
 			case "post" :
 				$csw_list[$cnt_csw] ['getrecordsurl_param_name'] = "post";
-				if (isset($row_gr['param_value']) && $row_gr['param_value'] != '') {
-					$e = new mb_exception("<br>getrecords: ".$row_gr['param_value']);
+				if (isset($row_gr['param_value']) || $row_gr['param_value'] != '') {
 					$csw_list[$cnt_csw] ['getrecordsurl'] = $row_gr['param_value'];
 					break 2;
 				}
 			break 1;
 			case "post_xml" :
 				$csw_list[$cnt_csw] ['getrecordsurl_param_name'] = "post_xml";
-				if (isset($row_gr['param_value']) && $row_gr['param_value'] != '' ) {
+				if (isset($row_gr['param_value']) || $row_gr['param_value'] != '' ) {
 					$csw_list[$cnt_csw] ['getrecordsurl'] = $row_gr['param_value'];
 					break 2;
 				}
@@ -530,7 +530,7 @@
 	if($os_catalogs_file_handle = fopen($resdir."/".$cli_id."_os".$catalog_number."_".$request_p.".xml","w")){
 		fwrite($os_catalogs_file_handle,"<resultlist>\n");
 		#logit("<resultlist>\n");
-		fwrite($os_catalogs_file_handle,"<querystring>".urlencode($queryText)."</querystring>\n");
+		fwrite($os_catalogs_file_handle,"<querystring>".urlencode($queryString)."</querystring>\n");
 		#logit("<querystring>".urlencode($queryText)."</querystring>\n");
 		fwrite($os_catalogs_file_handle,"<totalresults>".$n_results."</totalresults>\n");
 		#logit("<totalresults>".$n_results."</totalresults>\n");

Modified: trunk/mapbender/http/geoportal/updateUserDataIntoDb.php
===================================================================
--- trunk/mapbender/http/geoportal/updateUserDataIntoDb.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/geoportal/updateUserDataIntoDb.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -1,112 +1,114 @@
-<?php
-#  
-# 
-# Copyright (C) 2002 CCGIS 
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#Script which is included by a typo3 script to register the users
-
-	require_once(dirname(__FILE__)."/../../core/globalSettings.php");
-	require_once(dirname(__FILE__)."/../classes/class_administration.php");
-	$adm = new administration();
-	$con = db_connect(DBSERVER,OWNER,PW);
-	db_select_db(DB,$con);
-	// fields which should be updated
-	$fields = array();
-	// entries
-        $v = array();
-        // types
-        $t = array();
-	// start sql statement
-	$sql = "UPDATE mb_user SET";
-        $sql .= " mb_user_owner = 5299"; #all users belong to the central administrator
-         //change username if field is not empty - the variables are from the calling script
-        if ($mb_user_name != '') {
-            $fields[] = array('mb_user_name', $mb_user_name, 's');
-        }
-	else
-	{
-		$mb_user_name = $_SESSION['mb_user_name'];
-	}
-        // change password if it was set
-        if ($mb_user_password != '') {
-            $fields[] = array('mb_user_password', md5($mb_user_password), 's');
-	    #$fields[] = array('mb_user_digest', md5($mb_user_name.";".$mb_user_email.":".REALM.":".$mb_user_password), 's');
-        }
-	#else
-	#{
-	#	$mb_user_password = $_SESSION['mb_user_password']; # Don't update the password for a guest user - cause no one can get a anonymous user any more - this is done with password guest!
-	#}
-  
-        //update other fields
-        $fields[] = array('mb_user_description', $mb_user_description, 's');
-        $fields[] = array('mb_user_email', $mb_user_email, 's');
-        $fields[] = array('mb_user_phone', $mb_user_phone, 's');
-        #$fields[] = array('mb_user_department', $mb_user_department, 's'); # don't update department cause it is used for some relation - TODO uncomment it when relation is obsolet
-        $fields[] = array('mb_user_organisation_name', $mb_user_organisation_name, 's');
-        $fields[] = array('mb_user_position_name', $mb_user_position_name, 's');
-        $fields[] = array('mb_user_city', $mb_user_city, 's');
-	#$e = new mb_exception("geoportal/updateUserIntoDb.php: digest new: ".md5($mb_user_name.";".$mb_user_email.":".REALM.":".$mb_user_password));
-	$fields[] = array('mb_user_digest', md5($mb_user_name.";".$mb_user_email.":".REALM.":".$mb_user_password), 's');
-        if(is_int($mb_user_postal_code) && $mb_user_postal_code >= 0){
-        	$fields[] = array('mb_user_postal_code', $mb_user_postal_code, 'i'); //postal_code als integer?
-	}
-        $fields[] = array('mb_user_textsize', $Textsize, 's');
-        $fields[] = array('mb_user_glossar', $Glossar, 's');
-        // build sql statement
-        foreach ($fields as $idx => $field) {
-            $sql .= ', '.$field[0].' = $'.($idx + 1);
-            $v[] = $field[1];
-            $t[] = $field[2];
-        }
-        // + where condition
-	
-        $v[] = $_SESSION["mb_user_id"];
-        $t[] = 'i';
-        $sql .= 'WHERE mb_user_id = $'.count($v);//.' AND mb_user_name != \'guest\'';
-	if  ($_SESSION["mb_user_id"] != ANONYMOUS_USER) {   	
-		$res = db_prep_query($sql, $v, $t);
-	}
-	if(!$res)
-	{
-		$e = new mb_exception("db_query($qstring)=$ret db_error=".db_error());	
-	}
-	//UPDATE of the SESSION VARS
-	$_SESSION["mb_user_email"] = $mb_user_email; 
-	$_SESSION["mb_user_department"] = $mb_user_department; 
-	$_SESSION["mb_user_organisation_name"] = $mb_user_organisation_name; 
-	$_SESSION["mb_user_position_name"] = $mb_user_position_name; 
-	$_SESSION["mb_user_phone"] = $mb_user_phone; 
-	$_SESSION["Textsize"] = $Textsize;
-	$_SESSION["Glossar"] = $Glossar;	
-	$_SESSION["mb_user_description"]= $mb_user_description;
-	$_SESSION["mb_user_city"]= $mb_user_city;
-	$_SESSION["mb_user_postal_code"]= $mb_user_postal_code;
-	
-	
-	
-	
-/*	//Push registrated user into ANONYMOUS_GROUP guest????
-	$sql = "SELECT mb_group_id FROM mb_group WHERE mb_group_name = 'guest' LIMIT 1";
-	$res = db_prep_query($sql, array(), array());
-	$row = db_fetch_array($res);
-	$group_id = $row['mb_group_id'];
-	$sql = "INSERT INTO mb_user_mb_group (fkey_mb_user_id, fkey_mb_group_id) VALUES ($1, $2)";
-	$v = array($adm->getUserIdByUserName($mb_user_name), $group_id);
-	$t = array('i', 'i');
-	$res = db_prep_query($sql, $v, $t);
-*/
-?>
+<?php
+#  
+# 
+# Copyright (C) 2002 CCGIS 
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#Script which is included by a typo3 script to register the users
+
+	require_once(dirname(__FILE__)."/../../core/globalSettings.php");
+	require_once(dirname(__FILE__)."/../classes/class_administration.php");
+	$adm = new administration();
+	$con = db_connect(DBSERVER,OWNER,PW);
+	db_select_db(DB,$con);
+	// fields which should be updated
+	$fields = array();
+	// entries
+        $v = array();
+        // types
+        $t = array();
+	// start sql statement
+	$sql = "UPDATE mb_user SET";
+        $sql .= " mb_user_owner = 5299"; #all users belong to the central administrator
+         //change username if field is not empty - the variables are from the calling script
+        if ($mb_user_name != '') {
+            $fields[] = array('mb_user_name', $mb_user_name, 's');
+        }
+	else
+	{
+		$mb_user_name = $_SESSION['mb_user_name'];
+	}
+        // change password if it was set
+        if ($mb_user_password != '') {
+            $fields[] = array('mb_user_password', md5($mb_user_password), 's');
+	    #$fields[] = array('mb_user_digest', md5($mb_user_name.";".$mb_user_email.":".REALM.":".$mb_user_password), 's');
+        }
+	#else
+	#{
+	#	$mb_user_password = $_SESSION['mb_user_password']; # Don't update the password for a guest user - cause no one can get a anonymous user any more - this is done with password guest!
+	#}
+  
+        //update other fields
+        $fields[] = array('mb_user_description', $mb_user_description, 's');
+        $fields[] = array('mb_user_email', $mb_user_email, 's');
+        $fields[] = array('mb_user_phone', $mb_user_phone, 's');
+        #$fields[] = array('mb_user_department', $mb_user_department, 's'); # don't update department cause it is used for some relation - TODO uncomment it when relation is obsolet
+        $fields[] = array('mb_user_organisation_name', $mb_user_organisation_name, 's');
+        $fields[] = array('mb_user_position_name', $mb_user_position_name, 's');
+        $fields[] = array('mb_user_city', $mb_user_city, 's');
+	#$e = new mb_exception("geoportal/updateUserIntoDb.php: digest new: ".md5($mb_user_name.";".$mb_user_email.":".REALM.":".$mb_user_password));
+	$fields[] = array('mb_user_digest', md5($mb_user_name.";".$mb_user_email.":".REALM.":".$mb_user_password), 's');
+        if(is_int($mb_user_postal_code) && $mb_user_postal_code >= 0){
+        	$fields[] = array('mb_user_postal_code', $mb_user_postal_code, 'i'); //postal_code als integer?
+	}
+        $fields[] = array('mb_user_textsize', $Textsize, 's');
+        $fields[] = array('mb_user_glossar', $Glossar, 's');
+        $fields[] = array('mb_user_spatial_suggest', $mb_user_spatial_suggest, 's');
+        // build sql statement
+        foreach ($fields as $idx => $field) {
+            $sql .= ', '.$field[0].' = $'.($idx + 1);
+            $v[] = $field[1];
+            $t[] = $field[2];
+        }
+        // + where condition
+	
+        $v[] = $_SESSION["mb_user_id"];
+        $t[] = 'i';
+        $sql .= 'WHERE mb_user_id = $'.count($v);//.' AND mb_user_name != \'guest\'';
+	if  ($_SESSION["mb_user_id"] != ANONYMOUS_USER) {   	
+		$res = db_prep_query($sql, $v, $t);
+	}
+	if(!$res)
+	{
+		$e = new mb_exception("db_query($qstring)=$ret db_error=".db_error());	
+	}
+	//UPDATE of the SESSION VARS
+	$_SESSION["mb_user_email"] = $mb_user_email; 
+	$_SESSION["mb_user_department"] = $mb_user_department; 
+	$_SESSION["mb_user_organisation_name"] = $mb_user_organisation_name; 
+	$_SESSION["mb_user_position_name"] = $mb_user_position_name; 
+	$_SESSION["mb_user_phone"] = $mb_user_phone; 
+	$_SESSION["Textsize"] = $Textsize;
+	$_SESSION["Glossar"] = $Glossar;	
+	$_SESSION["mb_user_spatial_suggest"] = $mb_user_spatial_suggest;	
+	$_SESSION["mb_user_description"]= $mb_user_description;
+	$_SESSION["mb_user_city"]= $mb_user_city;
+	$_SESSION["mb_user_postal_code"]= $mb_user_postal_code;
+	
+	
+	
+	
+/*	//Push registrated user into ANONYMOUS_GROUP guest????
+	$sql = "SELECT mb_group_id FROM mb_group WHERE mb_group_name = 'guest' LIMIT 1";
+	$res = db_prep_query($sql, array(), array());
+	$row = db_fetch_array($res);
+	$group_id = $row['mb_group_id'];
+	$sql = "INSERT INTO mb_user_mb_group (fkey_mb_user_id, fkey_mb_group_id) VALUES ($1, $2)";
+	$v = array($adm->getUserIdByUserName($mb_user_name), $group_id);
+	$t = array('i', 'i');
+	$res = db_prep_query($sql, $v, $t);
+*/
+?>

Modified: trunk/mapbender/http/php/mod_callMetadata.php
===================================================================
--- trunk/mapbender/http/php/mod_callMetadata.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/php/mod_callMetadata.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -273,6 +273,7 @@
 	if (!in_array($testMatch,$HOSTNAME_WHITELIST_array)) {
 		//echo "Requested hostname <b>".$testMatch."</b> not whitelist! Please control your mapbender.conf.";
 		echo "Requested <b>hostName</b> not in whitelist! Please control your mapbender.conf.";
+		
 		$e = new mb_notice("Whitelist: ".HOSTNAME_WHITELIST);
 		$e = new mb_notice("hostName not found in whitelist!");
 		die(); 	

Modified: trunk/mapbender/http/php/mod_exportMapbenderLayer2CkanObjects.php
===================================================================
--- trunk/mapbender/http/php/mod_exportMapbenderLayer2CkanObjects.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/php/mod_exportMapbenderLayer2CkanObjects.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -6,7 +6,7 @@
 //select open data information from mapbenders database
 $sql = <<<SQL
 
-select wms_id, layer_id, f_collect_topic_cat_layer(layer_id) as category, f_collect_layer_keywords(layer_id) as keywords, layer.uuid as uuid, wms_title || ' - Ebene: ' || layer_title as title, wms_abstract || '\r\n' || layer_abstract as notes, tou_licence_title, tou_licence_url, tou_licence_id, isopen, to_timestamp(wms_timestamp) as wms_timestamp, to_timestamp(wms_timestamp_create) as wms_timestamp_create, wms_owner as service_owner,fees,accessconstraints, fkey_mb_group_id as service_group, contactperson, address, city, postcode, contactvoicetelephone, contactelectronicmailaddress from (select termsofuse_id, description as tou_licence_title, descriptionlink as tou_licence_url, wms_tou.name as tou_licence_id, wms_tou.isopen as isopen, wms_id, wms_title, wms_timestamp, wms_timestamp_create, wms.wms_abstract, wms.wms_owner,fees,accessconstraints,wms.fkey_mb_group_id, contactperson, address, city, postcode, contactvoicetelephone, contactelectronicmailaddress from (select * from 
 termsofuse inner join wms_termsofuse on termsofuse.termsofuse_id = wms_termsofuse.fkey_termsofuse_id and termsofuse.termsofuse_id in ($openLicences)) as wms_tou inner join wms on wms_tou.fkey_wms_id = wms.wms_id) as wms_tou2 inner join layer on wms_tou2.wms_id = layer.fkey_wms_id and layer_searchable=1; 
+select wms_id, layer_id, f_collect_topic_cat_layer(layer_id) as category, f_collect_layer_keywords(layer_id) as keywords, layer.uuid as uuid, wms_title || ' - Ebene: ' || layer_title as title, wms_abstract || '\r\n' || layer_abstract as notes, tou_licence_title, tou_licence_url, tou_licence_id, tou_licence_timestamp, isopen, to_timestamp(wms_timestamp) as wms_timestamp, to_timestamp(wms_timestamp_create) as wms_timestamp_create, wms_owner as service_owner,fees,accessconstraints, fkey_mb_group_id as service_group, contactperson, address, city, postcode, contactvoicetelephone, contactelectronicmailaddress from (select termsofuse_id, description as tou_licence_title, descriptionlink as tou_licence_url, wms_tou.name as tou_licence_id, wms_tou.isopen as isopen, wms_tou.timestamp as tou_licence_timestamp, wms_id, wms_title, wms_timestamp, wms_timestamp_create, wms.wms_abstract, wms.wms_owner,fees,accessconstraints,wms.fkey_mb_group_id, contactperson, address, city, postcode, conta
 ctvoicetelephone, contactelectronicmailaddress from (select * from termsofuse inner join wms_termsofuse on termsofuse.termsofuse_id = wms_termsofuse.fkey_termsofuse_id and termsofuse.termsofuse_id in ($openLicences)) as wms_tou inner join wms on wms_tou.fkey_wms_id = wms.wms_id) as wms_tou2 inner join layer on wms_tou2.wms_id = layer.fkey_wms_id and layer_searchable=1; 
 
 SQL;
 $result = db_query($sql);
@@ -28,12 +28,14 @@
 	$sqlTable['service_postcode'][] = $row['postcode'];
 	$sqlTable['service_phone'][] = $row['contactvoicetelephone'];
 	$sqlTable['service_email'][] = $row['contactelectronicmailaddress'];
+	$sqlTable['service_timestamp'][] = $row['wms_timestamp'];
 	$sqlTable['notes'][] = $row['notes'];
 	$sqlTable['service_fees'][] = $row['fees'];
 	$sqlTable['service_accessconstraints'][] = $row['accessconstraints'];
 	$sqlTable['tou_licence_title'][] = $row['tou_licence_title'];
 	$sqlTable['tou_licence_id'][] = $row['tou_licence_id'];
 	$sqlTable['tou_licence_url'][] = $row['tou_licence_url'];
+	$sqlTable['tou_licence_timestamp'][] = $row['tou_licence_timestamp'];
 	$sqlTable['isopen'][] = $row['isopen'];
 	$sqlTable['temporal_coverage_to'][] = $row['wms_timestamp'];
 	$sqlTable['temporal_coverage_from'][] = $row['wms_timestamp_create'];
@@ -79,6 +81,11 @@
 $sqlTable['group_city'] = $groupOwnerArray[9];
 $sqlTable['group_logo'] = $groupOwnerArray[10];
 $sqlTable['group_homepage'] = $groupOwnerArray[12];
+
+$sqlTable['group_timestamp'] = $groupOwnerArray[13];
+
+
+
 //test output
 /*for ($i=0; $i < count($sqlTable['name']); $i++){
 		echo $sqlTable['name'][$i]." - ".$sqlTable['title'][$i]." - ".$sqlTable['service_id'][$i]." - ".$sqlTable['resource_id'][$i]." - ".$sqlTable['organization'][$i]." - ".$sqlTable['orgaId'][$i]."<br>";
@@ -111,6 +118,18 @@
 	$package->maintainer = $mbArray['group_title']; //mb_group.mb_group_name
 	$package->point_of_contact = $mbArray['group_title'];//"Andreas Becker"; //mb_user.mb_user_name - owner
 	$package->point_of_contact_free_address = $mbArray['group_address']."\r\n". $mbArray['group_postcode']." ".$mbArray['group_city']."\r\n".$mbArray['group_telephone'];//"Ferdinand-Sauerbruch-Straße 15"; //mb_group.mb_group_address
+	//generate timestamp of last change
+	//$e = new mb_exception("mod_exportMapbenderLayer2CkanObjects.php: group timestamp:".$mbArray['group_timestamp']);
+	//$e = new mb_exception("mod_exportMapbenderLayer2CkanObjects.php: service timestamp:".date("Y-m-d H:i:s",strtotime($mbArray['service_timestamp'])));
+	//$e = new mb_exception("mod_exportMapbenderLayer2CkanObjects.php: tou timestamp:".$mbArray['tou_licence_timestamp']);
+	$timestamps = array(
+		date("Y-m-d H:i:s",$mbArray['group_timestamp']),
+		date("Y-m-d H:i:s",strtotime($mbArray['service_timestamp'])),
+		date("Y-m-d H:i:s",$mbArray['tou_licence_timestamp'])
+	);
+	$maxDate = max($timestamps);
+	//
+	$package->timestamp = $maxDate;
 	$package->point_of_contact_email = $mbArray['group_email'];//"poststelle at lvermgeo.rlp"; //mb_group.mb_group_email
 	$package->license = $mbArray['tou_licence_title'];//"Datenlizenz Deutschland – Namensnennung – nicht kommerziell"; // termsofuse.description
 	$package->author = $mbArray['mb_user_id'];//""; //mb_group.mb_group_name
@@ -121,10 +140,15 @@
 	//$package->groups[0] = CKAN_GROUP_NAME;
 	//for v3:
 	$package->groups[0]->name = CKAN_GROUP_NAME; //constant
+	$package->groups[1]->name = "geo"; //constant
 	if ($mbArray['categories']) {
 		//add categories as groups
+		$numberOfCategories = 2;
 		for ($i=0; $i < count($mbArray['categories']); $i++){
-			$package->groups[$i + 1]->name = $mbArray['categories'][$i];
+			if ($mbArray['categories'][$i] != "geo") {
+				$package->groups[$numberOfCategories]->name = $mbArray['categories'][$i];
+				$numberOfCategories++;
+			}
 		}
 	}
 	if ($mbArray['resource_keywords'] && $mbArray['resource_keywords'] != '') {
@@ -172,7 +196,7 @@
 	$package->resources[1]->resource_type = "visualization"; //constant
 
 	$package->resources[2]->description = "Metadaten zur WMS Kartenebene";//$mbArray['mb_user_id'];// "Link zur WMS-Darstellung im GeoPortal.rlp, die Darstellung erfolgt ab einem Maßstab 1:500.000"; //fix: "".id.id?
-	$package->resources[2]->format = "html"; //constant
+	$package->resources[2]->format = "HTML"; //constant
 	$package->resources[2]->url = $mapbenderUrl."/php/mod_showMetadata.php?languageCode=de&resource=layer&layout=tabs&id=".$mbArray['resource_id'];// "http://www.geoportal.rlp.de/portal/karten.html?LAYER[zoom]=1&LAYER[id]=36699"; //constant .. ids
 	$package->resources[2]->resource_type = "metadata"; //constant
 
@@ -224,7 +248,7 @@
 	$listGroupIdsString = implode(",",$listGroupIds);
 	//do the database requests
 	if ($listOwnerIdsString != "") {
-		$sql = "SELECT mb_group_name as metadatapointofcontactorgname, mb_group_title as metadatapointofcontactorgtitle, mb_group_id, mb_group_logo_path  as metadatapointofcontactorglogo, mb_group_address as metadatapointofcontactorgaddress, mb_group_email as metadatapointofcontactorgemail, mb_group_postcode as metadatapointofcontactorgpostcode, mb_group_city as metadatapointofcontactorgcity, mb_group_voicetelephone as metadatapointofcontactorgtelephone, mb_group_facsimiletelephone as metadatapointofcontactorgfax , mb_group_homepage, b.mb_user_id as mb_user_id FROM mb_group AS a, mb_user AS b, mb_user_mb_group AS c WHERE b.mb_user_id IN (".$listOwnerIdsString.") AND b.mb_user_id = c.fkey_mb_user_id AND c.fkey_mb_group_id = a.mb_group_id AND c.mb_user_mb_group_type=2";
+		$sql = "SELECT mb_group_name as metadatapointofcontactorgname, mb_group_title as metadatapointofcontactorgtitle, mb_group_id, mb_group_logo_path  as metadatapointofcontactorglogo, mb_group_address as metadatapointofcontactorgaddress, mb_group_email as metadatapointofcontactorgemail, mb_group_postcode as metadatapointofcontactorgpostcode, mb_group_city as metadatapointofcontactorgcity, mb_group_voicetelephone as metadatapointofcontactorgtelephone, mb_group_facsimiletelephone as metadatapointofcontactorgfax, a.timestamp as metadatapointofcontactorgtime, mb_group_homepage, b.mb_user_id as mb_user_id, b.timestamp as mb_user_time FROM mb_group AS a, mb_user AS b, mb_user_mb_group AS c WHERE b.mb_user_id IN (".$listOwnerIdsString.") AND b.mb_user_id = c.fkey_mb_user_id AND c.fkey_mb_group_id = a.mb_group_id AND c.mb_user_mb_group_type=2";
 		$resultOrgaOwner = db_query($sql);
 		$index  = 0;
 		while ($row = db_fetch_array($resultOrgaOwner)) {
@@ -240,6 +264,8 @@
 			$metadataContactOwnerArray[$index]['mb_group_homepage'] = $row['mb_group_homepage'];
 			$metadataContactOwnerArray[$index]['mb_user_id'] = $row['mb_user_id'];
 			$metadataContactOwnerArray[$index]['orga_id'] = $row['mb_group_id'];
+			$metadataContactOwnerArray[$index]['metadatapointofcontactorgtime'] = $row['metadatapointofcontactorgtime'];
+			//$metadataContactOwnerArray[$index]['mb_user_time'] = $row['mb_user_time'];
 			$index++;
 		}
 		$index = 0;
@@ -258,11 +284,14 @@
 			$groupOwnerArray[10][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['metadatapointofcontactorglogo']; //logo - 10	
 			$groupOwnerArray[11][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['orga_id'];
 			$groupOwnerArray[12][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['mb_group_homepage'];
+			
+			$groupOwnerArray[13][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['metadatapointofcontactorgtime'];
+			//$groupOwnerArray[14][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['mb_user_time'];
 		}
 	}
 	//for groupList
 	if ($listGroupIdsString != "") {
-		$sql = "SELECT mb_group_name as metadatapointofcontactorgname, mb_group_title as metadatapointofcontactorgtitle, mb_group_id, mb_group_logo_path  as metadatapointofcontactorglogo, mb_group_address as metadatapointofcontactorgaddress, mb_group_email as metadatapointofcontactorgemail, mb_group_postcode as metadatapointofcontactorgpostcode, mb_group_city as metadatapointofcontactorgcity, mb_group_voicetelephone as metadatapointofcontactorgtelephone, mb_group_facsimiletelephone as metadatapointofcontactorgfax, mb_group_homepage, mb_group_id FROM mb_group WHERE mb_group_id IN (".$listGroupIdsString.")";
+		$sql = "SELECT mb_group_name as metadatapointofcontactorgname, mb_group_title as metadatapointofcontactorgtitle, mb_group_id, mb_group_logo_path  as metadatapointofcontactorglogo, mb_group_address as metadatapointofcontactorgaddress, mb_group_email as metadatapointofcontactorgemail, mb_group_postcode as metadatapointofcontactorgpostcode, mb_group_city as metadatapointofcontactorgcity, mb_group_voicetelephone as metadatapointofcontactorgtelephone, mb_group_facsimiletelephone as metadatapointofcontactorgfax, mb_group_homepage, mb_group_id, timestamp as metadatapointofcontactorgtime FROM mb_group WHERE mb_group_id IN (".$listGroupIdsString.")";
 		$resultOrgaGroup = db_query($sql);
 		$index  = 0;
 		while ($row = db_fetch_array($resultOrgaGroup)) {
@@ -278,6 +307,8 @@
 			$metadataContactGroupArray[$index]['mb_group_homepage'] = $row['mb_group_homepage'];
 			$metadataContactGroupArray[$index]['mb_group_id'] = $row['mb_group_id'];
 			$metadataContactGroupArray[$index]['orga_id'] = $row['mb_group_id'];
+			
+			$metadataContactGroupArray[$index]['metadatapointofcontactorgtime'] = $row['metadatapointofcontactorgtime'];
 			$index++;
 		}
 		$index = 0;
@@ -297,6 +328,8 @@
 
 			$groupOwnerArray[11][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['orga_id'];
 			$groupOwnerArray[12][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['mb_group_homepage'];
+
+			$groupOwnerArray[13][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['metadatapointofcontactorgtime'];
 		}
 	}
 	return $groupOwnerArray;

Modified: trunk/mapbender/http/php/mod_getDownloadOptions.php
===================================================================
--- trunk/mapbender/http/php/mod_getDownloadOptions.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/php/mod_getDownloadOptions.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -25,6 +25,19 @@
 //require_once dirname(__FILE__) . "/../../core/epsg.php";
 require_once(dirname(__FILE__) . "/../classes/class_Uuid.php");
 
+function checkUrlInDatalink($url, $datalinkIds) {
+	$sql = "SELECT datalink_id FROM datalink WHERE datalink_id in (".explode(",",$datalinkIds).") AND datalink_url = ".urldecode($url);
+	$res = db_query($sql);
+	//$row = db_fetch_assoc($res)
+	$e = new mb_exception("num rows: ".db_numrows($res));
+	if (db_numrows($res) > 0) {
+		return true;
+	} else {
+		return false;
+	}
+}
+
+
 //make all parameters available as upper case
 foreach($_REQUEST as $key => $val) {
 	$_REQUEST[strtoupper($key)] = $val;
@@ -51,8 +64,8 @@
 
 //define query to pull all download options - actually only the inspire download services based on atom feeds
 
-$sql = "select service_id, service_uuid, resource_id, resource_type, datalink from (
-select service_id, resource_id, service_uuid, resource_type, fkey_datalink_id as datalink from (select fkey_wms_id as service_id, layer_id as resource_id, 'layer' as resource_type, layer.uuid as service_uuid from layer inner join (select metadata_id, uuid, fkey_layer_id from mb_metadata inner join ows_relation_metadata on ows_relation_metadata.fkey_metadata_id = mb_metadata.metadata_id) ";
+$sql = "select service_id, service_uuid, resource_id, resource_type, datalink, NULL as datalink_text, format from (
+select service_id, resource_id, service_uuid, resource_type, fkey_datalink_id as datalink, format from (select fkey_wms_id as service_id, layer_id as resource_id, 'layer' as resource_type, layer.uuid as service_uuid, format from layer inner join (select metadata_id, format, uuid, fkey_layer_id from mb_metadata inner join ows_relation_metadata on ows_relation_metadata.fkey_metadata_id = mb_metadata.metadata_id) ";
 
 $sql .= "as metadata_relation on metadata_relation.fkey_layer_id = layer.layer_id where layer.inspire_download = 1 and metadata_relation.uuid = $1) as layer_metadata LEFT OUTER JOIN ows_relation_data ON layer_metadata.resource_id = ows_relation_data.fkey_layer_id
 ) as inspire_layer inner join wms on inspire_layer.service_id = wms.wms_id ";
@@ -60,11 +73,15 @@
 
 $sql .= "union select fkey_wfs_id as service_id, service_uuid, featuretype_id as resource_id, 'wfs' as resource_type, NULL ";
 
-$sql .= "as datalink from (select wfs_featuretype.featuretype_id ,wfs_featuretype.fkey_wfs_id, wfs.uuid as service_uuid, wfs_featuretype.inspire_download from wfs_featuretype inner join wfs on wfs_featuretype.fkey_wfs_id = wfs.wfs_id WHERE inspire_download = 1 ORDER BY featuretype_id) as featuretype_inspire inner join (select metadata_id, uuid, fkey_featuretype_id from mb_metadata inner join ows_relation_metadata on ";
+$sql .= "as datalink, NULL as datalink_text, 'GML' as format from (select wfs_featuretype.featuretype_id ,wfs_featuretype.fkey_wfs_id, wfs.uuid as service_uuid, wfs_featuretype.inspire_download from wfs_featuretype inner join wfs on wfs_featuretype.fkey_wfs_id = wfs.wfs_id WHERE inspire_download = 1 ORDER BY featuretype_id) as featuretype_inspire inner join (select metadata_id, format, uuid, fkey_featuretype_id from mb_metadata inner join ows_relation_metadata on ";
 
-$sql .= "ows_relation_metadata.fkey_metadata_id = mb_metadata.metadata_id) as metadata_relation on metadata_relation.fkey_featuretype_id = featuretype_inspire.featuretype_id and metadata_relation.uuid = $1;";
+$sql .= "ows_relation_metadata.fkey_metadata_id = mb_metadata.metadata_id) as metadata_relation on metadata_relation.fkey_featuretype_id = featuretype_inspire.featuretype_id and metadata_relation.uuid = $1 ";
 
+$sql .= "union select NULL as service_id, NULL as service_uuid, NULL as resource_id, 'metadata' as resource_type, NULL ";
 
+$sql .= "as datalink, datalinks as datalink_text, format FROM mb_metadata WHERE mb_metadata.uuid = $1;";
+
+
 /*
 $sql = "select service_id, resource_id, resource_type, fkey_datalink_id as datalink from (select fkey_wms_id as service_id, layer_id as resource_id, 'layer' as resource_type from layer inner join (select metadata_id, uuid, fkey_layer_id from mb_metadata inner join ows_relation_metadata on ows_relation_metadata.fkey_metadata_id = mb_metadata.metadata_id) ";
 
@@ -109,23 +126,52 @@
 					$downloadOptions->{$idList[$i]}->option[$j]->serviceId = $row['service_id'];
 					$downloadOptions->{$idList[$i]}->option[$j]->serviceUuid = $row['service_uuid'];
 					$downloadOptions->{$idList[$i]}->option[$j]->featureType[0] = $row['resource_id'];
+					$downloadOptions->{$idList[$i]}->option[$j]->format = $row['format'];
 				}
 			break;
 			case "layer":
 				if (!isset($row['datalink'] ) || $row['datalink'] == '') {
 					$downloadOptions->{$idList[$i]}->option[$j]->type = "wmslayergetmap";
+					$row['format'] = 'GeoTIFF';
 				} else {
 					$downloadOptions->{$idList[$i]}->option[$j]->type = "wmslayerdataurl";
+					//add to array with datalink (ids)
+					//$arrayDataLinks[] = $row['datalink'];
 				}
 				$downloadOptions->{$idList[$i]}->option[$j]->serviceId = $row['service_id'];
 				$downloadOptions->{$idList[$i]}->option[$j]->serviceUuid = $row['service_uuid'];//This is a layer uuid - not a service uuid!!!!
 				$downloadOptions->{$idList[$i]}->option[$j]->resourceId = $row['resource_id'];
+				$downloadOptions->{$idList[$i]}->option[$j]->format = $row['format'];
 				$downloadOptions->{$idList[$i]}->option[$j]->dataLink = $row['datalink'];
 			break;
+			case "metadata":
+				if (isset($row['datalink_text'] ) || $row['datalink_text'] != '') {
+					$downloadLinks = json_decode($row['datalink_text']);
+					$downloadOptions->{$idList[$i]}->option[$j]->type = "downloadlink";
+					//parse json and add some more info?
+					//$downloadLinks = json_decode($row['datalink_text']);
+					foreach ($downloadLinks->downloadLinks as $downloadLink) {
+						$downloadOptions->{$idList[$i]}->option[$j]->link = $downloadLink;
+						//check if 
+						$downloadOptions->{$idList[$i]}->option[$j]->format = $row['format'];
+					}
+				}
+	
+			break;
 		}
 	$j++;
-	}	
+	}
+	//delete double entries - maybe url is given from dataurl - use this 
+	//get all dataurlids
+	//foreach($downloadOptions->{$idList[$i]}->option as $option) {
+		//$option->dataLink;
+		
+	//}
+	
 }
+
+
+//add further option from metadata itself - if 
 $result = json_encode($downloadOptions);
 header('Content-Type: application/json; charset='.CHARSET);
 

Modified: trunk/mapbender/http/php/mod_inspireAtomFeedISOMetadata.php
===================================================================
--- trunk/mapbender/http/php/mod_inspireAtomFeedISOMetadata.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/php/mod_inspireAtomFeedISOMetadata.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -416,7 +416,9 @@
 	//WFS uuid (12-4), MD uuid (4-4-8)
 	//wmsgetmap
 	//WMS uuid (12-4), Type (4) - 0002, MD uuid (4-8)
-	//
+	//metadata
+	//metadata uuid (12-4),hash(downloadurl) (4-8);
+
 	if (isset($mapbenderMetadata['serviceUuid']) && $mapbenderMetadata['serviceUuid'] != '' ) {
 		$servicePart = explode('-',$mapbenderMetadata['serviceUuid']);
 		$mdPart = explode('-',$recordId);

Modified: trunk/mapbender/http/php/mod_inspireDownloadFeed.php
===================================================================
--- trunk/mapbender/http/php/mod_inspireDownloadFeed.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/php/mod_inspireDownloadFeed.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -141,7 +141,7 @@
 }
 
 if (!isset($_REQUEST['GENERATEFROM']) || $_REQUEST['GENERATEFROM'] == "") {
-	echo '<b>Mandatory parameter GENERATEFROM is not set!</b><br>Please set GENERATEFROM to <b>wmslayer</b>, <b>dataurl</b> or <b>wfs</b> '; 
+	echo '<b>Mandatory parameter GENERATEFROM is not set!</b><br>Please set GENERATEFROM to <b>wmslayer</b>, <b>dataurl</b>, <b>metadata</b> or <b>wfs</b> '; 
 	die(); 	
 }
 
@@ -149,9 +149,9 @@
 if (isset($_REQUEST['GENERATEFROM']) & $_REQUEST['GENERATEFROM'] != "") {
 	//validate type
 	$testMatch = $_REQUEST["GENERATEFROM"];	
- 	if ($testMatch != 'wmslayer' && $testMatch != 'dataurl'  && $testMatch != 'wfs' && $testMatch != 'all'){ 
+ 	if ($testMatch != 'wmslayer' && $testMatch != 'dataurl'  && $testMatch != 'wfs' && $testMatch != 'all' && $testMatch != 'metadata'){ 
 		//echo 'GENERATEFROM: <b>'.$testMatch.'</b> is not valid.<br/>'; 
-		echo 'Parameter <b>GENERATEFROM</b> is not valid (wmslayer,dataurl,wfs,all).<br/>'; 
+		echo 'Parameter <b>GENERATEFROM</b> is not valid (wmslayer,dataurl,wfs,metadata,all).<br/>'; 
 		die(); 		
  	}
 	$generateFrom = $testMatch;
@@ -208,6 +208,18 @@
 	$testMatch = NULL;
 }
 
+if (isset($_REQUEST['request']) & $_REQUEST['request'] != "") {
+	//validate type TODO
+	$testMatch = $_REQUEST["request"];	
+ 	if ($testMatch != 'DescribeSpatialDataset' && $testMatch != 'GetSpatialDataset'){ 
+		//echo 'GENERATEFROM: <b>'.$testMatch.'</b> is not valid.<br/>'; 
+		echo 'Parameter <b>request</b> is not valid (GetSpatialDataset/DescribeSpatialDataset).<br/>'; 
+		die(); 		
+ 	}
+	$osRequest = $testMatch;
+	$testMatch = NULL;
+}
+
 if (isset($_REQUEST['language']) & $_REQUEST['language'] != "") {
 	//validate type TODO
 	$testMatch = $_REQUEST["language"];	
@@ -294,7 +306,7 @@
 
 
 function answerOpenSearchRequest () {
-	global $admin, $type, $mapbenderMetadata, $indexMapbenderMetadata, $layerId, $wfsId, $mapbenderPath, $epsgId, $alterAxisOrder, $departmentMetadata, $userMetadata, $hasPermission, $m, $crs, $crsUpper, $countRessource, $furtherLink, $osDatasetIdentifier, $osQuery, $osDatasetNamespace, $osCrs, $osLanguage;
+	global $admin, $type, $mapbenderMetadata, $indexMapbenderMetadata, $layerId, $wfsId, $mapbenderPath, $epsgId, $alterAxisOrder, $departmentMetadata, $userMetadata, $hasPermission, $m, $crs, $crsUpper, $countRessource, $furtherLink, $osDatasetIdentifier, $osQuery, $osDatasetNamespace, $osCrs, $osLanguage, $osRequest;
 	//service feed url
 	$serviceFeed = delTotalFromQuery("getopensearch",$mapbenderPath."..".$_SERVER['REQUEST_URI']);//delete GETOPENSEARCH
 	$serviceFeed = delTotalFromQuery("OPENSEARCH",$serviceFeed);
@@ -356,26 +368,34 @@
 		echo "Dataset not available in requested language!";
 		die();
 	}
-	//check count of links 
-	//redirect to downloadlink
-	//parse dataset atom feed and count links - maybe one or multiple!!!!
-	$links = getDatasetFeedLinks($datasetFeed);
-	$numberOfTiles = count($links);
-	//$e = new mb_exception("mod_inspireDownloadFeed.php: numberOfTiles: ".$numberOfTiles);
-	if ($numberOfTiles > 1) {
-		//redirect to dataset atom feed 
-		header("Location: ".$datasetFeed);
-	} else {
-		if ($returnFile) {
-			//echo "links[0]:". $links[0];
-			//die();
-			header("Location: ".$links[0]);
-		} else {
+	switch ($osRequest) {
+		case "DescribeSpatialDataset":	
 			//redirect to datasetfeed
 			header("Location: ".$datasetFeed);
-		}
-	}	
-	die();
+		break;
+		case "GetSpatialDataset":
+			//check count of links 
+			//redirect to downloadlink
+			//parse dataset atom feed and count links - maybe one or multiple!!!!
+			$links = getDatasetFeedLinks($datasetFeed);
+			$numberOfTiles = count($links);
+			//$e = new mb_exception("mod_inspireDownloadFeed.php: numberOfTiles: ".$numberOfTiles);
+			if ($numberOfTiles > 1) {
+				//redirect to dataset atom feed 
+				header("Location: ".$datasetFeed);
+			} else {
+				if ($returnFile) {
+					//echo "links[0]:". $links[0];
+					//die();
+					header("Location: ".$links[0]);
+				} else {
+					//redirect to datasetfeed
+					header("Location: ".$datasetFeed);
+				}
+			}	
+			die();
+		break;
+	}
 }
 
 function getDatasetFeedLinks($datasetFeedUrl) {
@@ -454,26 +474,27 @@
 	$urlSelf = $feedDoc->createElement("Url");
 	$urlSelf->setAttribute("type", "application/atom+xml");
 	$urlSelf->setAttribute("rel", "results");
-	$urlSelf->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI']).str_replace("&","&","&OPENSEARCH=true&q={searchTerms}"));
+	$urlSelf->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI'])."&OPENSEARCH=true&q={searchTerms}");
 	$feed->appendChild($urlSelf);
 	//Url - describedby
 	$urlDescribedby = $feedDoc->createElement("Url");
 	$urlDescribedby->setAttribute("type", "application/atom+xml");
 	$urlDescribedby->setAttribute("rel", "describedby");
 	//see documentation
-	$urlDescribedby->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI']).str_replace("&","&","&OPENSEARCH=true&spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&crs={inspire_dls:crs?}&language={language?}&q={searchTerms?}"));
+	$urlDescribedby->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI'])."&OPENSEARCH=true&request=DescribeSpatialDataset&spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&crs={inspire_dls:crs?}&language={language?}&q={searchTerms?}");
+	//$urlDescribedby->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI']));
 	$feed->appendChild($urlDescribedby);
 	//Url - results single part (e.g. zipfile)
 	$urlResults = $feedDoc->createElement("Url");
 	$urlResults->setAttribute("type", $mimetype);//TODO give reasonable format!! - mimetypes??? geotiff/gml/other - see format of metadata
 	$urlResults->setAttribute("rel", "results");
-	$urlResults->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI']).str_replace("&","&","&OPENSEARCH=true&spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&crs={inspire_dls:crs?}&language={language?}&q={searchTerms?}"));
+	$urlResults->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI'])."&OPENSEARCH=true&request=GetSpatialDataset&spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&crs={inspire_dls:crs?}&language={language?}&q={searchTerms?}");
 	$feed->appendChild($urlResults);
 	//for firefox?
 	$urlResults = $feedDoc->createElement("Url");
 	$urlResults->setAttribute("type", "text/html");//TODO give reasonable format!! - mimetypes??? geotiff/gml/other - see format of metadata - see https://developer.mozilla.org/de/docs/OpenSearch_Plugin_f%C3%BCr_Firefox_erstellen
 	$urlResults->setAttribute("rel", "results");
-	$urlResults->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI']).str_replace("&","&","&OPENSEARCH=true&spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&crs={inspire_dls:crs?}&language={language?}&q={searchTerms?}"));
+	$urlResults->setAttribute("template", str_replace("=SERVICE&","=DATASET&",$mapbenderPath."..".$_SERVER['REQUEST_URI'])."&OPENSEARCH=true&request=GetSpatialDataset&spatial_dataset_identifier_code={inspire_dls:spatial_dataset_identifier_code?}&spatial_dataset_identifier_namespace={inspire_dls:spatial_dataset_identifier_namespace?}&crs={inspire_dls:crs?}&language={language?}&q={searchTerms?}");
 	$feed->appendChild($urlResults);
 
 	//Url -results multi part
@@ -557,7 +578,11 @@
 select *, 'wfs' as origin from (select mb_metadata.metadata_id, featuretype_relation.featuretype_name, featuretype_relation.fkey_wfs_id, featuretype_relation.featuretype_id,featuretype_relation.inspire_download, mb_metadata.uuid as metadata_uuid, mb_metadata.format,mb_metadata.title as metadata_title, mb_metadata.abstract as metadata_abstract, featuretype_relation.featuretype_title, featuretype_relation.featuretype_abstract, mb_metadata.ref_system as metadata_ref_system, mb_metadata.datasetid, mb_metadata.spatial_res_type, mb_metadata.spatial_res_value, mb_metadata.datasetid_codespace,  featuretype_relation.featuretype_latlon_bbox as latlonbbox, featuretype_relation.featuretype_srs, mb_metadata.lastchanged as md_timestamp from (select * from wfs_featuretype inner join ows_relation_metadata on wfs_featuretype.featuretype_id = ows_relation_metadata.fkey_featuretype_id) as featuretype_relation inner join mb_metadata on featuretype_relation.fkey_metadata_id = mb_metadata.metadat
 a_id where mb_metadata.uuid = $1) as featuretype_data inner join wfs on featuretype_data.fkey_wfs_id = wfs.wfs_id where wfs.wfs_id = $2;
 SQL;
 		break;
-
+		case "metadata":
+			$sql = <<<SQL
+select 'metadata' as origin,mb_metadata.metadata_id, mb_metadata.uuid as metadata_uuid, mb_metadata.format,mb_metadata.title as metadata_title, mb_metadata.abstract as metadata_abstract, mb_metadata.ref_system as metadata_ref_system, mb_metadata.datasetid, mb_metadata.spatial_res_type, mb_metadata.spatial_res_value, mb_metadata.datasetid_codespace,  mb_metadata.lastchanged as md_timestamp, box2d(the_geom) as bbox2d, datalinks FROM mb_metadata where uuid = $1;
+SQL;
+		break;
 		case "all":
 			$sql = array();
 			$sql[0] = <<<SQL
@@ -600,7 +625,17 @@
 			$res = db_prep_query($sql,$v,$t);
 			fillMapbenderMetadata($res, $generateFrom);
 		break;
-		case "all":	//TODO: Maybe a union is a better way, but the sql must be harmonized before
+		case "metadata":
+			//only one sql should be done 
+			//$e = new mb_exception("sql metadata: ".$sql);
+			//$e = new mb_exception($recordId);
+			$v = array($recordId);
+			$t = array('s');
+			$res = db_prep_query($sql,$v,$t);
+			//$e = new mb_exception("num rows: ".db_numrows($res));
+			fillMapbenderMetadata($res, $generateFrom);
+		break;
+		case "all"://TODO: Maybe a union is a better way, but the sql must be harmonized before
 			for ($i = 0; $i < 3; $i++) {
 				$v = array($recordId);
 				$t = array('s');
@@ -697,21 +732,35 @@
 	//infos about the owner of the service - he is the man who administrate the metadata - register the service
 	$sql = "SELECT mb_user_email, timestamp ";
 	$sql .= "FROM mb_user WHERE mb_user_id = $1";
-	if ($generateFrom != "wfs") {
+	switch ($generateFrom) {
+		case "wmslayer":
 			$v = array($mapbenderMetadata[$m]->wms_owner);
-		} else {
+			$hasPermission=$admin->getLayerPermission($mapbenderMetadata[$m]->fkey_wms_id,$mapbenderMetadata[$m]->layer_name,PUBLIC_USER);
+		break;
+		case "dataurl":
+			$v = array($mapbenderMetadata[$m]->wms_owner);
+			//$hasPermission=$admin->getLayerPermission($mapbenderMetadata[$m]->fkey_wms_id,$mapbenderMetadata[$m]->layer_name,PUBLIC_USER);
+			$hasPermission = true;
+		break;
+		case "wfs":
 			$v = array($mapbenderMetadata[$m]->wfs_owner);
+			$hasPermission = true;
+		break;
+		case "metadata":
+			$v = array($mapbenderMetadata[$m]->md_owner);
+			$hasPermission = true;
+		break;
 	}
 	$t = array('i');
 	$res = db_prep_query($sql,$v,$t);
 	$userMetadata = db_fetch_array($res);
 	
 	//check if resource is freely available to anonymous user - which are all users who search thru metadata catalogues:
-	if ($generateFrom != "wfs") {
+	/*if ($generateFrom != "wfs") {
 		$hasPermission=$admin->getLayerPermission($mapbenderMetadata[$m]->fkey_wms_id,$mapbenderMetadata[$m]->layer_name,PUBLIC_USER);
 	} else {
 		$hasPermission = true;
-	}
+	}*/
 
 }
 
@@ -767,7 +816,7 @@
 			$atomFeedKey .= $wfsId;
 		break;
 	}
-	$e = new mb_exception("mod_inspireDownloadFeed.php: cachedVariableTimestamp: ".date("Y-m-d H:i:s",$cache->cachedVariableCreationTime($atomFeedKey)));
+	//$e = new mb_exception("mod_inspireDownloadFeed.php: cachedVariableTimestamp: ".date("Y-m-d H:i:s",$cache->cachedVariableCreationTime($atomFeedKey)));
 	if ($cache->isActive && $cache->cachedVariableExists($atomFeedKey) && (date("Y-m-d H:i:s",$cache->cachedVariableCreationTime($atomFeedKey)) > $maxDate)) {
 		$e = new mb_exception("class_map.php: read ".$atomFeedKey." from ".$cache->cacheType." cache!");
 		return $cache->cachedVariableFetch($atomFeedKey);
@@ -860,7 +909,7 @@
 		$feedLink->setAttribute("href", $mapbenderPath."php/mod_dataISOMetadata.php?id=".$mapbenderMetadata[$m]->metadata_uuid."&outputFormat=iso19139");
 	}
 	$feedLink->setAttribute("rel", "describedby");
-	$feedLink->setAttribute("type", "application/vnd.iso.19139+xml");
+	$feedLink->setAttribute("type", "application/xml");
 	//$feedLink->setAttribute("title", "Metadaten");
 	//$feedLink->setAttribute("hreflang", "de");
 	$feed->appendChild($feedLink);
@@ -914,7 +963,18 @@
 	//<link href="http://xyz.org/data/de" rel="alternate" type="application/atom+xml" hreflang="de" title="The download service information in German"/>
 	//<link href="http://xyz.org/data/index.html" rel="alternate" type="text/html" hreflang="en" title="An HTML version of this document"/>
 	//<link href="http://xyz.org/data/index.de.html" rel="alternate" type="text/html" hreflang="de"	title="An HTML version of this document in German"/>
-	
+
+	//optional link to wfs capabilities document / see TG 3.1 from 09.08.2013
+	if ($type == 'SERVICE' && $generateFrom == "wfs") {
+	/*<link rel="related" href="http://xyz.org/wfs?request=GetCapabilities&service=WFS&version=2.0.0" type="application/xml" title="Service implementing Direct Access operations"/>*/
+		$feedLink = $feedDoc->createElement("link");
+		$feedLink->setAttribute("href", $mapbenderMetadata[$m]->wfs_getcapabilities."&request=GetCapabilities&VERSION=1.1.0&SERVICE=WFS");
+		$feedLink->setAttribute("rel", "related");
+		$feedLink->setAttribute("type", "application/xml");
+		//$feedLink->setAttribute("hreflang", "en");
+		$feedLink->setAttribute("title", "Service implementing Direct Access operations");
+		$feed->appendChild($feedLink);
+	}
 	//<!-- identifier -->
 	//<id>http://xyz.org/data</id> - also self reference - see 5.1.8 on page 39 of INSPIRE GD for Download Services V 3.0
 	// and 5.2.1
@@ -1214,7 +1274,7 @@
 
 					$bboxFilter = '<Filter xmlns:gml="http://www.opengis.net/gml"><BBOX>';
 					//$bboxFilter .= '<gml:Box srsName="EPSG:'.$epsgId[1].'"';
-					$bboxFilter .= '<ogc:PropertyName>the_geom</ogc:PropertyName>';
+					$bboxFilter .= '<ogc:PropertyName>the_geom</ogc:PropertyName>';//TODO parse DescribeFeatureType for geom property
 					$bboxFilter .= '<gml:Box>';
 					$bboxFilter .= '<gml:coordinates>';
 					$currentBbox = explode(',',$bboxWfs[$mapbenderMetadata[$i]->featuretype_name][$l]);
@@ -1262,6 +1322,10 @@
 				case "wfs":
 					$ressourceServiceFeedEntryTitle = $ressourceTitle." - generiert über WFS GetFeature Aufrufe";
 				break;
+				case "metadata":
+					$ressourceServiceFeedEntryTitle = $ressourceTitle." - generiert über Downloadlinks aus Metadatensatz";
+				break;
+				
 			}
 			$feedEntryTitle->appendChild($feedDoc->createTextNode("Feed Entry fuer: ".$ressourceServiceFeedEntryTitle)); //TODO: maybe add some category?
 		} else {
@@ -1275,6 +1339,9 @@
 				case "wfs":
 					$ressourceDataFeedEntryTitle = $ressourceTitle." - generiert über WFS GetFeature Aufrufe";
 				break;
+				case "metadata":
+					$ressourceDataFeedEntryTitle = $ressourceTitle." - generiert über Downloadlinks aus Metadatensatz";
+				break;
 			}
 			$feedEntryTitle->appendChild($feedDoc->createTextNode($ressourceDataFeedEntryTitle. " im CRS ".$mapbenderMetadata[$i]->metadata_ref_system." und Format ".$mapbenderMetadata[$i]->format)); //TODO: maybe add some category?	
 		}
@@ -1300,6 +1367,9 @@
 			case "wfs":
 				$datasetFeedLink .= "&wfsid=".$mapbenderMetadata[$i]->wfs_id;
 			break;
+			case "metadata":
+				//$datasetFeedLink .= "&wfsid=".$mapbenderMetadata[$i]->wfs_id;
+			break;
 		}
 		$datasetLink = $mapbenderMetadata[$i]->datalink_url;
 		if ($type == 'SERVICE') {
@@ -1316,7 +1386,7 @@
 			$feedEntryMetadataLink = $feedDoc->createElement("link");
 			$feedEntryMetadataLink->setAttribute("href",$metadataLink);
 			$feedEntryMetadataLink->setAttribute("rel", "describedby");
-			$feedEntryMetadataLink->setAttribute("type", "application/vnd.iso.19139+xml");
+			$feedEntryMetadataLink->setAttribute("type", "application/xml");
 			$feedEntry->appendChild($feedEntryMetadataLink);
 			$furtherLink = $datasetFeedLink;
 			$furtherLinkType = "application/atom+xml";
@@ -1344,6 +1414,21 @@
 					//$feedEntryLink->setAttribute("bbox", $newBox);
 					$feedEntry->appendChild($feedEntryLink);	
 				break;
+				case "metadata":
+					$downloadLinks = json_decode($mapbenderMetadata[$i]->datalinks);
+					$furtherLink = urldecode($downloadLinks->downloadLinks[0]);
+					$furtherLinkType = $formatsMimetype[$mapbenderMetadata[$m]->format];
+					$furtherLinkTitle = $ressourceTitle." im CRS ".$mapbenderMetadata[$i]->metadata_ref_system."(".$mapbenderMetadata[$m]->format.")";
+					//generate content link 
+					$feedEntryLink = $feedDoc->createElement("link");
+					$feedEntryLink->setAttribute("rel", "section");
+					$feedEntryLink->setAttribute("href", $furtherLink);
+					$feedEntryLink->setAttribute("type", $furtherLinkType);
+					$feedEntryLink->setAttribute("hreflang", "de");
+					$feedEntryLink->setAttribute("title", $furtherLinkTitle);
+					//$feedEntryLink->setAttribute("bbox", $newBox);
+					$feedEntry->appendChild($feedEntryLink);	
+				break;
 				case "wmslayer":
 					//example:
 					//http://localhost/cgi-bin/mapserv?map=/data/umn/geoportal/karte_rp/testinspiredownload.map&VERSION=1.1.1&REQUEST=GetMap&SERVICE=WMS&LAYERS=inspirewms&STYLES=&SRS=EPSG:4326&BBOX=6.92134,50.130465,6.93241,50.141535000000005&WIDTH=200&HEIGHT=200&FORMAT=image/png&BGCOLOR=0xffffff&TRANSPARENT=TRUE&EXCEPTIONS=application/vnd.ogc.se_inimage
@@ -1584,76 +1669,119 @@
 	//function increments $indexMapbenderMetadata !!!
 	global $mapbenderMetadata, $indexMapbenderMetadata;
 	//echo "<error>fill begins</error>";
-	while ($row = db_fetch_assoc($dbResult)) {
-		//get relevant information 
-		//echo "<error>".$indexMapbenderMetadata."</error>";
-		if ($row['inspire_download'] == '1') {
+	if ($generateFrom == 'metadata') {
+		$row = db_fetch_assoc($dbResult);
+		//to generate an atom feed from mb_metadata there must be some information avaiable, that is normally used from service metadata
+		//owner, group, bbox, ... - the mb_metadata table have to be filled with the geometry from the layer/featuretype - of which it has been coupled with
 		$mapbenderMetadata[$indexMapbenderMetadata]->origin = $row['origin']; 
-		$mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox = $row['latlonbbox']; 
-		$mapbenderMetadata[$indexMapbenderMetadata]->datalink_id = $row['datalink_id']; 
+		$e = new mb_exception($row['origin']);
+		if (isset($row['bbox2d']) && $row['bbox2d'] != '') {
+				$bbox = str_replace(' ',',',str_replace(')','',str_replace('BOX(','',$row['bbox2d'])));
+				//$e = new mb_exception("class_iso19139.php: got bbox for metadata: ".$bbox);
+				$mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox = explode(',',$bbox);
+				$mapbenderMetadata[$indexMapbenderMetadata]->minx = $mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox[0];
+				$mapbenderMetadata[$indexMapbenderMetadata]->miny = $mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox[1];
+				$mapbenderMetadata[$indexMapbenderMetadata]->maxx = $mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox[2];
+				$mapbenderMetadata[$indexMapbenderMetadata]->maxy = $mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox[3];
+		}
 		$mapbenderMetadata[$indexMapbenderMetadata]->metadata_id = $row['metadata_id']; 
 		$mapbenderMetadata[$indexMapbenderMetadata]->metadata_ref_system = $row['metadata_ref_system']; 		
-		$mapbenderMetadata[$indexMapbenderMetadata]->fkey_mb_group_id = $row['fkey_mb_group_id'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wms_owner = $row['wms_owner'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wfs_owner = $row['wfs_owner'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->fkey_wms_id = $row['fkey_wms_id'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->layer_id = $row['layer_id'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->layer_name = $row['layer_name'];
+		$mapbenderMetadata[$indexMapbenderMetadata]->md_owner = $row['fkey_mb_user_id'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->datasetid = $row['datasetid'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->datasetid_codespace = $row['datasetid_codespace'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->metadata_uuid = $row['metadata_uuid'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->minx = $row['minx'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->miny = $row['miny'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->maxx = $row['maxx'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->maxy = $row['maxy'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->metadata_title = $row['metadata_title'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->layer_title = $row['layer_title'];
+		$e = new mb_exception("title: ".$row['metadata_title']);
 		$mapbenderMetadata[$indexMapbenderMetadata]->metadata_abstract = $row['metadata_abstract'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->layer_abstract = $row['layer_abstract'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->accessconstraints = $row['accessconstraints'];
+		$mapbenderMetadata[$indexMapbenderMetadata]->accessconstraints = $row['accessconstraints'];//TODO: Let metadata get this from service when created
 		$mapbenderMetadata[$indexMapbenderMetadata]->metadata_uuid = $row['metadata_uuid'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->spatial_res_type = $row['spatial_res_type'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->spatial_res_value = $row['spatial_res_value'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->metadata_ref_system = $row['metadata_ref_system'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->format = $row['format'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->datalink_url = $row['datalink_url'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wms_getmap = $row['wms_getmap'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wms_owsproxy = $row['wms_owsproxy'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wms_version = $row['wms_version'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wms_max_imagesize = $row['wms_max_imagesize'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->layer_name = $row['layer_name'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->datalink_format = $row['datalink_format'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->metadata_ref_system = $row['metadata_ref_system'];
+		$mapbenderMetadata[$indexMapbenderMetadata]->datalinks = $row['datalinks'];
+//		$mapbenderMetadata[$indexMapbenderMetadata]->datalink_format = $row['datalink_format'];
 		$mapbenderMetadata[$indexMapbenderMetadata]->format = $row['format'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->featuretype_name = $row['featuretype_name'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->featuretype_srs = $row['featuretype_srs'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->featuretype_title = $row['featuretype_title'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wfs_title = $row['wfs_title'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wfs_id = $row['wfs_id'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wfs_abstract = $row['wfs_abstract'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wfs_getfeature = $row['wfs_getfeature'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wfs_version = $row['wfs_version'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wfs_max_features = $row['wfs_max_features'];
-
 		$mapbenderMetadata[$indexMapbenderMetadata]->md_timestamp = $row['md_timestamp'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wms_timestamp = $row['wms_timestamp'];
-		$mapbenderMetadata[$indexMapbenderMetadata]->wfs_timestamp = $row['wfs_timestamp'];
-		//$mapbenderMetadata[$indexMapbenderMetadata]->format = $row['format'];
 		//check if codespace was given in metadata or it must be generated from uuid and default codespace
 		if (($mapbenderMetadata[$indexMapbenderMetadata]->datasetid_codespace == '' or !isset($mapbenderMetadata[$indexMapbenderMetadata]->datasetid_codespace)) or ($mapbenderMetadata[$indexMapbenderMetadata]->datasetid == '' or !isset($mapbenderMetadata[$indexMapbenderMetadata]->datasetid))) {
 			//generate one:
 			$mapbenderMetadata[$indexMapbenderMetadata]->datasetid_codespace = METADATA_DEFAULT_CODESPACE;
 			$mapbenderMetadata[$indexMapbenderMetadata]->datasetid = $mapbenderMetadata[$indexMapbenderMetadata]->metadata_uuid;
 		}
-		if ($generateFrom == "wfs" or $mapbenderMetadata[$indexMapbenderMetadata]->origin == "wfs") {
-			$latlonbbox = explode(",",$mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox);
-			$mapbenderMetadata[$indexMapbenderMetadata]->minx = $latlonbbox[0];
-			$mapbenderMetadata[$indexMapbenderMetadata]->miny = $latlonbbox[1];
-			$mapbenderMetadata[$indexMapbenderMetadata]->maxx = $latlonbbox[2];
-			$mapbenderMetadata[$indexMapbenderMetadata]->maxy = $latlonbbox[3];
+	} else {
+		while ($row = db_fetch_assoc($dbResult)) {
+			//get relevant information 
+			//echo "<error>".$indexMapbenderMetadata."</error>";
+			if ($row['inspire_download'] == '1') {
+				$mapbenderMetadata[$indexMapbenderMetadata]->origin = $row['origin']; 
+				$mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox = $row['latlonbbox']; 
+				$mapbenderMetadata[$indexMapbenderMetadata]->datalink_id = $row['datalink_id']; 
+				$mapbenderMetadata[$indexMapbenderMetadata]->metadata_id = $row['metadata_id']; 
+				$mapbenderMetadata[$indexMapbenderMetadata]->metadata_ref_system = $row['metadata_ref_system']; 		
+				$mapbenderMetadata[$indexMapbenderMetadata]->fkey_mb_group_id = $row['fkey_mb_group_id'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wms_owner = $row['wms_owner'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_owner = $row['wfs_owner'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->fkey_wms_id = $row['fkey_wms_id'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->layer_id = $row['layer_id'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->layer_name = $row['layer_name'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->datasetid = $row['datasetid'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->datasetid_codespace = $row['datasetid_codespace'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->metadata_uuid = $row['metadata_uuid'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->minx = $row['minx'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->miny = $row['miny'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->maxx = $row['maxx'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->maxy = $row['maxy'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->metadata_title = $row['metadata_title'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->layer_title = $row['layer_title'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->metadata_abstract = $row['metadata_abstract'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->layer_abstract = $row['layer_abstract'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->accessconstraints = $row['accessconstraints'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->metadata_uuid = $row['metadata_uuid'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->spatial_res_type = $row['spatial_res_type'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->spatial_res_value = $row['spatial_res_value'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->metadata_ref_system = $row['metadata_ref_system'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->format = $row['format'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->datalink_url = $row['datalink_url'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wms_getmap = $row['wms_getmap'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wms_owsproxy = $row['wms_owsproxy'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wms_version = $row['wms_version'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wms_max_imagesize = $row['wms_max_imagesize'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->layer_name = $row['layer_name'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->datalink_format = $row['datalink_format'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->metadata_ref_system = $row['metadata_ref_system'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->format = $row['format'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->featuretype_name = $row['featuretype_name'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->featuretype_srs = $row['featuretype_srs'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->featuretype_title = $row['featuretype_title'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_title = $row['wfs_title'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_id = $row['wfs_id'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_abstract = $row['wfs_abstract'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_getfeature = $row['wfs_getfeature'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_getcapabilities = $row['wfs_getcapabilities'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_version = $row['wfs_version'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_max_features = $row['wfs_max_features'];
+
+				$mapbenderMetadata[$indexMapbenderMetadata]->md_timestamp = $row['md_timestamp'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wms_timestamp = $row['wms_timestamp'];
+				$mapbenderMetadata[$indexMapbenderMetadata]->wfs_timestamp = $row['wfs_timestamp'];
+				//$mapbenderMetadata[$indexMapbenderMetadata]->format = $row['format'];
+				//check if codespace was given in metadata or it must be generated from uuid and default codespace
+				if (($mapbenderMetadata[$indexMapbenderMetadata]->datasetid_codespace == '' or !isset($mapbenderMetadata[$indexMapbenderMetadata]->datasetid_codespace)) or ($mapbenderMetadata[$indexMapbenderMetadata]->datasetid == '' or !isset($mapbenderMetadata[$indexMapbenderMetadata]->datasetid))) {
+					//generate one:
+					$mapbenderMetadata[$indexMapbenderMetadata]->datasetid_codespace = METADATA_DEFAULT_CODESPACE;
+					$mapbenderMetadata[$indexMapbenderMetadata]->datasetid = $mapbenderMetadata[$indexMapbenderMetadata]->metadata_uuid;
+				}
+				if ($generateFrom == "wfs" or $mapbenderMetadata[$indexMapbenderMetadata]->origin == "wfs") {
+					$latlonbbox = explode(",",$mapbenderMetadata[$indexMapbenderMetadata]->latlonbbox);
+					$mapbenderMetadata[$indexMapbenderMetadata]->minx = $latlonbbox[0];
+					$mapbenderMetadata[$indexMapbenderMetadata]->miny = $latlonbbox[1];
+					$mapbenderMetadata[$indexMapbenderMetadata]->maxx = $latlonbbox[2];
+					$mapbenderMetadata[$indexMapbenderMetadata]->maxy = $latlonbbox[3];
+				}
+				$indexMapbenderMetadata++;
+			}
 		}
-		$indexMapbenderMetadata++;
-		}
 	}
 }
 

Modified: trunk/mapbender/http/php/mod_syncCkan.php
===================================================================
--- trunk/mapbender/http/php/mod_syncCkan.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/php/mod_syncCkan.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -4,12 +4,13 @@
 //@ini_set('display_errors', 'stdout');	
 // Include class_ckanApi.php
 require_once(dirname(__FILE__).'/../classes/class_ckanApi.php');
-require_once(dirname(__FILE__).'/../classes/class_ckan.php');
+//require_once(dirname(__FILE__).'/../classes/class_ckan.php');
 require_once(dirname(__FILE__).'/../classes/class_connector.php');
 require_once(dirname(__FILE__).'/../../conf/ckan.conf');
 // Create CKAN object
 // Takes optional API key parameter. Required for POST and PUT methods.
 //initial instantiation of api class
+print time()."<br>";
 if (defined("CKAN_SERVER_PORT") && CKAN_SERVER_PORT != '') {
 	$serverUrl = CKAN_SERVER_IP.":".CKAN_SERVER_PORT;
 } else {
@@ -75,16 +76,23 @@
 		print $dataset."<br>";
 	}
 }
+//die();
 print "<b>ckan datasets:</b><br>"; 
 //get old package names for defined group in ckan.conf file
 //thru action api
-$ckanDatasetArray = get_packages_by_group(CKAN_GROUP_NAME);
+$ckanDataset = group_get(CKAN_GROUP_NAME);
+//$result = json_decode($resultDataset);
+$ckanDatasetArray = array();
+foreach ($ckanDataset->packages as $dataset) {
+	$ckanDatasetArray[] = $dataset;
+}
 if ($ckanDatasetArray) {
 	//debug output
 	foreach ($ckanDatasetArray as $dataset) {
 		print $dataset."<br>";
 	}
 }
+//
 //compare the arrays
 //first those which can be deleted
 if ($ckanDatasetArray && $mbDatasetArray) {
@@ -132,6 +140,7 @@
 		$datasetToCreate = false;
 	}
 }
+
 if ($datasetToCreate) {
 	print "<b>Mapbender datasets to be created for the first time:</b><br>";
 	foreach ($datasetToCreate as $dataset) {
@@ -141,6 +150,7 @@
 } else {
 	print "<b>No datasets to create!</b><br>";
 }
+
 //identify which are identical and which are new and which are lost
 //first delete the orphaned
 foreach ($datasetToDelete as $datasetName) {
@@ -368,6 +378,28 @@
 	return $datasetNames;
 }
 
+function get_packages_by_group2($groupname) {
+	//by action api
+	unset($ckanApi);
+	$ckan = new ckanApi(API_KEY,CKAN_SERVER_IP);
+	$ckan->set_base_url();
+	$e = new mb_exception("testckan: ".SERVER_URL);
+	$ckan->base_url='http://'.SERVER_URL.'/api/rest';
+	$e = new mb_exception("testckan: ".$ckan->base_url);
+	$datasetNames = array();
+	try {
+		$result = $ckan->get_group_by_name($groupname);
+	}
+	catch (Exception $e) {
+		$error = new mb_exception('mod_syncCkan.php: get_packages_by_group: http_code:'.$e->getMessage());
+		return false;
+	}
+	foreach ($result->packages as $dataset) {
+		$datasetNames[] = $dataset;
+	}
+	return $datasetNames;
+}
+
 function package_delete($packageName,$apiVersion) {
 	//check if package already exists
 	$existingPackage = package_get ($packageName);

Modified: trunk/mapbender/http/plugins/mb_metadata_addon.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_addon.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/plugins/mb_metadata_addon.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -239,7 +239,7 @@
 		</fieldset>
 		<fieldset>
 			<legend><?php echo _mb("User defined region");?><img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("You can define your own bounding box or region if you upload an gml geometry object. Only bbox and polygons are accepted at the moment!");?>'}" src="../img/questionmark.png" alt="" /></legend>
-			<table id='geometryuploadtable' name='geometryuploadtable'><tr><td><img onclick='initUploadForm();' src='../img/button_blue_red/up.png' id='uploadImage' title='upload'  /></td><td><?php echo _mb("Upload a surronding geometry for this dataset");?><img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Help for geometry upload possibility");?>'}" src="../img/questionmark.png" alt="" /></td></tr></table>
+			<table id='geometryuploadtable' name='geometryuploadtable'><tr><td><img id="uploadgmlimage" name= "uploadgmlimage" onclick='initUploadGmlForm();' src='../img/button_blue_red/up.png' id='uploadImage' title='upload'  /></td><td><?php echo _mb("Upload a surronding geometry for this dataset");?><img class="help-dialog" title="<?php echo _mb("Help");?>" help="{text:'<?php echo _mb("Help for geometry upload possibility");?>'}" src="../img/questionmark.png" alt="" /></td></tr></table>
 		</fieldset>
 	</div>
 	<div id="tabs-6">

Modified: trunk/mapbender/http/plugins/mb_metadata_server.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_server.php	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/plugins/mb_metadata_server.php	2013-10-04 07:16:36 UTC (rev 8706)
@@ -37,6 +37,42 @@
 	return;
 }
 
+function gml2wkt($gml) {
+	//function to create wkt from given gml multipolygon
+	libxml_use_internal_errors(true);
+	try {
+		$gmlObject = simplexml_load_string($gml);
+		if ($gmlObject === false) {
+			foreach(libxml_get_errors() as $error) {
+        			$err = new mb_exception("mb_metadata_server.php:".$error->message);
+    			}
+			throw new Exception("mb_metadata_server.php:".'Cannot parse Metadata GML!');
+			return false;
+		}
+	}
+	catch (Exception $e) {
+    		$err = new mb_exception("mb_metadata_server.php:".$e->getMessage());
+		return false;
+	}
+	//if parsing was successful
+	if ($gmlObject !== false) {
+		//ST_GeomFromText('MULTIPOLYGON(((235670.354215375 894016.780856,235668.324215375 894025.050856,235681.154215375 894028.210856,235683.184215375 894019.940856,235670.354215375 894016.780856)))', 2805) )
+		//read crs from gml
+		$crs = $gmlObject->xpath('/gml:Polygon/@srsName');
+		$crsId = end(explode(":",$crs[0]));
+		$wkt = "SRID=".$crsId.";POLYGON(";
+		//$e = new mb_exception("mb_metadata_server.php: crs:".$crs[0]);
+		//for each found polygon 
+		$outerPolygons = $gmlObject->xpath('/gml:Polygon/gml:outerBoundaryIs/gml:LinearRing/gml:coordinates');
+		//$e = new mb_exception("mb_metadata_server.php:".gettype($outerPolygons).$outerPolygons);
+		$wkt .= "(".str_replace(";",",",str_replace(","," ",str_replace(" ",";",$outerPolygons[0])))."))";
+		//$wkt .= ")";
+		//$e = new mb_exception("mb_metadata_server.php: wkt: ".$wkt);
+		return $wkt;
+	}
+}
+
+
 switch ($ajaxResponse->getMethod()) {
 	case "getWms" :
 		$wmsIdArray = getWms();
@@ -534,31 +570,33 @@
 			$wms->wms_network_access = intval('0');
 		}
 
-		if ($ajaxResponse->getParameter("twitterNews") == true) {
-			$e = new mb_notice("twitter activated");
+		if (defined("TWITTER_NEWS") && TWITTER_NEWS == true && $ajaxResponse->getParameter("twitterNews") == true) {
+    	    		$wms->twitterNews = true;
+			$twitterIsConfigured = true;
+			$e = new mb_exception("twitter configured");
+    		} else {
+			$twitterIsConfigured = false;
+			$e = new mb_exception("twitter not configured");
 		}
-		if ($ajaxResponse->getParameter("setGeoRss") == true) {
-			$e = new mb_notice("GeoRSS activated");
-		} 
-		if ($ajaxResponse->getParameter("setGeoRss") == false) {
-			$e = new mb_notice("GeoRSS deactivated");
+    		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");
 		}
-		if ($ajaxResponse->getParameter("twitterNews") == false) {
-			$e = new mb_notice("twitter deactivated");
-		}
 
-		if (defined("TWITTER_NEWS") && TWITTER_NEWS == true) {
-    	    		$wms->twitterNews = $ajaxResponse->getParameter("twitterNews");
-			$twitterIsConfigured == true;
-    		} else {
-			$twitterIsConfigured == false;
+		$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 && !$twitterIsConfigured) {
+			$messResult .= " Publishing via twitter was requested, but this is not configured. Please check your mapbender.conf! ";
 		}
-    		if(defined("GEO_RSS_FILE") && GEO_RSS_FILE != "") {
-        		$wms->setGeoRss = $ajaxResponse->getParameter("setGeoRss");
-			$rssIsConfigured == true;
-    		} else {
-			$rssIsConfigured == false;
+		if ($wms->setGeoRss && !$rssIsConfigured) {
+			$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->updateObjInDB($wmsId,true);
@@ -569,14 +607,7 @@
 		//	$ajaxResponse->send();						
 		//}
 		$e = new mb_exception("object in db updated");
-		$messResult = "Updated WMS metadata for ID " . $wmsId.". ";
-		//Add helpful hint if publishing is demanded, but not configured in mapbender.conf
-		if ($wms->twitterNews && !$twitterIsConfigured) {
-			$messResult .= " Publishing via twitter was requested, but this is not configured. Please check your mapbender.conf! ";
-		}
-		if ($wms->setGeoRss && !$rssIsConfigured) {
-			$messResult .= " Publishing via rss was requested, but this is not configured. Please check your mapbender.conf! ";
-		}
+		
 		$ajaxResponse->setMessage($messResult);
 		$ajaxResponse->setSuccess(true);		
 		break;
@@ -1030,6 +1061,35 @@
 		$ajaxResponse->setSuccess($result['success']);
 		$ajaxResponse->setMessage($result['message']);
 		break;
+	case "importGmlAddon":
+		$filename = $ajaxResponse->getParameter("filename");
+		$metadataId = $ajaxResponse->getParameter("metadataId");
+		$gml = file_get_contents($filename);
+		if (!$gml){
+			abort(_mb("Reading file ".$filename." failed!"));
+		}
+		$wktPolygon = gml2wkt($gml);
+		if ($wktPolygon) {
+			//insert polygon into database
+			$sql = <<<SQL
+UPDATE mb_metadata SET bounding_geom = $2 WHERE metadata_id = $1			
+SQL;
+		$v = array($metadataId, $wktPolygon);
+		$e = new mb_exception($metadataId);
+		$t = array('i','POLYGON');
+		$res = db_prep_query($sql,$v,$t);
+		if (!$res) {
+			abort(_mb("Problem while storing geometry into database!"));
+		} else {
+			abort(_mb("Stored successfully geometry into database!"));
+		}
+		} else {
+			abort(_mb("Converting GML to WKT failed!"));
+		}
+		//parse gml and extract multipolygon to wkt representation
+		//push multipolygon into database
+		
+	break;
 	case "importXmlAddon" :
 		//this case is similar to insert the metadata from external link, but came from internal file from tmp folder which has been uploaded before
 		$resourceId = $ajaxResponse->getParameter("resourceId");

Modified: trunk/mapbender/http/plugins/mb_metadata_showMetadataAddon.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_showMetadataAddon.js	2013-09-25 11:13:10 UTC (rev 8705)
+++ trunk/mapbender/http/plugins/mb_metadata_showMetadataAddon.js	2013-10-04 07:16:36 UTC (rev 8706)
@@ -320,6 +320,12 @@
 		that.fillLayerForm(layerId);
 	}
 
+	initUploadGmlForm = function (metadataId) {
+		//$metadataAddonPopup.dialog("close");
+		//don't show possibility if metadata was not created before - only afterwards!
+		initGmlImport(metadataId);
+		//that.fillLayerForm(layerId);
+	}
 
 	this.init = function (metadataId, layerId, isNew) {
 		$metadataAddonPopup.dialog("close");
@@ -340,10 +346,14 @@
 				//get initial values (title/abstract)
 				that.getInitialLayerMetadata(metadataId, layerId);
 			}
+			//c
 			that.showForm(metadataId, layerId, isNew);
 			$("#uploadImage").click(function () {
 				initUploadForm(layerId);
 			});
+			$("#uploadgmlimage").click(function () {
+				initUploadGmlForm(metadataId);
+			});
 			//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 });



More information about the Mapbender_commits mailing list