[Mapbender-commits] r8573 - in trunk/mapbender: http/geoportal http/php resources/db/pgsql/UTF-8/update

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Mon Feb 25 06:48:02 PST 2013


Author: armin11
Date: 2013-02-25 06:48:02 -0800 (Mon, 25 Feb 2013)
New Revision: 8573

Modified:
   trunk/mapbender/http/geoportal/mod_pullInspireMonitoring.php
   trunk/mapbender/http/php/mod_exportMapbenderLayer2CkanObjects.php
   trunk/mapbender/http/php/mod_syncCkan.php
   trunk/mapbender/resources/db/pgsql/UTF-8/update/update_2.7.3_to_2.7.4_pgsql_UTF-8.sql
Log:
Bugfixes and enhancement for ckan interface, bugfix for inspire monitoring table

Modified: trunk/mapbender/http/geoportal/mod_pullInspireMonitoring.php
===================================================================
--- trunk/mapbender/http/geoportal/mod_pullInspireMonitoring.php	2013-02-24 19:11:38 UTC (rev 8572)
+++ trunk/mapbender/http/geoportal/mod_pullInspireMonitoring.php	2013-02-25 14:48:02 UTC (rev 8573)
@@ -24,7 +24,7 @@
 if (isset($_REQUEST["outputFormat"]) & $_REQUEST["outputFormat"] != "") {
 	$testMatch = $_REQUEST["outputFormat"];	
  	if (!($testMatch == 'json' or $testMatch == 'table')){ 
-		echo 'outputFormat: <b>'.$testMatch.'</b> is not valid.<br/>'; 
+		echo 'outputFormat: is not valid.<br/>'; 
 		die(); 		
  	}
 	$outputFormat = $testMatch;
@@ -35,7 +35,7 @@
 	$testMatch = $_REQUEST["registratingDepartments"];
 	$pattern = '/^[\d,]*$/';		
  	if (!preg_match($pattern,$testMatch)){ 
-		echo 'registratingDepartments: <b>'.$testMatch.'</b> is not valid.<br/>'; 
+		echo 'registratingDepartments: is not valid.<br/>'; 
 		die(); 		
  	}
 	$registratingDepartments = $testMatch;
@@ -44,7 +44,7 @@
 if (isset($_REQUEST["language"]) & $_REQUEST["language"] != "") {
 	$testMatch = $_REQUEST["language"];	
  	if (!($testMatch == 'de' or $testMatch == 'en' or $testMatch == 'fr')){ 
-		echo 'language: <b>'.$testMatch.'</b> is not valid.<br/>'; 
+		echo 'language: is not valid.<br/>'; 
 		die(); 		
  	}
 	$lang = $testMatch;
@@ -101,7 +101,7 @@
 //multisort?
 //push information from groupOwnerArray to sqlTable
 $sqlTable['organization'] = $groupOwnerArray[3];
-$sqlTable['userId'] = $groupOwnerArray[2];
+//$sqlTable['userId'] = $groupOwnerArray[2];
 $sqlTable['orgaId'] = $groupOwnerArray[4];
 //TODO: check sorting
 //$wfsMatrix = $this->flipDiagonally($wfsMatrix); //- see class_metadata_new.php
@@ -208,9 +208,9 @@
 		}
 		$index = 0;
 		//push information directly into $groupOwnerArray at indizes from 
-		for ($i=0; $i < count($listOwnerIds); $i++){
+		for ($i=0; $i < count($listOwnerIdsKeys); $i++){
 			//find index of user with special id in array $metadataContactOwnerArray['user_id']
-			$index = findIndexInMultiDimArray($metadataContactOwnerArray, $listOwnerIds[$i], 'mb_user_id'); 
+			$index = findIndexInMultiDimArray($metadataContactOwnerArray, $listOwnerIds[$listOwnerIdsKeys[$i]], 'mb_user_id'); 
 			$groupOwnerArray[2][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['user_id']; //user_id - 2
 			$groupOwnerArray[3][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['metadatapointofcontactorgname']; //orga_name - 3	
 			$groupOwnerArray[4][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['orga_id'];
@@ -224,16 +224,16 @@
 		while ($row = db_fetch_array($resultOrgaGroup)) {
 			//push information into metadataContactArray
 			$metadataContactGroupArray[$index]['metadatapointofcontactorgname'] = $row['metadatapointofcontactorgname'];
-			$metadataContactGroupArray[$index]['mb_user_id'] = $row['mb_user_id'];
+			$metadataContactGroupArray[$index]['mb_group_id'] = $row['mb_group_id'];
 			$metadataContactGroupArray[$index]['orga_id'] = $row['mb_group_id'];
 			$index++;
 		}
 		$index = 0;
 		//push information directly into $groupOwnerArray at indizes from 
-		for ($i=0; $i < count($listGroupIds); $i++){
+		for ($i=0; $i < count($listGroupIdsKeys); $i++){
 			//find index of user with special id in array $metadataContactGroupArray['user_id']
-			$index = findIndexInMultiDimArray($metadataContactGroupArray, $listGroupIds[$i], 'mb_user_id');
-			$groupOwnerArray[2][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['mb_user_id']; //user_id - 2
+			$index = findIndexInMultiDimArray($metadataContactGroupArray, $listGroupIds[$listGroupIdsKeys[$i]], 'mb_group_id');
+			$groupOwnerArray[2][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['mb_group_id']; //user_id - 2
 			$groupOwnerArray[3][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['metadatapointofcontactorgname']; //orga_name - 3	
 			$groupOwnerArray[4][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['orga_id'];
 		}

Modified: trunk/mapbender/http/php/mod_exportMapbenderLayer2CkanObjects.php
===================================================================
--- trunk/mapbender/http/php/mod_exportMapbenderLayer2CkanObjects.php	2013-02-24 19:11:38 UTC (rev 8572)
+++ trunk/mapbender/http/php/mod_exportMapbenderLayer2CkanObjects.php	2013-02-25 14:48:02 UTC (rev 8573)
@@ -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, layer.uuid as uuid, wms_title || ':' || 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.termso
 fuse_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, 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; 
 
 SQL;
 $result = db_query($sql);
@@ -19,6 +19,7 @@
 	$sqlTable['service_id'][] = $row['wms_id'];
 	$sqlTable['resource_type'][] = "Kartenebene";
 	$sqlTable['resource_id'][] = $row['layer_id'];
+	$sqlTable['resource_keywords'][] = $row['keywords'];
 	$sqlTable['service_group'][] = $row['service_group'];
 	$sqlTable['service_owner'][] = $row['service_owner'];
 	$sqlTable['service_person'][] = $row['contactperson'];
@@ -40,9 +41,16 @@
 	if (isset($row['category']) && $row['category'] != '') {
 		$categories = explode(",",str_replace("{","",str_replace("}","",str_replace("}{",",",$row['category']))));
 		//exchange ids with ckan categories from ckan.conf
+		$numberOfCategories = 0;
 		for ($i=0; $i < count($categories); $i++){
 			if (array_key_exists($categories[$i],$topicCkanCategoryMap)) {
-				$categories[$i] = $topicCkanCategoryMap[$categories[$i]];
+				//check if categories should be exploded
+				$newCategories = explode(",",$topicCkanCategoryMap[$categories[$i]]);
+				foreach ($newCategories as $cat) {
+					//explode categories if 
+					$categories[$numberOfCategories] = $cat;
+					$numberOfCategories++;
+				}
 			}
 		}
 		$e = new mb_notice('mod_exportMapbenderLayer2CkanObjects.php: categories from db: '.$categories[1]);
@@ -119,11 +127,20 @@
 			$package->groups[$i + 1]->name = $mbArray['categories'][$i];
 		}
 	}
+	if ($mbArray['resource_keywords'] && $mbArray['resource_keywords'] != '') {
+		$package->tags = array();
+		$keywordArray = explode(',',$mbArray['resource_keywords']);
+		for ($i=0; $i < count($keywordArray); $i++){
+			$package->tags[$i]->name = $keywordArray[$i];
+		}
+	}
 	$package->name = $mbArray['name'];// $datasetName; //layer.uuid
 	$package->notes = $mbArray['notes'];//"Die (Digitale) Topographische Karte 1:100 000 ermöglicht aufgrund der abgebildeten Fläche die Darstellung großräumige Gebiete."; //wms.wms_abstract || layer.layer_abstract
 	$package->title = $mbArray['title'];//"Topographische Karte Rheinland-Pfalz 1:100.000"; //wms.wms_title || layer.layer_title - OK
 	//TODO: really needed?
-	$package->other_terms_of_use = "other terms of use";//$mbArray['mb_user_id'];// "test tou"; //null or ""
+	//not needed, if licence is available in ckan instance!
+	$package->other_terms_of_use = "Keine Angaben";//$mbArray['mb_user_id'];// "test tou"; //null or ""
+	
 	//TODO: problem date format
 	$package->temporal_coverage_to = substr($mbArray['temporal_coverage_to'],0,10);// "2012-01-01"; // last update ? wms.wms_timestamp - OK
 
@@ -167,7 +184,7 @@
 	$package->terms_of_use->license_id = $mbArray['tou_licence_id'];// "ger-name-nc"; //termsofuse.name - OK
 	$package->terms_of_use->license_title = $mbArray['tou_licence_title'];// "Datenlizenz Deutschland – Namensnennung – nicht kommerziell"; //termsofuse.description OK
 	$package->terms_of_use->license_url = $mbArray['tou_licence_url'];// null; //termsofuse.descriptionlink OK
-	if ($mbArray['service_fees'] != "") {
+	if ($mbArray['service_fees'] != "" || strtoupper($mbArray['service_fees']) != "NONE" || strtoupper($mbArray['service_fees']) != "KEINE") {
 		$package->terms_of_use->other = $mbArray['service_fees'];//$mbArray['mb_user_id'];// null; // null?
 	} else {
 		//$package->terms_of_use->other = "Keine";
@@ -227,9 +244,9 @@
 		}
 		$index = 0;
 		//push information directly into $groupOwnerArray at indizes from 
-		for ($i=0; $i < count($listOwnerIds); $i++){
+		for ($i=0; $i < count($listOwnerIdsKeys); $i++){
 			//find index of user with special id in array $metadataContactOwnerArray['user_id']
-			$index = findIndexInMultiDimArray($metadataContactOwnerArray, $listOwnerIds[$i], 'mb_user_id'); 
+			$index = findIndexInMultiDimArray($metadataContactOwnerArray, $listOwnerIds[$listOwnerIdsKeys[$i]], 'mb_user_id'); 
 			$groupOwnerArray[2][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['user_id']; //user_id - 2
 			$groupOwnerArray[3][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['metadatapointofcontactorgname']; //orga_name - 3	
 			$groupOwnerArray[4][$listOwnerIdsKeys[$i]] = $metadataContactOwnerArray[$index]['metadatapointofcontactorgtitle']; //title - 4	
@@ -259,16 +276,16 @@
 			$metadataContactGroupArray[$index]['metadatapointofcontactorgcity'] = $row['metadatapointofcontactorgcity'];
 			$metadataContactGroupArray[$index]['metadatapointofcontactorglogo'] = $row['metadatapointofcontactorglogo'];
 			$metadataContactGroupArray[$index]['mb_group_homepage'] = $row['mb_group_homepage'];
-			$metadataContactGroupArray[$index]['mb_user_id'] = $row['mb_user_id'];
+			$metadataContactGroupArray[$index]['mb_group_id'] = $row['mb_group_id'];
 			$metadataContactGroupArray[$index]['orga_id'] = $row['mb_group_id'];
 			$index++;
 		}
 		$index = 0;
 		//push information directly into $groupOwnerArray at indizes from 
-		for ($i=0; $i < count($listGroupIds); $i++){
+		for ($i=0; $i < count($listGroupIdsKeys); $i++){
 			//find index of user with special id in array $metadataContactGroupArray['user_id']
-			$index = findIndexInMultiDimArray($metadataContactGroupArray, $listGroupIds[$i], 'mb_user_id');
-			$groupOwnerArray[2][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['mb_user_id']; //user_id - 2
+			$index = findIndexInMultiDimArray($metadataContactGroupArray, $listGroupIds[$listGroupIdsKeys[$i]], 'mb_group_id');
+			$groupOwnerArray[2][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['mb_group_id']; //user_id - 2
 			$groupOwnerArray[3][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['metadatapointofcontactorgname']; //orga_name - 3	
 			$groupOwnerArray[4][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['metadatapointofcontactorgtitle']; //title - 4	
 			$groupOwnerArray[5][$listGroupIdsKeys[$i]] = $metadataContactGroupArray[$index]['metadatapointofcontactorgaddress']; //address - 5	

Modified: trunk/mapbender/http/php/mod_syncCkan.php
===================================================================
--- trunk/mapbender/http/php/mod_syncCkan.php	2013-02-24 19:11:38 UTC (rev 8572)
+++ trunk/mapbender/http/php/mod_syncCkan.php	2013-02-25 14:48:02 UTC (rev 8573)
@@ -24,7 +24,6 @@
 echo json_encode($ckanObjects);
 */
 //first check if group with given name exists - if not create it in the ckan instance via action api, if it exists - update title and link to logo
-
 $group = group_get(CKAN_GROUP_NAME);
 if (!$group) {
 	print "No group found, create it via action api!";
@@ -34,6 +33,7 @@
 	$newGroup->name = CKAN_GROUP_NAME;
 	$newGroup->title = CKAN_GROUP_TITLE;
 	$newGroup->image_url = CKAN_GROUP_SYMBOL;
+	$newGroup->description = CKAN_GROUP_DESCRIPTION;
 	try {
 		$result = $ckan->action_group_create(json_encode($newGroup));
 	}
@@ -47,7 +47,6 @@
 } else {
 	print "Group <b>".$group->name."</b> found. Datasets will be pushed into this group.";
 }
-
 if (defined("CKAN_EXPORT_URL") && CKAN_EXPORT_URL != "") {
 	$mapbenderCkanUrl = CKAN_EXPORT_URL;
 } else {
@@ -91,7 +90,6 @@
 		$datasetToDelete = $ckanDatasetArray;
 	}
 }
-
 //show datasets to be deleted:
 if ($datasetToDelete) {
 	print "<b>ckan datasets to be deleted:</b><br>";
@@ -100,7 +98,6 @@
 		print $dataset."<br>";
 	}
 }
-
 //check datasets to be updated:
 if (!$ckanDatasetArray) {
 	$datasetToUpdate = false;
@@ -117,7 +114,6 @@
 } else {
 	print "<b>No datasets to update!</b><br>";
 }
-
 //get datasets to be created
 if ($ckanDatasetArray && $mbDatasetArray) {
 	$datasetToCreate = array_diff($mbDatasetArray, $ckanDatasetArray);
@@ -129,7 +125,6 @@
 		$datasetToCreate = false;
 	}
 }
-
 if ($datasetToCreate) {
 	print "<b>Mapbender datasets to be created for the first time:</b><br>";
 	foreach ($datasetToCreate as $dataset) {
@@ -139,9 +134,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) {
 	$result = package_delete($datasetName,CKAN_API_UPDATE);
@@ -151,7 +144,6 @@
 		print "Package ".$datasetName." could not be deleted!<br>";
 	}
 }
-
 if ($datasetToUpdate) {
 	print "<b>Update of datasets</b><br>";
 }
@@ -166,6 +158,9 @@
 			for ($i=0;$i < count($newPackage->groups);$i++) {
 				$newPackage->groups[$i] = $newPackage->groups[$i]->name;
 			}
+			for ($i=0;$i < count($newPackage->tags);$i++) {
+				$newPackage->tags[$i] = $newPackage->tags[$i]->name;
+			}
 		}
 		//update it with action api
 		$result = package_update ($newPackage,CKAN_API_UPDATE);
@@ -177,7 +172,6 @@
 		}
 	} 
 }
-
 //second create the new ones 
 foreach ($datasetToCreate as $datasetName) {
 	//get dataset from object
@@ -410,11 +404,14 @@
 					//the existing package was called by action api therefor group will be defined as dict and be flattened before update
 					//TODO: check if api 2 uses dict for group or not!
 					for ($i=0;$i < count($existingPackage->groups);$i++) {
-						$error = new mb_exception('mod_syncCkan.php: groups['.$i.']->name old:'.$existingPackage->groups[$i]->name);
+						//$error = new mb_exception('mod_syncCkan.php: groups['.$i.']->name old:'.$existingPackage->groups[$i]->name);
 						
 						$existingPackage->groups[$i] = $existingPackage->groups[$i]->name;
-						$error = new mb_exception('mod_syncCkan.php: groups['.$i.'] new:'.$existingPackage->groups[$i]);
+						//$error = new mb_exception('mod_syncCkan.php: groups['.$i.'] new:'.$existingPackage->groups[$i]);
 					}
+					for ($i=0;$i < count($existingPackage->tags);$i++) {
+						$existingPackage->tags[$i] = $existingPackage->tags[$i]->name;
+					}
 					$package->point_of_contact = "dummy";
 					$package->content_type = "dummy";
 					$package->point_of_contact_free_address = "dummy";
@@ -439,12 +436,12 @@
 				break;
 				case 1:	
 					//update it with api v1 ;-)
-					for ($i=0;$i < count($existingPackage->groups);$i++) {
-						$error = new mb_exception('mod_syncCkan.php: groups['.$i.']->name old:'.$existingPackage->groups[$i]->name);
-						
+					for ($i=0;$i < count($existingPackage->groups);$i++) {	
 						$existingPackage->groups[$i] = $existingPackage->groups[$i]->name;
-						$error = new mb_exception('mod_syncCkan.php: groups['.$i.'] new:'.$existingPackage->groups[$i]);
 					}
+					for ($i=0;$i < count($existingPackage->tags);$i++) {	
+						$existingPackage->tags[$i] = $existingPackage->tags[$i]->name;
+					}
 					//some rp specials for deleting non conformant datasets - which maybe generated by hand!
 					/*2013-02-23 21:37:57,704 ERROR [ckan.controllers.api] Validation error: "{'point_of_contact': [u'Missing value'], 'content_type': [u'Missing value'], 'point_of_contact_free_address': [u'At least one value must be specified'], 'point_of_contact_email': [u'At least one value must be specified'], 'point_of_contact_url': [u'At least one value must be specified']}"*/
 

Modified: trunk/mapbender/resources/db/pgsql/UTF-8/update/update_2.7.3_to_2.7.4_pgsql_UTF-8.sql
===================================================================
--- trunk/mapbender/resources/db/pgsql/UTF-8/update/update_2.7.3_to_2.7.4_pgsql_UTF-8.sql	2013-02-24 19:11:38 UTC (rev 8572)
+++ trunk/mapbender/resources/db/pgsql/UTF-8/update/update_2.7.3_to_2.7.4_pgsql_UTF-8.sql	2013-02-25 14:48:02 UTC (rev 8573)
@@ -43,3 +43,31 @@
 --INSERT INTO termsofuse (name,symbollink,description,descriptionlink,isopen) VALUES ('dl-de-by-nc-1.0', 'http://i.creativecommons.org/l/by-nc/3.0/de/88x31.png','Datenlizenz Deutschland – Namensnennung – nicht-kommerziell – Version 1.0','http://www.daten-deutschland.de/bibliothek/Datenlizenz_Deutschland/dl-de-by-nc-1.0',0);
 UPDATE termsofuse SET name = 'cc-by-nc-nd' WHERE name = 'CC by-nc-nd';
 
+-- Function: f_collect_layer_keywords(integer, integer)
+
+-- DROP FUNCTION f_collect_layer_keywords(integer, integer);
+
+CREATE OR REPLACE FUNCTION f_collect_layer_keywords(integer)
+  RETURNS text AS
+$BODY$DECLARE
+    p_layer_id ALIAS FOR $1;
+    
+    r_keywords RECORD;
+    l_result TEXT;
+BEGIN
+    l_result := '';
+    FOR r_keywords IN SELECT DISTINCT keyword FROM
+        (SELECT keyword FROM layer_keyword L JOIN keyword K ON (K.keyword_id = L.fkey_keyword_id AND L.fkey_layer_id = p_layer_id)
+        ) AS __keywords__ LOOP
+        l_result := l_result || ',' || COALESCE(r_keywords.keyword, '');
+    END LOOP;
+    l_result := trim(leading ',' from l_result);
+    RETURN l_result;
+END;
+$BODY$
+  LANGUAGE plpgsql VOLATILE STRICT
+  COST 100;
+ALTER FUNCTION f_collect_layer_keywords(integer)
+  OWNER TO postgres;
+
+



More information about the Mapbender_commits mailing list