Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
WP_REST_Help_Center_Search
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 3
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 register_rest_route
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
2
 get_search_results
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2/**
3 * WP_REST_Help_Center_Search file.
4 *
5 * @package automattic/jetpack-mu-wpcom
6 */
7
8namespace A8C\FSE;
9
10use Automattic\Jetpack\Connection\Client;
11
12/**
13 * Class WP_REST_Help_Center_Search.
14 */
15class WP_REST_Help_Center_Search extends \WP_REST_Controller {
16    /**
17     * WP_REST_Help_Center_Search constructor.
18     */
19    public function __construct() {
20        $this->namespace = 'help-center';
21        $this->rest_base = '/search';
22    }
23
24    /**
25     * Register available routes.
26     */
27    public function register_rest_route() {
28        register_rest_route(
29            $this->namespace,
30            $this->rest_base,
31            array(
32                'methods'             => \WP_REST_Server::READABLE,
33                'callback'            => array( $this, 'get_search_results' ),
34                'permission_callback' => 'is_user_logged_in',
35                'args'                => array(
36                    'query'   => array(
37                        'type' => 'string',
38                    ),
39                    'locale'  => array(
40                        'type'    => 'string',
41                        'default' => 'en',
42                    ),
43                    'section' => array(
44                        'type' => 'string',
45                    ),
46                ),
47            )
48        );
49    }
50
51    /**
52     * Should return the search results
53     *
54     * @param \WP_REST_Request $request    The request sent to the API.
55     */
56    public function get_search_results( \WP_REST_Request $request ) {
57        $query   = $request['query'];
58        $locale  = $request['locale'];
59        $section = $request['section'];
60        $source  = $request['source'];
61
62        $query_parameters = array(
63            'query'  => $query,
64            'locale' => $locale,
65        );
66
67        if ( ! empty( $section ) ) {
68            $query_parameters['section'] = $section;
69        }
70
71        if ( ! empty( $source ) ) {
72            $query_parameters['source'] = $source;
73        }
74
75        $body = Client::wpcom_json_api_request_as_user(
76            '/help/search?' . http_build_query( $query_parameters )
77        );
78
79        if ( is_wp_error( $body ) ) {
80            return $body;
81        }
82
83        $response = json_decode( wp_remote_retrieve_body( $body ) );
84
85        return rest_ensure_response( $response );
86    }
87}