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 '
' . esc_html__( 'There was an error verifying your OptinMonster API credentials. They are either missing or they are no longer valid.', 'optin-monster-api' ) . '
'; echo '' . esc_html__( 'View API Settings', 'optin-monster-api' ) . '
' . 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' ) . '
'; echo '' . esc_html__( 'Contact Support', 'optin-monster-api' ) . '
' . esc_html__( 'The subscription to this OptinMonster account has expired. Please renew your subscription to use the OptinMonster API.', 'optin-monster-api' ) . '
'; echo '' . esc_html__( 'Renew Subscription', 'optin-monster-api' ) . '
' . 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' ) . '
' . esc_html__( 'Get Started', 'optin-monster-api' ) . ' ' . esc_html__( 'Learn More →', 'optin-monster-api' ) . '