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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
<?php
namespace SIW\API;
use SIW\Util;
use SIW\External\Postcode_Lookup as External_Postcode_Lookup;
class Postcode_Lookup extends Endpoint {
protected $resource = 'postcode_lookup';
protected $methods = \WP_REST_Server::READABLE;
protected $callback = 'postcode_lookup';
protected $script = 'postcode';
protected $script_deps = ['polyfill'];
protected function set_parameters() {
$this->parameters = [
'postcode' => true,
'housenumber' => true,
];
}
protected function set_script_parameters() {
$this->script_parameters['regex'] = Util::get_pattern('postal_code');
}
public function sanitize_postcode( string $param, \WP_REST_Request $request, string $key ) {
return preg_replace( '/[\s\-]/', '', trim( strtoupper( $param ) ) );
}
public function sanitize_housenumber( string $param, \WP_REST_Request $request, string $key ) {
return preg_replace("/[^0-9]/", "", $param );
}
public function validate_postcode( string $param, \WP_REST_Request $request, string $key ) {
return (bool) preg_match( Util::get_regex('postal_code'), $param );
}
public function validate_housenumber( string $param, \WP_REST_Request $request, string $key ) {
$housenumber = preg_replace("/[^0-9]/", "", $param );
return ! empty( $housenumber );
}
public function postcode_lookup( \WP_REST_Request $request ) {
$postcode = $request->get_param('postcode');
$housenumber = $request->get_param('housenumber');
$postcode_lookup = new External_Postcode_Lookup;
$address = $postcode_lookup->get_address( $postcode, $housenumber );
if ( false === $address ) {
return new \WP_Rest_Response( [
'success' => false
], \WP_Http::OK );
}
return new \WP_REST_Response( [
'success' => true,
'data' => $address,
], \WP_Http::OK );
}
}