PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /home/trave494/craftgigstars.online/wp-content/plugins/optinmonster/OMAPI/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //home/trave494/craftgigstars.online/wp-content/plugins/optinmonster/OMAPI/Review.php |
<?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>'; } } }