File: /home/pclast/public_html/wp-content/plugins/wp-rocket/inc/classes/admin/class-updater.php
<?php
if ( class_exists( 'Diamond_Rocket_Updater' ) ) {
return;
}
class Diamond_Rocket_Updater {
/**
* Name of the product
*
*/
private $product = null;
/**
* Name of the store
*
*/
private $store = null;
/**
* Name of the transient
*
*/
private $transient = null;
/**
* URL of promotions json file
*
*/
private $remote_url = null;
/**
* Current version of product
*
*/
private $version = null;
/**
* The single instance of the class.
*
* @var Diamond_Rocket_Updater
*/
protected static $_instance = null;
/**
* ZHK_Refund_Order constructor.
*/
public function __construct( $product_name, $product_version, $promotion_url, $store_name ) {
$this->product = $product_name;
$this->store = $store_name;
$this->transient = $store_name . '_' . $product_name;
$this->remote_url = $promotion_url;
$this->version = $product_version;
}
/**
* Main Class Instance.
*
* Ensures only one instance of this class is loaded or can be loaded.
*
* @static
* @return Diamond_Rocket_Updater - Main instance.
*/
public static function instance( $product_name, $product_version, $promotion_url, $store_name ) {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self( $product_name, $product_version, $promotion_url, $store_name );
}
return self::$_instance;
}
public function admin_notice() {
$promotions = get_transient( $this->transient );
if ( $promotions === false ) {
$response = wp_remote_get( $this->remote_url );
if ( ! is_wp_error( $response ) ) {
$body = wp_remote_retrieve_body( $response );
$promotions = json_decode( $body, true );
set_transient( $this->transient, $promotions, 86400 );
}
}
$show_promotions = [];
$update_messages = [];
// Get general promotions
if ( isset( $promotions['general'] ) && ! empty( $promotions['general'] ) ) {
foreach ( $promotions['general'] as $promotion ) {
$show_promotions[] = $promotion;
}
}
// Get specific product promotions
if ( isset( $promotions['products'] ) && ! empty( $promotions['products'] ) ) {
foreach ( $promotions['products'] as $product_promotion ) {
if ( $product_promotion['product'] === $this->product ) {
$show_promotions[] = $product_promotion;
}
}
}
// Get update messages
if ( isset( $promotions['update'] ) && ! empty( $promotions['update'] ) ) {
if ( array_key_exists( $this->product, $promotions['update'] ) ) {
if ( version_compare( $this->version, $promotions['update'][ $this->product ]['version'], '<' ) ) {
$update_messages[] = $promotions['update'][ $this->product ];
}
}
}
if ( ! empty( $show_promotions ) ) {
foreach ( $show_promotions as $show_promotion ) {
$class = $this->store . '_promotions notice notice-' . $show_promotion['type'];
$unique_promo_id = $this->store . '-notice-' . md5( $show_promotion['id'] );
if ( isset( $_COOKIE[ $unique_promo_id ] ) && ! empty( $_COOKIE[ $unique_promo_id ] ) && $_COOKIE[ $unique_promo_id ] === 'hide' ) {
continue;
}
if ( isset( $show_promotion['expire'] ) && ! empty( $show_promotion['expire'] ) && time() > strtotime( $show_promotion['expire'] ) ) {
continue;
}
if ( isset( $show_promotion['start'] ) && ! empty( $show_promotion['start'] ) && time() < strtotime( $show_promotion['start'] ) ) {
continue;
}
?>
<div class="<?php echo $class ?>" style="position: relative;">
<?php if ( isset( $show_promotion['image'] ) && ! empty( $show_promotion['image'] ) ): ?>
<img src="<?php echo $show_promotion['image']; ?>" alt=""
style="float: right; height: auto; margin: 10px 0 10px 20px;">
<?php endif; ?>
<h3><?php echo $show_promotion['title'] ?></h3>
<p>
<?php echo $show_promotion['description'] ?>
<button type="button" class="notice-dismiss" data-id="<?php echo $unique_promo_id ?>">
<span class="screen-reader-text">Dismiss this notice.</span>
</button>
</p>
<p class="submit">
<a href="<?php echo esc_url( $show_promotion['button_url'] ); ?>" class="button-primary"
target="_blank">
<?php echo $show_promotion['button_text']; ?>
</a>
</p>
<?php if ( isset( $show_promotion['image'] ) && ! empty( $show_promotion['image'] ) ): ?>
<div style="clear: both;"></div>
<?php endif; ?>
</div>
<?php
}
?>
<script>
(function ($) {
$(document).on('click', '.<?php echo $this->store; ?>_promotions .notice-dismiss', function () {
var promoId = $(this).data('id');
document.cookie = promoId + "=hide;path=/";
$(this).parents('.<?php echo $this->store; ?>_promotions').hide(300);
});
})(jQuery);
</script>
<?php
}
if ( ! empty( $update_messages ) ) {
foreach ( $update_messages as $update_message ) {
?>
<div class="update-nag">
<?php echo $update_message['description'] ?>
<a href="<?php echo esc_url( $update_message['button_url'] ); ?>" class="button-secondary"
target="_blank">
<?php echo $update_message['button_text']; ?>
</a>
</div>
<?php
}
}
}
}