File Editor
Directories:
.. (Back)
EasyDigitalDownloads
Elementor
Integrations
MemberPress
Plugins
Promos
Rules
Shortcodes
WPForms
WooCommerce
Files:
Actions.php
Ajax.php
Api.php
ApiAuth.php
ApiKey.php
AssetLoader.php
BaseRestApi.php
Blocks.php
ClassicEditor.php
ConstantContact.php
Debug.php
EasyDigitalDownloads.php
Elementor.php
Inserter.php
InstallSkin.php
InstallSkinCompat.php
MailPoet.php
MemberPress.php
Menu.php
Notifications.php
OmuApi.php
Output.php
Pages.php
Partners.php
Plugins.php
Promos.php
Refresh.php
RestApi.php
RevenueAttribution.php
Review.php
Rules.php
Save.php
Shortcode.php
Sites.php
Support.php
Type.php
Urls.php
Utils.php
Validate.php
WPForms.php
Welcome.php
Widget.php
WooCommerce.php
WpErrorException.php
Create New File
Create
Edit File: Validate.php
<?php /** * Validate class. * * @since 1.0.0 * * @package OMAPI * @author Thomas Griffin */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Validate class. * * @since 1.0.0 */ class OMAPI_Validate { /** * Holds the class object. * * @since 1.0.0 * * @var object */ public static $instance; /** * Path to the file. * * @since 1.0.0 * * @var string */ public $file = __FILE__; /** * Holds the base class object. * * @since 1.0.0 * * @var object */ public $base; /** * Primary class constructor. * * @since 1.0.0 */ public function __construct() { // Set our object. $this->set(); // Possibly validate our API credentials. $this->maybe_validate(); // Add validation messages. add_action( 'admin_notices', array( $this, 'notices' ) ); // Add nonce check to dismiss-wp-pointer for the "please connect nag" dismissal. add_action( 'wp_ajax_dismiss-wp-pointer', array( $this, 'validate_please_connect_notice_dismiss' ), 0 ); } /** * Sets our object instance and base class instance. * * @since 1.0.0 */ public function set() { self::$instance = $this; $this->base = OMAPI::get_instance(); } /** * Maybe validate our API credentials if the transient has expired. * * @since 1.0.0 */ public function maybe_validate() { // Check to see if welcome options have been set. If not, let's delay this check for a day. // Also set a transient so that we know the plugin has been activated. $options = $this->base->get_option(); if ( empty( $options['welcome']['status'] ) || 'welcomed' !== $options['welcome']['status'] ) { set_transient( '_omapi_validate', true, DAY_IN_SECONDS ); return; } // Check if the transient has expired. if ( false !== get_transient( '_omapi_validate' ) ) { return; } // Validate API. $this->validate(); // Provide action to refresh optins. do_action( 'optin_monster_api_validate_api' ); } /** * Validate API credentials. * * @since 1.0.0 */ public function validate() { $creds = $this->base->get_api_credentials(); if ( empty( $creds['apikey'] ) && empty( $creds['user'] ) && empty( $creds['key'] ) ) { return; } // Check for new apikey and only use the old user/key if we don't have it. if ( empty( $creds['apikey'] ) ) { $api = new OMAPI_Api( 'validate/', array( 'user' => ! empty( $creds['user'] ) ? $creds['user'] : '', 'key' => ! empty( $creds['key'] ) ? $creds['key'] : '', ) ); } else { $api = new OMAPI_Api( 'verify/', array( 'apikey' => $creds['apikey'] ) ); } $ret = $api->request(); if ( is_wp_error( $ret ) ) { $option = $this->base->get_option(); $type = $ret->get_error_code(); switch ( $type ) { case 'missing': case 'auth': // Set option values. $option['is_invalid'] = true; $option['is_expired'] = false; $option['is_disabled'] = false; break; case 'disabled': // Set option values. $option['is_invalid'] = false; $option['is_expired'] = false; $option['is_disabled'] = true; break; case 'expired': // Set option values. $option['is_invalid'] = false; $option['is_expired'] = true; $option['is_disabled'] = false; break; default: break; } // Update option. update_option( 'optin_monster_api', $option ); // Set our transient to run again in an hour. set_transient( '_omapi_validate', true, HOUR_IN_SECONDS ); } else { set_transient( '_omapi_validate', true, DAY_IN_SECONDS ); } } /** * Outputs any validation notices. * * @since 1.0.0 */ public function notices() { global $pagenow; // phpcs:ignore WordPress.Security.NonceVerification.Recommended $page = isset( $_GET['page'] ) ? sanitize_key( wp_unslash( $_GET['page'] ) ) : ''; $option = $this->base->get_option(); if ( isset( $option['is_invalid'] ) && $option['is_invalid'] ) { if ( 'optin-monster-dashboard' !== $page ) { if ( ! OMAPI_Partners::has_partner_url() ) { echo '<div class="notice notice-error"><p>' . esc_html__( 'There was an error verifying your OptinMonster API credentials. They are either missing or they are no longer valid.', 'optin-monster-api' ) . '</p>'; echo '<p><a href="' . esc_url_raw( OMAPI_Urls::settings() ) . '" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'View API Settings', 'optin-monster-api' ) . '">' . esc_html__( 'View API Settings', 'optin-monster-api' ) . '</a></p></div>'; } } } elseif ( isset( $option['is_disabled'] ) && $option['is_disabled'] ) { echo '<div class="notice notice-error"><p>' . esc_html__( 'The subscription to this OptinMonster account has been disabled, likely due to a refund or other administrator action. Please contact OptinMonster support to resolve this issue.', 'optin-monster-api' ) . '</p>'; echo '<p><a href="' . esc_url( OPTINMONSTER_APP_URL ) . '/account/support/?utm_source=orgplugin&utm_medium=link&utm_campaign=wpdashboard" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'Contact OptinMonster Support', 'optin-monster-api' ) . '" target="_blank">' . esc_html__( 'Contact Support', 'optin-monster-api' ) . '</a></p></div>'; } elseif ( isset( $option['is_expired'] ) && $option['is_expired'] ) { echo '<div class="notice notice-error"><p>' . esc_html__( 'The subscription to this OptinMonster account has expired. Please renew your subscription to use the OptinMonster API.', 'optin-monster-api' ) . '</p>'; echo '<p><a href="' . esc_url( OPTINMONSTER_APP_URL ) . '/account/billing/?utm_source=orgplugin&utm_medium=link&utm_campaign=wpdashboard" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'Renew Subscription', 'optin-monster-api' ) . '" target="_blank">' . esc_html__( 'Renew Subscription', 'optin-monster-api' ) . '</a></p></div>'; } else { if ( $this->should_user_see_connect_nag() ) { echo ' <div id="omapi-please-connect-notice" class="notice notice-success is-dismissible"> <h3 style="padding:2px;font-weight:normal;margin:.5em 0 0;">' . esc_html__( 'Get More Email Subscribers with OptinMonster', 'optin-monster-api' ) . '</h3> <p>' . esc_html__( 'Please connect to or create an OptinMonster account to start using OptinMonster. This will enable you to start turning website visitors into subscribers & customers.', 'optin-monster-api' ) . ' </p> <p> <a href="' . esc_url_raw( OMAPI_Urls::onboarding() ) . '" class="button button-primary button-large omapi-new-optin" title="' . esc_html__( 'Get Started', 'optin-monster-api' ) . '">' . esc_html__( 'Get Started', 'optin-monster-api' ) . '</a> <a style="margin-left:8px" href="' . esc_url( OMAPI_Urls::onboarding() ) . '" title="' . esc_attr__( 'Learn More', 'optin-monster-api' ) . '">' . esc_html__( 'Learn More →', 'optin-monster-api' ) . '</a> </p> </div> '; } } } /** * Script to hide the please connect nag */ public function hide_connect_notice_script() { ?> <script type="text/javascript"> jQuery(document).on( 'click', '#omapi-please-connect-notice .notice-dismiss', function( event ) { event.preventDefault(); // Set the pointer to be closed for this user jQuery.post( ajaxurl, { pointer: 'omapi_please_connect_notice', _wpnonce: '<?php echo esc_js( wp_create_nonce( 'dismiss_pointer' ) ); ?>', action: 'dismiss-wp-pointer' }); jQuery( '#omapi-please-connect-notice' ).fadeTo( 100, 0, function() { jQuery( this ).slideUp(100, function() { jQuery( this ).remove() }) }); }); </script> <?php } /** * Check user meta and see if they have previously dismissed the please connect nag * * @return bool default false and true only if the 'omapi_please_connect_notice' is not in the wp dismissed pointers usermeta */ public function should_user_see_connect_nag() { global $pagenow; // phpcs:ignore WordPress.Security.NonceVerification.Recommended $page = isset( $_GET['page'] ) ? sanitize_key( wp_unslash( $_GET['page'] ) ) : ''; if ( $this->base->menu->is_om_page() || 'index.php' === $pagenow || $this->base->get_api_credentials() ) { return false; } // Get array list of dismissed pointers for current user and convert it to array. $dismissed_pointers = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); // Check if our pointer is not among dismissed ones and that the user should see this. if ( ! in_array( 'omapi_please_connect_notice', $dismissed_pointers, true ) && current_user_can( 'activate_plugins' ) ) { // Add footer script to save when user dismisses. add_action( 'admin_print_footer_scripts', array( $this, 'hide_connect_notice_script' ) ); return true; } return false; } /** * Validates the please connect notice dismissal. * * @since 2.16.0 * * @return void */ public function validate_please_connect_notice_dismiss() { if ( isset( $_POST['pointer'] ) && 'omapi_please_connect_notice' !== $_POST['pointer'] ) { return; } check_ajax_referer( 'dismiss_pointer' ); } }
Save Changes
Rename File
Rename