File "class-gplvault-updater.php"

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

Download   Open   Edit   Advanced Editor   Back

<?php

class GPLVault_Updater
{
    private static $instance;
    private $basename;
    public static function instance()
    {
        if (null === self::$instance) {
            self::$instance = new static();
        }
        return self::$instance;
    }
    private function __construct()
    {
        $this->basename = GPLVault()->plugin_basename();
    }
    public function init()
    {
        if (!is_admin()) {
            return;
        }
        if (gv_settings_manager()->license_is_activated()) {
            $this->init_hooks();
        } else {
            $this->remove_hooks();
        }
    }
    private function init_hooks()
    {
        add_action('gplvault_six_hours_cron', array($this, 'update_client_schema'));
        add_filter('http_request_args', array($this, 'update_check'), 5, 2);
        add_filter('plugins_api', array($this, 'plugins_api'), 10, 3);
        add_filter('pre_set_site_transient_update_plugins', array($this, 'update_plugins'));
        add_filter('pre_set_transient_update_plugins', array($this, 'update_plugins'));
        add_filter('pre_site_transient_update_plugins', array($this, 'update_plugins'));
        add_filter('pre_transient_update_plugins', array($this, 'update_plugins'));
    }
    private function remove_hooks()
    {
        remove_action('gplvault_six_hours_cron', array($this, 'update_client_schema'));
        remove_filter('http_request_args', array($this, 'update_check'), 5, 2);
        remove_filter('plugins_api', array($this, 'plugins_api'), 10, 3);
        remove_filter('pre_set_site_transient_update_plugins', array($this, 'update_plugins'));
        remove_filter('pre_set_transient_update_plugins', array($this, 'update_plugins'));
        remove_filter('pre_site_transient_update_plugins', array($this, 'update_plugins'));
        remove_filter('pre_transient_update_plugins', array($this, 'update_plugins'));
    }
    public function update_client_schema()
    {
        $schema = gv_api_manager()->client_schema();
        if (!is_wp_error($schema) && isset($schema['data'])) {
            gv_settings_manager()->save_client_schema($schema['data']);
        }
    }
    public function update_check($request, $url)
    {
        if (false !== strpos($url, '//api.wordpress.org/plugins/update-check/1.1/')) {
            $data = json_decode($request['body']['plugins']);
            unset($data->plugins->{$this->basename});
            $request['body']['plugins'] = wp_json_encode($data);
        }
        return $request;
    }
    public function plugins_api($result, $action, $args)
    {
        if (isset($args->slug) && GV_UPDATER_SLUG === $args->slug) {
            $schema = $this->get_schema();
            if ($schema) {
                $result = (object) $schema;
            }
        }
        return $result;
    }
    public function update_plugins($transient)
    {
        $schema = $this->get_schema();
        if ($schema && version_compare(GPLVault()->version(), $schema['new_version'], '<')) {
            $transient = is_object($transient) ? $transient : new stdClass();
            $transient->response[GPLVault()->plugin_basename()] = (object) $schema;
        }
        return $transient;
    }
    private function get_schema()
    {
        $schema = gv_settings_manager()->client_schema();
        if (empty($schema)) {
            $schema_response = gv_api_manager()->client_schema();
            if (is_wp_error($schema_response)) {
                return false;
            }
            $schema = $schema_response['data'];
            gv_settings_manager()->save_client_schema($schema);
        }
        return $schema;
    }
}