Repository URL to install this package:
<?php
/**
* Plugin Changelog class
*/
namespace JET_APB\Updater;
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
die;
}
/**
* Define plugin changelog class.
*
* @since 1.0.0
*/
class Changelog {
private $transient_key = null;
protected $api = array(
'name' => '',
'slug' => '',
'version' => '',
'author' => '',
'homepage' => '',
'requires' => '4.7',
'tested' => '',
'banners' => array(),
'api_url' => 'https://crocoblock.com/wp-content/uploads/jet-changelog/%s.json',
);
/**
* Init.
*
* @since 1.0.0
* @param array $attr Input attributes array.
* @return void
*/
public function __construct( $attr = array() ) {
$this->api = wp_parse_args( $attr, $this->api );
$this->transient_key = $this->api['slug'] . '_plugin_info_data';
add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'delete_transients' ), 50 );
add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 3 );
}
public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
if ( 'plugin_information' !== $_action ) {
return $_data;
}
if ( ! isset( $_args->slug ) || ( $_args->slug !== $this->api['slug'] ) ) {
return $_data;
}
$cache_key = $this->transient_key;
$api_request_transient = get_site_transient( $cache_key );
if ( empty( $api_request_transient ) ) {
$api_response = $this->remote_query();
if ( ! $api_response ) {
return $_data;
}
$api_request_transient = new \stdClass();
$api_request_transient->name = $this->api['name'];
$api_request_transient->slug = $this->api['slug'];
$api_request_transient->author = $this->api['author'];
$api_request_transient->homepage = $this->api['homepage'];
$api_request_transient->requires = $this->api['requires'];
$api_request_transient->tested = $this->api['tested'];
$api_request_transient->banners = $this->api['banners'];
$api_request_transient->version = $api_response->current_version;
$api_request_transient->sections = array(
'changelog' => $api_response->changelog,
);
// Expires in 1 day
set_site_transient( $cache_key, $api_request_transient, DAY_IN_SECONDS );
}
$_data = $api_request_transient;
return $_data;
}
public function delete_transients( $data ) {
$plugin = $this->api['slug'] . '/' . $this->api['slug'] . '.php';
if ( isset( $data->response[ $plugin ]->new_version ) && version_compare( $this->api['version'], $data->response[ $plugin ]->new_version, '<' ) ) {
delete_site_transient( $this->transient_key );
}
return $data;
}
protected function remote_query() {
$response = wp_remote_get( sprintf( $this->api['api_url'], $this->api['slug'] ) );
if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) != '200' ) {
return false;
}
$response = json_decode( $response['body'] );
return $response;
}
public function plugin_row_meta( $plugin_meta, $plugin_file, $plugin_data ) {
$plugin = $this->api['slug'] . '/' . $this->api['slug'] . '.php';
if ( $plugin === $plugin_file && empty( $plugin_data['update'] ) ) {
$plugin_meta['view-details'] = sprintf( '<a href="%s" class="thickbox open-plugin-details-modal" aria-label="%s" data-title="%s">%s</a>',
esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $this->api['slug'] . '&TB_iframe=true&width=600&height=550' ) ),
esc_attr( sprintf( __( 'More information about %s', 'jet-appointments-booking' ), $this->api['name'] ) ),
esc_attr( $this->api['name'] ),
esc_html__( 'View details', 'jet-appointments-booking' )
);
}
return $plugin_meta;
}
}