Current File : /pages/54/47/d0016649/home/htdocs/ipc1/wp-content/plugins/burst-statistics/class-review.php
<?php
defined( 'ABSPATH' ) or die( 'you do not have access to this page!' );

if ( ! class_exists( 'burst_review' ) ) {
	class burst_review {
		private static $_this;
		private $visitors = 0;

		function __construct() {
			if ( isset( self::$_this ) ) {
				wp_die(
					burst_sprintf(
						'%s is a singleton class and you cannot create a second instance.',
						get_class( $this )
					)
				);
			}
			self::$_this = $this;

			// uncomment for testing
			// update_option( 'burst_review_notice_shown', false );
			// update_option( 'burst_activation_time', strtotime( "-5 weeks" ) );

			// show review notice, but only on single site installs
			if ( ! is_multisite() ) {
				// set a time for users who didn't have it set yet.
				if ( ! get_option( 'burst_activation_time' ) ) {
					update_option( 'burst_activation_time', time(), false );

					return;
				}

				if ( get_option( 'burst_review_notice_shown' ) ) {
					return;
				}

				add_action( 'wp_ajax_dismiss_review_notice', array( $this, 'dismiss_review_notice_callback' ) );
				add_action( 'admin_print_footer_scripts', array( $this, 'insert_dismiss_review' ) );

				$activation_time = get_option( 'burst_activation_time' );
				$four_weeks_ago  = strtotime( '-4 weeks' );
				$six_weeks_ago   = strtotime( '-6 weeks' );
				// between 4 and 6 weeks ago, check if we reached 200 visitors. If so show the notice. If longer than 6 weeks, always show the notice.
				if ( $activation_time < $four_weeks_ago && $activation_time > $six_weeks_ago ) {
					$this->visitors = get_transient( 'burst_review_visitors' );
					if ( ! $this->visitors ) {
						$select         = array( 'visitors' );
						$data           = BURST()->statistics->get_data( $select, 0, time(), [] );
						$this->visitors = $data['visitors'];
						set_transient( 'burst_review_visitors', $this->visitors, DAY_IN_SECONDS );
					}
					if ( $this->visitors > 100 ) {
						add_action( 'admin_notices', array( $this, 'show_leave_review_notice' ) );
					}
					// always show the notice after 6 weeks have gone by
					if ( $activation_time < $six_weeks_ago ) {
						add_action( 'admin_notices', array( $this, 'show_leave_review_notice' ) );
					}
				}
			}

			add_action( 'admin_init', array( $this, 'process_get_review_dismiss' ) );
		}

		static function this() {
			return self::$_this;
		}


		public function show_leave_review_notice() {
			if ( isset( $_GET['burst_dismiss_review'] ) ) {
				return;
			}
			?>
			<style>
				.burst.wrap .notice.burst-review {
					margin: var(--rsp-spacing-l, 30px);
				}

				.burst-container {
					display: flex;
					padding: 12px;
				}

				.burst-container .dashicons {
					margin-left: 10px;
					margin-right: 5px;
				}

				.burst-review-image img {
					margin-top: 0.5em;
				}

				.burst-buttons-row {
					margin-top: 10px;
					display: flex;
					align-items: center;
				}
			</style>
			<div id="message"
				class="updated fade notice is-dismissible burst-review really-simple-plugins"
				style="border-left:4px solid var(--rsp-green, #2e8a37)">
				<div class="burst-container">
					<div class="burst-review-image"><img width="80px"
														src="<?php echo esc_url_raw( burst_url ); ?>/assets/img/burst-logo.svg"
														alt="review-logo">
					</div>
					<div style="margin-left:30px">
						<p>
							<b>
								<?php
								if ( $this->visitors > 0 ) {
									burst_printf( __( 'Hi there! Your site is doing awesome! Burst Statistics has tracked %s visitors for you!', 'burst-statistics' ), $this->visitors );
								} else {
									_e( 'Hi, you have been using Burst for more than a month now, awesome!', 'burst-statistics' );
								}
								?>
							</b>
							<?php
							burst_printf(
								__( 'If you have any questions or feedback, leave us a %smessage%s.', 'burst-statistics' ),
								'<a href="' . burst_get_website_url(
									'support',
									array(
										'burst_source' => 'review_notice',
									)
								) . '" target="_blank">',
								'</a>'
							);
							?>
						</p>
						<p>
							<?php _e( 'If you have a moment, please consider leaving a review on WordPress.org to spread the word. We greatly appreciate it!', 'burst-statistics' ); ?>
						</p>
						<i>- Hessel</i>
						<div class="burst-buttons-row">
							<a class="button button-primary" target="_blank"
								href="https://wordpress.org/support/plugin/burst-statistics/reviews/#new-post">
								<?php
								_e(
									'Leave a review',
									'burst-statistics'
								);
								?>
									</a>

							<div class="dashicons dashicons-calendar"></div>
							<a href="#"
								id="maybe-later">
								<?php
								_e(
									'Maybe later',
									'burst-statistics'
								);
								?>
									</a>

							<div class="dashicons dashicons-no-alt"></div>
							<a href="
							<?php
							echo add_query_arg(
								array(
									'page'                 => 'burst',
									'burst_dismiss_review' => 1,
								),
								admin_url( 'admin.php' )
							)
							?>
							">
							<?php
							_e(
								'Don\'t show again',
								'burst-statistics'
							);
							?>
								</a>
						</div>
					</div>
				</div>
			</div>
			<?php
		}

		/**
		 * Insert some ajax script to dismiss the review notice, and stop nagging about it
		 *
		 * @since  2.0
		 *
		 * @access public
		 *
		 * type: dismiss, later
		 */

		public function insert_dismiss_review() {
			$ajax_nonce = wp_create_nonce( 'burst_dismiss_review' );
			?>
			<script type='text/javascript'>
				jQuery(document).ready(function($) {
				$('.burst-review.notice.is-dismissible').on('click', '.notice-dismiss', function(event) {
					burst_dismiss_review('dismiss');
				});
				$('.burst-review.notice.is-dismissible').on('click', '#maybe-later', function(event) {
					burst_dismiss_review('later');
					$(this).closest('.burst-review').remove();
				});
				$('.burst-review.notice.is-dismissible').on('click', '.review-dismiss', function(event) {
					burst_dismiss_review('dismiss');
					$(this).closest('.burst-review').remove();
				});

				function burst_dismiss_review(type) {
					var data = {
					'action': 'dismiss_review_notice',
					'type': type,
					'token': '<?php echo esc_attr( $ajax_nonce ); ?>',
					};
					$.post(ajaxurl, data, function(response) {
					});
				}
				});
			</script>
			<?php
		}

		/**
		 * Process the ajax dismissal of the review message.
		 *
		 * @since  2.1
		 *
		 * @access public
		 */

		public function dismiss_review_notice_callback() {
			$type = isset( $_POST['type'] ) ? sanitize_title( $_POST['type'] ) : false;

			if ( $type === 'dismiss' ) {
				update_option( 'burst_review_notice_shown', true, false );
			}
			if ( $type === 'later' ) {
				// Reset activation timestamp, notice will show again in one month.
				update_option( 'burst_activation_time', time(), false );
			}

			wp_die(); // this is required to terminate immediately and return a proper response
		}

		/**
		 * Dismiss review notice with get, which is more stable
		 */

		public function process_get_review_dismiss() {
			if ( isset( $_GET['burst_dismiss_review'] ) ) {
				update_option( 'burst_review_notice_shown', true, false );
			}
		}
	}
}