126 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Notice
 | |
|  *
 | |
|  * @package   easy-digital-downloads
 | |
|  * @copyright Copyright (c) 2021, Sandhills Development, LLC
 | |
|  * @license   GPL2+
 | |
|  * @since     2.10.6
 | |
|  */
 | |
| 
 | |
| namespace EDD\Admin\Promos\Notices;
 | |
| 
 | |
| use EDD\Admin\Promos\PromoHandler;
 | |
| 
 | |
| abstract class Notice {
 | |
| 
 | |
| 	/**
 | |
| 	 * Action hook for displaying the notice.
 | |
| 	 */
 | |
| 	const DISPLAY_HOOK = 'admin_notices';
 | |
| 
 | |
| 	/**
 | |
| 	 * The priority for the display hook.
 | |
| 	 */
 | |
| 	const DISPLAY_PRIORITY = 10;
 | |
| 
 | |
| 	/**
 | |
| 	 * Type of promotional notice.
 | |
| 	 */
 | |
| 	const TYPE = 'top-of-page';
 | |
| 
 | |
| 	/**
 | |
| 	 * Whether or not the notice can be dismissed.
 | |
| 	 */
 | |
| 	const DISMISSIBLE = true;
 | |
| 
 | |
| 	/**
 | |
| 	 * The capability required to view/dismiss the notice.
 | |
| 	 */
 | |
| 	const CAPABILITY = 'manage_options';
 | |
| 
 | |
| 	/**
 | |
| 	 * Displays the notice content.
 | |
| 	 *
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	abstract protected function _display();
 | |
| 
 | |
| 	/**
 | |
| 	 * Generates a unique ID for this notice.
 | |
| 	 * It's the class name (without the namespace) and with underscores converted to hyphens.
 | |
| 	 *
 | |
| 	 * @since 2.10.6
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	public function get_id() {
 | |
| 		return strtolower( str_replace( '_', '-', basename( str_replace( '\\', '/', get_class( $this ) ) ) ) );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Determines whether or not the notice should be displayed.
 | |
| 	 * Typically individual notices should not override this method, as it combines
 | |
| 	 * a dismissal check and custom display logic (`_should_display()`). Custom logic
 | |
| 	 * should go in `_should_display()`.
 | |
| 	 *
 | |
| 	 * @since 2.10.6
 | |
| 	 *
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public function should_display() {
 | |
| 		return current_user_can( static::CAPABILITY ) && ! PromoHandler::is_dismissed( $this->get_id() ) && $this->_should_display();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Duration (in seconds) that the notice is dismissed for.
 | |
| 	 * `0` means it's dismissed permanently.
 | |
| 	 *
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	public static function dismiss_duration() {
 | |
| 		return 0;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Individual notices can override this method to control display logic.
 | |
| 	 *
 | |
| 	 * @since 2.10.6
 | |
| 	 *
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	protected function _should_display() {
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Displays the notice.
 | |
| 	 * Individual notices typically should not override this method, as it contains
 | |
| 	 * all the notice wrapper logic. Instead, notices should override `_display()`
 | |
| 	 *
 | |
| 	 * @since 2.10.6
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	public function display() {
 | |
| 		?>
 | |
| 		<div
 | |
| 			id="edd-admin-notice-<?php echo esc_attr( $this->get_id() ); ?>"
 | |
| 			class="edd-admin-notice-<?php echo esc_attr( sanitize_html_class( static::TYPE ) ); ?> edd-promo-notice"
 | |
| 			data-nonce="<?php echo esc_attr( wp_create_nonce( 'edd-dismiss-notice-' . $this->get_id() ) ); ?>"
 | |
| 			data-id="<?php echo esc_attr( $this->get_id() ); ?>"
 | |
| 			data-lifespan="<?php echo esc_attr( static::dismiss_duration() ); ?>"
 | |
| 		>
 | |
| 			<?php $this->_display(); ?>
 | |
| 
 | |
| 			<?php if ( static::DISMISSIBLE ) : ?>
 | |
| 				<button class="button-link edd-promo-notice-dismiss">
 | |
| 					×
 | |
| 					<span class="screen-reader-text"><?php esc_html_e( 'Dismiss notice', 'easy-digital-downloads' ); ?></span>
 | |
| 				</button>
 | |
| 			<?php endif; ?>
 | |
| 		</div>
 | |
| 		<?php
 | |
| 	}
 | |
| 
 | |
| }
 |