138 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						||
/**
 | 
						||
 * Ask Review Notice.
 | 
						||
 *
 | 
						||
 * @package visual-portfolio
 | 
						||
 */
 | 
						||
 | 
						||
if ( ! defined( 'ABSPATH' ) ) {
 | 
						||
	exit;
 | 
						||
}
 | 
						||
 | 
						||
/**
 | 
						||
 * Class Visual_Portfolio_Ask_Review_Notice
 | 
						||
 */
 | 
						||
class Visual_Portfolio_Ask_Review_Notice {
 | 
						||
	/**
 | 
						||
	 * Option name.
 | 
						||
	 *
 | 
						||
	 * @var string
 | 
						||
	 */
 | 
						||
	public $option_name = 'vpf_ask_review_notice';
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Visual_Portfolio_Ask_Review_Notice constructor.
 | 
						||
	 */
 | 
						||
	public function __construct() {
 | 
						||
		add_action( 'admin_notices', array( $this, 'admin_notices' ) );
 | 
						||
		add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
 | 
						||
		add_action( 'wp_ajax_vpf_dismiss_ask_review_notice', array( $this, 'ajax_vpf_dismiss_ask_review_notice' ) );
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Check if we can display notice.
 | 
						||
	 */
 | 
						||
	public function is_notice_allowed() {
 | 
						||
		$state = get_site_option( $this->option_name . '_state' );
 | 
						||
		$time  = (int) get_site_option( $this->option_name . '_time' );
 | 
						||
 | 
						||
		if ( 'yes' === $state || 'already' === $state ) {
 | 
						||
			return false;
 | 
						||
		}
 | 
						||
 | 
						||
		// Save current time if nothing saved.
 | 
						||
		if ( ! $time ) {
 | 
						||
			$time = time();
 | 
						||
			update_site_option( $this->option_name . '_time', $time );
 | 
						||
		}
 | 
						||
 | 
						||
		// Allow notice if plugin used for more then 2 weeks.
 | 
						||
		if ( $time < strtotime( '-14 days' ) ) {
 | 
						||
			return true;
 | 
						||
		}
 | 
						||
 | 
						||
		return false;
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Display admin notice if needed.
 | 
						||
	 */
 | 
						||
	public function admin_notices() {
 | 
						||
		if ( ! $this->is_notice_allowed() ) {
 | 
						||
			return;
 | 
						||
		}
 | 
						||
		?>
 | 
						||
		<div class="notice notice-info vpf-admin-notice" id="vpf-review-plugin-notice">
 | 
						||
			<div class="vpf-admin-notice-icon">
 | 
						||
				<i class="dashicons-visual-portfolio"></i>
 | 
						||
			</div>
 | 
						||
			<div class="vpf-admin-notice-content">
 | 
						||
				<h3><?php esc_html_e( 'Satisfied using Visual Portfolio?', 'visual-portfolio' ); ?></h3>
 | 
						||
				<p>
 | 
						||
					<?php
 | 
						||
						// translators: %s - Plugin name.
 | 
						||
						echo wp_kses_post( sprintf( __( 'Hey, we noticed you\'ve been using %s for more than two weeks now – that\'s awesome!', 'visual-portfolio' ), '<strong>' . _x( 'Visual Portfolio', 'plugin name inside the review notice', 'visual-portfolio' ) . '</strong>' ) );
 | 
						||
					?>
 | 
						||
					<br>
 | 
						||
					<?php esc_html_e( 'Could you please do us a BIG favor and give it a rating on WordPress.org to help us spread the word and boost our motivation?', 'visual-portfolio' ); ?>
 | 
						||
				</p>
 | 
						||
				<p>
 | 
						||
					<a href="https://wordpress.org/support/plugin/visual-portfolio/reviews/?filter=5#new-post" class="vpf-review-plugin-notice-dismiss" data-vpf-review-action="yes" target="_blank" rel="noopener noreferrer">
 | 
						||
						<strong>
 | 
						||
							<?php esc_html_e( 'Yes, you deserve it', 'visual-portfolio' ); ?>
 | 
						||
						</strong>
 | 
						||
					</a>
 | 
						||
					<br>
 | 
						||
					<a href="#" class="vpf-review-plugin-notice-dismiss" data-vpf-review-action="later">
 | 
						||
						<?php esc_html_e( 'No, maybe later', 'visual-portfolio' ); ?>
 | 
						||
					</a><br>
 | 
						||
					<a href="#" class="vpf-review-plugin-notice-dismiss" data-vpf-review-action="already">
 | 
						||
						<?php esc_html_e( 'I already did', 'visual-portfolio' ); ?>
 | 
						||
					</a>
 | 
						||
				</p>
 | 
						||
			</div>
 | 
						||
		</div>
 | 
						||
		<?php
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Enqueue script.
 | 
						||
	 */
 | 
						||
	public function admin_enqueue_scripts() {
 | 
						||
		if ( is_customize_preview() ) {
 | 
						||
			return;
 | 
						||
		}
 | 
						||
 | 
						||
		Visual_Portfolio_Assets::enqueue_script( 'visual-portfolio-ask-review-notice', 'build/assets/admin/js/ask-review-notice' );
 | 
						||
		wp_localize_script(
 | 
						||
			'visual-portfolio-ask-review-notice',
 | 
						||
			'VPAskReviewNotice',
 | 
						||
			array(
 | 
						||
				'nonce' => wp_create_nonce( $this->option_name ),
 | 
						||
			)
 | 
						||
		);
 | 
						||
	}
 | 
						||
 | 
						||
	/**
 | 
						||
	 * Handles Ajax request to persist notices dismissal.
 | 
						||
	 * Uses check_ajax_referer to verify nonce.
 | 
						||
	 */
 | 
						||
	public function ajax_vpf_dismiss_ask_review_notice() {
 | 
						||
		check_ajax_referer( $this->option_name, 'nonce' );
 | 
						||
 | 
						||
		$type = isset( $_POST['type'] ) ? sanitize_text_field( wp_unslash( $_POST['type'] ) ) : 'yes';
 | 
						||
 | 
						||
		update_site_option( $this->option_name . '_state', $type );
 | 
						||
 | 
						||
		// Update time if user clicked "No, maybe later" button.
 | 
						||
		if ( 'later' === $type ) {
 | 
						||
			$time = time();
 | 
						||
			update_site_option( $this->option_name . '_time', $time );
 | 
						||
		}
 | 
						||
 | 
						||
		wp_die();
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
new Visual_Portfolio_Ask_Review_Notice();
 |