Mercurial > hg > batmud > maputils
changeset 814:43c8ca88c740
Make it possible to query for alternative location names via PupuMaps OpenSearch API.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 18 Sep 2009 15:28:16 +0000 |
parents | 28825de98943 |
children | 42dbde04838e |
files | www/query.php |
diffstat | 1 files changed, 39 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/www/query.php Sat Aug 29 13:48:12 2009 +0000 +++ b/www/query.php Fri Sep 18 15:28:16 2009 +0000 @@ -20,10 +20,10 @@ // Check arguments if (isset($argv[0])) - $locName = $argv[0]; + $locName = stripslashes($argv[0]); if (isset($_GET["q"])) - $locName = $_GET["q"]; + $locName = stripslashes($_GET["q"]); if (isset($_GET["exact"])) $locExact = TRUE; @@ -37,37 +37,60 @@ if (!isset($locName)) myerr(); -$locRegEx = "/".quotemeta($locName)."/i"; +$locRegEx = "/".preg_quote($locName, "/")."/i"; // OpenSearch mode? if ($locOpenSearch) { header("Content-Type: application/json; charset=".$pageCharset); $locResult = array(); reset($locTable); - while (list($iKey, $iValue) = each($locTable)) - if (preg_match($locRegEx, $iKey)) { - $locResult[] = $iValue; + while (list($name, $data) = each($locTable)) { + $match = FALSE; + foreach ($data["names"] as $n) { + if (preg_match($locRegEx, $n)) { + $match = TRUE; + $locResult[$n] = $data; + } + } + + if (preg_match($locRegEx, $name)) { + $match = TRUE; + $locResult[$name] = $data; + } } echo "[\"".$locName."\",["; - while (list($iKey, $iValue) = each($locResult)) - echo "\"".$iValue["name"]."\","; + foreach ($locResult as $name => $data) + echo "\"".$name."\","; echo "]]"; } else { // Match location exactly (non-case sensitive tho) reset($locTable); - while (!$locFound && (list($iKey, $iValue) = each($locTable))) - if (!strcasecmp($locName, $iKey)) { - $locFound = TRUE; - $locData = $iValue; + while (!$locFound && (list($name, $data) = each($locTable))) { + if (!strcasecmp($locName, $name)) { + $locFound = TRUE; + } else { + foreach ($data["names"] as $n) { + if (!strcasecmp($locName, $n)) + $locFound = TRUE; + } + } + if ($locFound) $locData = $data; } // If not exact matching mode specified, try non-exact also if (!$locExact) { reset($locTable); - while (!$locFound && (list($iKey, $iValue) = each($locTable))) - if (preg_match($locRegEx, $iKey)) { - $locFound = TRUE; - $locData = $iValue; + while (!$locFound && (list($name, $data) = each($locTable))) { + if (preg_match($locRegEx, $name)) + $locFound = TRUE; + else { + foreach ($data["names"] as $n) { + if (preg_match($locRegEx, $n)) + $locFound = TRUE; + } + } + if ($locFound) + $locData = $data; } }