Hacked By AnonymousFox
<?php
/**
* Review class.
*
* @since 1.1.4.5
*
* @package OMAPI
* @author Devin Vinson
*/
class OMAPI_Review {
/**
* Holds the class object.
*
* @since 1.1.4.5
*
* @var object
*/
public static $instance;
/**
* Path to the file.
*
* @since 1.1.4.5
*
* @var string
*/
public $file = __FILE__;
/**
* Holds the review slug.
*
* @since 1.1.4.5
*
* @var string
*/
public $hook;
/**
* Holds the base class object.
*
* @since 1.1.4.5
*
* @var object
*/
public $base;
/**
* Current API route.
*
* @since 1.1.4.5
*
* @var bool|string
*/
public $route = 'optinmonster.com/wp-json/optinmonster/v1/pluginreview/';
/**
* API Username.
*
* @since 1.1.4.5
*
* @var bool|string
*/
public $user = false;
/**
* API Key.
*
* @since 1.0.0
*
* @var bool|string
*/
public $key = false;
/**
* Primary class constructor.
*
* @since 1.1.4.5
*/
public function __construct() {
// Set default class properties
$this->protocol = 'https://';
$this->url = $this->protocol . $this->route;
// Set our object.
$this->set();
// Pages
add_action( 'admin_menu', array( $this, 'register_review_page' ) );
// Action
add_action( 'admin_post_omapi_send_review', array( $this, 'omapi_send_review' ) );
// Review Notices
add_action( 'admin_notices', array( $this, 'review' ) );
add_action( 'wp_ajax_omapi_dismiss_review', array( $this, 'dismiss_review' ) );
// Admin Notices
add_action( 'admin_notices', array( $this, 'notices' ) );
}
/**
* Sets our object instance and base class instance.
*
* @since 1.1.4.5
*/
public function set() {
self::$instance = $this;
$this->base = OMAPI::get_instance();
}
/**
* Loads the OptinMonster admin menu.
*
* @since 1.1.4.5
*/
public function register_review_page() {
$this->hook = add_submenu_page(
__( 'OptinMonster', 'optin-monster-api' ), //parent slug
__( 'Review OptinMonster', 'optin-monster-api' ), //page title,
__( 'Thank you for your Review', 'optin-monster-api'),
apply_filters( 'optin_monster_api_menu_cap', 'manage_options' ), //cap
'optin-monster-api-review', //slug
array($this, 'callback_to_display_page') //callback
);
// Load settings page assets.
if ( $this->hook ) {
add_action( 'load-' . $this->hook, array( $this, 'assets' ) );
}
}
/**
* Loads assets for the settings page.
*
* @since 1.1.4.2
*/
public function assets() {
add_action( 'admin_enqueue_scripts', array( $this, 'styles' ) );
add_filter( 'admin_footer_text', array( $this, 'footer' ) );
add_action( 'in_admin_header', array( $this->base->menu, 'output_plugin_screen_banner') );
}
/**
* Register and enqueue settings page specific CSS.
*
* @since 1.1.4.2
*/
public function styles() {
wp_register_style( $this->base->plugin_slug . '-settings', plugins_url( '/assets/css/settings.css', OMAPI_FILE ), array(), $this->base->version );
wp_enqueue_style( $this->base->plugin_slug . '-settings' );
}
/**
* Customizes the footer text on the OptinMonster settings page.
*
* @since 1.1.4.5
*
* @param string $text The default admin footer text.
* @return string $text Amended admin footer text.
*/
public function footer( $text ) {
$url = 'https://wordpress.org/support/plugin/optinmonster/reviews?filter=5#new-post';
$text = sprintf( __( 'Please rate <strong>OptinMonster</strong> <a href="%s" target="_blank" rel="noopener">★★★★★</a> on <a href="%s" target="_blank">WordPress.org</a> to help us spread the word. Thank you from the OptinMonster team!', 'optin-monster-api' ), $url, $url );
return $text;
}
/**
* Outputs the Review Page.
*
* @since 1.1.4.5
*/
public function callback_to_display_page() {
// Get any saved meta
$review_meta = get_user_meta( get_current_user_id(), 'omapi_review_data', true );
// Get autofill details
$current_user = wp_get_current_user();
$current_usermail = isset ( $review_meta['user-email'] ) ? $review_meta['user-email'] : $current_user->user_email;
$current_userfullname = isset ( $review_meta['user-name'] ) ? $review_meta['user-name'] : $current_user->user_firstname . ' ' . $current_user->user_lastname;
$current_credentials = isset ( $review_meta['user-creds'] ) ? $review_meta['user-creds'] : '';
$current_source = isset ( $review_meta['user-source'] ) ? $review_meta['user-source'] : get_site_url();
$user_review = isset ( $review_meta['user-review'] ) ? $review_meta['user-review'] : '';
$review_status = isset ( $review_meta['status'] ) ? $review_meta['status'] : 'unfinished';
?>
<div class="wrap omapi-page">
<h2><?php echo esc_html( get_admin_page_title() ); ?></h2>
<div class="review-container">
<div id="review-panel" >
<div class="omapi-well omapi-mini-well">
<?php if ($review_status == 'finished') : ?>
<p><?php _e('Thank you for sending us your review. Please consider leaving us a review on WordPress.org as well. We do really appreciate your time.', 'optin-monster-api'); ?></p>
<?php else: ?>
<p><?php _e('Thank you for taking a minute to send us a review.', 'optin-monster-api'); ?></p>
<?php endif; ?>
</div>
<div class="omapi-review-form">
<form method="post" action="<?php echo admin_url( 'admin-post.php' ); ?>">
<input type="hidden" name="action" value="omapi_send_review">
<?php wp_nonce_field('omapi-submit-review','omapi-review-nonce') ?>
<div class="omapi-field-box">
<div class="omapi-field-wrap">
<label for="user-review"><?php _e('Review (required)', 'optin-monster-api'); ?></label>
<textarea id="user-review" tabindex="1" rows="5" name="user-review"><?php echo $user_review; ?></textarea>
<span class="omapi-field-desc"><?php _e('Be as specific as you would like (140 to 1000 characters).', 'optin-monster-api'); ?></span>
</div>
</div>
<div class="omapi-field-box">
<div class="omapi-field-wrap">
<label for="user-email"><?php _e('Email (required)', 'optin-monster-api'); ?></label>
<input type="text" id="user-email" placeholder="<?php _e('Email', 'optin-monster-api')?>" tabindex="1" name="user-email" value="<?php echo $current_usermail ?>">
</div>
</div>
<div class="omapi-field-box">
<div class="omapi-field-wrap">
<label><?php _e('Your Name (required)', 'optin-monster-api'); ?></label>
<input type="text" id="user-name" placeholder="<?php _e('Your Name', 'optin-monster-api')?>" tabindex="1" name="user-name" value="<?php echo $current_userfullname ?>">
<span class="omapi-field-desc"><?php _e('The name you would like shown if featured.', 'optin-monster-api'); ?></span>
</div>
</div>
<div class="omapi-field-box">
<div class="omapi-field-wrap">
<label><?php _e('Title and Company', 'optin-monster-api'); ?></label>
<input type="text" id="user-credentials" placeholder="<?php _e('Title, Company Name', 'optin-monster-api')?>" tabindex="1" name="user-credentials" value="<?php echo $current_credentials ?>">
<span class="omapi-field-desc"><?php _e('Professional Title and Company', 'optin-monster-api'); ?></span>
</div>
</div>
<div class="omapi-field-box">
<div class="omapi-field-wrap">
<label><?php _e('Where are you using OptinMonster', 'optin-monster-api'); ?></label>
<input type="text" id="user-source" placeholder="http://" tabindex="1" name="user-source" value="<?php echo $current_source; ?>">
<span class="omapi-field-desc"><?php _e('May be shown if featured.', 'optin-monster-api'); ?></span>
</div>
</div>
<p class="submit">
<?php if ($review_status !== 'finished') : ?>
<button class="button button-primary" type="submit"><?php _e('Send Review', 'optin-monster-api'); ?></button>
<?php endif; ?>
</p>
</form>
</div>
</div>
</div>
<?php
}
/**
* Handle review submission
*
* This is called via admin_post_{action} when form is submitted.
*
* @since 1.1.4.5
*
*/
public function omapi_send_review() {
// Check our form nonce
if ( ! wp_verify_nonce( $_POST['omapi-review-nonce'], 'omapi-submit-review' ) ) {
die( 'Unable to process request');
}
$user_id = get_current_user_id();
// Setup empty defaults
$user_review = '';
$user_email = '';
$user_name = '';
$user_creds = '';
$user_source = '';
$user_api = $this->base->get_api_credentials();
if ( isset( $_POST['user-review'] ) ) {
$user_review = sanitize_text_field( $_POST['user-review'] );
}
if ( isset( $_POST['user-email'] ) ) {
$user_email = sanitize_email( $_POST['user-email'] );
}
if ( isset( $_POST['user-name'] ) ) {
$user_name = sanitize_text_field( $_POST['user-name'] );
}
if ( isset( $_POST['user-credentials'] ) ) {
$user_creds = sanitize_text_field( $_POST['user-credentials'] );
}
if ( isset( $_POST['user-source'] ) ) {
$user_source = esc_url( $_POST['user-source'] );
}
// Add data into query
$data_array = array(
'user-review' => $user_review,
'user-email' => $user_email,
'user-name' => $user_name,
'user-creds' => $user_creds,
'user-source' => $user_source,
'user-key' => $user_api['key'],
'user-id' => $user_api['user']
);
// Save everything passed in to user meta as well
update_user_meta( $user_id, 'omapi_review_data', $data_array );
// Check for Name, Review, Email
if ( $user_name === '' || $user_review === '' || $user_email === '' ) {
$message = 'required-fields';
wp_redirect( add_query_arg( 'action', $message , admin_url( 'admin.php?page=optin-monster-api-review' ) ) );
exit;
}
// Build the headers of the request.
$headers = array(
'Content-Type' => 'application/x-www-form-urlencoded',
'Cache-Control' => 'no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0',
'Pragma' => 'no-cache',
'Expires' => 0,
'OMAPI-Referer' => site_url(),
'OMAPI-Sender' => 'WordPress'
);
// Setup data to be sent to the API.
$data = array(
'headers' => $headers,
'body' => $data_array,
'timeout' => 3000,
'sslverify' => false
);
// Perform the query and retrieve the response.
$response = wp_remote_post( esc_url_raw( $this->url ), $data );
$response_body = json_decode( wp_remote_retrieve_body( $response ) );
if ( is_wp_error( $response_body ) ) {
//$action_query = 'error';
}
$message = isset($action_query) ? $action_query : 'success';
// Update array
$data_array['status'] = 'finished';
// Add status to review meta
update_user_meta( $user_id, 'omapi_review_data', $data_array );
//reload review page and end things
wp_redirect( add_query_arg( 'action', $message , admin_url( 'admin.php?page=optin-monster-api-review' ) ) );
exit;
}
/**
* Add admin notices as needed for reviews.
*
* @since 1.1.6.1
*/
public function review() {
// Verify API credentials have been set.
if ( ! $this->base->get_api_credentials() ) {
return;
}
// Verify that we can do a check for reviews.
$review = get_option( 'omapi_review' );
$time = time();
$load = false;
if ( ! $review ) {
$review = array(
'time' => $time,
'dismissed' => false
);
$load = true;
} else {
// Check if it has been dismissed or not.
if ( (isset( $review['dismissed'] ) && ! $review['dismissed']) && (isset( $review['time'] ) && (($review['time'] + DAY_IN_SECONDS) <= $time)) ) {
$load = true;
}
}
// If we cannot load, return early.
if ( ! $load ) {
return;
}
// Update the review option now.
update_option( 'omapi_review', $review );
// Run through optins on the site to see if any have been loaded for more than a week.
$valid = false;
$optins = $this->base->get_optins();
if ( ! $optins ) {
return;
}
foreach ( $optins as $optin ) {
// Verify the optin has been enabled.
$enabled = get_post_meta( $optin->ID, '_omapi_enabled', true );
if ( ! $enabled ) {
continue;
}
// Check the creation date of the local optin. It must be at least one week after.
$created = isset( $optin->post_date ) ? strtotime( $optin->post_date ) + (7 * DAY_IN_SECONDS) : false;
if ( ! $created ) {
continue;
}
if ( $created <= $time ) {
$valid = true;
break;
}
}
// If we don't have a valid optin yet, return.
if ( ! $valid ) {
return;
}
// We have a candidate! Output a review message.
?>
<div class="notice notice-info is-dismissible om-review-notice">
<p><?php _e( 'Hey, I noticed you have been using OptinMonster for 7 days now - that\'s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress? This will help us spread the word and boost our motivation - thanks!', 'optin-monster-api' ); ?></p>
<p><strong><?php _e( '~ Syed Balkhi<br>Co-Founder of OptinMonster', 'optin-monster-api' ); ?></strong></p>
<p>
<a href="https://wordpress.org/support/plugin/optinmonster/reviews?filter=5#new-post" class="om-dismiss-review-notice om-review-out" target="_blank" rel="noopener"><?php _e( 'Ok, you deserve it', 'optin-monster-api' ); ?></a><br>
<a href="#" class="om-dismiss-review-notice" target="_blank" rel="noopener"><?php _e( 'Nope, maybe later', 'optin-monster-api' ); ?></a><br>
<a href="#" class="om-dismiss-review-notice" target="_blank" rel="noopener"><?php _e( 'I already did', 'optin-monster-api' ); ?></a><br>
</p>
</div>
<script type="text/javascript">
jQuery(document).ready( function($) {
$(document).on('click', '.om-dismiss-review-notice, .om-review-notice button', function( event ) {
if ( ! $(this).hasClass('om-review-out') ) {
event.preventDefault();
}
$.post( ajaxurl, {
action: 'omapi_dismiss_review'
});
$('.om-review-notice').remove();
});
});
</script>
<?php
}
/**
* Dismiss the review nag
*
* @since 1.1.6.1
*/
public function dismiss_review() {
$review = get_option( 'omapi_review' );
if ( ! $review ) {
$review = array();
}
$review['time'] = time();
$review['dismissed'] = true;
update_option( 'omapi_review', $review );
die;
}
/**
* Add admin notices as needed for review
*
* @since 1.1.4.5
*
*/
public function notices() {
if ( ! isset ( $_GET['action'] ) ) {
return;
}
if ( 'success' === $_GET['action'] ) {
echo '<div class="notice notice-success"><p>' . __( 'Review has been sent.', 'optin-monster-api' );
echo '<a href="' . esc_url_raw( admin_url( 'admin.php?page=optin-monster-api-settings' ) ) . '" class="button button-primary button-large omapi-new-optin" title="Go to OptinMonster overview" style="margin-left: 15px;">Return to OptinMonster</a></p></div>';
}
if ( 'required-fields' === $_GET['action'] ) {
echo '<div class="error is-dismissible"><p>' . __( 'Your Name, Review, and Email address are required to submit your review.', 'optin-monster-api' ) . '</p></div>';
}
}
}
Hacked By AnonymousFox1.0, Coded By AnonymousFox