/var/www/html_us/wp-content/plugins/elementor/modules/wp-rest/classes/elementor-settings.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php

namespace Elementor\Modules\WpRest\Classes;

if ( ! 
defined'ABSPATH' ) ) {
    exit; 
// Exit if accessed directly.
}

class 
Elementor_Settings {

    public function 
register(): void {
        
register_rest_route('elementor/v1''/settings/(?P<key>[\w_-]+)', [
            [
                
'methods' => \WP_REST_Server::READABLE,
                
'permission_callback' => function (): bool {
                    return 
current_user_can'manage_options' );
                },
                
'sanitize_callback' => function ( string $param ): string {
                    return 
esc_attr$param );
                },
                
'validate_callback' => function ( \WP_REST_Request $request ): bool {
                    
$params $request->get_params();

                    return 
=== strpos$params['key'], 'elementor' );
                },
                
'callback' => function ( $request ): \WP_REST_Response {
                    try {
                        
$key $request->get_param'key' );
                        
$current_value get_option$key );

                        return new 
\WP_REST_Response([
                            
'success' => true,
                            
// Nest in order to allow extending the response with more details.
                            
'data' => [
                                
'value' => $current_value,
                            ],
                        ], 
200);
                    } catch ( 
\Exception $e ) {
                        return new 
\WP_REST_Response([
                            
'success' => false,
                            
'data' => [
                                
'message' => $e->getMessage(),
                            ],
                        ], 
500);
                    }
                },
            ],
        ]);

        
register_rest_route('elementor/v1''/settings/(?P<key>[\w_-]+)', [
            [
                
'methods' => \WP_REST_Server::EDITABLE,
                
'permission_callback' => function (): bool {
                    return 
current_user_can'manage_options' );
                },
                
'sanitize_callback' => function ( string $param ): string {
                    return 
esc_attr$param );
                },
                
'validate_callback' => function ( \WP_REST_Request $request ): bool {
                    
$params $request->get_params();
                    return 
=== strpos$params['key'], 'elementor' ) && isset( $params['value'] );
                },
                
'callback' => function ( \WP_REST_Request $request ): \WP_REST_Response {
                    
$key $request->get_param'key' );
                    
$new_value $request->get_param'value' );
                    
$current_value get_option$key );

                    if ( 
$new_value === $current_value ) {
                        return new 
\WP_REST_Response([
                            
'success' => true,
                        ], 
200);
                    }

                    
$success update_option$key$new_value );
                    if ( 
$success ) {
                        return new 
\WP_REST_Response([
                            
'success' => true,
                            
'data' => [
                                
'message' => 'Setting updated successfully.',
                            ],
                        ], 
200);
                    } else {
                        return new 
\WP_REST_Response([
                            
'success' => false,
                            
'data' => [
                                
'message' => 'Failed to update setting.',
                            ],
                        ], 
500);
                    }
                },
            ],
        ]);
    }
}