Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 67
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
WP_REST_Help_Center_Persisted_Open_State
0.00% covered (danger)
0.00%
0 / 67
0.00% covered (danger)
0.00%
0 / 4
90
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 / 16
0.00% covered (danger)
0.00%
0 / 1
2
 get_state
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
6
 set_state
0.00% covered (danger)
0.00%
0 / 32
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2/**
3 * WP_REST_Help_Center_Persisted_Open_State 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_Persisted_Open_State.
14 */
15class WP_REST_Help_Center_Persisted_Open_State extends \WP_REST_Controller {
16
17    /**
18     * WP_REST_Help_Center_Persisted_Open_State constructor.
19     */
20    public function __construct() {
21        $this->namespace = 'help-center';
22        $this->rest_base = '/open-state';
23    }
24
25    /**
26     * Register available routes.
27     */
28    public function register_rest_route() {
29        register_rest_route(
30            $this->namespace,
31            $this->rest_base,
32            array(
33                // Get the open state.
34                array(
35                    'methods'             => \WP_REST_Server::READABLE,
36                    'callback'            => array( $this, 'get_state' ),
37                    'permission_callback' => 'is_user_logged_in',
38                ),
39                // Set the open state
40                array(
41                    'methods'             => \WP_REST_Server::EDITABLE,
42                    'callback'            => array( $this, 'set_state' ),
43                    'permission_callback' => 'is_user_logged_in',
44                ),
45            )
46        );
47    }
48
49    /**
50     * Get chat_id and last_chat_id from user preferences.
51     */
52    public function get_state() {
53        // Forward the request body to the support chat endpoint.
54        $body = Client::wpcom_json_api_request_as_user(
55            '/me/preferences',
56            '2',
57            array( 'method' => 'GET' )
58        );
59
60        if ( is_wp_error( $body ) ) {
61            return $body;
62        }
63
64        $response = json_decode( wp_remote_retrieve_body( $body ) );
65
66        $is_open        = $response->calypso_preferences->help_center_open ?? false;
67        $is_minimized   = $response->calypso_preferences->help_center_minimized ?? false;
68        $router_history = $response->calypso_preferences->help_center_router_history ?? null;
69
70        $projected_response = array(
71            'help_center_open'           => (bool) $is_open,
72            'help_center_minimized'      => (bool) $is_minimized,
73            'help_center_router_history' => $router_history,
74        );
75
76        return rest_ensure_response( $projected_response );
77    }
78
79    /**
80     * Set chat_id or last_chat_id from user preferences.
81     *
82     * @param \WP_REST_Request $request The request sent to the API.
83     */
84    public function set_state( \WP_REST_Request $request ) {
85        $state          = $request['help_center_open'];
86        $router_history = $request['help_center_router_history'];
87        $minimized      = $request['help_center_minimized'];
88
89        $data = array(
90            'calypso_preferences' => array(),
91        );
92
93        if ( $request->has_param( 'help_center_open' ) ) {
94            $data['calypso_preferences']['help_center_open'] = $state;
95        }
96
97        if ( $request->has_param( 'help_center_router_history' ) ) {
98            $data['calypso_preferences']['help_center_router_history'] = $router_history;
99        }
100
101        if ( $request->has_param( 'help_center_minimized' ) ) {
102            $data['calypso_preferences']['help_center_minimized'] = $minimized;
103        }
104
105        $body = Client::wpcom_json_api_request_as_user(
106            '/me/preferences',
107            '2',
108            array( 'method' => 'POST' ),
109            $data
110        );
111
112        if ( is_wp_error( $body ) ) {
113            return $body;
114        }
115
116        $response = json_decode( wp_remote_retrieve_body( $body ) );
117
118        $is_open        = $response->calypso_preferences->help_center_open ?? false;
119        $router_history = $response->calypso_preferences->help_center_router_history ?? null;
120        $is_minimized   = $response->calypso_preferences->help_center_minimized ?? false;
121
122        $projected_response = array(
123            'calypso_preferences' => array(
124                'help_center_open'           => (bool) $is_open,
125                'help_center_router_history' => $router_history,
126                'help_center_minimized'      => (bool) $is_minimized,
127            ),
128        );
129
130        return rest_ensure_response( $projected_response );
131    }
132}