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