152 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
class BdpVersionChecker
 | 
						|
{
 | 
						|
    public $plugin_slug;
 | 
						|
    public $version;
 | 
						|
    public $cache_key;
 | 
						|
    public $cache_allowed;
 | 
						|
    public $updateUrl;
 | 
						|
 | 
						|
    public function __construct()
 | 
						|
    {
 | 
						|
		$plugin_data = get_plugin_data( BDP_LV_STARTUP_FILE );
 | 
						|
	    $this->plugin_slug = BDP_LV_PLUGIN_SLUG;
 | 
						|
        $this->updateUrl = $plugin_data['UpdateURI'] . '/info.json';
 | 
						|
		$this->version = $plugin_data['Version'];
 | 
						|
        $this->cache_key = 'bdp-kompass-upd';
 | 
						|
        $this->cache_allowed = false;
 | 
						|
 | 
						|
        add_filter( 'plugins_api', array( $this, 'info' ), 20, 3 );
 | 
						|
        add_filter( 'site_transient_update_plugins', array( $this, 'update' ) );
 | 
						|
        add_action( 'upgrader_process_complete', array( $this, 'purge' ), 10, 2 );
 | 
						|
    }
 | 
						|
 | 
						|
    public function request(){
 | 
						|
 | 
						|
        $remote = get_transient( $this->cache_key );
 | 
						|
 | 
						|
        if( false === $remote || ! $this->cache_allowed ) {
 | 
						|
 | 
						|
            $remote = wp_remote_get(
 | 
						|
                $this->updateUrl
 | 
						|
                ,
 | 
						|
                array(
 | 
						|
                    'timeout' => 10,
 | 
						|
                    'headers' => array(
 | 
						|
                        'Accept' => 'application/json'
 | 
						|
                    )
 | 
						|
                )
 | 
						|
            );
 | 
						|
 | 
						|
            if(
 | 
						|
                is_wp_error( $remote )
 | 
						|
                || 200 !== wp_remote_retrieve_response_code( $remote )
 | 
						|
                || empty( wp_remote_retrieve_body( $remote ) )
 | 
						|
            ) {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
 | 
						|
            set_transient( $this->cache_key, $remote, 3600 );
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        $remote = json_decode( wp_remote_retrieve_body( $remote ) );
 | 
						|
 | 
						|
        return $remote;
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    function info( $res = '', $action = '', $args = '' )
 | 
						|
    {
 | 
						|
        if (!isset($args->slug) || $args->slug !== $this->plugin_slug) {
 | 
						|
            return $res;
 | 
						|
        }
 | 
						|
 | 
						|
        // get updates
 | 
						|
        $remote = $this->request();
 | 
						|
 | 
						|
        if( ! $remote ) {
 | 
						|
            return $res;
 | 
						|
        }
 | 
						|
 | 
						|
        $newVersion = $remote->version;
 | 
						|
        $res = new stdClass();
 | 
						|
 | 
						|
        $res->name = $remote->name;
 | 
						|
        $res->slug = $remote->slug;
 | 
						|
        $res->version = $newVersion;
 | 
						|
        $res->tested = $remote->tested;
 | 
						|
        $res->requires = $remote->requires;
 | 
						|
        $res->author = $remote->author;
 | 
						|
        $res->author_profile = $remote->author_profile;
 | 
						|
        $res->download_link = $remote->download_url;
 | 
						|
        $res->trunk = $remote->download_url;
 | 
						|
        $res->requires_php = $remote->requires_php;
 | 
						|
        $res->last_updated = $remote->last_updated;
 | 
						|
 | 
						|
        $res->sections = array(
 | 
						|
            'description' => $remote->sections->description,
 | 
						|
            'installation' => $remote->sections->installation,
 | 
						|
            'changelog' => $remote->sections->changelog
 | 
						|
        );
 | 
						|
 | 
						|
        if( ! empty( $remote->banners ) ) {
 | 
						|
            $res->banners = array(
 | 
						|
                'low' => $remote->banners->low,
 | 
						|
                'high' => $remote->banners->high
 | 
						|
            );
 | 
						|
        }
 | 
						|
 | 
						|
        return $res;
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    public function update( $transient ) {
 | 
						|
        if ( empty($transient->checked ) ) {
 | 
						|
            return $transient;
 | 
						|
        }
 | 
						|
 | 
						|
        $remote = $this->request();
 | 
						|
        if(
 | 
						|
            $remote
 | 
						|
            && version_compare( $this->version, $remote->version, '<' )
 | 
						|
            && version_compare( $remote->requires, get_bloginfo( 'version' ), '<=' )
 | 
						|
            && version_compare( $remote->requires_php, PHP_VERSION, '<' )
 | 
						|
        ) {
 | 
						|
 | 
						|
            $newVersion = $remote->version;
 | 
						|
 | 
						|
            $res = new stdClass();
 | 
						|
            $res->slug = $this->plugin_slug;
 | 
						|
            $res->plugin = plugin_basename( BDP_LV_STARTUP_FILE );
 | 
						|
            $res->new_version = $newVersion;
 | 
						|
            $res->tested = $remote->tested;
 | 
						|
            $res->package = $remote->download_url;
 | 
						|
 | 
						|
            $transient->response[ $res->plugin ] = $res;
 | 
						|
 | 
						|
        } else {
 | 
						|
            $res = new stdClass();
 | 
						|
            $res->slug = $this->plugin_slug;
 | 
						|
            $res->plugin = plugin_basename( BDP_LV_STARTUP_FILE );
 | 
						|
            $transient->no_update[ $res->plugin ] = $res;
 | 
						|
        }
 | 
						|
 | 
						|
        return $transient;
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    public function purge( $upgrader, $options ){
 | 
						|
 | 
						|
        if (
 | 
						|
            $this->cache_allowed
 | 
						|
            && 'update' === $options['action']
 | 
						|
            && 'plugin' === $options[ 'type' ]
 | 
						|
        ) {
 | 
						|
            // just clean the cache when new plugin version is installed
 | 
						|
            delete_transient( $this->cache_key );
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |