| Current File : /home/digitaw/www/wp-content/plugins/simple-history/dropins/class-sidebar-email-promo-dropin.php |
<?php
namespace Simple_History\Dropins;
use Simple_History\Helpers;
/**
* Dropin that adds a promotional card to the sidebar promoting the weekly email summary feature.
*
* The card is shown to users who:
* - Have the 'manage_options' capability (typically admins)
* - Haven't enabled email reports yet
* - Haven't dismissed the promotional card
* - Both free and premium users (to raise awareness of the feature)
*
* HOW TO FORCE THE PROMO CARD TO SHOW AGAIN (for testing):
*
* If you have dismissed the card and want to see it again, or want to test the feature,
* you need to:
*
* 1. Disable email reports (if enabled)
* 2. Remove the dismissal user meta
*
* Using WP-CLI:
*
* ```bash
* # Disable email reports
* wp option update simple_history_email_report_enabled false
*
* # Remove the dismissal user meta (replace <user-id> with your user ID, e.g., 1)
* wp user meta delete <user-id> simple_history_email_promo_dismissed
* ```
*
* Example for user ID 1:
* ```bash
* wp option update simple_history_email_report_enabled false
* wp user meta delete 1 simple_history_email_promo_dismissed
* ```
*
* Using Docker Compose (if you're using the local development environment):
* ```bash
* docker compose run --rm wpcli_mariadb option update simple_history_email_report_enabled false
* docker compose run --rm wpcli_mariadb user meta delete 1 simple_history_email_promo_dismissed
* ```
*/
class Sidebar_Email_Promo_Dropin extends Dropin {
/** @var string User meta key for storing dismissal timestamp */
const DISMISSED_USER_META_KEY = 'simple_history_email_promo_dismissed';
/** @var string AJAX action for dismissing the promo card */
const AJAX_ACTION = 'simple_history_dismiss_email_promo';
/**
* Called when dropin is loaded.
*/
public function loaded() {
// Priority 3 to show after Black Week sale (priority 1) but before stats (priority 5).
add_action( 'simple_history/dropin/sidebar/sidebar_html', [ $this, 'on_sidebar_html' ], 3 );
add_action( 'simple_history/enqueue_admin_scripts', [ $this, 'enqueue_scripts' ] );
add_action( 'wp_ajax_' . self::AJAX_ACTION, [ $this, 'ajax_dismiss_promo' ] );
}
/**
* Enqueue scripts for the email promo card.
*/
public function enqueue_scripts() {
if ( ! $this->should_show_promo() ) {
return;
}
wp_enqueue_script(
'simple-history-email-promo',
SIMPLE_HISTORY_DIR_URL . 'js/email-promo.js',
[ 'jquery' ],
SIMPLE_HISTORY_VERSION,
true
);
wp_localize_script(
'simple-history-email-promo',
'simpleHistoryEmailPromo',
[
'nonce' => wp_create_nonce( self::AJAX_ACTION ),
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'action' => self::AJAX_ACTION,
]
);
}
/**
* Check if the promotional card should be shown.
*
* @return bool True if card should be shown, false otherwise.
*/
private function should_show_promo() {
// Only show to users with manage_options capability (typically admins).
if ( ! current_user_can( 'manage_options' ) ) {
return false;
}
// Don't show if email reports are already enabled.
$email_reports_enabled = get_option( 'simple_history_email_report_enabled', false );
if ( $email_reports_enabled ) {
return false;
}
// Don't show if user has dismissed the promo.
$dismissed = get_user_meta( get_current_user_id(), self::DISMISSED_USER_META_KEY, true );
if ( $dismissed ) {
return false;
}
return true;
}
/**
* Output the promotional card HTML in the sidebar.
*/
public function on_sidebar_html() {
if ( ! $this->should_show_promo() ) {
return;
}
// Settings page URL with anchor to email report settings section.
$settings_url = Helpers::get_settings_page_url() . '#simple_history_email_report_section';
?>
<div class="postbox sh-EmailPromoCard sh-PremiumFeaturesPostbox" id="simple-history-email-promo-card" style="--box-bg-color: var(--sh-color-cream);">
<div class="inside">
<div class="sh-EmailPromoCard-badge">
<span class="sh-Badge sh-Badge--new" style="background-color: transparent; color: var(--sh-color-blue);"><?php esc_html_e( 'New!', 'simple-history' ); ?></span>
</div>
<a href="<?php echo esc_url( $settings_url ); ?>" class="sh-EmailPromoCard-badgeImageLink">
<img class="sh-EmailPromoCard-badgeImage" src="<?php echo esc_url( SIMPLE_HISTORY_DIR_URL . 'assets/images/email-reports-badge.svg' ); ?>" alt="">
</a>
<p class="sh-EmailPromoCard-text sh-EmailPromoCard-text--intro">
<strong><?php esc_html_e( 'Know what\'s happening — without logging in.', 'simple-history' ); ?></strong>
</p>
<p class="sh-EmailPromoCard-text">
<?php esc_html_e( 'Get a weekly digest with login stats, content changes, and plugin activity.', 'simple-history' ); ?>
</p>
<div class="sh-EmailPromoCard-actions">
<a href="<?php echo esc_url( $settings_url ); ?>" class="sh-PremiumFeaturesPostbox-button sh-EmailPromoCard-cta" data-dismiss-on-click="true">
<?php esc_html_e( 'Get Weekly Digest', 'simple-history' ); ?>
</a>
<button type="button" class="sh-EmailPromoCard-dismiss button-link">
<?php esc_html_e( 'Maybe later', 'simple-history' ); ?>
</button>
</div>
</div>
</div>
<?php
}
/**
* AJAX handler for dismissing the promotional card.
*/
public function ajax_dismiss_promo() {
// Verify nonce.
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), self::AJAX_ACTION ) ) {
wp_send_json_error( [ 'message' => __( 'Invalid nonce', 'simple-history' ) ], 403 );
}
// Store dismissal timestamp in user meta (ISO8601 format for human readability).
$user_id = get_current_user_id();
$dismissed = update_user_meta( $user_id, self::DISMISSED_USER_META_KEY, gmdate( 'c' ) );
if ( $dismissed ) {
wp_send_json_success( [ 'message' => __( 'Promo dismissed successfully', 'simple-history' ) ] );
} else {
wp_send_json_error( [ 'message' => __( 'Failed to dismiss promo', 'simple-history' ) ] );
}
}
}