Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
46.38% covered (danger)
46.38%
64 / 138
11.11% covered (danger)
11.11%
1 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
ReduxStateController
46.38% covered (danger)
46.38%
64 / 138
11.11% covered (danger)
11.11%
1 / 9
89.00
0.00% covered (danger)
0.00%
0 / 1
 register_routes
100.00% covered (success)
100.00%
64 / 64
100.00% covered (success)
100.00%
1 / 1
1
 get_input_slice_state
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
6
 update_input_slice_state
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
12
 get_sitegen_slice_state
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 update_sitegen_slice_state
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
12
 get_logogen_slice_state
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 update_logogen_slice_state
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
12
 get_blueprints_slice_state
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 update_blueprints_slice_state
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2namespace NewfoldLabs\WP\Module\Onboarding\RestApi;
3
4use NewfoldLabs\WP\Module\Onboarding\Data\Options;
5use NewfoldLabs\WP\Module\Onboarding\Permissions;
6use NewfoldLabs\WP\Module\Onboarding\Services\ReduxStateService;
7
8class ReduxStateController {
9
10    /**
11     * The namespace of this controller's route.
12     *
13     * @var string
14     */
15    protected $namespace = 'newfold-onboarding/v1';
16
17    /**
18     * The endpoint base
19     *
20     * @var string
21     */
22    protected $rest_base = '/redux-state';
23
24    /**
25     * Registers rest routes for ReduxStateController class.
26     *
27     * @return void
28     */
29    public function register_routes() {
30        \register_rest_route(
31            $this->namespace,
32            $this->rest_base . '/input-slice',
33            array(
34                array(
35                    'methods'             => \WP_REST_Server::READABLE,
36                    'callback'            => array( $this, 'get_input_slice_state' ),
37                    'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
38                ),
39                array(
40                    'methods'             => \WP_REST_Server::EDITABLE,
41                    'callback'            => array( $this, 'update_input_slice_state' ),
42                    'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
43                ),
44            )
45        );
46        \register_rest_route(
47            $this->namespace,
48            $this->rest_base . '/sitegen-slice',
49            array(
50                array(
51                    'methods'             => \WP_REST_Server::READABLE,
52                    'callback'            => array( $this, 'get_sitegen_slice_state' ),
53                    'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
54                ),
55                array(
56                    'methods'             => \WP_REST_Server::EDITABLE,
57                    'callback'            => array( $this, 'update_sitegen_slice_state' ),
58                    'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
59                ),
60            )
61        );
62        \register_rest_route(
63            $this->namespace,
64            $this->rest_base . '/logogen-slice',
65            array(
66                array(
67                    'methods'             => \WP_REST_Server::READABLE,
68                    'callback'            => array( $this, 'get_logogen_slice_state' ),
69                    'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
70                ),
71                array(
72                    'methods'             => \WP_REST_Server::EDITABLE,
73                    'callback'            => array( $this, 'update_logogen_slice_state' ),
74                    'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
75                ),
76            )
77        );
78        \register_rest_route(
79            $this->namespace,
80            $this->rest_base . '/blueprints-slice',
81            array(
82                array(
83                    'methods'             => \WP_REST_Server::READABLE,
84                    'callback'            => array( $this, 'get_blueprints_slice_state' ),
85                    'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
86                ),
87                array(
88                    'methods'             => \WP_REST_Server::EDITABLE,
89                    'callback'            => array( $this, 'update_blueprints_slice_state' ),
90                    'permission_callback' => array( Permissions::class, 'rest_is_authorized_admin' ),
91                ),
92            )
93        );
94    }
95
96
97    /**
98     * Get the input slice state.
99     *
100     * @return \WP_REST_Response
101     */
102    public function get_input_slice_state() {
103        $data = \get_option( Options::get_option_name( 'state_input' ), false );
104        if ( ! $data ) {
105            $data = array();
106        }
107
108        return new \WP_REST_Response(
109            $data,
110            200
111        );
112    }
113
114    /**
115     * Update the input slice state.
116     *
117     * @param \WP_REST_Request $request The request object.
118     * @return \WP_REST_Response
119     */
120    public function update_input_slice_state( \WP_REST_Request $request ): \WP_REST_Response {
121        $data = json_decode( $request->get_body(), true );
122        if ( ! $data ) {
123            return new \WP_REST_Response(
124                'Invalid data',
125                400
126            );
127        }
128
129        $result = ReduxStateService::update( 'input', $data );
130        if ( ! $result ) {
131            return new \WP_REST_Response(
132                'Failed to update input slice state',
133                500
134            );
135        }
136
137        return new \WP_REST_Response(
138            $data,
139            200
140        );
141    }
142
143    /**
144     * Get the sitegen slice state.
145     *
146     * @return \WP_REST_Response
147     */
148    public function get_sitegen_slice_state() {
149        $data = \get_option( Options::get_option_name( 'state_sitegen' ), false );
150        if ( ! $data ) {
151            $data = array();
152        }
153
154        return new \WP_REST_Response( $data, 200 );
155    }
156
157    /**
158     * Update the sitegen slice state.
159     *
160     * @param \WP_REST_Request $request The request object.
161     * @return \WP_REST_Response
162     */
163    public function update_sitegen_slice_state( \WP_REST_Request $request ): \WP_REST_Response {
164        $data = json_decode( $request->get_body(), true );
165        if ( ! $data ) {
166            return new \WP_REST_Response(
167                'Invalid data',
168                400
169            );
170        }
171
172        $result = ReduxStateService::update( 'sitegen', $data );
173        if ( ! $result ) {
174            return new \WP_REST_Response(
175                'Failed to update sitegen slice state',
176                500
177            );
178        }
179
180        return new \WP_REST_Response( $data, 200 );
181    }
182
183    /**
184     * Get the logogen slice state.
185     *
186     * @return \WP_REST_Response
187     */
188    public function get_logogen_slice_state() {
189        $data = \get_option( Options::get_option_name( 'state_logogen' ), false );
190        if ( ! $data ) {
191            $data = array();
192        }
193
194        return new \WP_REST_Response( $data, 200 );
195    }
196
197    /**
198     * Update the logogen slice state.
199     *
200     * @param \WP_REST_Request $request The request object.
201     * @return \WP_REST_Response
202     */
203    public function update_logogen_slice_state( \WP_REST_Request $request ): \WP_REST_Response {
204        $data = json_decode( $request->get_body(), true );
205        if ( ! $data ) {
206            return new \WP_REST_Response(
207                'Invalid data',
208                400
209            );
210        }
211
212        $result = ReduxStateService::update( 'logogen', $data );
213        if ( ! $result ) {
214            return new \WP_REST_Response(
215                'Failed to update logogen slice state',
216                500
217            );
218        }
219
220        return new \WP_REST_Response( $data, 200 );
221    }
222
223    /**
224     * Get the blueprints slice state.
225     *
226     * @return \WP_REST_Response
227     */
228    public function get_blueprints_slice_state() {
229        $data = \get_option( Options::get_option_name( 'state_blueprints' ), false );
230        if ( ! $data ) {
231            $data = array();
232        }
233
234        return new \WP_REST_Response( $data, 200 );
235    }
236
237    /**
238     * Update the blueprints slice state.
239     *
240     * @param \WP_REST_Request $request The request object.
241     * @return \WP_REST_Response
242     */
243    public function update_blueprints_slice_state( \WP_REST_Request $request ): \WP_REST_Response {
244        $data = json_decode( $request->get_body(), true );
245        if ( ! $data ) {
246            return new \WP_REST_Response(
247                'Invalid data',
248                400
249            );
250        }
251
252        $result = ReduxStateService::update( 'blueprints', $data );
253        if ( ! $result ) {
254            return new \WP_REST_Response(
255                'Failed to update blueprints slice state',
256                500
257            );
258        }
259
260        return new \WP_REST_Response( $data, 200 );
261    }
262}