<?php /** * Custom CSS and JS * */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } /** * CustomCSSandJS_Notices */ class CustomCSSandJS_Notices { var $prefix = 'ccj_'; var $activation_time = ''; var $version = ''; var $dismiss_notice = ''; var $expiration_days = 2; /** * Constructor */ public function __construct() { $this->set_variables(); if ( $this->dismiss_notice == 1 ) { return; } $p = $this->prefix; add_action( 'admin_notices', array( $this, 'admin_notices' ) ); add_action( 'wp_ajax_'.$p.'_notice_dismiss', array( $this, 'notice_dismiss' ) ); } /** * Hooked from 'admin_notices' */ public function admin_notices() { $screen = get_current_screen(); if ( !isset($screen->post_type) || $screen->post_type !== 'custom-css-js' ) return; if ( ! $notice = $this->choose_notice() ) return; if ( time() - $this->activation_time <= 3600 ) return; $message = $this->get_message( $notice ); $this->print_message( $notice, $message ); } /** * Get the options from the database or set them on install or upgrade */ public function set_variables() { $now = time(); $p = $this->prefix; $this->activation_time = get_option( $p . '_activation_time', '' ); $this->version = get_option( $p.'_version', '' ); $this->dismiss_notice = get_option( $p.'_dismiss_notice', false ); if ( empty( $this->activation_time ) || version_compare( $this->version, CCJ_VERSION, '<' ) ) { $this->activation_time = $now; update_option( $p.'_activation_time', $now ); update_option( $p.'_version', CCJ_VERSION ); update_option( $p.'_dismiss_notice', false ); } } /** * Choose which notice to be shown */ public function choose_notice() { $now = time(); $days_passed = floor( ( $now - $this->activation_time ) / 86400 ); switch ( $days_passed ) { case 0 : return '1_day'; case 1 : return '2_day'; case 2 : break; //return '3_day'; case 3 : break; case 4 : break; case 5 : break; case 6 : break; // return '7_day'; case 7 : break; case 8 : break; case 9 : break; case 10 : break; case 11 : break; //return '12_day'; default: break; } } /** * Get the text of the message */ public function get_message( $notice ) { $message = ''; $percentage = '30'; $product_name = 'Simple Custom CSS and JS PRO'; $expiration_date = $this->activation_time + ( $this->expiration_days * 86400 ); $expiration_date = date( get_option( 'date_format') , $expiration_date ); $expiration_period = date('j M', $this->activation_time - 3*86400 ) . ' - ' . date('j M', $this->activation_time + 2*86400 ); if ( $notice == '12_days' ) { $link = 'https://www.silkypress.com/simple-custom-css-js-pro/?utm_source=wordpress&utm_campaign=ccj_free&utm_medium=banner'; } else { $link = 'https://www.silkypress.com/simple-custom-css-js-pro/?a=' . $this->convert_numbers_letters( $this->activation_time ) . '&utm_source=wordpress&utm_campaign=ccj_free&utm_medium=banner'; } $lower_part = sprintf( '<div style="margin-top: 7px;"><a href="%s" target="_blank">%s</a> | <a href="#" class="dismiss_notice" target="_parent">%s</a></div>', $link, __('Get your discount now', 'custom-css-js'), __('Dismiss this notice', 'custom-css-js') ); switch ( $notice ) { case '1_day' : $message = '<div>Only between '. $expiration_period .': <b>'.$percentage.'% Off from <a href="'.$link.'" target="_blank">'.$product_name.'</a></b> for our WordPress.org users.</div>' . $lower_part; break; case '2_day' : $message = '<div><b>Limited offer ending today</b>. '.$percentage.'% Off from <a href="'.$link.'" target="_blank">'.$product_name.'</a> for our WordPress.org users. </div>' . $lower_part; break; case '3_day' : $message = '<div><b>Limited offer ending today</b>. '.$percentage.'% Off from '.$product_name.' for our WordPress.org users. </div>' . $lower_part; break; case '7_day' : $message = ''; break; case '12_day' : $message = '<div><b>Special Offer</b>: 30% Off from '.$product_name.' for our WordPress.org users.</div>' . $lower_part; break; } return $message; } /** * Print the message */ public function print_message( $option_name = '', $message = '' ) { if ( empty( $message ) || empty( $option_name ) ) return; $p = $this->prefix; ?> <style type="text/css"> .<?php echo $p; ?>_note{ color: #bc1117; } #<?php echo $p; ?>_notice { display: block; padding: } #<?php echo $p; ?>_notice b { color: #bc1117; } #<?php echo $p; ?>_notice a { text-decoration: none; font-weight: bold; } #<?php echo $p; ?>_notice a.dismiss_notice { font-weight: normal; } </style> <script type='text/javascript'> jQuery(function($){ $(document).on( 'click', '.<?php echo $p; ?>_notice .dismiss_notice', function() { var data = { action: '<?php echo $p; ?>_notice_dismiss', option: '<?php echo $option_name; ?>', nonce: $(this).parent().parent().data('nonce'), }; $.post(ajaxurl, data, function(response ) { $('#<?php echo $p; ?>_notice').fadeOut('slow'); }); }); }); </script> <div id="<?php echo $p; ?>_notice" class="updated notice <?php echo $p; ?>_notice is-dismissible" data-nonce="<?php echo wp_create_nonce( $this->prefix .'_notice'); ?>"> <p><?php echo $message ?></p> <button type="button" class="notice-dismiss"> <span class="screen-reader-text"><?php _e('Dismiss this notice'); ?></span> </button> </div> <?php } function convert_numbers_letters( $text, $from = 'numbers' ) { $alphabet = str_split('abcdefghij'); $numbers = str_split('0123456789'); if ( $from == 'numbers' ) { return str_replace( $numbers, $alphabet, $text ); } else { return str_replace( $alphabet, $numbers, $text ); } } /** * Ajax response for `notice_dismiss` action */ function notice_dismiss() { $p = $this->prefix; check_ajax_referer( $p . '_notice', 'nonce' ); update_option( $p.'_dismiss_notice', 1 ); wp_die(); } } return new CustomCSSandJS_Notices();