PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.0
4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Controllers / Admin / Settings / MCPSettings.php
surecart / app / src / Controllers / Admin / Settings Last commit date
CacheSettings.php 1 year ago MCPSettings.php 3 months ago Settings.php 1 month ago
MCPSettings.php
180 lines
1 <?php
2
3 namespace SureCart\Controllers\Admin\Settings;
4
5 /**
6 * MCP (Model Context Protocol) settings helper.
7 *
8 * Exposes AJAX handlers for install/activate of the MCP Adapter plugin and
9 * the data required by the client-side MCP settings tab (localized via the
10 * main Settings controller).
11 */
12 class MCPSettings {
13 /**
14 * The MCP Adapter plugin slug.
15 *
16 * @var string
17 */
18 const MCP_ADAPTER_SLUG = 'mcp-adapter/mcp-adapter.php';
19
20 /**
21 * The MCP Adapter GitHub download URL.
22 * Also referenced in MCPAdapterNotice.js for the manual download fallback — keep in sync.
23 *
24 * @var string
25 */
26 const MCP_ADAPTER_DOWNLOAD_URL = 'https://github.com/WordPress/mcp-adapter/releases/latest/download/mcp-adapter.zip';
27
28 /**
29 * The MCP Adapter GitHub repository URL.
30 *
31 * @var string
32 */
33 const MCP_ADAPTER_REPO_URL = 'https://github.com/WordPress/mcp-adapter';
34
35 /**
36 * Get the data required by the client-side MCP settings tab.
37 *
38 * Called from the main Settings controller to localize `scMCPData` on
39 * the shared settings script (the MCP tab no longer has its own entry).
40 *
41 * @return array
42 */
43 public static function getLocalizedData() {
44 if ( ! function_exists( 'get_plugins' ) ) {
45 require_once ABSPATH . 'wp-admin/includes/plugin.php';
46 }
47
48 $all_plugins = get_plugins();
49 $is_installed = isset( $all_plugins[ self::MCP_ADAPTER_SLUG ] );
50 $is_active = is_plugin_active( self::MCP_ADAPTER_SLUG );
51
52 return [
53 'mcp_adapter_installed' => $is_installed,
54 'mcp_adapter_active' => $is_active,
55 'mcp_adapter_download_url' => self::MCP_ADAPTER_DOWNLOAD_URL,
56 'mcp_adapter_repo_url' => self::MCP_ADAPTER_REPO_URL,
57 'ajax_url' => admin_url( 'admin-ajax.php' ),
58 'nonce' => wp_create_nonce( 'sc_mcp_adapter_action' ),
59 'site_url' => site_url(),
60 'rest_url' => rest_url( 'mcp/mcp-adapter-default-server' ),
61 'app_passwords_url' => admin_url( 'profile.php#application-passwords-section' ),
62 'wp_version' => get_bloginfo( 'version' ),
63 'abilities_api_available' => function_exists( 'wp_register_ability_category' ),
64 'current_username' => wp_get_current_user()->user_login,
65 ];
66 }
67
68 /**
69 * Register AJAX handlers for MCP adapter install/activate.
70 *
71 * @return void
72 */
73 public static function registerAjaxHandlers() {
74 add_action( 'wp_ajax_sc_mcp_adapter_install', [ __CLASS__, 'ajaxInstall' ] );
75 add_action( 'wp_ajax_sc_mcp_adapter_activate', [ __CLASS__, 'ajaxActivate' ] );
76 }
77
78 /**
79 * AJAX handler to install the MCP Adapter plugin from GitHub.
80 *
81 * @return void
82 */
83 public static function ajaxInstall() {
84 check_ajax_referer( 'sc_mcp_adapter_action', 'nonce' );
85
86 if ( ! current_user_can( 'install_plugins' ) ) {
87 wp_send_json_error( [ 'message' => __( 'You do not have permission to install plugins.', 'surecart' ) ] );
88 }
89
90 require_once ABSPATH . 'wp-admin/includes/file.php';
91 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
92 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
93 require_once ABSPATH . 'wp-admin/includes/plugin.php';
94
95 // Don't reinstall if already present.
96 $all_plugins = get_plugins();
97 if ( isset( $all_plugins[ self::MCP_ADAPTER_SLUG ] ) ) {
98 // Already installed — just try to activate.
99 $activate = activate_plugin( self::MCP_ADAPTER_SLUG );
100 if ( is_wp_error( $activate ) ) {
101 wp_send_json_error( [ 'message' => $activate->get_error_message() ] );
102 }
103 wp_send_json_success(
104 [
105 'installed' => true,
106 'activated' => true,
107 'message' => __( 'MCP Adapter activated successfully.', 'surecart' ),
108 ]
109 );
110 }
111
112 // Use a silent skin to suppress output.
113 $skin = new \WP_Ajax_Upgrader_Skin();
114 $upgrader = new \Plugin_Upgrader( $skin );
115 $result = $upgrader->install( self::MCP_ADAPTER_DOWNLOAD_URL );
116
117 if ( is_wp_error( $result ) ) {
118 wp_send_json_error( [ 'message' => $result->get_error_message() ] );
119 }
120
121 if ( is_wp_error( $skin->result ) ) {
122 wp_send_json_error( [ 'message' => $skin->result->get_error_message() ] );
123 }
124
125 if ( ! $result ) {
126 wp_send_json_error( [ 'message' => __( 'Plugin installation failed.', 'surecart' ) ] );
127 }
128
129 // Auto-activate after install.
130 $activate = activate_plugin( self::MCP_ADAPTER_SLUG );
131 if ( is_wp_error( $activate ) ) {
132 // Installed but activation failed — still report install success.
133 wp_send_json_success(
134 [
135 'installed' => true,
136 'activated' => false,
137 'message' => __( 'Plugin installed but activation failed. Please activate it manually.', 'surecart' ),
138 ]
139 );
140 }
141
142 wp_send_json_success(
143 [
144 'installed' => true,
145 'activated' => true,
146 'message' => __( 'MCP Adapter installed and activated successfully.', 'surecart' ),
147 ]
148 );
149 }
150
151 /**
152 * AJAX handler to activate the MCP Adapter plugin.
153 *
154 * @return void
155 */
156 public static function ajaxActivate() {
157 check_ajax_referer( 'sc_mcp_adapter_action', 'nonce' );
158
159 if ( ! current_user_can( 'activate_plugins' ) ) {
160 wp_send_json_error( [ 'message' => __( 'You do not have permission to activate plugins.', 'surecart' ) ] );
161 }
162
163 if ( ! function_exists( 'get_plugins' ) ) {
164 require_once ABSPATH . 'wp-admin/includes/plugin.php';
165 }
166
167 $activate = activate_plugin( self::MCP_ADAPTER_SLUG );
168 if ( is_wp_error( $activate ) ) {
169 wp_send_json_error( [ 'message' => $activate->get_error_message() ] );
170 }
171
172 wp_send_json_success(
173 [
174 'activated' => true,
175 'message' => __( 'MCP Adapter activated successfully.', 'surecart' ),
176 ]
177 );
178 }
179 }
180