File "class-gplvault-upgrade-manager.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/gplvault-updater/includes/upgrader/class-gplvault-upgrade-manager.php
File size: 5.08 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

defined('ABSPATH') || exit;
class GPLVault_Upgrade_Manager
{
    private static $instance;
    private function __construct()
    {
    }
    public static function instance()
    {
        if (null === self::$instance) {
            self::$instance = new self();
            do_action('gv_upgrade_manager_loaded');
        }
        return self::$instance;
    }
    public function init()
    {
        if (gv_settings_manager()->license_is_activated()) {
            add_filter('gv_ajax_bindings', array($this, 'ajax_bindings'));
        }
    }
    public function ajax_bindings($ajax_bindings)
    {
        $ajax_bindings = is_array($ajax_bindings) ? $ajax_bindings : array();
        $upgrader_bindings = array('update_plugin' => array(self::instance(), 'update_plugins'), 'update_theme' => array(self::instance(), 'update_themes'));
        return wp_parse_args($upgrader_bindings, $ajax_bindings);
    }
    public function update_plugins($request_params)
    {
        $payload = $request_params['data'] ?? array();
        if (empty($payload['plugin']) || empty($payload['product_id']) || empty($payload['product_id'])) {
            $error_data = array('slug' => sanitize_key(wp_unslash($payload['slug'])), 'plugin' => sanitize_text_field(wp_unslash($payload['plugin'])), 'product_id' => gv_clean(wp_unslash($payload['product_id'])), 'errorCode' => 'gv_no_plugin_specified', 'errorMessage' => __('No plugin specified.', 'gplvault'));
            return new WP_Error($error_data['errorCode'], $error_data['errorMessage'], $error_data);
        }
        $plugin = plugin_basename(sanitize_text_field(wp_unslash($payload['plugin'])));
        $product_id = gv_clean(wp_unslash($payload['product_id']));
        $slug = sanitize_key(wp_unslash($payload['slug']));
        $status = array('update' => 'plugin', 'plugin' => sanitize_text_field(wp_unslash($payload['plugin'])), 'slug' => $slug, 'product_id' => $product_id, 'oldVersion' => '', 'newVersion' => '');
        if (!current_user_can('update_plugins') || 0 !== validate_file($plugin)) {
            $status['errorCode'] = 'gv_invalid_file';
            $status['errorMessage'] = __('Sorry, you are not allowed to update plugins for this site.', 'gplvault');
            return new WP_Error($status['errorCode'], $status['errorMessage'], $status);
        }
        $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin);
        $status['plugin'] = $plugin;
        $status['pluginName'] = $plugin_data['Name'];
        if ($plugin_data['Version']) {
            $status['oldVersion'] = sprintf(__('Version %s', 'gplvault'), $plugin_data['Version']);
        }
        require_once GPLVault()->includes_path('/upgrader/class-gplvault-ajax-upgrader-skin.php');
        require_once GPLVault()->includes_path('/upgrader/class-gplvault-plugin-upgrader.php');
        GPLVault_Admin::gv_update_plugins();
        $skin = new GPLVault_Ajax_Upgrader_Skin();
        $upgrader = new GPLVault_Plugin_Upgrader($skin);
        $result = $upgrader->bulk_upgrade(array($plugin));
        if (defined('WP_DEBUG') && WP_DEBUG) {
            $status['debug'] = $skin->get_upgrade_messages();
        }
        if (is_wp_error($skin->result)) {
            $status['errorCode'] = $skin->result->get_error_code();
            $status['errorMessage'] = $skin->result->get_error_message();
            return new WP_Error($status['errorCode'], $status['errorMessage'], $status);
        } elseif ($skin->get_errors()->has_errors()) {
            $status['errorMessage'] = $skin->get_error_messages();
            return new WP_Error('gv_skin_error', $status['errorMessage'], $status);
        } elseif (is_array($result) && !empty($result[$plugin])) {
            if (true === $result[$plugin]) {
                $status['errorMessage'] = $upgrader->strings['up_to_date'];
                return new WP_Error('gv_up_to_date', $status['errorMessage'], $status);
            }
            $plugin_data = get_plugins('/' . $result[$plugin]['destination_name']);
            $plugin_data = reset($plugin_data);
            if ($plugin_data['Version']) {
                $status['newVersion'] = sprintf(__('Version %s', 'gplvault'), $plugin_data['Version']);
            }
            return $status;
        } elseif (false === $result) {
            global $wp_filesystem;
            $status['errorCode'] = 'unable_to_connect_to_filesystem';
            $status['errorMessage'] = __('Unable to connect to the filesystem. Please confirm your credentials.', 'gplvault');
            if ($wp_filesystem instanceof WP_Filesystem_Base && is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->has_errors()) {
                $status['errorMessage'] = esc_html($wp_filesystem->errors->get_error_message());
            }
            return new WP_Error($status['errorCode'], $status['errorMessage'], $status);
        }
        $status['errorCode'] = 'gv_unhandled_error';
        $status['errorMessage'] = __('Plugin update failed.', 'gplvault');
        return new WP_Error($status['errorCode'], $status['errorMessage'], $status);
    }
    public function update_themes($request_params)
    {
        return $request_params;
    }
}