Jake Vanderwerf
8 days ago 90f5c3069f23f63036ab0178ff9ab69effcfb2ea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?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 ) ) );
    }
}