]> git.openstreetmap.org Git - nominatim.git/commitdiff
details page: add a perma-link
authormarc tobias <mtmail@gmx.net>
Fri, 6 Apr 2018 14:11:54 +0000 (16:11 +0200)
committermarc tobias <mtmail@gmx.net>
Fri, 6 Apr 2018 14:11:54 +0000 (16:11 +0200)
lib/output.php
lib/template/details-html.php
website/details.php

index fd6226bc503b08d9bd2f6d1c6aa742a37a8c8b83..9d4b7502c855044c6859bae36f1d291897ab20c7 100644 (file)
@@ -39,3 +39,14 @@ function detailsLink($aFeature, $sTitle = false)
 
     return '<a href="details.php?place_id='.$aFeature['place_id'].'">'.($sTitle?$sTitle:$aFeature['place_id']).'</a>';
 }
+
+function detailsPermaLink($aFeature, $sRefText = false)
+{
+    $sOSMType = formatOSMType($aFeature['osm_type'], false);
+
+    if ($sOSMType) {
+        $sLabel = $sRefText ? $sRefText : $sOSMType.' '.$aFeature['osm_id'];
+        return '<a href="details.php?osmtype='.$aFeature['osm_type'].'&osmid='.$aFeature['osm_id'].'&class='.$aFeature['class'].'">'.$sLabel.'</a>';
+    }
+    return '';
+}
index ef7d9248dae658438a0e9ad2fed689f02b787af1..b7a963738a01e38f01053b0f623be0f244637ecc 100644 (file)
                     }
                     kv('Coverage'        , ($aPointDetails['isarea']=='t'?'Polygon':'Point') );
                     kv('Centre Point'    , $aPointDetails['lat'].','.$aPointDetails['lon'] );
-                    kv('OSM'             , osmLink($aPointDetails) );
+                    kv('OSM'             , osmLink($aPointDetails) . ' ('.detailsPermaLink($aPointDetails, 'this page').')' );
                     if ($aPointDetails['wikipedia'])
                     {
                         kv('Wikipedia Calculated' , wikipediaLink($aPointDetails) );
index 24e8cd76a2d70217b23ca9c074f24d0bd75c4392..9e8d99a43a9b2863cd6b4af5cced90a2590d2e6e 100755 (executable)
@@ -16,15 +16,21 @@ $sLanguagePrefArraySQL = 'ARRAY['.join(',', array_map('getDBQuoted', $aLangPrefO
 $sPlaceId = $oParams->getString('place_id');
 $sOsmType = $oParams->getSet('osmtype', array('N', 'W', 'R'));
 $iOsmId = $oParams->getInt('osmid', -1);
+$sClass = $oParams->getString('class');
 
 $oDB =& getDB();
 
 if ($sOsmType && $iOsmId > 0) {
     $sSQL = sprintf(
-        "SELECT place_id FROM placex WHERE osm_type='%s' AND osm_id=%d ORDER BY type='postcode' ASC",
+        "SELECT place_id FROM placex WHERE osm_type='%s' AND osm_id=%d",
         $sOsmType,
         $iOsmId
     );
+    // osm_type and osm_id are not unique enough
+    if ($sClass) {
+        $sSQL .= " AND class='".$sClass."'";
+    }
+    $sSQL .= " ORDER BY type='postcode', class ASC";
     $sPlaceId = chksql($oDB->getOne($sSQL));
 
     // Be nice about our error messages for broken geometry