Files

306 lines
11 KiB
PHP

<?php
/**
* BFCM 2025 Banner.
*
* @package Wt_Smart_Coupon
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'Wt_Bfcm_Twenty_Twenty_Five' ) ) {
/**
* Class Wt_Bfcm_Twenty_Twenty_Five
*
* This class is responsible for displaying and handling the Black Friday and Cyber Monday CTA banners for 2025.
*/
class Wt_Bfcm_Twenty_Twenty_Five {
/**
* Banner id.
*
* @var string
*/
private $banner_id = 'wt-bfcm-twenty-twenty-five';
/**
* Banner state option name.
*
* @var string
*/
private static $banner_state_option_name = 'wt_bfcm_twenty_twenty_five_banner_state'; // Banner state, 1: Show, 2: Closed by user, 3: Clicked the grab button.
/**
* Banner state.
*
* @var int
*/
private $banner_state = 1;
/**
* Show banner.
*
* @var bool|null
*/
private static $show_banner = null;
/**
* Ajax action name.
*
* @var string
*/
private static $ajax_action_name = 'wt_bcfm_twenty_twenty_five_banner_state';
/**
* Promotion link.
*
* @var string
*/
private static $promotion_link = 'https://www.webtoffee.com/plugins/?utm_source=BFCM_promotion&utm_medium=Recommendations&utm_campaign=BFCM-Promotion';
/**
* Banner version.
*
* @var string
*/
private static $banner_version = '';
/**
* Constructor.
*/
public function __construct() {
self::$banner_version = WT_U_IEW_VERSION; // Plugin version.
$this->banner_state = get_option( self::$banner_state_option_name ); // Current state of the banner.
$this->banner_state = absint( false === $this->banner_state ? 1 : $this->banner_state );
// Enqueue styles.
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles_and_scripts' ) );
// Add banner.
add_action('admin_notices', array($this, 'show_banner'), 999);
// Ajax hook to save banner state.
add_action( 'wp_ajax_' . self::$ajax_action_name, array( $this, 'update_banner_state' ) );
add_action( 'admin_head-edit.php', array($this, 'show_smart_coupon_BFCM_sbanner') );
// Ajax hook to hide Smart Coupons promotion banner.
add_action( 'wp_ajax_wbte_sc_hide_promotion_banner', array( $this, 'hide_smart_coupon_promotion_banner' ) );
}
/**
* To add the banner styles
*/
public function enqueue_styles_and_scripts() {
wp_enqueue_style( $this->banner_id . '-css', plugin_dir_url( __FILE__ ) . 'assets/css/wt-bfcm-twenty-twenty-five.css', array(), self::$banner_version, 'all' );
$params = array(
'ajax_url' => esc_url_raw( admin_url( 'admin-ajax.php' ) ),
'nonce' => wp_create_nonce( 'wt_bfcm_twenty_twenty_five_banner_nonce' ),
'action' => self::$ajax_action_name,
'cta_link' => self::$promotion_link,
);
wp_enqueue_script( $this->banner_id . '-js', plugin_dir_url( __FILE__ ) . 'assets/js/wt-bfcm-twenty-twenty-five.js', array( 'jquery' ), self::$banner_version, false );
wp_localize_script( $this->banner_id . '-js', 'wt_bfcm_twenty_twenty_five_banner_js_params', $params );
}
public function show_smart_coupon_BFCM_sbanner()
{
global $current_screen;
include_once ABSPATH . 'wp-admin/includes/plugin.php';
$installed_plugins = get_plugins();
// Only show banner if SC Pro is not installed and current page is coupons page.
if ( ! is_object( $current_screen ) || 'shop_coupon' !== $current_screen->post_type || array_key_exists( 'wt-smart-coupon-pro/wt-smart-coupon-pro.php', $installed_plugins ) ) {
return;
}
?>
<script type="text/javascript">
jQuery(document).ready(function($){
<?php
$hidden_banners = get_option( 'wbte_sc_hidden_promotion_banners', array() );
if ( ! defined( 'WBTE_BFCM_SC_COUPONS_PAGE' ) && ! in_array( 'sc_cpns_page', $hidden_banners, true ) ) {
define( 'WBTE_BFCM_SC_COUPONS_PAGE', true );
$campaign_url = 'https://www.webtoffee.com/product/smart-coupons-for-woocommerce/?utm_source=free_plugin_add_coupon_menu&utm_medium=user_import_free&utm_campaign=smart_coupons';
$bulk_plugin_text = sprintf(
'<div data-wbte-sc-promotion-banner-id="sc_cpns_page" class="wbte_sc_promotion_banner_div"><span><img src="%s" style="width: 16px;" /></span>&nbsp;<span class="wbte_sc_promotion_banner_title">%s</span><div class="wbte_sc_promotion_banner_content"><p style="margin: 0; font-size: 14px;"> %s </p><div class="wbte_sc_promotion_banner_actions"> <a class="button button-secondary wbte_sc_promotion_banner_link_btn" href="%s" target="_blank"> %s <span class="dashicons dashicons-arrow-right-alt" style="font-size: 14px; line-height: 1.5;"></span> </a>&ensp;<button type="button" class="button button-secondary wbte_sc_promotion_banner_close wbte_sc_promotion_banner_later"> %s </button></div></div><span class="dashicons dashicons-no-alt wbte_sc_promotion_banner_close wbte_sc_promotion_banner_close_btn"></span></div>',
esc_url( plugin_dir_url(__FILE__) . 'assets/images/idea_bulb_purple.svg' ),
esc_html__( 'Did you know?', 'users-customers-import-export-for-wp-woocommerce' ),
sprintf(
// translators: 1: a tag opening, 2: a tag closing.
__( 'With the %1$s Smart Coupons %2$s plugin, you can create advanced coupons and Buy One Get One Offers for your WooCommerce store.', 'users-customers-import-export-for-wp-woocommerce' ),
'<a href="' . esc_url( $campaign_url ) . '" target="_blank"><b>',
'</b></a>'
),
esc_url( $campaign_url ),
esc_html__( 'Get Plugin Now', 'users-customers-import-export-for-wp-woocommerce' ),
esc_html__( 'Maybe later', 'users-customers-import-export-for-wp-woocommerce' )
);
?>
jQuery( '.page-title-action' ).after( '<?php echo wp_kses_post( $bulk_plugin_text ); ?>' );
// Banner close button callback
$( document ).on('click', '.wbte_sc_promotion_banner_close', function( e ){
e.preventDefault();
const banner_div = $(this).closest('.wbte_sc_promotion_banner_div');
const banner_id = banner_div.attr('data-wbte-sc-promotion-banner-id');
banner_div.css({'opacity': '0.6', 'pointer-events': 'none'});
if( banner_id ) {
$.ajax({
url: '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>',
type: 'POST',
data: {
action: 'wbte_sc_hide_promotion_banner',
banner_id: banner_id,
_wpnonce: '<?php echo esc_js( wp_create_nonce( 'wt_bfcm_twenty_twenty_five_banner_nonce' ) ); ?>'
},
success: function(response) {
banner_div.fadeOut(300, function() {
banner_div.remove();
});
},
error: function() {
banner_div.fadeOut(300, function() {
banner_div.remove();
});
}
});
} else {
banner_div.fadeOut(300, function() {
banner_div.remove();
});
}
});
<?php
}
?>
});
</script>
<?php
}
/**
* Show the banner.
*/
public function show_banner() {
if ( $this->is_show_banner() ) {
?>
<div class="wt-bfcm-banner-2025 notice is-dismissible">
<div class="wt-bfcm-banner-body">
<div class="wt-bfcm-banner-body-img-section">
<img src="<?php echo esc_url( plugin_dir_url( __FILE__ ) . 'assets/images/black-friday-2025.svg' ); ?>" alt="<?php esc_attr_e( 'Black Friday Cyber Monday 2025', 'users-customers-import-export-for-wp-woocommerce' ); ?>">
</div>
<div class="wt-bfcm-banner-body-info">
<div class="wt-bfcm-never-miss-this-deal">
<p><?php echo esc_html__( 'Never Miss This Deal', 'users-customers-import-export-for-wp-woocommerce' ); ?></p>
</div>
<div class="info">
<p>
<?php
printf(
// translators: 1: Discount text with span wrapper, e.g. <span>30% OFF</span>.
esc_html__( 'Your Last Chance to Avail %1$s on WebToffee Plugins. Grab the deal before it`s gone!', 'users-customers-import-export-for-wp-woocommerce' ),
'<span>30% ' . esc_html__( 'OFF', 'users-customers-import-export-for-wp-woocommerce' ) . '</span>'
);
?>
</p>
</div>
<div class="info-button">
<a href="<?php echo esc_url( self::$promotion_link ); ?>" class="bfcm_cta_button" target="_blank"><?php echo esc_html__( 'View plugins', 'users-customers-import-export-for-wp-woocommerce' ); ?> <span class="dashicons dashicons-arrow-right-alt"></span></a>
</div>
</div>
</div>
</div>
<?php
}
}
/**
* Check if the banner should be shown.
*
* @return bool
*/
public function is_show_banner() {
// Check if the current date is less than the start date then wait for the start date.
// Check any of the basic plugins for BFCM season
$bfcm_season = false;
if ( class_exists( 'Wt_Import_Export_For_Woo_User_Basic' ) && method_exists( 'Wt_Import_Export_For_Woo_User_Basic', 'is_bfcm_season' ) ) {
$bfcm_season = Wt_Import_Export_For_Woo_User_Basic::is_bfcm_season();
} elseif ( class_exists( 'Wt_Import_Export_For_Woo_Product_Basic' ) && method_exists( 'Wt_Import_Export_For_Woo_Product_Basic', 'is_bfcm_season' ) ) {
$bfcm_season = Wt_Import_Export_For_Woo_Product_Basic::is_bfcm_season();
} elseif ( class_exists( 'Wt_Import_Export_For_Woo_Order_Basic' ) && method_exists( 'Wt_Import_Export_For_Woo_Order_Basic', 'is_bfcm_season' ) ) {
$bfcm_season = Wt_Import_Export_For_Woo_Order_Basic::is_bfcm_season();
}
if ( ! $bfcm_season ) {
return self::$show_banner = false;
}
// Already checked.
if ( ! is_null( self::$show_banner ) ) {
return self::$show_banner;
}
// Check current banner state.
if ( 1 !== $this->banner_state ) {
self::$show_banner = false;
return self::$show_banner;
}
// Check screens.
$screen = get_current_screen();
$screen_id = $screen ? $screen->id : '';
/**
* Pages to show this black friday and cyber monday banner for 2025.
*
* @since 1.1.0
* @param string[] Default screen ids
*/
$screens_to_show = (array) apply_filters( 'wt_bfcm_banner_screens', array() );
self::$show_banner = in_array( $screen_id, $screens_to_show, true );
return self::$show_banner;
}
/**
* Update banner state ajax hook
*/
public function update_banner_state() {
check_ajax_referer( 'wt_bfcm_twenty_twenty_five_banner_nonce' );
if ( isset( $_POST['wt_bfcm_twenty_twenty_five_banner_action_type'] ) ) {
$action_type = absint( sanitize_text_field( wp_unslash( $_POST['wt_bfcm_twenty_twenty_five_banner_action_type'] ) ) );
if ( in_array( $action_type, array( 2, 3 ), true ) ) {
update_option( self::$banner_state_option_name, $action_type );
}
}
wp_send_json_success();
}
/**
* Hide Smart Coupons promotion banner
*
* @since 2.6.7
*/
public function hide_smart_coupon_promotion_banner() {
check_ajax_referer( 'wt_bfcm_twenty_twenty_five_banner_nonce', '_wpnonce' );
$hided_banners = get_option( 'wbte_sc_hidden_promotion_banners', array() );
$hided_banners[] = isset( $_POST['banner_id'] ) ? sanitize_text_field( wp_unslash( $_POST['banner_id'] ) ) : '';
update_option( 'wbte_sc_hidden_promotion_banners', $hided_banners );
wp_send_json_success();
}
}
new Wt_Bfcm_Twenty_Twenty_Five();
}