Files
medicalalert-web-reloaded/wp/wp-content/plugins/woocommerce-smart-coupons/includes/class-wc-sc-admin-notifications.php
2024-06-17 16:29:48 -04:00

486 lines
18 KiB
PHP

<?php
/**
* Smart Coupons Admin Notifications
*
* @author StoreApps
* @since 4.0.0
* @version 1.6.0
*
* @package woocommerce-smart-coupons/includes/
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'WC_SC_Admin_Notifications' ) ) {
/**
* Class for handling admin pages of Smart Coupons
*/
class WC_SC_Admin_Notifications {
/**
* Variable to hold instance of WC_SC_Admin_Notifications
*
* @var $instance
*/
private static $instance = null;
/**
* Constructor
*/
private function __construct() {
add_filter( 'plugin_action_links_' . plugin_basename( WC_SC_PLUGIN_FILE ), array( $this, 'plugin_action_links' ) );
add_action( 'wp_ajax_wc_sc_review_notice_action', array( $this, 'wc_sc_review_notice_action' ) );
add_action( 'wp_ajax_wc_sc_40_notice_action', array( $this, 'wc_sc_40_notice_action' ) );
add_action( 'admin_notices', array( $this, 'show_plugin_notice' ) );
// To update footer text on SC screens.
add_filter( 'admin_footer_text', array( $this, 'wc_sc_footer_text' ) );
add_filter( 'update_footer', array( $this, 'wc_sc_update_footer_text' ), 99 );
// To show 'Connect your store' notice of WC Helper on SC pages.
add_filter( 'woocommerce_screen_ids', array( $this, 'add_wc_connect_store_notice_on_sc_pages' ) );
// Show Database update notices.
add_action( 'admin_notices', array( $this, 'admin_db_update_notices' ) );
}
/**
* Get single instance of WC_SC_Admin_Pages
*
* @return WC_SC_Admin_Pages Singleton object of WC_SC_Admin_Pages
*/
public static function get_instance() {
// Check if instance is already exists.
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Handle call to functions which is not available in this class
*
* @param string $function_name The function name.
* @param array $arguments Array of arguments passed while calling $function_name.
* @return result of function call
*/
public function __call( $function_name, $arguments = array() ) {
global $woocommerce_smart_coupon;
if ( ! is_callable( array( $woocommerce_smart_coupon, $function_name ) ) ) {
return;
}
if ( ! empty( $arguments ) ) {
return call_user_func_array( array( $woocommerce_smart_coupon, $function_name ), $arguments );
} else {
return call_user_func( array( $woocommerce_smart_coupon, $function_name ) );
}
}
/**
* Function to add more action on plugins page
*
* @param array $links Existing links.
* @return array $links
*/
public function plugin_action_links( $links ) {
$action_links = array(
'settings' => '<a href="' . esc_url( admin_url( 'admin.php?page=wc-settings&tab=wc-smart-coupons' ) ) . '">' . esc_html__( 'Settings', 'woocommerce-smart-coupons' ) . '</a>',
'faqs' => '<a href="' . esc_url( admin_url( 'admin.php?page=sc-faqs' ) ) . '">' . esc_html__( 'FAQ\'s', 'woocommerce-smart-coupons' ) . '</a>',
'docs' => '<a target="_blank" href="' . esc_url( 'https://woocommerce.com/document/smart-coupons/' ) . '">' . __( 'Docs', 'woocommerce-smart-coupons' ) . '</a>',
'support' => '<a target="_blank" href="' . esc_url( 'https://woocommerce.com/my-account/create-a-ticket/' ) . '">' . __( 'Support', 'woocommerce-smart-coupons' ) . '</a>',
'review' => '<a target="_blank" href="' . esc_url( 'https://woocommerce.com/products/smart-coupons/?review' ) . '">' . __( 'Review', 'woocommerce-smart-coupons' ) . '</a>',
);
return array_merge( $action_links, $links );
}
/**
* Handle Smart Coupons review notice action
*/
public function wc_sc_review_notice_action() {
check_ajax_referer( 'wc-sc-review-notice-action', 'security' );
$post_do = ( ! empty( $_POST['do'] ) ) ? wc_clean( wp_unslash( $_POST['do'] ) ) : ''; // phpcs:ignore
$option = strtotime( '+1 month' );
if ( 'remove' === $post_do ) {
$option = 'no';
}
update_option( 'wc_sc_is_show_review_notice', $option, 'no' );
wp_send_json( array( 'success' => 'yes' ) );
}
/**
* Handle Smart Coupons version 4.0.0 notice action
*/
public function wc_sc_40_notice_action() {
check_ajax_referer( 'wc-sc-40-notice-action', 'security' );
update_option( 'wc_sc_is_show_40_notice', 'no', 'no' );
wp_send_json( array( 'success' => 'yes' ) );
}
/**
* Show plugin review notice
*/
public function show_plugin_notice() {
global $pagenow, $post;
$valid_post_types = array( 'shop_coupon', 'shop_order', 'product' );
$valid_pagenow = array( 'edit.php', 'post.php', 'plugins.php' );
$is_show_review_notice = get_option( 'wc_sc_is_show_review_notice' );
$is_coupon_enabled = get_option( 'woocommerce_enable_coupons' );
$get_post_type = ( ! empty( $post->ID ) ) ? $this->get_post_type( $post->ID ) : '';
$get_page = ( ! empty( $_GET['page'] ) ) ? wc_clean( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore
$get_tab = ( ! empty( $_GET['tab'] ) ) ? wc_clean( wp_unslash( $_GET['tab'] ) ) : ''; // phpcs:ignore
$design = get_option( 'wc_sc_setting_coupon_design', 'basic' );
$is_page = ( in_array( $pagenow, $valid_pagenow, true ) || in_array( $get_post_type, $valid_post_types, true ) || ( 'admin.php' === $pagenow && ( 'wc-smart-coupons' === $get_page || 'wc-smart-coupons' === $get_tab ) ) );
if ( $is_page && 'yes' !== $is_coupon_enabled ) {
?>
<div id="wc_sc_coupon_disabled" class="updated fade error">
<p>
<?php
echo '<strong>' . esc_html__( 'Important', 'woocommerce-smart-coupons' ) . ':</strong> ' . esc_html__( 'Setting "Enable the use of coupon codes" is disabled.', 'woocommerce-smart-coupons' ) . ' ' . sprintf(
'<a href="%s">%s</a>',
esc_url(
add_query_arg(
array(
'page' => 'wc-settings',
'tab' => 'general',
),
admin_url( 'admin.php' )
)
),
esc_html__( 'Enable', 'woocommerce-smart-coupons' )
) . ' ' . esc_html__( 'it to use', 'woocommerce-smart-coupons' ) . ' <strong>' . esc_html__( 'WooCommerce Smart Coupons', 'woocommerce-smart-coupons' ) . '</strong> ' . esc_html__( 'features.', 'woocommerce-smart-coupons' );
?>
</p>
</div>
<?php
}
// Review Notice.
if ( $is_page && ! empty( $is_show_review_notice ) && 'no' !== $is_show_review_notice && time() >= absint( $is_show_review_notice ) ) {
if ( ! wp_script_is( 'jquery' ) ) {
wp_enqueue_script( 'jquery' );
}
?>
<style type="text/css" media="screen">
#wc_sc_review_notice .wc_sc_review_notice_action {
float: right;
padding: 0.5em 0;
text-align: right;
}
</style>
<script type="text/javascript">
jQuery(function(){
jQuery('body').on('click', '#wc_sc_review_notice .wc_sc_review_notice_action a.wc_sc_review_notice_remind', function( e ){
jQuery.ajax({
url: '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>',
type: 'post',
dataType: 'json',
data: {
action: 'wc_sc_review_notice_action',
security: '<?php echo esc_html( wp_create_nonce( 'wc-sc-review-notice-action' ) ); ?>',
do: 'remind'
},
success: function( response ){
if ( response.success != undefined && response.success != '' && response.success == 'yes' ) {
jQuery('#wc_sc_review_notice').fadeOut(500, function(){ jQuery('#wc_sc_review_notice').remove(); });
}
}
});
return false;
});
jQuery('body').on('click', '#wc_sc_review_notice .wc_sc_review_notice_action a.wc_sc_review_notice_remove', function(){
jQuery.ajax({
url: '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>',
type: 'post',
dataType: 'json',
data: {
action: 'wc_sc_review_notice_action',
security: '<?php echo esc_html( wp_create_nonce( 'wc-sc-review-notice-action' ) ); ?>',
do: 'remove'
},
success: function( response ){
if ( response.success != undefined && response.success != '' && response.success == 'yes' ) {
jQuery('#wc_sc_review_notice').fadeOut(500, function(){ jQuery('#wc_sc_review_notice').remove(); });
}
}
});
return false;
});
});
</script>
<div id="wc_sc_review_notice" class="updated fade">
<div class="wc_sc_review_notice_action">
<a href="javascript:void(0)" class="wc_sc_review_notice_remind"><?php echo esc_html__( 'Remind me after a month', 'woocommerce-smart-coupons' ); ?></a><br>
<a href="javascript:void(0)" class="wc_sc_review_notice_remove"><?php echo esc_html__( 'Never show again', 'woocommerce-smart-coupons' ); ?></a>
</div>
<p>
<?php echo esc_html__( 'Awesome, you successfully auto-generated a coupon! Are you having a great experience with', 'woocommerce-smart-coupons' ) . ' <strong>' . esc_html__( 'WooCommerce Smart Coupons', 'woocommerce-smart-coupons' ) . '</strong> ' . esc_html__( 'so far?', 'woocommerce-smart-coupons' ) . '<br>' . esc_html__( 'Please consider', 'woocommerce-smart-coupons' ) . ' <a href="' . esc_url( 'https://woocommerce.com/products/smart-coupons/#reviews' ) . '">' . esc_html__( 'leaving a review', 'woocommerce-smart-coupons' ) . '</a> ' . esc_html__( '! If things aren\'t going quite as expected, we\'re happy to help -- please reach out to', 'woocommerce-smart-coupons' ) . ' <a href="' . esc_url( 'https://woocommerce.com/my-account/create-a-ticket/' ) . '">' . esc_html__( 'our support team', 'woocommerce-smart-coupons' ) . '</a>.'; ?>
</p>
</div>
<?php
}
if ( $is_page && 'custom-design' === $design ) {
?>
<div class="updated fade error" style="background-color: #f0fff0;">
<p>
<?php
echo sprintf(
/* translators: 1: WooCommerce Smart Coupons 2: Link for the Smart Coupons settings */
esc_html__( '%1$s: You are using a custom coupon style which is planned to be removed from the plugin in upcoming versions. New, improved styles & colors are added in the version 4.9.0. We would request you to choose a color scheme & a style for coupon from the newly added colors & styles. You can do this from %2$s.', 'woocommerce-smart-coupons' ),
'<strong>' . esc_html__( 'WooCommerce Smart Coupons', 'woocommerce-smart-coupons' ) . '</strong>',
'<a href="' . esc_url(
add_query_arg(
array(
'page' => 'wc-settings',
'tab' => 'wc-smart-coupons',
),
admin_url( 'admin.php' )
)
) . '" target="_blank">' . esc_html__(
'Smart Coupons settings',
'woocommerce-smart-coupons'
) . '</a>'
);
?>
</p>
</div>
<?php
}
}
/**
* Function to 'Connect your store' notice on Smart Coupons pages in admin
*
* @param string $sc_rating_text Text in footer (left).
* @return string $sc_rating_text
*/
public function wc_sc_footer_text( $sc_rating_text ) {
global $post, $pagenow;
if ( ! empty( $pagenow ) ) {
$get_post_type = ( ! empty( $post->ID ) ) ? $this->get_post_type( $post->ID ) : '';
$get_page = ( ! empty( $_GET['page'] ) ) ? wc_clean( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore
$get_tab = ( ! empty( $_GET['tab'] ) ) ? wc_clean( wp_unslash( $_GET['tab'] ) ) : ''; // phpcs:ignore
$sc_pages = array( 'wc-smart-coupons', 'sc-about', 'sc-faqs' );
if ( in_array( $get_page, $sc_pages, true ) || 'shop_coupon' === $get_post_type || 'wc-smart-coupons' === $get_tab ) {
?>
<style type="text/css">
#wpfooter {
display: block !important;
}
</style>
<?php
/* translators: %s: link to review WooCommerce Smart Coupons */
$sc_rating_text = wp_kses_post( sprintf( __( 'Liked WooCommerce Smart Coupons? Leave us a %s. A huge thank you from WooCommerce & StoreApps in advance!', 'woocommerce-smart-coupons' ), '<a target="_blank" href="' . esc_url( 'https://woocommerce.com/products/smart-coupons/?review' ) . '" style="color: #5850EC;">5-star rating here</a>' ) );
}
}
return $sc_rating_text;
}
/**
* Function to 'Connect your store' notice on Smart Coupons pages in admin
*
* @param string $sc_text Text in footer (right).
* @return string $sc_text
*/
public function wc_sc_update_footer_text( $sc_text ) {
global $post, $pagenow;
if ( ! empty( $pagenow ) ) {
$get_post_type = ( ! empty( $post->ID ) ) ? $this->get_post_type( $post->ID ) : '';
$get_page = ( ! empty( $_GET['page'] ) ) ? wc_clean( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore
$get_tab = ( ! empty( $_GET['tab'] ) ) ? wc_clean( wp_unslash( $_GET['tab'] ) ) : ''; // phpcs:ignore
$sc_pages = array( 'wc-smart-coupons', 'sc-about', 'sc-faqs' );
if ( in_array( $get_page, $sc_pages, true ) || 'shop_coupon' === $get_post_type || 'wc-smart-coupons' === $get_tab ) {
/* translators: %s: link to submit idea for Smart Coupons on WooCommerce idea board */
$sc_text = sprintf( __( 'Have a feature request? Submit it %s.', 'woocommerce-smart-coupons' ), '<a href="' . esc_url( 'https://woocommerce.com/feature-requests/smart-coupons/' ) . '" target="_blank" style="color: #5850EC;">' . __( 'here', 'woocommerce-smart-coupons' ) . '</a>' );
}
}
return $sc_text;
}
/**
* Function to 'Connect your store' notice on Smart Coupons pages in admin
*
* @param array $screen_ids List of existing screen ids.
* @return array $screen_ids
*/
public function add_wc_connect_store_notice_on_sc_pages( $screen_ids ) {
array_push( $screen_ids, 'woocommerce_page_wc-smart-coupons' );
return $screen_ids;
}
/**
* Function to render admin notice
*
* @param string $type Notice type.
* @param string $title Notice title.
* @param string $message Notice message.
* @param string $action Notice actions.
* @param bool $dismissible Notice dismissible.
* @return void.
*/
public function show_notice( $type = 'info', $title = '', $message = '', $action = '', $dismissible = false ) {
$css_classes = array(
'notice',
'notice-' . $type,
);
if ( true === $dismissible ) {
$css_classes[] = 'is-dismissible';
}
?>
<div class="<?php echo esc_attr( implode( ' ', $css_classes ) ); ?>">
<?php
if ( ! empty( $title ) ) {
printf( '<p><strong>%s</strong></p>', esc_html( $title ) );
}
if ( ! empty( $message ) ) {
printf( '<p>%s</p>', esc_html( $message ) );
}
if ( ! empty( $action ) ) {
printf( '<p class="submit">%s</p>', wp_kses_post( $action ) );
}
?>
</div>
<?php
}
/**
* Function to show database update notice
*/
public function admin_db_update_notices() {
if ( ! class_exists( 'WC_SC_Background_Upgrade' ) ) {
include_once 'class-wc-sc-background-upgrade.php';
}
$wcsc_db = WC_SC_Background_Upgrade::get_instance();
$update_status = $wcsc_db->get_status( '4.28.0' );
if ( 'pending' === $update_status ) {
// Notice for pending update.
$this->db_update_pending_notice();
} elseif ( 'processing' === $update_status ) {
// Notice for processing update.
$this->db_update_processing_notice();
} elseif ( 'completed' === $update_status ) {
// Notice for completed update.
$this->db_update_completed_notice();
$wcsc_db->set_status( '4.28.0', 'done' );
}
}
/**
* Function to show pending database update notice
*/
public function db_update_pending_notice() {
global $woocommerce_smart_coupon;
$plugin_version = $woocommerce_smart_coupon->get_smart_coupons_version();
/* translators: %s: Plugin name */
$title = sprintf( __( '%s database update required', 'woocommerce-smart-coupons' ), 'WooCommerce Smart Coupons' );
$message = __( 'The database update process runs in the background and may take a little while, so please be patient.', 'woocommerce-smart-coupons' );
$update_url = wp_nonce_url(
add_query_arg(
array(
'page' => 'wc-settings',
'tab' => 'wc-smart-coupons',
'wc_sc_update' => '4.28.0',
),
admin_url( 'admin.php' )
),
'wc_sc_db_process',
'wc_sc_db_update_nonce'
);
$action_button = sprintf( '<a href="%1$s" class="button button-primary">%2$s</a>', esc_url( $update_url ), __( 'Update database', 'woocommerce-smart-coupons' ) );
$this->show_notice( 'warning', $title, $message, $action_button );
}
/**
* Function to show database update processing notice.
*/
public function db_update_processing_notice() {
if ( 'woocommerce_page_wc-status' === $this->get_current_screen_id() && isset( $_GET['tab'] ) && 'action-scheduler' === wc_clean( wp_unslash( $_GET['tab'] ) ) ) { // phpcs:ignore
return;
}
$actions_url = add_query_arg(
array(
'page' => 'wc-status',
'tab' => 'action-scheduler',
's' => 'move_applied_coupon_options_to_transient',
'status' => 'pending',
),
admin_url( 'admin.php' )
);
$cron_disabled = defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON;
/* translators: %s: Plugin name */
$message = sprintf( __( '%s is updating the database in the background. The database update process may take a little while, so please be patient.', 'woocommerce-smart-coupons' ), 'WooCommerce Smart Coupons' );
if ( true === $cron_disabled ) {
$message .= '<br>' . __( 'Note: WP CRON has been disabled on your install which may prevent this update from completing.', 'woocommerce-smart-coupons' );
}
$action_button = sprintf( '<a href="%1$s" class="button button-secondary">%2$s</a>', esc_url( $actions_url ), __( 'View status', 'woocommerce-smart-coupons' ) );
$this->show_notice( 'info', '', $message, $action_button );
}
/**
* Function to show database update completed notice.
*/
public function db_update_completed_notice() {
/* translators: %s: Plugin name */
$message = sprintf( __( '%s database update completed. Thank you for updating to the latest version!', 'woocommerce-smart-coupons' ), 'WooCommerce Smart Coupons' );
$this->show_notice( 'success', '', $message, '', true );
}
/**
* Function to get current screen id.
*
* @return string.
*/
public function get_current_screen_id() {
$screen = get_current_screen();
return $screen ? $screen->id : '';
}
}
}
WC_SC_Admin_Notifications::get_instance();