PluginProbe
WDesignKit – AI Templates, Widget Builder & MCP Workflow / 2.7.0
WDesignKit – AI Templates, Widget Builder & MCP Workflow v2.7.0
2.7.1 2.7.0 2.6.6 2.6.5 2.6.4 2.6.3 2.6.2 2.6.1 2.6.0 2.5.5 2.5.4 2.5.3 2.5.2 2.5.1 2.5.0 2.4.0 2.3.3 2.3.2 2.3.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 All 130 releases
wdesignkit / includes / admin / class-wdkit-depends-installer.php

class-wdkit-depends-installer.php in WDesignKit – AI Templates, Widget Builder & MCP Workflow 2.7.0, at includes/admin/class-wdkit-depends-installer.php

283 lines 8.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The Plugin Installer Require of the Template.
4 *
5 * @link https://posimyth.com/
6 * @since 1.0.0
7 *
8 * @package Wdesignkit
9 */
10
11 /**Exit if accessed directly.*/
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit;
14 }
15
16 if ( ! class_exists( 'Wdkit_Depends_Installer' ) ) {
17
18 /**
19 * It is check plugin install or not when template import
20 *
21 * @since 1.0.0
22 */
23 class Wdkit_Depends_Installer {
24 /**
25 * Member Variable
26 *
27 * @var instance
28 */
29 private static $instance;
30
31 /**
32 * Instance
33 *
34 * @since 1.0.17
35 *
36 * @var w_d_s_i_g_n_k_i_t_slug
37 */
38 public $w_d_s_i_g_n_k_i_t_slug = 'wdesignkit/wdesignkit.php';
39
40 /**
41 * Initiator
42 */
43 public static function get_instance() {
44 if ( ! isset( self::$instance ) ) {
45 self::$instance = new self();
46 }
47 return self::$instance;
48 }
49
50 /**
51 * Initialize the class and set its properties.
52 *
53 * @since 1.0.0
54 */
55 public function __construct() {
56 }
57
58 /**
59 * Install Plugin For Template
60 *
61 * @since 1.0.0
62 *
63 * @param string $plugin_data this vlaue is plugin slug.
64 */
65 public function wdkit_install_plugin( $plugin_data ) {
66 require_once ABSPATH . 'wp-admin/includes/plugin.php';
67 require_once ABSPATH . 'wp-admin/includes/file.php';
68 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
69 include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
70
71 $all_plugins = get_plugins();
72 $installed = isset( $all_plugins[ $plugin_data['plugin_slug'] ] );
73
74 if ( isset( $plugin_data['freepro'] ) && 1 === $plugin_data['freepro'] ) {
75 if ( ! $installed ) {
76 return array(
77 'p_id' => ! empty( $plugin_data['p_id'] ) ? $plugin_data['p_id'] : '',
78 'success' => false,
79 'status' => 'pro_plugin',
80 'message' => __( 'Pro Plugin', 'wdesignkit' ),
81 );
82 }
83 }
84
85 if ( $installed ) {
86 $activate_status = $this->wdkit_activate_plugin( $plugin_data['plugin_slug'] );
87
88 $status = array(
89 'p_id' => !empty( $plugin_data['p_id'] ) ? $plugin_data['p_id'] : '',
90 'success' => true,
91 'status' => 'active',
92 );
93 } else {
94 $status = array(
95 'p_id' => !empty( $plugin_data['p_id'] ) ? $plugin_data['p_id'] : '',
96 'success' => false,
97 );
98
99 $plugin_api = plugins_api(
100 'plugin_information',
101 array(
102 'slug' => sanitize_key( wp_unslash( $plugin_data['original_slug'] ) ),
103 'fields' => array(
104 'sections' => false,
105 ),
106 )
107 );
108
109 if ( is_wp_error( $plugin_api ) ) {
110 $status['message'] = $plugin_api->get_error_message();
111 return $status;
112 }
113
114 $status['plugin_name'] = $plugin_api->name;
115
116 $skin = new WP_Ajax_Upgrader_Skin();
117 $upgrader = new Plugin_Upgrader( $skin );
118 $result = $upgrader->install( $plugin_api->download_link );
119 if ( is_wp_error( $result ) ) {
120 $status['status'] = $result->get_error_code();
121 $status['message'] = $result->get_error_message();
122
123 return $status;
124 } elseif ( is_wp_error( $skin->result ) ) {
125 $status['status'] = $skin->result->get_error_code();
126 $status['message'] = $skin->result->get_error_message();
127
128 return $status;
129 } elseif ( $skin->get_errors()->has_errors() ) {
130 $status['message'] = $skin->get_error_messages();
131
132 return $status;
133 } elseif ( is_null( $result ) ) {
134 global $wp_filesystem;
135
136 $status['status'] = 'unable_to_connect_to_filesystem';
137 $status['message'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.', 'wdesignkit' );
138
139 if ( $wp_filesystem instanceof \WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) {
140 $status['message'] = esc_html( $wp_filesystem->errors->get_error_message() );
141 }
142
143 return $status;
144 }
145
146 $install_status = install_plugin_install_status( $plugin_api );
147 $activate_status = $this->wdkit_activate_plugin( $install_status['file'] );
148 }
149
150 if ( $activate_status && ! is_wp_error( $activate_status ) ) {
151 $status['success'] = true;
152 $status['status'] = 'active';
153 }
154
155 $status['slug'] = $plugin_data['original_slug'];
156
157 return $status;
158 }
159
160 /**
161 * Update Plugin For Template
162 *
163 * @since 1.0.17
164 */
165 public function wdkit_update_plugin() {
166
167 // Include necessary WordPress files
168 include_once ABSPATH . 'wp-admin/includes/file.php';
169 include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
170 include_once ABSPATH . 'wp-admin/includes/class-automatic-upgrader-skin.php';
171 include_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
172
173 // Plugin slug and basename
174 $plugin_basename = $this->w_d_s_i_g_n_k_i_t_slug;
175
176 // Check if the plugin is installed
177 $installed_plugins = get_plugins();
178 if (!isset($installed_plugins[$plugin_basename])) {
179 wp_send_json_error(array('content' => __('Plugin not installed.', 'wdesignkit')));
180 }
181
182 // Get current plugin version
183 $current_version = $installed_plugins[$plugin_basename]['Version'];
184
185 // Make a request to the WordPress.org API to get plugin information
186 $response = wp_remote_post(
187 'https://api.wordpress.org/plugins/info/1.0/wdesignkit.json',
188 array('timeout' => 15)
189 );
190
191 // Check for errors in the API response
192 if (is_wp_error($response)) {
193 $result['message'] = __('Failed to retrieve plugin information.', 'wdesignkit');
194 $result['description'] = __('Failed to retrieve plugin information.', 'wdesignkit');
195 $result['success'] = false;
196
197 wp_send_json($result);
198 }
199
200 // Parse the response body
201 $plugin_info = json_decode(wp_remote_retrieve_body($response));
202
203 // Check if the plugin information is available
204 if (!$plugin_info || !isset($plugin_info->version)) {
205
206 $result['message'] = __('Failed to retrieve plugin information.', 'wdesignkit');
207 $result['description'] = __('Failed to retrieve plugin information.', 'wdesignkit');
208 $result['success'] = false;
209
210 wp_send_json($result);
211 }
212
213 // Compare current version with the latest version
214 if (version_compare($current_version, $plugin_info->version, '>=')) {
215
216 $result['message'] = __('Plugin is already up to date.', 'wdesignkit');
217 $result['description'] = __('Plugin is already up to date.', 'wdesignkit');
218 $result['success'] = false;
219
220 wp_send_json( $result );
221 }
222
223 // Initialize the upgrader classes
224 $skin = new Automatic_Upgrader_Skin();
225 $upgrader = new Plugin_Upgrader($skin);
226
227 // Install the plugin update
228 $install_result = $upgrader->upgrade($plugin_basename);
229
230 if (is_wp_error($install_result)) {
231 $result['message'] = __('Failed to install the plugin update.', 'wdesignkit');
232 $result['description'] = __('Failed to install the plugin update.', 'wdesignkit');
233 $result['success'] = false;
234
235 wp_send_json($result);
236 }
237
238 // Activate the plugin
239 $activation_result = activate_plugin($plugin_basename);
240
241 // Check if activation was successful
242 $success = is_null($activation_result);
243
244 // Prepare the result message
245 if ($success) {
246 $result['message'] = __('Successfully updated WDesignKit', 'wdesignkit');
247 $result['description'] = __('Successfully updated WDesignKit', 'wdesignkit');
248 $result['success'] = true;
249 } else {
250 $result['message'] = __('Failed to activate WDesignKit', 'wdesignkit');
251 $result['description'] = __('Failed to activate WDesignKit', 'wdesignkit');
252 $result['success'] = false;
253 }
254
255 // Send the result as a JSON response
256 wp_send_json($result);
257 }
258
259 /**
260 * Active Plugin For Template
261 *
262 * @since 1.0.0
263 *
264 * @param string $plugin_file this vlaue is plugin slug.
265 */
266 private function wdkit_activate_plugin( $plugin_file ) {
267
268 if ( current_user_can( 'activate_plugin', $plugin_file ) && is_plugin_inactive( $plugin_file ) ) {
269 $result = activate_plugin( $plugin_file, false, false );
270
271 if ( is_wp_error( $result ) ) {
272 return $result;
273 } else {
274 return true;
275 }
276 }
277
278 return false;
279 }
280 }
281
282 Wdkit_Depends_Installer::get_instance();
283 }