Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 72
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
Skip404Controller
0.00% covered (danger)
0.00%
0 / 72
0.00% covered (danger)
0.00%
0 / 2
156
0.00% covered (danger)
0.00%
0 / 1
 register_routes
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
2
 set_options
0.00% covered (danger)
0.00%
0 / 59
0.00% covered (danger)
0.00%
0 / 1
132
1<?php
2namespace NewfoldLabs\WP\Module\Performance\RestApi;
3
4use NewfoldLabs\WP\Module\Performance\Skip404\Skip404;
5
6/**
7 * Class Settings
8 *
9 * @package NewfoldLabs\WP\Module\Performance
10 */
11class Skip404Controller {
12
13    /**
14     * The REST route namespace.
15     *
16     * @var string
17     */
18    protected $namespace = 'newfold-performance/v1';
19
20    /**
21     * The REST route base.
22     *
23     * @var string
24     */
25    protected $rest_base = '/skip404';
26
27    /**
28     * Register API routes.
29     *
30     * @return void
31     */
32    public function register_routes() {
33        register_rest_route(
34            $this->namespace,
35            $this->rest_base,
36            array(
37                array(
38                    'methods'             => \WP_REST_Server::CREATABLE,
39                    'callback'            => array( $this, 'set_options' ),
40                    'permission_callback' => function () {
41                        return current_user_can( 'manage_options' );
42                    },
43                ),
44            )
45        );
46    }
47
48    /**
49     * Set Jetpack options.
50     *
51     * @param WP_REST_Request $request The request object.
52     * @return WP_REST_Response
53     */
54    public function set_options( $request ) {
55        try {
56            $params = $request->get_params();
57
58            if ( ! isset( $params['field'] ) || ! is_array( $params['field'] ) ) {
59                return new \WP_REST_Response(
60                    array(
61                        'success' => false,
62                        'error'   => __( "The parameter 'field' is missing or invalid.", 'wp-module-performance' ),
63                    ),
64                    400
65                );
66            }
67
68            $field = $params['field'];
69
70            if ( ! isset( $field['id'], $field['value'] ) ) {
71                return new \WP_REST_Response(
72                    array(
73                        'success' => false,
74                        'error'   => __( "The fields 'id' and 'value' are required.", 'wp-module-performance' ),
75                    ),
76                    400
77                );
78            }
79
80            switch ( $field['id'] ) {
81                case 'skip404':
82                    $bool_value    = filter_var( $field['value'], FILTER_VALIDATE_BOOLEAN );
83                    $current_value = get_option( Skip404::OPTION_NAME, 'not_set' );
84                    if ( 'not_set' === $current_value ) {
85                        add_option( Skip404::OPTION_NAME, $bool_value );
86                        break;
87                    }
88                    if ( $current_value !== $bool_value ) {
89                        $result = update_option( Skip404::OPTION_NAME, $bool_value );
90                        if ( false === $result ) {
91                            return new \WP_REST_Response(
92                                array(
93                                    'success' => false,
94                                    'error'   => __( 'An error occurred while updating the option.', 'wp-module-performance' ),
95                                ),
96                                500
97                            );
98                        }
99                    }
100                    break;
101                default:
102                    return new \WP_REST_Response(
103                        array(
104                            'success' => false,
105                            'error'   => __( 'Invalid field ID provided.', 'wp-module-performance' ),
106                        ),
107                        400
108                    );
109            }
110
111            return new \WP_REST_Response(
112                array(
113                    'success'        => true,
114                    'updated_option' => $field['id'],
115                    'updated_value'  => isset( $bool_value ) ? $bool_value : $field['value'],
116                ),
117                200
118            );
119        } catch ( \Exception $e ) {
120            return new \WP_REST_Response(
121                array(
122                    'success' => false,
123                    'error'   => __( 'An error occurred while updating the option.', 'wp-module-performance' ) . $e->getMessage(),
124                ),
125                500
126            );
127        }
128    }
129}