<?php
+ function failInternalError($sError, $sSQL = false, $vDumpVar = false)
+ {
+ header('HTTP/1.0 500 Internal Server Error');
+ header('Content-type: text/html; charset=utf-8');
+ echo "<html><body><h1>Internal Server Error</h1>";
+ echo '<p>Nominatim has encountered an internal error while processing your request. This is most likely because of a bug in the software.</p>';
+ echo "<p><b>Details:</b> ".$sError,"</p>";
+ echo '<p>Feel free to report the bug in the <a href="http://trac.openstreetmap.org">OSM bug database</a>. Please include the error message above an the URL you used.</p>';
+ if (CONST_Debug)
+ {
+ echo "<hr><h2>Debugging Information</h2><br>";
+ if ($sSQL) {
+ echo "<h3>SQL query</h3><code>".$sSQL."</code>";
+ }
+ if ($vDumpVar) {
+ echo "<h3>Result</h3> <code>";
+ var_dump($vDumpVar);
+ echo "</code>";
+ }
+ }
+ echo "\n</body></html>\n";
+ exit;
+
+ }
+
function fail($sError, $sUserError = false)
{
if (!$sUserError) $sUserError = $sError;
$sSQL .= " ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') as isarea,ST_GeometryType(geometry) as geotype, ST_Y(ST_Centroid(geometry)) as lat,ST_X(ST_Centroid(geometry)) as lon ";
$sSQL .= " from placex where place_id = $iPlaceID";
$aPointDetails = $oDB->getRow($sSQL);
- IF (PEAR::IsError($aPointDetails))
+ if (PEAR::IsError($aPointDetails))
{
- var_dump($aPointDetails);
- exit;
+ failInternalError("Could not get details of place object.", $sSQL, $aPointDetails);
}
+
$aPointDetails['localname'] = $aPointDetails['localname']?$aPointDetails['localname']:$aPointDetails['housenumber'];
$fLon = $aPointDetails['lon'];
$fLat = $aPointDetails['lat'];
$aPointPolygon = $oDB->getRow($sSQL);
IF (PEAR::IsError($aPointPolygon))
{
- var_dump($aPointPolygon);
- exit;
+ failInternalError("Could not get bounding box of place object.", $sSQL, $aPointPolygon);
}
if (preg_match('#POLYGON\\(\\(([- 0-9.,]+)#',$aPointPolygon['outlinestring'],$aMatch))
{
$iPlaceID = $aPlace['place_id'];
if (PEAR::IsError($iPlaceID))
{
- var_Dump($sSQL, $iPlaceID);
- exit;
+ failInternalError("Could not determine closest place.", $sSQL, $iPlaceID);
}
}
$iPlaceID = $oDB->getOne($sSQL);
if (PEAR::IsError($iPlaceID))
{
- var_Dump($sSQL, $iPlaceID);
- exit;
+ failInternalError("Could not get parent for place.", $sSQL, $iPlaceID);
}
if ($iPlaceID && $aPlace['place_id'] && $iMaxRank < 28)
$iPlaceID = $oDB->getOne($sSQL);
if (PEAR::IsError($iPlaceID))
{
- var_Dump($sSQL, $iPlaceID);
- exit;
+ failInternalError("Could not get larger parent for place.", $sSQL, $iPlaceID);
}
}
if (!$iPlaceID)
$sViewboxSmallSQL = $oDB->getOne($sSQL);
if (PEAR::isError($sViewboxSmallSQL))
{
- var_dump($sViewboxSmallSQL);
- exit;
+ failInternalError("Could not get small viewbox.", $sSQL, $sViewboxSmallSQL);
}
$sViewboxSmallSQL = "'".$sViewboxSmallSQL."'::geometry";
$sViewboxLargeSQL = $oDB->getOne($sSQL);
if (PEAR::isError($sViewboxLargeSQL))
{
- var_dump($sViewboxLargeSQL);
- exit;
+ failInternalError("Could not get large viewbox.", $sSQL, $sViewboxLargeSQL);
}
$sViewboxLargeSQL = "'".$sViewboxLargeSQL."'::geometry";
}
$aDatabaseWords = array();
if (PEAR::IsError($aDatabaseWords))
{
- var_dump($sSQL, $aDatabaseWords);
- exit;
+ failInternalError("Could not get word tokens.", $sSQL, $aDatabaseWords);
}
$aPossibleMainWordIDs = array();
foreach($aDatabaseWords as $aToken)
$aViewBoxPlaceIDs = $oDB->getAll($sSQL);
if (PEAR::IsError($aViewBoxPlaceIDs))
{
- var_dump($sSQL, $aViewBoxPlaceIDs);
- exit;
+ failInternalError("Could not get places for search terms.", $sSQL, $aViewBoxPlaceIDs);
}
//var_dump($aViewBoxPlaceIDs);
// Did we have an viewbox matches?
if (PEAR::IsError($aPlaceIDs))
{
- var_dump($sSQL, $aPlaceIDs);
- exit;
+ failInternalError("Could not get place IDs from tokens." ,$sSQL, $aPlaceIDs);
}
if (CONST_Debug) var_Dump($aPlaceIDs);
if (PEAR::IsError($aSearchResults))
{
- var_dump($sSQL, $aSearchResults);
- exit;
+ failInternalError("Could not get details for place.", $sSQL, $aSearchResults);
}
}
} // end if ($sQuery)
if (PEAR::IsError($aSearchResults))
{
- var_dump($sSQL, $aSearchResults);
- exit;
+ failInternalError("Could not get details for place (near).", $sSQL, $aSearchResults);
}
}
}
$aPointPolygon = $oDB->getRow($sSQL);
if (PEAR::IsError($aPointPolygon))
{
- var_dump($sSQL, $aPointPolygon);
- exit;
+ failInternalError("Could not get outline.", $sSQL, $aPointPolygon);
}
if ($aPointPolygon['place_id'])
{