PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.0
Elementor Website Builder – more than just a page builder v4.3.0
4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 All 455 releases
elementor / vendor / elementor / elementor-mcp-composer / src / Admin / McpSettingsController.php

McpSettingsController.php in Elementor Website Builder – more than just a page builder 4.3.0, at vendor/elementor/elementor-mcp-composer/src/Admin/McpSettingsController.php

152 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\MCP\Composer\Admin;
4
5 use WP_Error;
6 use WP_REST_Request;
7 use WP_REST_Response;
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit; // Exit if accessed directly.
11 }
12
13 /**
14 * Handles site-wide MCP availability settings.
15 */
16 class McpSettingsController extends RestController {
17 const OPTION_NAME = 'elementor_mcp_enabled';
18 private const MISSING_OPTION_VALUE = '__elementor_mcp_missing__';
19
20 /**
21 * Register settings routes.
22 *
23 * @return void
24 */
25 public function register_routes(): void {
26 \register_rest_route(
27 $this->get_namespace(),
28 '/mcp-settings',
29 [
30 [
31 'methods' => 'GET',
32 'callback' => [ $this, 'get_settings' ],
33 'permission_callback' => [ $this, 'check_permission' ],
34 ],
35 [
36 'methods' => 'POST',
37 'callback' => [ $this, 'update_settings' ],
38 'permission_callback' => [ $this, 'check_permission' ],
39 'args' => [
40 'enabled' => [
41 'required' => true,
42 'type' => 'boolean',
43 'sanitize_callback' => 'rest_sanitize_boolean',
44 ],
45 ],
46 ],
47 ]
48 );
49 }
50
51 /**
52 * Validate the caller for settings reads and mutations.
53 *
54 * @param WP_REST_Request $request Request instance.
55 * @return true|WP_Error
56 */
57 public function check_permission( WP_REST_Request $request ) {
58 $nonce = $request->get_header( 'X-WP-Nonce' );
59
60 if ( ! $nonce || ! \wp_verify_nonce( $nonce, 'wp_rest' ) ) {
61 return new WP_Error(
62 'invalid_nonce',
63 __( 'The request nonce is invalid.', 'elementor' ),
64 [ 'status' => 403 ]
65 );
66 }
67
68 if ( ! \current_user_can( 'manage_options' ) ) {
69 return new WP_Error(
70 'forbidden',
71 __( 'You are not allowed to manage Elementor MCP settings.', 'elementor' ),
72 [ 'status' => 403 ]
73 );
74 }
75
76 return true;
77 }
78
79 /**
80 * Return the current MCP settings payload.
81 *
82 * @return WP_REST_Response
83 */
84 public function get_settings(): WP_REST_Response {
85 return new WP_REST_Response(
86 [
87 'success' => true,
88 'data' => self::get_settings_data(),
89 ],
90 200
91 );
92 }
93
94 /**
95 * Persist the MCP enabled state.
96 *
97 * @param WP_REST_Request $request Request instance.
98 * @return WP_REST_Response|WP_Error
99 */
100 public function update_settings( WP_REST_Request $request ) {
101 $enabled = (bool) $request->get_param( 'enabled' );
102 $current_value = \get_option( self::OPTION_NAME, self::MISSING_OPTION_VALUE );
103 $updated = self::MISSING_OPTION_VALUE === $current_value
104 ? \add_option( self::OPTION_NAME, $enabled, '', false )
105 : \update_option( self::OPTION_NAME, $enabled );
106
107 if ( ! $updated && self::is_enabled() !== $enabled ) {
108 return new WP_Error(
109 'save_failed',
110 __( 'Failed to save Elementor MCP settings.', 'elementor' ),
111 [ 'status' => 500 ]
112 );
113 }
114
115 return new WP_REST_Response(
116 [
117 'success' => true,
118 'data' => self::get_settings_data(),
119 ],
120 200
121 );
122 }
123
124 /**
125 * Check whether MCP is enabled for the current site.
126 *
127 * Missing or invalid values default to enabled so upgrades stay opt-in.
128 *
129 * @return bool
130 */
131 public static function is_enabled(): bool {
132 $value = \get_option( self::OPTION_NAME, null );
133
134 if ( null === $value ) {
135 return false;
136 }
137
138 return (bool) $value;
139 }
140
141 /**
142 * Build the localized/frontend settings payload.
143 *
144 * @return array<string, bool>
145 */
146 public static function get_settings_data(): array {
147 return [
148 'enabled' => self::is_enabled(),
149 ];
150 }
151 }
152