]> git.openstreetmap.org Git - nominatim.git/blobdiff - website/details.php
Merge pull request #1010 from lonvia/ignore-unicode-format-characters
[nominatim.git] / website / details.php
index 4c4ce578a149151d1263b98c3dbe136e57e61495..6989d4882cbf95afebbee85aa5a8d62ea7618df2 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 class ASC';
     $sPlaceId = chksql($oDB->getOne($sSQL));
 
     // Be nice about our error messages for broken geometry
@@ -210,28 +216,30 @@ $aPlaceSearchNameKeywords = false;
 $aPlaceSearchAddressKeywords = false;
 if ($oParams->getBool('keywords')) {
     $sSQL = "SELECT * FROM search_name WHERE place_id = $iPlaceID";
-    $aPlaceSearchName = $oDB->getRow($sSQL);
-    if (PEAR::isError($aPlaceSearchName)) { // possible timeout
+    $aPlaceSearchName = $oDB->getRow($sSQL); // can be null
+    if (!$aPlaceSearchName || PEAR::isError($aPlaceSearchName)) { // possible timeout
         $aPlaceSearchName = [];
     }
 
-    $sSQL = 'SELECT * FROM word WHERE word_id in ('.substr($aPlaceSearchName['name_vector'], 1, -1).')';
-    $aPlaceSearchNameKeywords = $oDB->getAll($sSQL);
-    if (PEAR::isError($aPlaceSearchNameKeywords)) { // possible timeout
-        $aPlaceSearchNameKeywords = [];
-    }
+    if (!empty($aPlaceSearchName)) {
+        $sSQL = 'SELECT * FROM word WHERE word_id in ('.substr($aPlaceSearchName['name_vector'], 1, -1).')';
+        $aPlaceSearchNameKeywords = $oDB->getAll($sSQL);
+        if (PEAR::isError($aPlaceSearchNameKeywords)) { // possible timeout
+            $aPlaceSearchNameKeywords = [];
+        }
 
-    $sSQL = 'SELECT * FROM word WHERE word_id in ('.substr($aPlaceSearchName['nameaddress_vector'], 1, -1).')';
-    $aPlaceSearchAddressKeywords = $oDB->getAll($sSQL);
-    if (PEAR::isError($aPlaceSearchAddressKeywords)) { // possible timeout
-        $aPlaceSearchAddressKeywords = [];
+        $sSQL = 'SELECT * FROM word WHERE word_id in ('.substr($aPlaceSearchName['nameaddress_vector'], 1, -1).')';
+        $aPlaceSearchAddressKeywords = $oDB->getAll($sSQL);
+        if (PEAR::isError($aPlaceSearchAddressKeywords)) { // possible timeout
+            $aPlaceSearchAddressKeywords = [];
+        }
     }
 }
 
 logEnd($oDB, $hLog, 1);
 
 if ($sOutputFormat=='html') {
-    $sSQL = "SELECT TO_CHAR(lastimportdate - '2 minutes'::interval,'YYYY/MM/DD HH24:MI')||' GMT' FROM import_status LIMIT 1";
+    $sSQL = "SELECT TO_CHAR(lastimportdate,'YYYY/MM/DD HH24:MI')||' GMT' FROM import_status LIMIT 1";
     $sDataDate = chksql($oDB->getOne($sSQL));
     $sTileURL = CONST_Map_Tile_URL;
     $sTileAttribution = CONST_Map_Tile_Attribution;