Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
60.00% covered (warning)
60.00%
18 / 30
50.00% covered (danger)
50.00%
2 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
WP_REST_Agents_Manager_Persisted_Open_State
60.00% covered (warning)
60.00%
18 / 30
50.00% covered (danger)
50.00%
2 / 4
12.10
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 register_rest_route
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
1 / 1
1
 get_state
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 set_state
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2/**
3 * WP_REST_Agents_Manager_Persisted_Open_State file.
4 *
5 * @package automattic/jetpack-agents-manager
6 */
7
8namespace Automattic\Jetpack\Agents_Manager;
9
10/**
11 * Class WP_REST_Agents_Manager_Persisted_Open_State.
12 */
13class WP_REST_Agents_Manager_Persisted_Open_State extends \WP_REST_Controller {
14
15    /**
16     * WP_REST_Agents_Manager_Persisted_Open_State constructor.
17     */
18    public function __construct() {
19        $this->namespace = 'agents-manager';
20        $this->rest_base = '/open-state';
21    }
22
23    /**
24     * Register available routes.
25     */
26    public function register_rest_route() {
27        register_rest_route(
28            $this->namespace,
29            $this->rest_base,
30            array(
31                // Get the open state.
32                array(
33                    'methods'             => \WP_REST_Server::READABLE,
34                    'callback'            => array( $this, 'get_state' ),
35                    'permission_callback' => 'is_user_logged_in',
36                ),
37                // Set the open state
38                array(
39                    'methods'             => \WP_REST_Server::EDITABLE,
40                    'callback'            => array( $this, 'set_state' ),
41                    'permission_callback' => 'is_user_logged_in',
42                ),
43            )
44        );
45    }
46
47    /**
48     * Get Agents Manager state from user preferences.
49     *
50     * Delegates to Open_State_Store, which fetches the dedicated
51     * wpcom/v2/agents-manager/state endpoint and refreshes the local cache.
52     */
53    public function get_state() {
54        $state = Open_State_Store::fetch();
55
56        if ( is_wp_error( $state ) ) {
57            return $state;
58        }
59
60        return rest_ensure_response( $state );
61    }
62
63    /**
64     * Set Agents Manager state in user preferences.
65     *
66     * Delegates to Open_State_Store, which updates the dedicated
67     * wpcom/v2/agents-manager/state endpoint and refreshes the local cache.
68     *
69     * @param \WP_REST_Request $request The request sent to the API.
70     */
71    public function set_state( \WP_REST_Request $request ) {
72        $state = array();
73
74        foreach ( array_keys( Open_State_Store::DEFAULTS ) as $key ) {
75            if ( $request->has_param( $key ) ) {
76                $state[ $key ] = $request[ $key ];
77            }
78        }
79
80        $result = Open_State_Store::update( $state );
81
82        if ( is_wp_error( $result ) ) {
83            return $result;
84        }
85
86        return rest_ensure_response( $result );
87    }
88}