! empty( $plugin_data['p_id'] ) ? $plugin_data['p_id'] : '', 'success' => false, 'status' => 'pro_plugin', 'message' => __( 'Pro Plugin', 'wdesignkit' ), ); } } if ( $installed ) { $activate_status = $this->wdkit_activate_plugin( $plugin_data['plugin_slug'] ); $status = array( 'p_id' => !empty( $plugin_data['p_id'] ) ? $plugin_data['p_id'] : '', 'success' => true, 'status' => 'active', ); } else { $status = array( 'p_id' => !empty( $plugin_data['p_id'] ) ? $plugin_data['p_id'] : '', 'success' => false, ); $plugin_api = plugins_api( 'plugin_information', array( 'slug' => sanitize_key( wp_unslash( $plugin_data['original_slug'] ) ), 'fields' => array( 'sections' => false, ), ) ); if ( is_wp_error( $plugin_api ) ) { $status['message'] = $plugin_api->get_error_message(); return $status; } $status['plugin_name'] = $plugin_api->name; $skin = new WP_Ajax_Upgrader_Skin(); $upgrader = new Plugin_Upgrader( $skin ); $result = $upgrader->install( $plugin_api->download_link ); if ( is_wp_error( $result ) ) { $status['status'] = $result->get_error_code(); $status['message'] = $result->get_error_message(); return $status; } elseif ( is_wp_error( $skin->result ) ) { $status['status'] = $skin->result->get_error_code(); $status['message'] = $skin->result->get_error_message(); return $status; } elseif ( $skin->get_errors()->has_errors() ) { $status['message'] = $skin->get_error_messages(); return $status; } elseif ( is_null( $result ) ) { global $wp_filesystem; $status['status'] = 'unable_to_connect_to_filesystem'; $status['message'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.', 'wdesignkit' ); if ( $wp_filesystem instanceof \WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors() ) { $status['message'] = esc_html( $wp_filesystem->errors->get_error_message() ); } return $status; } $install_status = install_plugin_install_status( $plugin_api ); $activate_status = $this->wdkit_activate_plugin( $install_status['file'] ); } if ( $activate_status && ! is_wp_error( $activate_status ) ) { $status['success'] = true; $status['status'] = 'active'; } $status['slug'] = $plugin_data['original_slug']; return $status; } /** * Update Plugin For Template * * @since 1.0.17 */ public function wdkit_update_plugin() { // Include necessary WordPress files include_once ABSPATH . 'wp-admin/includes/file.php'; include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; include_once ABSPATH . 'wp-admin/includes/class-automatic-upgrader-skin.php'; include_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php'; // Plugin slug and basename $plugin_basename = $this->w_d_s_i_g_n_k_i_t_slug; // Check if the plugin is installed $installed_plugins = get_plugins(); if (!isset($installed_plugins[$plugin_basename])) { wp_send_json_error(array('content' => __('Plugin not installed.', 'wdesignkit'))); } // Get current plugin version $current_version = $installed_plugins[$plugin_basename]['Version']; // Make a request to the WordPress.org API to get plugin information $response = wp_remote_post( 'https://api.wordpress.org/plugins/info/1.0/wdesignkit.json', array('timeout' => 15) ); // Check for errors in the API response if (is_wp_error($response)) { $result['message'] = __('Failed to retrieve plugin information.', 'wdesignkit'); $result['description'] = __('Failed to retrieve plugin information.', 'wdesignkit'); $result['success'] = false; wp_send_json($result); } // Parse the response body $plugin_info = json_decode(wp_remote_retrieve_body($response)); // Check if the plugin information is available if (!$plugin_info || !isset($plugin_info->version)) { $result['message'] = __('Failed to retrieve plugin information.', 'wdesignkit'); $result['description'] = __('Failed to retrieve plugin information.', 'wdesignkit'); $result['success'] = false; wp_send_json($result); } // Compare current version with the latest version if (version_compare($current_version, $plugin_info->version, '>=')) { $result['message'] = __('Plugin is already up to date.', 'wdesignkit'); $result['description'] = __('Plugin is already up to date.', 'wdesignkit'); $result['success'] = false; wp_send_json( $result ); } // Initialize the upgrader classes $skin = new Automatic_Upgrader_Skin(); $upgrader = new Plugin_Upgrader($skin); // Install the plugin update $install_result = $upgrader->upgrade($plugin_basename); if (is_wp_error($install_result)) { $result['message'] = __('Failed to install the plugin update.', 'wdesignkit'); $result['description'] = __('Failed to install the plugin update.', 'wdesignkit'); $result['success'] = false; wp_send_json($result); } // Activate the plugin $activation_result = activate_plugin($plugin_basename); // Check if activation was successful $success = is_null($activation_result); // Prepare the result message if ($success) { $result['message'] = __('Successfully updated WDesignKit', 'wdesignkit'); $result['description'] = __('Successfully updated WDesignKit', 'wdesignkit'); $result['success'] = true; } else { $result['message'] = __('Failed to activate WDesignKit', 'wdesignkit'); $result['description'] = __('Failed to activate WDesignKit', 'wdesignkit'); $result['success'] = false; } // Send the result as a JSON response wp_send_json($result); } /** * Active Plugin For Template * * @since 1.0.0 * * @param string $plugin_file this vlaue is plugin slug. */ private function wdkit_activate_plugin( $plugin_file ) { if ( current_user_can( 'activate_plugin', $plugin_file ) && is_plugin_inactive( $plugin_file ) ) { $result = activate_plugin( $plugin_file, false, false ); if ( is_wp_error( $result ) ) { return $result; } else { return true; } } return false; } } Wdkit_Depends_Installer::get_instance(); }