File "class-gplvault-items.php"

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

Download   Open   Edit   Advanced Editor   Back

<?php

defined('ABSPATH') || exit;
class GPLVault_Items
{
    protected static $singleton;
    protected $settings;
    private $api;
    public static function instance()
    {
        return new static();
    }
    private function __construct()
    {
    }
    private function __clone()
    {
    }
    public function __wakeup()
    {
    }
    public function init()
    {
        $this->settings = GPLVault_Settings_Manager::instance();
        $this->api = GPLVault_API_Manager::instance();
        if ($this->settings->license_is_activated()) {
            $this->init_hooks();
        } else {
            $this->remove_hooks();
        }
    }
    private function init_hooks()
    {
        add_filter('http_request_args', array($this, 'update_check'), 5, 2);
        add_action('deleted_plugin', array(__CLASS__, 'deleted_plugin'), 10, 2);
        add_filter('all_plugins', array($this, 'rewrite_plugin_data'));
        add_filter('pre_set_site_transient_update_plugins', array($this, 'update_plugins'), PHP_INT_MAX, 1);
        add_filter('pre_set_transient_update_plugins', array($this, 'update_plugins'), PHP_INT_MAX, 1);
        add_filter('site_transient_update_plugins', array($this, 'update_plugins'), PHP_INT_MAX, 1);
        add_filter('pre_set_site_transient_update_themes', array($this, 'update_themes'), 999999999);
        add_filter('pre_set_transient_update_themes', array($this, 'update_themes'), 999999999);
        add_filter('site_transient_update_themes', array($this, 'update_themes'), 999999999);
        add_filter('site_transient_update_plugins', array($this, 'disable_update_plugins'), 999999997);
        add_filter('site_transient_update_themes', array($this, 'disable_update_themes'), 999999997);
        add_filter('plugins_api', array($this, 'plugins_api'), 999999999, 3);
        add_filter('themes_api', array($this, 'themes_api'), 999999999, 3);
        add_filter('upgrader_pre_download', array($this, 'disable_upgrader_pre_download'), 999999999, 3);
        add_filter('upgrader_package_options', array($this, 'maybe_deferred_package'), 50);
    }
    private function remove_hooks()
    {
        remove_filter('http_request_args', array($this, 'update_check'), 5);
        remove_action('deleted_plugin', array(__CLASS__, 'deleted_plugin'), 10);
        remove_filter('all_plugins', array($this, 'rewrite_plugin_data'));
        remove_filter('pre_set_site_transient_update_plugins', array($this, 'update_plugins'), 999999999);
        remove_filter('pre_set_transient_update_plugins', array($this, 'update_plugins'), 999999999);
        remove_filter('site_transient_update_plugins', array($this, 'update_plugins'), 999999999);
        remove_filter('pre_set_site_transient_update_themes', array($this, 'update_themes'), 999999999);
        remove_filter('pre_set_transient_update_themes', array($this, 'update_themes'), 999999999);
        remove_filter('site_transient_update_themes', array($this, 'update_themes'), 999999999);
        remove_filter('site_transient_update_plugins', array($this, 'disable_update_plugins'), 999999997);
        remove_filter('site_transient_update_themes', array($this, 'disable_update_themes'), 999999997);
        remove_filter('plugins_api', array($this, 'plugins_api'), 999999999);
        remove_filter('themes_api', array($this, 'themes_api'), 999999999);
        remove_filter('upgrader_pre_download', array($this, 'disable_upgrader_pre_download'), 999999999);
        remove_filter('upgrader_package_options', array($this, 'maybe_deferred_package'), 50);
    }
    public function maybe_deferred_package($options)
    {
        $package = $options['package'];
        if (false !== strrpos($package, 'gv_delayed_download') && false !== strrpos($package, 'gv_item_id')) {
            parse_str(wp_parse_url($package, PHP_URL_QUERY), $vars);
            if ($vars['gv_item_id']) {
                $options['package'] = $this->api->set_initials()->download(array('product_id' => $vars['gv_item_id']));
            }
        }
        return $options;
    }
    public function update_check($request, $url)
    {
        if (false !== strpos($url, '//api.wordpress.org/themes/update-check/1.1/')) {
            $installed_themes = $this->installed_themes();
            $data = json_decode($request['body']['themes']);
            foreach ($installed_themes as $slug => $theme) {
                unset($data->themes->{$slug});
            }
            $request['body']['themes'] = wp_json_encode($data);
        }
        if (false !== strpos($url, '//api.wordpress.org/plugins/update-check/1.1/')) {
            $installed_plugins = $this->installed_plugins();
            $data = json_decode($request['body']['plugins']);
            foreach ($installed_plugins as $slug => $plugin) {
                unset($data->plugins->{$slug});
            }
            $request['body']['plugins'] = wp_json_encode($data);
        }
        return $request;
    }
    public function rewrite_plugin_data($w_plugins)
    {
        $gv_plugins = GPLVault_Helper::gv_plugins();
        foreach ($w_plugins as $plugin_file => $plugin_data) {
            if (isset($gv_plugins[$plugin_file])) {
                $gv_item = $gv_plugins[$plugin_file];
                $plugin_data['id'] = $gv_item['product_id'];
                $plugin_data['slug'] = $gv_item['slug'];
                $w_plugins[$plugin_file] = $plugin_data;
            }
        }
        return $w_plugins;
    }
    public function update_plugins($transient)
    {
        $all_plugins = GPLVault_Helper::all_plugins();
        $gv_plugins = $this->installed_plugins();
        if (empty($gv_plugins)) {
            return $transient;
        }
        $transient = isset($transient) && is_object($transient) ? $transient : new stdClass();
        foreach ($gv_plugins as $plugin_file => $p_data) {
            if (isset($all_plugins[$plugin_file])) {
                if (version_compare($all_plugins[$plugin_file]['Version'], $p_data['version'], '<')) {
                    $package_url = gv_api_manager()->deferred_download($p_data['product_id']);
                    $data = new stdClass();
                    $data->slug = $p_data['slug'];
                    $data->plugin = $plugin_file;
                    $data->new_version = $p_data['version'];
                    $data->url = isset($p_data['url']) ? esc_url($p_data['url']) : '';
                    $data->package = $package_url ? $package_url : '';
                    $transient->response[$plugin_file] = $data;
                } else {
                    if (isset($transient->response[$plugin_file])) {
                        unset($transient->response[$plugin_file]);
                    }
                }
            }
        }
        return $transient;
    }
    public function update_themes($transient)
    {
        $all_themes = GPLVault_Helper::all_themes();
        $themes = $this->installed_themes();
        if (empty($themes)) {
            return $transient;
        }
        foreach ($all_themes as $key => $theme) {
            if (isset($themes[$key])) {
                if ($theme->exists()) {
                    if (version_compare($theme->get('Version'), $themes[$key]['version'], '<')) {
                        $theme_url = $this->api->deferred_download($themes[$key]['product_id']);
                        $transient = isset($transient) && is_object($transient) ? $transient : new stdClass();
                        $transient->response[$key] = array('theme' => $key, 'new_version' => $themes[$key]['version'], 'url' => $themes[$key]['url'] ? $themes[$key]['url'] : '', 'package' => $theme_url ? $theme_url : '');
                    } else {
                        if (isset($transient->response[$key])) {
                            unset($transient->response[$key]);
                        }
                    }
                }
            }
        }
        return $transient;
    }
    public function disable_update_plugins($transient)
    {
        return $transient;
    }
    public function disable_update_themes($transient)
    {
        return $transient;
    }
    public function plugins_api($response, $action, $args)
    {
        $installed_plugins = $this->installed_plugins();
        if (!empty($installed_plugins)) {
            if ('plugin_information' === $action && isset($args->slug)) {
                foreach ($installed_plugins as $key => $plugin) {
                    if ($plugin['slug'] === $args->slug) {
                        $plugin_file = $this->api->deferred_download($plugin['product_id']);
                        $response = new stdClass();
                        $response->slug = $args->slug;
                        $response->name = !empty($plugin['short_name']) ? $plugin['short_name'] : $plugin['name'];
                        $response->plugin_name = $plugin['plugin_basename'];
                        $response->version = $plugin['version'];
                        $response->author = $plugin['author'];
                        $response->homepage = isset($plugin['url']) ? $plugin['url'] : '';
                        if (isset($plugin['last_updated']) && $plugin['last_updated']) {
                            $response->last_updated = $plugin['last_updated'];
                        }
                        $response->requires = $plugin['wp_version'] ?? '';
                        $response->tested = $plugin['wp_version_tested'] ?? '';
                        $response->sections = array('description' => wp_strip_all_tags($plugin['description']));
                        $response->download_link = $plugin_file ? $plugin_file : '';
                        break;
                    }
                }
            }
        }
        return $response;
    }
    public function themes_api($response, $action, $args)
    {
        $installed_themes = $this->installed_themes();
        if (!empty($installed_themes)) {
            if ('theme_information' === $action && isset($args->slug)) {
                foreach ($installed_themes as $key => $theme_data) {
                    if ($theme_data['slug'] === $args->slug) {
                        $theme_file = $this->api->deferred_download($theme_data['product_id']);
                        $response = new stdClass();
                        $response->slug = $args->slug;
                        $response->name = !empty($theme_data['short_name']) ? $theme_data['short_name'] : $theme_data['name'];
                        $response->version = $theme_data['version'];
                        $response->author = $theme_data['author'];
                        if (isset($theme_data['last_updated']) && $theme_data['last_updated']) {
                            $response->last_updated = $theme_data['last_updated'];
                        }
                        $response->requires = $theme_data['wp_version'];
                        $response->requires_php = $theme_data['php_version'];
                        $response->sections = array('description' => wp_strip_all_tags($theme_data['description']));
                        $response->download_link = $theme_file ? $theme_file : '';
                        break;
                    }
                }
            }
        }
        return $response;
    }
    public function disable_upgrader_pre_download($reply, $package, $upgrader)
    {
        return false;
    }
    public static function deleted_plugin($plugin_file, $is_deleted)
    {
        if (!$is_deleted) {
            return;
        }
        $gv_plugins = GPLVault_Helper::gv_plugins(false);
        if (!isset($gv_plugins[$plugin_file])) {
            return;
        }
        $gv_plugins_option = gv_settings_manager()->get_available_plugins();
        unset($gv_plugins_option[$plugin_file]);
        gv_settings_manager()->update_plugins_catalog($gv_plugins_option);
    }
    private function installed_themes()
    {
        return GPLVault_Helper::gv_themes();
    }
    private function installed_plugins()
    {
        $all_plugins = GPLVault_Helper::gv_plugins();
        unset($all_plugins[GPLVault()->plugin_basename()]);
        return $all_plugins;
    }
}