function insertLayerMetadataUrls($i) { //first delete the old ones - but only those who have been harvested thru caps before! global $con; $sql = "DELETE FROM mb_metadata WHERE metadata_id IN (SELECT metadata_id FROM mb_metadata INNER JOIN"; $sql .= " (SELECT * from ows_relation_metadata WHERE fkey_layer_id = \$1) as relation ON "; $sql .= " mb_metadata.metadata_id = relation.fkey_metadata_id AND mb_metadata.origin = 'capabilities')"; $v = array($this->objLayer[$i]->db_id); $t = array('i'); $res = db_prep_query($sql, $v, $t); //origin 2 - set by mapbender metadata editor - new record //origin 3 - set by mapbender metadata editor - new linkage //harvest the record if some readable format is given - should this be adoptable? //parse the content if iso19139 is given //TODO: generate temporal uuid for inserting and getting the serial afterwards for ($j = 0; $j < count($this->objLayer[$i]->layer_metadataurl); $j++) { //check for returned format? if ($this->objLayer[$i]->layer_metadataurl[$j]->type == 'ISO19115:2003' && $this->objLayer[$i]->layer_metadataurl[$j]->format == 'text/xml' || $this->objLayer[$i]->layer_metadataurl[$j]->type == 'TC211' && $this->objLayer[$i]->layer_metadataurl[$j]->format == 'text/xml') { //load metadata from link $metadataConnector = new connector($this->objLayer[$i]->layer_metadataurl[$j]->href); $metaData = $metadataConnector->file; //parse metadata try { //$iso19139Xml = simplexml_load_string($metaData); $iso19139Xml = new SimpleXMLElement($metaData); if ($iso19139Xml == false) { throw new Exception('Cannot parse Metadata XML!'); } } catch (Exception $e) { $e = new mb_exception($e->getMessage()); } if ($iso19139Xml != false) { //get elements for database from xml by using xpath //uuid $uuid = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString'); //createdate $createdate = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:dateStamp/gco:Date'); //changedate $changedate = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:dateStamp/gco:Date'); //TODO: check if this is set, maybe DateTime must be searched instead? //title $title = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString'); //dataset identifier - howto model into md_metadata? //check where datasetid is defined - maybe as RS_Identifier or as MD_Identifier see http://inspire.jrc.ec.europa.eu/documents/Metadata/INSPIRE_MD_IR_and_ISO_v1_2_20100616.pdf page 18 $code = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:code/gco:CharacterString'); $codeSpace = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:RS_Identifier/gmd:codeSpace/gco:CharacterString'); $e = new mb_exception("class_wms.php: code: " . $code[0]); $e = new mb_exception("class_wms.php: codeSpace: " . $codeSpace[0]); if (isset($codeSpace[0]) && isset($code[0]) && $codeSpace[0] != '' && $code[0] != '') { $datasetid = $codeSpace[0] . "#" . $code[0]; $e = new mb_exception("class_wms.php: datasetid: " . $datasetid); } else { $datasetid = 'undefined'; # in sense of INSPIRE TODO control MD_Identifier too! $e = new mb_exception("class_wms.php: datasetid: " . $datasetid); } //abstract $abstract = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract/gco:CharacterString'); //searchtext -- use keywords! $keywords = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString'); //type $type = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:hierarchyLevel/gmd:MD_ScopeCode'); //tmp_reference_1 $tmp_reference_1 = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition'); //tmp_reference_2 $tmp_reference_2 = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition'); //spatial_res_type //spatial_res_value //ref_system //format //inspire_charset //inspire_top_consistence //responsible_party //fees //"constraints" //fill database with elements: $sql = "INSERT INTO mb_metadata (link, origin, md_format, data, linktype, uuid, title, createdate, changedate, abstract, searchtext, type, tmp_reference_1, tmp_reference_2, export2csw, datasetid) "; $sql .= "VALUES(\$1, 'capabilities', \$2, \$3, \$4, \$5, \$6, \$7, \$8, \$9, \$10, \$11, \$12, \$13, \$14, \$15)"; $v = array($this->objLayer[$i]->layer_metadataurl[$j]->href, $this->objLayer[$i]->layer_metadataurl[$j]->format, $metaData, $this->objLayer[$i]->layer_metadataurl[$j]->type, $uuid[0], $title[0], $createdate[0], $changedate[0], $abstract[0], $keywords[0], $type[0], $tmp_reference_1[0], $tmp_reference_2[0], 't', $datasetid); $t = array('s', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 'b', 's'); $res = db_prep_query($sql, $v, $t); if (!$res) { db_rollback(); } //get last inserted serial_id $mdId = db_insert_id($con, 'mb_metadata', 'metadata_id'); //insert into ows_relation_metadata (fkey_layer_id, fkey_metadata_id) values (20131,3); $sql = "INSERT INTO ows_relation_metadata (fkey_layer_id, fkey_metadata_id) values (\$1, \$2);"; $v = array($this->objLayer[$i]->db_id, $mdId); $t = array('i', 'i'); $res = db_prep_query($sql, $v, $t); if (!$res) { db_rollback(); } else { $sql = "UPDATE mb_metadata SET harvestresult = 1 where metadata_id = \$1"; $v = array($mdId); $t = array('i'); $res = db_prep_query($sql, $v, $t); } } } else { //no readable format given - only store the links! //don't push single elements into database $sql = "INSERT INTO mb_metadata (link, origin, md_format, linktype) "; $sql .= "VALUES(\$1, 'capabilities', \$2, \$3)"; $v = array($this->objLayer[$i]->layer_metadataurl[$j]->href, $this->objLayer[$i]->layer_metadataurl[$j]->format, $this->objLayer[$i]->layer_metadataurl[$j]->type); $t = array('s', 's', 's'); $res = db_prep_query($sql, $v, $t); if (!$res) { db_rollback(); } //get last inserted serial_id $mdId = db_insert_id($con, 'mb_metadata', 'metadata_id'); //insert into ows_relation_metadata (fkey_layer_id, fkey_metadata_id) values (20131,3); $sql = "INSERT INTO ows_relation_metadata (fkey_layer_id, fkey_metadata_id) values (\$1, \$2);"; $v = array($this->objLayer[$i]->db_id, $mdId); $t = array('i', 'i'); $res = db_prep_query($sql, $v, $t); if (!$res) { db_rollback(); } else { //set harvest result to 0 cause this metadata format can not to be parsed $sql = "UPDATE mb_metadata SET harvestresult = 0 where metadata_id = \$1"; $v = array($mdId); $t = array('i'); $res = db_prep_query($sql, $v, $t); } } } }
<?php require_once dirname(__FILE__) . "/../php/mb_validateSession.php"; require_once dirname(__FILE__) . "/classes/factoryClasses.php"; require_once dirname(__FILE__) . "/../include/dyn_php.php"; $pf = new mbPdfFactory(); $confFile = basename($_REQUEST["printPDF_template"]); if (!preg_match("/^[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9]+)\$/", $confFile) || !file_exists($_REQUEST["printPDF_template"])) { $errorMessage = _mb("Invalid configuration file"); echo htmlentities($errorMessage, ENT_QUOTES, CHARSET); $e = new mb_exception($errorMessage); die; } $pdf = $pf->create($_REQUEST["printPDF_template"]); //element vars of print $pdf->unlinkFiles = $unlink; $pdf->logRequests = $logRequests; $pdf->logType = $logType; try { $pdf->render(); $pdf->save(); } catch (Exception $e) { new mb_exception($e->getMessage()); die($e->getMessage()); } print $pdf->returnAbsoluteUrl();