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;
 		}
 	}