summaryrefslogtreecommitdiff
path: root/app/Http/RequestHandlers/AutoCompletePlace.php
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@gmail.com>2021-04-23 10:33:08 +0100
committerGreg Roach <fisharebest@gmail.com>2021-04-28 15:43:49 +0100
commitc9c6f2ec6e88594e58f14a6418e0de5aaa1484bd (patch)
tree9436395efa67c4626f01246de19562e35f8d5238 /app/Http/RequestHandlers/AutoCompletePlace.php
parent32294542f5c0786d6b52bc6af4645d1580151e05 (diff)
downloadwebtrees-c9c6f2ec6e88594e58f14a6418e0de5aaa1484bd.tar.gz
webtrees-c9c6f2ec6e88594e58f14a6418e0de5aaa1484bd.tar.bz2
webtrees-c9c6f2ec6e88594e58f14a6418e0de5aaa1484bd.zip
Merge: #3803, Merge: #3706
Diffstat (limited to 'app/Http/RequestHandlers/AutoCompletePlace.php')
-rw-r--r--app/Http/RequestHandlers/AutoCompletePlace.php46
1 files changed, 21 insertions, 25 deletions
diff --git a/app/Http/RequestHandlers/AutoCompletePlace.php b/app/Http/RequestHandlers/AutoCompletePlace.php
index e15d6ca38b..77100cd508 100644
--- a/app/Http/RequestHandlers/AutoCompletePlace.php
+++ b/app/Http/RequestHandlers/AutoCompletePlace.php
@@ -20,12 +20,16 @@ declare(strict_types=1);
namespace Fisharebest\Webtrees\Http\RequestHandlers;
use Fisharebest\Webtrees\I18N;
+use Fisharebest\Webtrees\Module\ModuleMapAutocompleteInterface;
use Fisharebest\Webtrees\Place;
+use Fisharebest\Webtrees\Services\ModuleService;
+use Fisharebest\Webtrees\Services\SearchService;
use Fisharebest\Webtrees\Site;
use Fisharebest\Webtrees\Tree;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Collection;
+use Iodev\Whois\Modules\Module;
use Psr\Http\Message\ServerRequestInterface;
use function assert;
@@ -47,6 +51,18 @@ class AutoCompletePlace extends AbstractAutocompleteHandler
'timeout' => 3,
];
+ private ModuleService $module_service;
+
+ /**
+ * @param SearchService $search_service
+ */
+ public function __construct(SearchService $search_service, ModuleService $module_service)
+ {
+ parent::__construct($search_service);
+
+ $this->module_service = $module_service;
+ }
+
protected function search(ServerRequestInterface $request): Collection
{
$tree = $request->getAttribute('tree');
@@ -60,33 +76,13 @@ class AutoCompletePlace extends AbstractAutocompleteHandler
return $place->gedcomName();
});
- $geonames = Site::getPreference('geonames');
-
- if ($data->isEmpty() && $geonames !== '') {
- // No place found? Use an external gazetteer
- $url =
- 'https://secure.geonames.org/searchJSON' .
- '?name_startsWith=' . rawurlencode($query) .
- '&lang=' . I18N::languageTag() .
- '&fcode=CMTY&fcode=ADM4&fcode=PPL&fcode=PPLA&fcode=PPLC' .
- '&style=full' .
- '&username=' . rawurlencode($geonames);
-
- // Read from the URL
- $client = new Client();
- try {
- $json = $client->get($url, self::GUZZLE_OPTIONS)->getBody()->__toString();
- $places = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
- if (isset($places['geonames']) && is_array($places['geonames'])) {
- foreach ($places['geonames'] as $k => $place) {
- $data->add($place['name'] . ', ' . $place['adminName2'] . ', ' . $place['adminName1'] . ', ' . $place['countryName']);
- }
- }
- } catch (RequestException $ex) {
- // Service down? Quota exceeded?
+ // No place found? Use external gazetteers.
+ foreach ($this->module_service->findByInterface(ModuleMapAutocompleteInterface::class) as $module) {
+ if ($data->isEmpty()) {
+ $data = $data->concat($module->searchPlaceNames($query))->sort();
}
}
- return new Collection($data);
+ return $data;
}
}