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_development.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 );
|
||
|
}
|
||
|
}
|
||
|
}
|