Server IP : 15.235.198.142 / Your IP : 216.73.216.0 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ballsack 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/yme/wp-content/plugins/ocean-extra/includes/onboarding/class/ |
Upload File : |
<?php /** * OceanWP Setup Wizard: Plugin Manager * * @package Ocean_Extra * @category Core * @author OceanWP */ // Exit if accessed directly. if (!defined('ABSPATH')) { exit; } /** * Plugin manager */ if (!class_exists('OE_Onboarding_Plugin_Manager')) { /** * OE_Onboarding_Plugin_Manager. * * @since 2.4.6 * @access public */ final class OE_Onboarding_Plugin_Manager { /** * Class instance. * * @var object * @access private */ private static $_instance = null; /** * OE_Onboarding_Plugin_Manager Instance * * @static * @return OE_Onboarding_Plugin_Manager instance */ public static function instance() { if (is_null(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; } /** * Install a plugin from WordPress.org */ public function install_plugin(WP_REST_Request $request) { $this->include_wp_files(); $plugin_slug = sanitize_text_field($request->get_param('plugin_slug')); if (!$plugin_slug) { return new WP_REST_Response(['message' => __('Plugin slug is required', 'ocean-extra')], 400); } if ($this->get_plugin_status($plugin_slug) !== 'uninstalled') { return new WP_REST_Response(['message' => __('Plugin is already installed', 'ocean-extra')], 200); } $api = plugins_api('plugin_information', ['slug' => $plugin_slug, 'fields' => ['sections' => false]]); if (is_wp_error($api)) { return new WP_REST_Response(['message' => __('Invalid plugin slug or API error', 'ocean-extra')], 400); } $upgrader = new Plugin_Upgrader(new WP_Ajax_Upgrader_Skin()); $result = $upgrader->install($api->download_link); if (is_wp_error($result)) { return new WP_REST_Response(['message' => __('Failed to install plugin. ', 'ocean-extra') . $result->get_error_message()], 400); } return new WP_REST_Response(['message' => __('Plugin installed successfully', 'ocean-extra')], 200); } /** * Activate an installed plugin */ public function activate_plugin(WP_REST_Request $request) { $this->include_wp_files(); $plugin_slug = sanitize_text_field($request->get_param('plugin_slug')); if (!$plugin_slug) { return new WP_REST_Response(['message' => __('Plugin slug is required', 'ocean-extra')], 400); } $plugin_path = $this->is_plugin_installed($plugin_slug); if (!$plugin_path) { return new WP_REST_Response(['message' => __('Plugin not found', 'ocean-extra')], 400); } $result = activate_plugin($plugin_path); if (is_wp_error($result)) { return new WP_REST_Response([ 'message' => sprintf(__('Failed to activate plugin. %s.', 'ocean-extra'), $result->get_error_message()), 400 ]); } return new WP_REST_Response(['message' => 'Plugin activated successfully'], 200); } /** * Check if a plugin is installed */ private function is_plugin_installed($slug) { $this->include_wp_files(); $installed_plugins = get_plugins(); foreach ($installed_plugins as $plugin_file => $data) { $plugin_slug_parts = explode('/', $plugin_file); $main_file = $plugin_slug_parts[0]; if (strtolower($slug) === strtolower($main_file)) { return $plugin_file; } } return false; } /** * Get the status of a plugin */ public function get_plugin_status($slug) { $plugin_file = $this->is_plugin_installed($slug); if (!$plugin_file) return 'uninstalled'; return is_plugin_active($plugin_file) ? 'active' : 'installed'; } /** * Include necessary WordPress files */ private function include_wp_files() { if (!function_exists('get_plugins')) { include_once ABSPATH . 'wp-admin/includes/plugin.php'; } if (!class_exists('Plugin_Upgrader', false)) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } if (!function_exists('activate_plugin')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } if (!function_exists('plugins_api')) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; } if (!function_exists('WP_Filesystem')) { include_once ABSPATH . 'wp-admin/includes/file.php'; } } /** * Check if user has permission * * @param string $capability Capability name. * @return bool */ public function can($capability = 'install_plugins') { if (defined('WP_CLI') && WP_CLI) { return true; } if (is_multisite()) { $can = current_user_can_for_blog(get_current_blog_id(), $capability); } else { $can = current_user_can($capability); } if ($can) { $can = $capability; } return $can; } /** * Check if direct access to filesystem is possible (without FTP) */ public function has_direct_access($context = null) { require_once ABSPATH . 'wp-admin/includes/file.php'; WP_Filesystem(); global $wp_filesystem; if ($wp_filesystem) { if (is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code()) { return false; } else { return $wp_filesystem->method === 'direct'; } } if (get_filesystem_method([], $context) === 'direct') { ob_start(); $creds = request_filesystem_credentials(admin_url(), '', false, $context, null); ob_end_clean(); if (WP_Filesystem($creds)) { return true; } } return false; } } } OE_Onboarding_Plugin_Manager::instance();