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();
 |