<?php # $Id: mod_layerMetadata.php 235 2006-05-11 08:34:48Z uli $ # http://www.mapbender.org/index.php/Administration # 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. require_once dirname(__FILE__) . "/../../core/globalSettings.php"; require_once dirname(__FILE__) . "/../classes/class_user.php"; $redirectToMetadataUrl = intval($_GET["redirectToMetadataUrl"]); $subscribe = intval($_GET["subscribe"]); $layer_id = htmlentities($_GET['id'], ENT_QUOTES); $wms_getmap = urldecode($_GET['wms']); $layer_name = urldecode($_GET['name']); function display_text($string) { $string = mb_eregi_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/{}]", "<a href=\"\\0\" target=_blank>\\0</a>", $string); $string = mb_eregi_replace("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@([0-9a-z](-?[0-9a-z])*\.)+[a-z]{2}([zmuvtg]|fo|me)?$", "<a href=\"mailto:\\0\" target=_blank>\\0</a>", $string); $string = mb_eregi_replace("\n", "<br>", $string); return $string; } function getEpsgByLayerId ($layer_id) { // from merge_layer.php $epsg_list = ""; $sql = "SELECT DISTINCT epsg FROM layer_epsg WHERE fkey_layer_id = $1"; $v = array($layer_id); $t = array('i'); $res = db_prep_query($sql, $v, $t); while($row = db_fetch_array($res)){ $epsg_list .= $row['epsg'] . " "; } return trim($epsg_list); } //function to generate temporal kml-file function generateKML($kml_id,$resdir,$getmapurl,$wmsversion,$layername,$layertitle,$north,$south,$east,$west){ $getmapurl = eregi_replace("&","&", $getmapurl); //$kml_id=md5(uniqid(rand(), true)); if($h = fopen($resdir."/".$kml_id.".kml","w+")){ // $content = $text .chr(13).chr(10); //example for linefeeds $kml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>".chr(13).chr(10); $kml.="<kml xmlns=\"http://earth.google.com/kml/2.2\">".chr(13).chr(10); $kml.="<GroundOverlay>".chr(13).chr(10); $kml.="<name>".$layertitle." - www.geoportal.rlp.de</name>".chr(13).chr(10); $kml.="<Icon>".chr(13).chr(10); $kml.="<href>".$getmapurl."VERSION=".$wmsversion."&REQUEST=GetMap&SRS=EPSG:4326&WIDTH=512&HEIGHT=512&LAYERS=".$layername."&STYLES=&TRANSPARENT=TRUE&BGCOLOR=0xffffff&FORMAT=image/png&</href>".chr(13).chr(10); //http://www.geoportal.rlp.de/owsproxy/3acc4cc90d02c754c531a9d5fa1b1545/5d38dd28a830f2c4ab97a506225d0a9b?VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:4326&WIDTH=512&HEIGHT=512&LAYERS=boriweCD01&TRANSPARENT=TRUE&FORMAT=image/jpeg&</href> $kml.="<RefreshMode>onExpire</RefreshMode>".chr(13).chr(10); $kml.="<viewRefreshMode>onStop</viewRefreshMode>".chr(13).chr(10); $kml.="<viewRefreshTime>1</viewRefreshTime>".chr(13).chr(10); $kml.="<viewBoundScale>0.87</viewBoundScale>".chr(13).chr(10); $kml.="</Icon>".chr(13).chr(10); $kml.="<LatLonBox>".chr(13).chr(10); $kml.="<north>".$north."</north>".chr(13).chr(10); $kml.="<south>".$south."</south>".chr(13).chr(10); $kml.="<east>".$east."</east>".chr(13).chr(10); $kml.="<west>".$west."</west>".chr(13).chr(10); $kml.="</LatLonBox>".chr(13).chr(10); $kml.="</GroundOverlay>".chr(13).chr(10); $kml.="</kml>".chr(13).chr(10); if(!fwrite($h,$kml)){ #exit; } fclose($h); } } $metadataStr = ""; $metadataStr .= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">' . '<head>' . '<title>Metadaten</title>' . '<meta name="description" content="Metadaten" xml:lang="de" />'. '<meta name="keywords" content="Metadaten" xml:lang="de" />' . '<meta http-equiv="cache-control" content="no-cache">'. '<meta http-equiv="pragma" content="no-cache">'. '<meta http-equiv="expires" content="0">'. '<meta http-equiv="content-language" content="de" />'. '<meta http-equiv="content-style-type" content="text/css" />'. '<link rel="stylesheet" type="text/css" href="../css/metadata.css" />' . '<meta http-equiv="Content-Type" content="text/html; charset='.CHARSET.'">' . '</head>'. '<body>'; $wms_id = $_GET['wmsid']; if ($wms_id) { $sql = "SELECT layer_id FROM layer WHERE fkey_wms_id = $1 AND layer_pos = 0"; $v = array($wms_id); $t = array("i"); $res = db_prep_query($sql, $v, $t); $row = db_fetch_array($res); $layer_id = $row["layer_id"]; } if ($layer_id) { $sql = "SELECT "; $sql .= "layer.layer_id, layer.layer_title, layer.layer_abstract, layer.layer_pos, layer.layer_parent, "; $sql .= "layer.layer_minscale, layer.layer_maxscale, layer_dataurl, layer_metadataurl, "; $sql .= "wms.wms_title, wms.wms_abstract, wms.wms_id, wms.fees, wms.accessconstraints, wms.contactperson, "; $sql .= "wms.contactposition, wms.contactorganization, wms.address, wms.city, wms_timestamp, wms_owner, "; $sql .= "wms.stateorprovince, wms.postcode, wms.contactvoicetelephone, wms.contactfacsimiletelephone, "; $sql .= "wms.contactelectronicmailaddress, wms.country "; $sql .= "FROM layer, wms WHERE layer.layer_id = $1 AND layer.fkey_wms_id = wms.wms_id LIMIT 1"; $v = array($layer_id); $t = array('i'); } else if ($wms_getmap && $layer_name) { $sql = "SELECT "; $sql .= "layer.layer_id, layer.layer_title, layer.layer_abstract, layer.layer_pos, layer.layer_parent, "; $sql .= "layer.layer_minscale, layer.layer_maxscale, layer_dataurl, layer_metadataurl, "; $sql .= "wms.wms_title, wms.wms_abstract, wms.wms_id, wms.fees, wms.accessconstraints, wms.contactperson, "; $sql .= "wms.contactposition, wms.contactorganization, wms.address, wms.city, wms_timestamp, wms_owner, "; $sql .= "wms.stateorprovince, wms.postcode, wms.contactvoicetelephone, wms.contactfacsimiletelephone, "; $sql .= "wms.contactelectronicmailaddress, wms.country "; $sql .= "FROM layer, wms WHERE layer.layer_pos <> 0 AND layer.layer_name = $1 AND layer.fkey_wms_id = wms.wms_id AND wms.wms_getmap LIKE $2 LIMIT 1"; $v = array($layer_name, $wms_getmap."%"); $t = array('s', 's'); } else die("layer not specified!"); $res = db_prep_query($sql,$v,$t); $metadataStr .= db_error(); $layer = array(); $row = db_fetch_array($res); $layer_id = $row['layer_id']; $layer_name = $row['layer_name']; if($row['wms_owsproxy']!='') { $secured=true; } else { $secured=false; } $sql_dep = "SELECT mb_group_name FROM mb_group AS a, mb_user AS b, mb_user_mb_group AS c WHERE b.mb_user_id = $1 AND b.mb_user_id = c.fkey_mb_user_id AND c.fkey_mb_group_id = a.mb_group_id AND b.mb_user_department = a.mb_group_description LIMIT 1"; $v_dep = array($row['wms_owner']); $t_dep = array('i'); $res_dep = db_prep_query($sql_dep, $v_dep, $t_dep); $row_dep = db_fetch_array($res_dep); $layer['ID'] = $row['layer_id']; $layer['Titel'] = $row['layer_title']; $layer['Zusammenfassung'] = $row['layer_abstract']; if ($row['layer_pos'] || $row['layer_parent']) { if ($row['layer_minscale'] > 0) { $layer['Minscale'] = "1 : ". $row['layer_minscale']; } else {$layer['Minscale'] = "-";} if ($row['layer_maxscale'] > 0) { $layer['Maxscale'] = "1 : ". $row['layer_maxscale']; } else {$layer['Maxscale'] = "-";} } $layer['Koordinatensysteme'] = preg_replace("/ /", ", ", getEpsgByLayerId($row['layer_id'])); if ($row['wms_timestamp']) { $layer['Datum der Registrierung'] = date("d.m.Y",$row['wms_timestamp']); } else { $layer['Datum der Registrierung'] = "Keine Angabe"; } $layer['Registrierende Stelle'] = $row_dep['mb_group_name']; $layer['WMS ID'] = $row['wms_id']; $layer['Mapbender Capabilities Dokument'] = "<a href = '../php/wms.php?layer_id=".$layer_id."&PHPSESSID=".session_id()."&REQUEST=GetCapabilities&VERSION=1.1.1&SERVICE=WMS' target=_blank>Capabilities-Dokument</a>"; $layer['Service Metadaten'] = "<a href='../php/mod_layerISOMetadata.php?SERVICE=WMS&outputFormat=iso19139&Id=". $layer_id."' target=_blank ><img src='../img/inspire_tr_36.png' title='INSPIRE Metadaten' style='width:34px;height:34px' alt='' /></a>"."<a href='../php/mod_layerISOMetadata.php?SERVICE=WMS&outputFormat=iso19139&Id=".$layer_id."&validate=true' target=_blank title='Validierung gegen INSPIRE Geoportal'>Validierung</a>"; $layer['WMS Titel'] = $row['wms_title']; $layer['WMS Zusammenfassung'] = $row['wms_abstract']; $layer['Gebühren'] = $row['fees']; $layer['Zugriffsbeschränkung'] = $row['accessconstraints']; $layer['Ansprechpartner'] = $row['contactperson']; $layer['Organisation'] = $row['contactorganization']; $layer['Adresse'] = $row['address']; $layer['Stadt'] = $row['city']; $layer['Bundesland'] = $row['stateorprovince']; $layer['PLZ'] = $row['postcode']; $layer['Telefon'] = $row['contactvoicetelephone']; $layer['Fax'] = $row['contactfacsimiletelephone']; $layer['E-Mail'] = $row['contactelectronicmailaddress']; $layer['Land'] = $row['country']; $layer['Metadaten'] = $row['layer_metadataurl']; $metadataUrl = $row['layer_metadataurl']; if ($layer['Metadaten'] && $redirectToMetadataUrl) { header("Location: " . $layer['Metadaten']); } else { $metadataStr .= "<table >\n"; $t_a = "\t<tr>\n\t\t<th>\n\t\t\t"; $t_b = "\n\t\t</th>\n\t\t<td>\n\t\t\t"; $t_c = "\n\t\t</td>\n\t</tr>\n"; $keys = array_keys($layer); for ($j=0; $j<count($layer); $j++) { $metadataStr .= $t_a . $keys[$j] . $t_b . display_text($layer[$keys[$j]]) . $t_c; } if (!$row['layer_pos'] && !$row['layer_parent']) { $wms_id = $row['wms_id']; $sql = "SELECT layer.layer_title, layer.layer_id FROM layer WHERE fkey_wms_id = $1 AND layer_pos <> 0"; $v = array($wms_id); $t = array('i'); $res = db_prep_query($sql,$v,$t); $i=0; $layerArray = array(); while ($row = db_fetch_array($res)) { $layerArray[$i] = array(); $layerArray[$i]['Titel'] = $row['layer_title']; $layerArray[$i]['id'] = $row['layer_id']; $i++; } $metadataStr .= "<tr><th>Ebenen</th><td>"; for ($i=0; $i<count($layerArray); $i++) { if ($i >0) $metadataStr .= ", "; $metadataStr .= "<a href='mod_layerMetadata.php?id=".$layerArray[$i]['id']."'>" . $layerArray[$i]['Titel'] . "</a>"; } } $metadataStr .= "</td></tr>"; $resdir = TMPDIR; $kml_id=md5(uniqid(rand(), true)); //dbselect for generate KML $sql_kml = "select wms.wms_getmap, wms.wms_version, layer.layer_name,layer.layer_title, layer_epsg.minx,layer_epsg.miny,layer_epsg.maxx,layer_epsg.maxy from wms, layer, layer_epsg, wms_format where layer.layer_id=$1 and layer.fkey_wms_id=wms.wms_id and layer.layer_id=layer_epsg.fkey_layer_id and layer_epsg.epsg='EPSG:4326' and wms.wms_id=wms_format.fkey_wms_id and wms_format.data_format like '%image/png%' LIMIT 1"; $v_kml = array($layer_id); $t_kml = array('i'); $res_kml = db_prep_query($sql_kml, $v_kml, $t_kml); $row_kml = db_fetch_array($res_kml); generateKML($kml_id,$resdir,$row_kml['wms_getmap'],$row_kml['wms_version'],$row_kml['layer_name'],$row_kml['layer_title'],$row_kml['maxy'],$row_kml['miny'],$row_kml['maxx'],$row_kml['minx']); //export KML $metadataStr .= "<tr><th>Weitere Schnittstellen</th><td>"; $metadataStr .= "<a href='kmldownload.php?download=".$kml_id.".kml'>KML (Keyhole Markup Language)</a>"; $user = new User(); // // Monitoring is only available if the user is allowed to access this service // if ($user->isLayerAccessible($layer['ID'])) { if ($subscribe === 1) { $user->addSubscription($layer['WMS ID']); } else if ($subscribe === 0) { $user = new User(); $user->cancelSubscription($layer['WMS ID']); } $currentUser = new User(); $is_subscribed = $currentUser->hasSubscription($wms_id); $is_public = $currentUser->isPublic(); //show abo function to registred and authorized users if ($is_subscribed && !$is_public) { $metadataStr .= "<tr><th>Abo</th><td><img src = '../img/mail_delete.png'>" . "<a href = '../php/mod_layerMetadata.php?id=" . $layer_id . "&user_id=" . $currentUser->id . "&subscribe=0'>" . _mb("Monitoring Abo löschen") . "</a></td></tr>"; } else if (!$is_subscribed && !$is_public) { $metadataStr .= "<tr><th>Abo</th><td><img src = '../img/mail_send.png'>" . "<a href = '../php/mod_layerMetadata.php?id=" . $layer_id . "&user_id=" . $currentUser->id . "&subscribe=1'>" . _mb("Monitoring abonnieren") . "</a></td></tr>"; } } //if service is secured if ($secured=true){ $slink=HTTP_AUTH_PROXY."/".$layer_id."?REQUEST=GetCapabilities&VERSION=1.1.1&SERVICE=WMS"; echo "<tr><th>Abgesicherte Verbindung</th><td><a href = '".$slink."' target=_blank>Secured Capabilities-Dokument</a></td></tr>"; } $metadataStr .= "</table>\n"; $metadataStr .= '</div></body></html>'; echo $metadataStr; } ?>