[Mapbender-commits] r10163 - trunk/mapbender/http/php

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Wed Jun 26 07:54:39 PDT 2019


Author: armin11
Date: 2019-06-26 07:54:39 -0700 (Wed, 26 Jun 2019)
New Revision: 10163

Added:
   trunk/mapbender/http/php/mod_getCoupledResourcesForDataset.php
Log:
New module to resolve coupled services from given csw getrecordbyid resource url

Added: trunk/mapbender/http/php/mod_getCoupledResourcesForDataset.php
===================================================================
--- trunk/mapbender/http/php/mod_getCoupledResourcesForDataset.php	                        (rev 0)
+++ trunk/mapbender/http/php/mod_getCoupledResourcesForDataset.php	2019-06-26 14:54:39 UTC (rev 10163)
@@ -0,0 +1,189 @@
+<?php
+# License:
+# Copyright (c) 2009, Open Source Geospatial Foundation
+# This program is dual licensed under the GNU General Public License 
+# and Simplified BSD license.  
+# http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+require_once dirname(__FILE__) . "/../../core/globalSettings.php";
+require_once dirname(__FILE__) . "/../classes/class_iso19139.php";
+require_once(dirname(__FILE__) . "/../classes/class_cswClient.php");
+require_once(dirname(__FILE__) . "/../classes/class_csw.php");
+//show html from a given url
+//default languageCode to de
+//example:
+//https://gdk.gdi-de.org/gdi-de/srv/eng/csw?request=GetRecordById&service=CSW&version=2.0.2&Id=71b31668-746b-40a2-975a-172a87318e45&ElementSetName=full&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd
+
+//localhost/mapbender/php/mod_getCoupledResourcesForDataset.php?getRecordByIdUrl=https%3A%2F%2Fgdk.gdi-de.org%2Fgdi-de%2Fsrv%2Feng%2Fcsw%3Frequest%3DGetRecordById%26service%3DCSW%26version%3D2.0.2%26Id%3D71b31668-746b-40a2-975a-172a87318e45%26ElementSetName%3Dfull%26OUTPUTSCHEMA%3Dhttp%3A%2F%2Fwww.isotc211.org%2F2005%2Fgmd
+$languageCode = "de";
+$url = urldecode($_REQUEST['getRecordByIdUrl']);
+$outputFormat = 'json';
+$catalogueId = 1;
+$resultObj['result'] = '';
+$resultObj['success'] = false;
+$resultObj['message'] = 'no message';
+//get language parameter out of mapbender session if it is set else set default language to de_DE
+$sessionLang = Mapbender::session()->get("mb_lang");
+if (isset($sessionLang) && ($sessionLang!='')) {
+	$e = new mb_notice("mod_showMetadata.php: language found in session: ".$sessionLang);
+	$language = $sessionLang;
+	$langCode = explode("_", $language);
+	$langCode = $langCode[0]; # Hopefully de or s.th. else
+	$languageCode = $langCode; #overwrite the GET Parameter with the SESSION information
+}
+if (isset($_REQUEST["languageCode"]) & $_REQUEST["languageCode"] != "") {
+	//validate to csv integer list
+	$testMatch = $_REQUEST["languageCode"];
+	if (!($testMatch == 'de' or $testMatch == 'fr' or $testMatch == 'en')){ 
+		//echo 'languageCode: <b>'.$testMatch.'</b> is not valid.<br/>'; 
+		echo 'Parameter <b>languageCode</b> is not valid (de,fr,en).<br/>'; 
+		die(); 		
+ 	}
+	$languageCode = $testMatch;
+	$testMatch = NULL;
+}
+/*if (isset($_REQUEST["catalogueId"]) & $_REQUEST["catalogueId"] != "") {
+	//validate integer to 100 - not more
+	$testMatch = $_REQUEST["catalogueId"];
+	//
+	$pattern = '/^([0-9]{0,1})([0-9]{1})$/';
+ 	if (!preg_match($pattern,$testMatch)){
+		//echo 'maxResults: <b>'.$testMatch.'</b> is not valid.<br/>';
+		echo 'Parameter <b>catalogueId</b> is not valid (integer < 99).<br/>';
+		die();
+ 	}
+	$catalogueId = $testMatch;
+	$testMatch = NULL;
+} else {
+	echo 'Mandatory parameter <b>catalogueId</b> not set!<br/>';
+	die();
+}*/
+/*if (isset($_REQUEST["datasetId"]) & $_REQUEST["datasetId"] != "") {
+	//validate integer to 100 - not more
+	$testMatch = $_REQUEST["datasetId"];
+	//
+	$pattern = '/^([0-9]{0,1})([0-9]{1})$/';
+ 	if (!preg_match($pattern,$testMatch)){
+		//echo 'maxResults: <b>'.$testMatch.'</b> is not valid.<br/>';
+		echo 'Parameter <b>datasetId</b> is not valid (integer < 99).<br/>';
+		die();
+ 	}
+	$datasetId = $testMatch;
+	$testMatch = NULL;
+} else {
+	echo 'Mandatory parameter <b>datasetId</b> not set!<br/>';
+	die();
+}*/
+//write languageCode into session!
+$localeObj->setCurrentLocale($languageCode);
+if (isset($_REQUEST["outputFormat"]) & $_REQUEST["outputFormat"] != "") {
+	//validate to de, en, fr
+	$testMatch = $_REQUEST["outputFormat"];	
+ 	if (!($testMatch == 'html' or $testMatch == 'json')){ 
+		//echo 'languageCode: <b>'.$testMatch.'</b> is not valid.<br/>'; 
+		echo 'Parameter <b>outputFormat</b> is not valid (json,html).<br/>'; 
+		die(); 		
+ 	}
+	$outputFormat = $testMatch;
+	$testMatch = NULL;
+}
+//instantiate
+$mbMetadata = new Iso19139();
+//initialize if resource is based on a request to csw interface
+$cswBasedResource = false;
+//test if getrecordbyid request was used - then the service data may also be in the same catalogue
+if (strpos(strtoupper($url), "GETRECORDBYID",strtoupper($url)) !== false && strpos(strtoupper($url), "SERVICE=CSW") !== false && strpos(strtoupper($url), "VERSION=2.0.2") !== false) {
+	$cswBasedResource = true;
+} else {
+	$resultObj['message'] ='Url dont validate against a getrecordbyid url!'; 
+	$resultObj['result'] = null;
+	echo json_encode($resultObj);
+	die(); 	
+}
+//build search request for services
+//TODO: test if this ok - maybe not everything is parsed by class? instead we could use $mbMetadata->readFromUrl($url);
+$mbMetadata->createFromUrl($url);
+$serviceMetadata = new stdClass();
+$serviceMetadataIndex = 0;
+if ($mbMetadata->hierarchyLevel == 'dataset' || $mbMetadata->hierarchyLevel == 'series') {
+	//get datasetidentifier to resolve coupled resources
+	//$e = new mb_exception("datasetId: ".$mbMetadata->datasetId);
+	//$e = new mb_exception("datasetIdCodeSpace: ".$mbMetadata->datasetIdCodeSpace);
+	if ($cswBasedResource == true) {
+		//$e = new mb_exception("try to resolve coupled resources");
+		//createCatObjFromXML($url);
+		$csw = new csw();
+		//$e = new mb_exception("parse csw capabilities!");
+		//parse url
+		$urlArray = parse_url($url);
+		$urlWithoutRequest = $urlArray['scheme']."://".$urlArray['host'].":".$urlArray['port']."/".$urlArray['path'];
+		$csw->createCatObjFromXML($urlWithoutRequest."?SERVICE=CSW&VERSION=2.0.2&REQUEST=GetCapabilities");
+		$cswClient = new cswClient();
+		$operation = "getrecordsresolvecoupling";
+		$getrecordId = $mbMetadata->fileIdentifier;
+		$datasetId = $mbMetadata->datasetId;
+		$recordType = 'service';
+		$cswResponseObject = $cswClient->doRequest(false, $operation, $getrecordId, false, $recordType, false, false, false, $datasetId, $csw);	
+		$serviceMetadataUrls = array();
+		if ($cswClient->operationSuccessful == true) {
+			//$e = new mb_exception("operation successfull");	
+			//$e = new mb_exception(gettype($cswClient->operationResult));
+			$metadataRecord = $cswClient->operationResult->xpath('/csw:GetRecordsResponse/csw:SearchResults/gmd:MD_Metadata');
+			//$e = new mb_exception("number of records: ".count($metadataRecord));
+			//what is possible: keywords, categories?, spatial, ...
+			if (count($metadataRecord) < 1) {
+				$resultObj['message'] ='No coupled services found in csw catalogue!'; 
+				$resultObj['result'] = null;
+				echo json_encode($resultObj);
+				die(); 
+			}
+			for ($k = 1; $k <= count($metadataRecord) ; $k++) {
+				$fileIdentifier = $cswClient->operationResult->xpath('/csw:GetRecordsResponse/csw:SearchResults/gmd:MD_Metadata['.$k.']/gmd:fileIdentifier/gco:CharacterString');
+				$fileIdentifier = (string)$fileIdentifier[0];
+				//service date
+				$mdDateStamp = $cswClient->operationResult->xpath('/csw:GetRecordsResponse/csw:SearchResults/gmd:MD_Metadata['.$k.']/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:date/gmd:CI_Date/gmd:date/gco:Date');
+				$mdDateStamp = (string)$mdDateStamp[0];
+				//service title
+				$mdTitle = $cswClient->operationResult->xpath('/csw:GetRecordsResponse/csw:SearchResults/gmd:MD_Metadata['.$k.']/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString');
+				$mdTitle = (string)$mdTitle[0];
+				//service type
+				$mdServiceType = $cswClient->operationResult->xpath('/csw:GetRecordsResponse/csw:SearchResults/gmd:MD_Metadata['.$k.']/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:serviceType/gco:LocalName');
+				$mdServiceType = (string)$mdServiceType[0];
+				//accessUrl
+				$mdAccessUrl = $cswClient->operationResult->xpath('/csw:GetRecordsResponse/csw:SearchResults/gmd:MD_Metadata['.$k.']/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL');
+				$mdAccessUrl = (string)$mdAccessUrl[0];
+
+				//get service type - view / download
+
+				//get service title
+
+				/*$datasetIdentifier = $cswClient->operationResult->xpath('/csw:GetRecordsResponse/csw:SearchResults/gmd:MD_Metadata['.$k.']/gmd:identificationInfo/gmd:MD_DataIdentification/@uuid');
+				$datasetidentifier = (string)$datasetidentifier[0];
+				$url =  $cswClient->operationResult->xpath('/csw:GetRecordsResponse/csw:SearchResults/gmd:MD_Metadata['.$k.']/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL');
+				$url = (string)$url[0];
+				if (isset($url) && $url !=="") {
+					//$metadataArray[$numberOfMetadataRecords]['uuid'] = $datasetIdentifier;
+					$metadataArray[$numberOfMetadataRecords]['uuid'] = $fileIdentifier;
+					$metadataArray[$numberOfMetadataRecords]['changedate'] = $mdDateStamp;
+					$numberOfMetadataRecords++;
+				}*/
+				//$e = new mb_exception("found service with fileIdentifier: ".$fileIdentifier." - date - ".$mdDateStamp);
+				$serviceMetadata->service[$k]->serviceType = $mdServiceType;
+				$serviceMetadata->service[$k]->serviceTitle = $mdTitle;
+				$serviceMetadata->service[$k]->serviceDate = $mdDateStamp;
+				$serviceMetadata->service[$k]->metadataUrl = $urlWithoutRequest."?SERVICE=CSW&VERSION=2.0.2&REQUEST=GetRecordById&outputSchema=".urlencode('http://www.isotc211.org/2005/gmd')."&id=".$fileIdentifier;
+				$serviceMetadata->service[$k]->accessUrl = $mdAccessUrl;	
+			}
+		}
+		$resultObj['message'] = "Coupling resolved successfully!"; 
+		$resultObj['success'] = true;
+		$resultObj['result'] = $serviceMetadata;
+		echo json_encode($resultObj);
+		die(); 	
+	} else {
+		$resultObj['message'] ='No csw based resource!!'; 
+		$resultObj['result'] = null;
+		echo json_encode($resultObj);
+		die(); 	
+	}
+}
+?>



More information about the Mapbender_commits mailing list