setSuccess(false); $ajaxResponse->setMessage($message); $ajaxResponse->send(); die(); }; function getGeodata ($geodataId = null) { $user = new User(Mapbender::session()->get("mb_user_id")); $e = new mb_exception("plugins/mb_geodata_server.php: mb_user_id: ".$user); $geodataIdArray = $user->getOwnedGeodata(); if (!is_null($geodataId) && !in_array($geodataId, $geodataIdArray)) { abort(_mb("You are not allowed to access this dataset.")); } return $geodataIdArray; } function getLayer ($layerId = null) { $user = new User(Mapbender::session()->get("mb_user_id")); $wmsIdArray = $user->getOwnedWms(); if (!is_array($wmsIdArray) || count($wmsIdArray) === 0) { abort(_mb("No metadata sets available.")); } $wmsId = wms::getWmsIdByLayerId($layerId); if (is_null($wmsId) || !in_array($wmsId, $wmsIdArray)) { abort(_mb("You are not allowed to access WMS " . $wmsId)); } return; } switch ($ajaxResponse->getMethod()) { case "getGeodata" : $geodataIdArray = getGeodata(); $geodataList = implode(",", $geodataIdArray); $sql = << array( _mb("Geodata ID"), _mb("title"), _mb("last change"), _mb("change"), _mb("origin"), _mb("datasetid"), _mb("uuid") ), "data" => array() ); while ($row = db_fetch_row($res)) { // convert NULL to '', NULL values cause datatables to crash $walk = array_walk($row, create_function('&$s', '$s=strval($s);')); $resultObj["data"][]= $row; } $ajaxResponse->setResult($resultObj); $ajaxResponse->setSuccess(true); break; case "getWmsMetadata" : $wmsId = $ajaxResponse->getParameter("id"); getWms($wmsId); $wms = new wms(); $wms->createObjFromDBNoGui($wmsId);//here the owsproxyurls will be read out - to make previews with proxy urls $fields = array( "wms_id", "wms_abstract", "wms_title", "fees", "accessconstraints", "contactperson", "contactposition", "contactvoicetelephone", "contactfacsimiletelephone", "contactorganization", "address", "city", "stateorprovince", "postcode", "country", "contactelectronicmailaddress", "wms_timestamp", "wms_timestamp_create", "wms_network_access", "fkey_mb_group_id" ); $resultObj = array(); foreach ($fields as $field) { if ($field == "wms_timestamp" || $field == "wms_timestamp_create") { if ($wms->$field != "") { $resultObj[$field] = date('d.m.Y', $wms->$field); } } else { $resultObj[$field] = $wms->$field; //$e = new mb_exception("mb_metadata_server: resultObject[".$field."]=".$wms->$field); } } // layer searchable $resultObj["layer_searchable"] = array(); foreach ($wms->objLayer as $layer) { if (intval($layer->layer_searchable) === 1) { $resultObj["layer_searchable"][] = intval($layer->layer_uid); } } $keywordSql = <<id; //$e = new mb_exception("user id:".$userId); $sql = <<setResult($resultObj); $ajaxResponse->setSuccess(true); break; case "getLayerMetadata" : $layerId = $ajaxResponse->getParameter("id"); getLayer($layerId); $sql = << $value) { $resultObj[$key] = $value; $e = new mb_notice("plugins/mb_metadata_server.php: get ".$value." for ".$key); } } $sql = <<metadata_id = array(); $resultObj["md_metadata"]->uuid = array(); $resultObj["md_metadata"]->origin = array(); $resultObj["md_metadata"]->linktype = array(); $resultObj["md_metadata"]->link = array(); $i = 0; while ($row = db_fetch_assoc($res)) { $resultObj["md_metadata"]->metadata_id[$i]= $row["metadata_id"]; $resultObj["md_metadata"]->link[$i]= $row["link"]; $resultObj["md_metadata"]->uuid[$i]= $row["uuid"]; $resultObj["md_metadata"]->origin[$i]= $row["origin"]; $resultObj["md_metadata"]->linktype[$i]= $row["linktype"]; $i++; } $ajaxResponse->setResult($resultObj); $ajaxResponse->setSuccess(true); break; case "getLayerByWms" : $wmsId = $ajaxResponse->getParameter("id"); // getWms($wmsId); $sql = <<= 0) { $inspireCats = 1; } else { $inspireCats = 0; } return array( "left" => $left, "right" => $right, "parent" => $row["layer_parent"] !== "" ? intval($row["layer_parent"]) : null, "pos" => intval($row["layer_pos"]), "attr" => array ( "layer_id" => intval($row["layer_id"]), "layer_name" => $row["layer_name"], "layer_title" => $row["layer_title"], "layer_abstract" => $row["layer_abstract"], "layer_searchable" => intval($row["layer_searchable"]), "layer_coupling" => intval($row["count_coupling"]), "inspire_cats" => intval($inspireCats) ) ); } function addSubTree ($rows, $i, $left) { $nodeArray = array(); $addNewNode = true; for ($j = $i; $j < count($rows); $j++) { $row = $rows[$j]; $pos = intval($row["layer_pos"]); $parent = $row["layer_parent"] !== "" ? intval($row["layer_parent"]) : null; // first node of subtree if ($addNewNode) { $nodeArray[]= createNode($left, null, $row); $addNewNode = false; } else { // new sub tree if ($parent === $nodeArray[count($nodeArray)-1]["pos"]) { $addedNodeArray = addSubTree($rows, $j, ++$left); $nodeArray[count($nodeArray)-1]["right"] = $nodeArray[count($nodeArray)-1]["left"] + 2 * count($addedNodeArray) + 1; $left = $nodeArray[count($nodeArray)-1]["right"] + 1; $nodeArray = array_merge($nodeArray, $addedNodeArray); $j += count($addedNodeArray) - 1; $addNewNode = true; } // siblings elseif ($parent === $nodeArray[count($nodeArray)-1]["parent"]) { $nodeArray[count($nodeArray)-1]["right"] = ++$left; $nodeArray[]= createNode(++$left, null, $row); } } } if (is_null($nodeArray[count($nodeArray)-1]["right"])) { $nodeArray[count($nodeArray)-1]["right"] = ++$left; } return $nodeArray; } $nodeArray = addSubTree($rows, 0, 1); $resultObj = array( "nestedSets" => $nodeArray ); $ajaxResponse->setResult($resultObj); $ajaxResponse->setSuccess(true); break; case "save": $data = $ajaxResponse->getParameter("data"); try { $wmsId = intval($data->wms->wms_id); } catch (Exception $e) { $ajaxResponse->setSuccess(false); $ajaxResponse->setMessage(_mb("Invalid WMS ID.")); $ajaxResponse->send(); } getWms($wmsId); $wms = new wms(); $wms->createObjFromDBNoGui($wmsId,false);//here the original urls will be used - cause the object will used to update the wms table $columns = array( "wms_abstract", "wms_title", "fees", "accessconstraints", "contactperson", "contactposition", "contactvoicetelephone", "contactfacsimiletelephone", "contactorganization", "address", "city", "stateorprovince", "postcode", "country", "contactelectronicmailaddress", "wms_termsofuse", "wms_network_access", "fkey_mb_group_id" ); foreach ($columns as $c) { $value = $data->wms->$c; if (!is_null($value)) { $wms->$c = $value; } } if (is_array($data->wms->layer_searchable)) { foreach ($wms->objLayer as &$layer) { $layer->layer_searchable = 0;//why $e = new mb_notice("mb_metadata_server.php: Check layer with id ".$layer->layer_uid." to be searchable"); for ($i = 0; $i < count($data->wms->layer_searchable); $i++) { //$e = new mb_exception("mb_metadata_server.php: Layer with id ".$id." found to be searchable"); $id = $data->wms->layer_searchable[$i]; $e = new mb_notice("mb_metadata_server.php: Layer with id ".$id." found to be searchable"); if ($id == intval($layer->layer_uid)) { $e = new mb_notice("mb_metadata_server.php: Layer identical - update it in wms object"); $layer->layer_searchable = 1; } else { continue; //with next } unset($id); //$layer->layer_searchable = 1; //break; } } } try { $layerId = intval($data->layer->layer_id); } catch (Exception $e) { $ajaxResponse->setSuccess(false); $ajaxResponse->setMessage(_mb("Could not read layer ID ".$data->layer->layer_id)); $ajaxResponse->send(); } if ($layerId) { $e = new mb_notice("Got following layer id from wms metadata editor client: ".$layerId); try { $layer = &$wms->getLayerReferenceById($layerId); } catch (Exception $e) { $ajaxResponse->setSuccess(false); $ajaxResponse->setMessage(_mb("Could not get layer with ID ".$layerId)); $ajaxResponse->send(); } $columns = array( "layer_abstract", "layer_title", "layer_keyword", "layer_md_topic_category_id", "layer_inspire_category_id", "layer_custom_category_id" ); foreach ($columns as $c) { $value = $data->layer->$c; $e = new mb_notice("plugins/mb_metadata_server.php: layer entry for ".$c.": ".$data->layer->$c); if ($c === "layer_keyword") { $layer->$c = explode(",", $value); foreach ($layer->$c as &$val) { $val = trim($val); } } elseif ($c === "layer_md_topic_category_id" || $c === "layer_inspire_category_id" || $c === "layer_custom_category_id" ) { if (!is_array($value)) { $layer->$c = array($value); } else { $layer->$c = $value; } } else { if (!is_null($value)) { $layer->$c = $value; } } } } if ($wms->wms_network_access == "on") { $wms->wms_network_access = intval('1'); } else { $wms->wms_network_access = intval('0'); } //try { $wms->updateObjInDB($wmsId); //} //catch (Exception $e) { // $ajaxResponse->setSuccess(false); // $ajaxResponse->setMessage(_mb("Could not update wms object in database!")); // $ajaxResponse->send(); //} $ajaxResponse->setMessage("Updated WMS metadata for ID " . $wmsId); $ajaxResponse->setSuccess(true); break; case "getContactMetadata" : $mbGroupId = $ajaxResponse->getParameter("id"); $sql = <<setResult($resultObj); $ajaxResponse->setSuccess(true); break; case "getWmsIdByLayerId" : $layerId = $ajaxResponse->getParameter("layerId"); $sql = <<setResult($resultObj); $ajaxResponse->setSuccess(true); break; case "getLayerMetadataAddon" : $layerId = $ajaxResponse->getParameter("layerId"); $metadataId = $ajaxResponse->getParameter("metadataId"); $sql = <<setResult($resultObj); $ajaxResponse->setSuccess(true); break; case "getInitialLayerMetadata" : $layerId = $ajaxResponse->getParameter("layerId"); $metadataId = $ajaxResponse->getParameter("metadataId"); $sql = <<setResult($resultObj); $ajaxResponse->setSuccess(true); break; case "updateLayerMetadataAddon" : $layerId = $ajaxResponse->getParameter("layerId"); $metadataId = $ajaxResponse->getParameter("metadataId"); $data = $ajaxResponse->getParameter("data"); if ($data->export2csw) { $data->export2csw = 't'; } else { $data->export2csw = 'f'; } if ($data->inspire_top_consistence) { $data->inspire_top_consistence = 't'; } else { $data->inspire_top_consistence = 'f'; } $sql = <<link, $data->title, $data->abstract, $data->format, $data->ref_system, $data->export2csw, $data->inspire_top_consistence, $data->tmp_reference_1, $data->tmp_reference_2, $data->lineage, $data->spatial_res_type, $data->spatial_res_value, $data->inspire_charset, $data->update_frequency); $t = array('i','s','s','s','s','s','b','b','s','s','s','s','s','s','s'); try { $res = db_prep_query($sql,$v,$t); } catch (Exception $e){ $ajaxResponse->setSuccess(false); $ajaxResponse->setMessage(_mb("Could not update metadata object in database!")); $ajaxResponse->send(); die; } $ajaxResponse->setMessage("Metadata updated!"); $ajaxResponse->setSuccess(true); break; case "insertLayerMetadataAddon" : $layerId = $ajaxResponse->getParameter("layerId"); $data = $ajaxResponse->getParameter("data"); //normaly the link is only set if a link has been created //if a record has been created, the link element will be empty //use this to distinguish between the to different inserts! //this insert should also push one entry in the ows_relation_metadata table! - after the insert into md_metadata //origin if ($data->kindOfMetadataAddOn == 'link') { //generate metador entry $origin = 'external'; } else { $origin = 'metador'; } //export if ($data->export2csw == "on") { $data->export2csw = 't'; } else { $data->export2csw = 'f'; } //consistance if ($data->inspire_top_consistence == "on") { $data->inspire_top_consistence = 't'; } else { $data->inspire_top_consistence = 'f'; } //generate a uuid for the record: $uuid = new Uuid(); //initialize database objects $link = ''; $title = ''; $abstract = ''; $format = ''; $ref_system = ''; $export2csw = 'f'; $inspire_top_consistence = 'f'; $tmp_reference_1 = ''; $tmp_reference_2 = ''; $lineage = ''; $spatial_res_type = ''; $spatial_res_value = ''; $inspire_charset = ''; $update_frequency = ''; //read out json objects if (isset($data->link)) { $link = $data->link; } if (isset($data->export2csw)) { $export2csw = $data->export2csw; } else { $export2csw = 'f'; } if (isset($data->title)) { $title = $data->title; } if (isset($data->abstract)) { $abstract = $data->abstract; } if (isset($data->format)) { $format = $data->format; } if (isset($data->ref_system)) { $ref_system = $data->ref_system; } if (isset($data->inspire_top_consistence)) { $inspire_top_consistence = $data->inspire_top_consistence; } if (isset($data->tmp_reference_1)) { $tmp_reference_1 = $data->tmp_reference_1; } if ($tmp_reference_1 == "") { $tmp_reference_1 = "2000-01-01"; } if (isset($data->tmp_reference_2)) { $tmp_reference_2 = $data->tmp_reference_2; } if ($tmp_reference_2 == "") { $tmp_reference_2 = "2000-01-01"; } if (isset($data->lineage)) { $lineage = $data->lineage; } if (isset($data->spatial_res_type)) { $spatial_res_type = $data->spatial_res_type; } if (isset($data->spatial_res_value)) { $spatial_res_value = $data->spatial_res_value; } if (isset($data->inspire_charset)) { $inspire_charset = $data->inspire_charset; } if (isset($data->update_frequency)) { $update_frequency = $data->update_frequency; } $randomid = new Uuid(); //Check if origin is external and export2csw is activated! if ($origin == 'external' ) { //harvest link from location, parse the content for datasetid and push xml into data column //load metadata from link TODO: function from class_wms - generate a class for metadata management and include it here and in class_wms $metadataConnector = new connector(); $metadataConnector->set("timeOut", "5"); $metaData = $metadataConnector->load($link); //$e = new mb_exception($metaData); if (!$metaData) { abort(_mb("Could not load metadata from source url!")); } //delete getRecordByIdResponse from xml if there $regex = "##"; $output = preg_replace($regex,"",$metaData); $regex = "##"; $output = preg_replace($regex,"",$output); //$e = new mb_exception($output); $metaData = $output; //*** //write metadata to temporary file: $randomFileId = new Uuid(); $tmpMetadataFile = fopen(TMPDIR.'/link_metadata_file_'.$randomFileId.'.xml', 'w'); fwrite($tmpMetadataFile, $metaData); fclose($tmpMetadataFile); $e = new mb_exception("File which has been written: link_metadata_file_".$randomFileId.".xml"); //read out objects from xml structure if (file_exists(TMPDIR.'/link_metadata_file_'.$randomFileId.'.xml')) { $iso19139Xml=simplexml_load_file(TMPDIR.'/link_metadata_file_'.$randomFileId.'.xml'); //$metaData = file_get_contents(TMPDIR.'/link_metadata_file_'.$randomFileId.'.xml'); } else { abort(_mb("Temporary file could not be parsed!")); } //$metaData = $metadataConnector->file; //parse metadata /*try { $iso19139Xml = new SimpleXMLElement($metaData); } catch (Exception $e) { abort(_mb("Parsing ISO19139 XML failed!")); }*/ if ($iso19139Xml != false) { //get elements for database from xml by using xpath //uuid $uuid = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString'); $e = new mb_exception("plugins/mb_metadata_server.php: File Identifier found: ".$uuid); //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'); //datasetid //next came from class_wms - TODO maybe put it into a special function //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 //First check if MD_Identifier is set, then check if RS_Identifier is used! //Initialize datasetid $datasetid = 'undefined'; $code = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code/gco:CharacterString'); if (isset($code[0]) && $code[0] != '') { $e = new mb_exception("plugins/mb_metadata_server.php: code given thru MD_Identifier: ".$code[0]); //check if code is defined by codespace and code $codeSplit = explode("#",$code); if (isset($codeSplit[0]) && $codeSplit[0] != '' && isset($codeSplit[1]) && $codeSplit[1] != '') { $e = new mb_exception("plugins/mb_metadata_server.php: code was constructed via codespace#code !"); $datasetid = $codeSplit[0]."#".$codeSplit[1]; } else { $e = new mb_exception("plugins/mb_metadata_server.php: code was not constructed via codespace#code !"); $datasetid = $code[0]; } } else { //try to read code from RS_Identifier $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("plugins/mb_metadata_server.php: code: ".$code[0]); #$e = new mb_exception("plugins/mb_metadata_server.php: codeSpace: ".$codeSpace[0]); if (isset($codeSpace[0]) && isset($code[0]) && $codeSpace[0] != '' && $code[0] != '') { $datasetid = $codeSpace[0]."#".$code[0]; $e = new mb_exception("plugins/mb_metadata_server.php: datasetid: ".$datasetid); } else { //neither MD_Identifier nor RS_Identifier are defined in a right way $e = new mb_exception("plugins/mb_metadata_server.php: the service data coupling has problems, cause the metadata doesnt have defined a 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 = <<setMessage("Metadata object inserted into md_metadata!"); $ajaxResponse->setSuccess(true); } break; case "deleteLayerMetadataAddon" : $metadataId = $ajaxResponse->getParameter("metadataId"); $sql = <<setSuccess(false); $ajaxResponse->setMessage(_mb("Could not delete metadata from database!")); $ajaxResponse->send(); die; } $ajaxResponse->setMessage("Metadata deleted!"); $ajaxResponse->setSuccess(true); break; case "importLayerXmlAddon" : //this is similar to insert the metadata from external link, but came from internal file from tmp folder which has been updated before $layerId = $ajaxResponse->getParameter("layerId"); $filename = $ajaxResponse->getParameter("filename"); //normaly the link is only set if a link has been created //if a record has been created, the link element will be empty //use this to distinguish between the to different inserts! //this insert should also push one entry in the ows_relation_metadata table! - after the insert into md_metadata //origin //generate metador entry $origin = 'upload'; //generate a uuid for the record: $uuid = new Uuid(); //initialize database objects $link = ''; $title = ''; $abstract = ''; $format = ''; $ref_system = ''; $export2csw = 't'; $inspire_top_consistence = 'f'; $tmp_reference_1 = ''; $tmp_reference_2 = ''; $lineage = ''; $spatial_res_type = ''; $spatial_res_value = ''; $inspire_charset = ''; $randomid = new Uuid(); $e = new mb_exception("File to load: ".$filename); //read out objects from xml structure /*if (file_exists($filename)) { try { $iso19139Xml = simplexml_load_file($filename); } catch (Exception $e) { abort(_mb("Loading ISO19139 XML failed!")); } } else { abort(_mb("File not found: ".$filename." !")); }*/ $metaData = file_get_contents($filename); if (!$metaData){ abort(_mb("Reading file ".$filename." failed!")); } //delete getRecordByIdResponse from xml if there $regex = "##"; $output = preg_replace($regex,"",$metaData); $regex = "##"; $output = preg_replace($regex,"",$output); //$e = new mb_exception($output); $iso19139Xml = simplexml_load_string($output); $e = new mb_exception(''); //get elements for database from xml by using xpath //uuid $uuid = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString'); if (!isset($uuid) || $uuid == "") { abort(_mb(" No fileIdentifier found, parsing ISO19139 XML maybe failed. Check if element /gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString is given and not empty!")); } //$e = new mb_exception("plugins/mb_metadata_server.php: File Identifier found: ".$uuid); //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'); //next came from class_wms - TODO maybe put it into a special function //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 //First check if MD_Identifier is set, then check if RS_Identifier is used! //Initialize datasetid $datasetid = 'undefined'; $code = $iso19139Xml->xpath('/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code/gco:CharacterString'); if (isset($code[0]) && $code[0] != '') { $e = new mb_exception("plugins/mb_metadata_server.php: code given thru MD_Identifier: ".$code[0]); //check if code is defined by codespace and code $codeSplit = explode("#",$code); if (isset($codeSplit[0]) && $codeSplit[0] != '' && isset($codeSplit[1]) && $codeSplit[1] != '') { $e = new mb_exception("plugins/mb_metadata_server.php: code was constructed via codespace#code !"); $datasetid = $codeSplit[0]."#".$codeSplit[1]; } else { $e = new mb_exception("plugins/mb_metadata_server.php: code was not constructed via codespace#code !"); $datasetid = $code; } } else { //try to read code from RS_Identifier $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("plugins/mb_metadata_server.php: code: ".$code[0]); #$e = new mb_exception("plugins/mb_metadata_server.php: codeSpace: ".$codeSpace[0]); if (isset($codeSpace[0]) && isset($code[0]) && $codeSpace[0] != '' && $code[0] != '') { $datasetid = $codeSpace[0]."#".$code[0]; $e = new mb_exception("plugins/mb_metadata_server.php: datasetid: ".$datasetid); } else { //neither MD_Identifier nor RS_Identifier are defined in a right way $e = new mb_exception("plugins/mb_metadata_server.php: the service data coupling has problems, cause the metadata doesnt have defined a 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 = <<asXML(); $v = array($link, $uuid[0], $origin, $title[0], $abstract[0], $format, $ref_system, $export2csw,$inspire_top_consistence,$tmp_reference_1[0],$tmp_reference_2[0],$lineage,$spatial_res_type,$spatial_res_value,$inspire_charset, $datasetid, $randomid, $xml); $t = array('s','s','s','s','s','s','s','b','b','s','s','s','s','s','s','s','s','s'); try { $res = db_prep_query($sql,$v,$t); } catch (Exception $e){ abort(_mb("Insert of harvested metadata into database failed!")); } //set relation into relation table //get metadata_id of record which have been inserted before $sql = <<setMessage("Metadata object inserted into md_metadata!"); $ajaxResponse->setSuccess(true); } break; default: $ajaxResponse->setSuccess(false); $ajaxResponse->setMessage(_mb("An unknown error occured.")); break; } $ajaxResponse->send(); ?>