From 7698583a2b774b68ef1a24f87023c8385d671f9f Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Thu, 13 Jun 2019 18:55:17 +0000 Subject: [PATCH] Factor out common section out of proxy_bus.php and proxy_tram.php --- stops.php | 27 +++++++++++++++++---------- 1 files changed, 17 insertions(+), 10 deletions(-) diff --git a/stops.php b/stops.php index b9b0132..16eab82 100644 --- a/stops.php +++ b/stops.php @@ -8,16 +8,16 @@ if(empty($_GET['query'])) throw new UnexpectedValueException(); if(strlen($_GET['query']) > 50) throw new UnexpectedValueException(); - // Initialize DB connection an query + // Initialize a DB connection an a query $pdo = new PDO('sqlite:stops/stops.db', NULL, NULL, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )); - $st = $pdo->prepare('SELECT DISTINCT id FROM stop_search WHERE word LIKE ?'); + $st = $pdo->prepare('SELECT DISTINCT id FROM stop_search WHERE word LIKE ? AND id LIKE \'t%\''); // Split stop name into words $words = split_stop_name($_GET['query']); - // Find relevant stop IDs + // Find matching stops (their IDs) $ids = NULL; foreach($words as $word) { if(empty($word)) continue; @@ -27,10 +27,11 @@ $results = $st->fetchAll(PDO::FETCH_COLUMN); $st->closeCursor(); - // Merge results with previous searches if(is_array($ids)) { + // Merge results with list for previous words $ids = array_intersect($ids, $results); } else { + // First search - initialize results list $ids = $results; } @@ -38,26 +39,32 @@ if(count($ids) == 0) break; } - // Close DB connection + // Close a DB connection unset($st, $pdo); - // No query was executed + // No query was executed - return empty list if(!is_array($ids)) throw new UnexpectedValueException(); - // Build structure for UI + // Build a structure for the UI $stop_list = []; + $query_lower = mb_strtolower($_GET['query'], 'UTF-8'); foreach($ids as $id) { $stop_list[] = [ 'id' => $id, 'name' => $stops[$id], 'type' => 'stop', - 'relevance' => similar_text($_GET['query'], $stops[$id]) + 'relevance' => similar_text( + $query_lower, + mb_strtolower($stops[$id], 'UTF-8') + ) ]; } - // Sort stops by relevence + // Sort stops by relevance usort($stop_list, function($a, $b) { - return $b['relevance'] - $a['relevance']; + $rel = $b['relevance'] - $a['relevance']; + if($rel == 0) return strcasecmp($a['name'], $b['name']); + return $rel; }); // Return JSON -- Gitblit v1.9.1