<?php
|
|
namespace JVBase\inc\rest\routes;
|
|
use JVBase\Instance;
|
use JVBase\managers\Cache;
|
use JVBase\rest\PermissionHandler;
|
use JVBase\rest\Rest;
|
use JVBase\rest\Route;
|
use WP_REST_Request;
|
use WP_REST_Response;
|
|
class OpenStreetMaps extends Rest
|
{
|
use Instance;
|
|
public function __construct()
|
{
|
$this->cacheName = 'openstreetmaps';
|
parent::__construct();
|
$this->cache = Cache::for($this->cacheName, null, DAY_IN_SECONDS);
|
}
|
public function registerRoutes(): void {
|
Route::for('geocode')
|
->get([$this, 'getGeocode'])
|
->auth(PermissionHandler::combine(['user']))
|
->args(['q'=> 'string|required'])
|
->rateLimit(1,1)
|
->register();
|
}
|
|
public function getGeocode(WP_REST_Request $request): WP_REST_Response
|
{
|
$query = sanitize_text_field($request->get_param( 'q' ));
|
$userAgent = str_replace(' ', '', get_bloginfo('name')). ' (' . get_option('admin_email').')';
|
$response = wp_remote_get(
|
'https://nominatim.openstreetmap.org/search?' . http_build_query( [
|
'format' => 'json',
|
'addressdetails' => 1,
|
'limit' => 5,
|
'q' => $query,
|
] ),
|
[ 'headers' => [ 'User-Agent' => $userAgent ] ]
|
);
|
return rest_ensure_response( json_decode( wp_remote_retrieve_body( $response ) ) );
|
}
|
}
|