/** * Plugin Name: OptinMonster API * Plugin URI: https://optinmonster.com * Description: OptinMonster API plugin to connect your WordPress site to your OptinMonster account. * Author: OptinMonster Team * Author URI: https://optinmonster.com * Version: 1.3.3 * Text Domain: optin-monster-api * Domain Path: languages * * OptinMonster is is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * * OptinMonster is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OptinMonster. If not, see . */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } // Autoload the class files. spl_autoload_register( 'OMAPI::autoload' ); // Store base file location define( 'OMAPI_FILE', __FILE__ ); /** * Main plugin class. * * @since 1.0.0 * * @package OMAPI * @author Thomas Griffin */ class OMAPI { /** * Holds the class object. * * @since 1.0.0 * * @var object */ public static $instance; /** * Plugin version, used for cache-busting of style and script file references. * * @since 1.0.0 * * @var string */ public $version = '1.3.3'; /** * The name of the plugin. * * @since 1.0.0 * * @var string */ public $plugin_name = 'OptinMonster API'; /** * Unique plugin slug identifier. * * @since 1.0.0 * * @var string */ public $plugin_slug = 'optinmonster'; /** * Plugin file. * * @since 1.0.0 * * @var string */ public $file = __FILE__; /** * Primary class constructor. * * @since 1.0.0 */ public function __construct() { // Load the plugin textdomain. add_action( 'plugins_loaded', array( $this, 'load_plugin_textdomain' ) ); // Load the plugin widgets. add_action( 'widgets_init', array( $this, 'widgets' ) ); // Load the plugin. add_action( 'init', array( $this, 'init' ) ); } /** * Loads the plugin textdomain for translation. * * @since 1.0.0 */ public function load_plugin_textdomain() { $domain = 'optin-monster-api'; $locale = apply_filters( 'plugin_locale', get_locale(), $domain ); load_textdomain( $domain, WP_LANG_DIR . '/' . $domain . '/' . $domain . '-' . $locale . '.mo' ); load_plugin_textdomain( $domain, false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } /** * Registers the OptinMonster widgets. * * @since 1.0.0 */ public function widgets() { // To do: add widgets. register_widget( 'OMAPI_Widget' ); } /** * Loads the plugin into WordPress. * * @since 1.0.0 */ public function init() { // Define necessary plugin constants. define( 'OPTINMONSTER_API', 'https://a.optnmstr.com/app/js/api.min.js' ); // Load our global option. $this->load_option(); // Load global components. $this->load_global(); // Load admin only components. if ( is_admin() ) { $this->load_admin(); } // Run hook once OptinMonster has been fully loaded. do_action( 'optin_monster_api_loaded' ); } /** * Sets our global option if it is not found in the DB. * * @since 1.0.0 */ public function load_option() { $option = get_option( 'optin_monster_api' ); if ( ! $option || empty( $option ) ) { $option = OMAPI::default_options(); update_option( 'optin_monster_api', $option ); } } /** * Loads all global related classes into scope. * * @since 1.0.0 */ public function load_global() { // Register global components. $this->ajax = new OMAPI_Ajax(); $this->type = new OMAPI_Type(); $this->output = new OMAPI_Output(); $this->shortcode = new OMAPI_Shortcode(); // Fire a hook to say that the global classes are loaded. do_action( 'optin_monster_api_global_loaded' ); } /** * Loads all admin related classes into scope. * * @since 1.0.0 */ public function load_admin() { // Manually load notification api. require_once plugin_dir_path( __FILE__ ) . 'includes/class-am-notification.php'; // Register admin components. $this->actions = new OMAPI_Actions(); $this->menu = new OMAPI_Menu(); $this->content = new OMAPI_Content(); $this->save = new OMAPI_Save(); $this->refresh = new OMAPI_Refresh(); $this->validate = new OMAPI_Validate(); $this->welcome = new OMAPI_Welcome(); $this->review = new OMAPI_Review(); $this->notifications = new AM_Notification( 'om', $this->version ); // Fire a hook to say that the admin classes are loaded. do_action( 'optin_monster_api_admin_loaded' ); } /** * Internal method that returns a optin based on ID. * * @since 1.0.0 * * @param int $id The optin ID used to retrieve a optin. * @return array|bool Array of optin data or false if none found. */ public function get_optin( $id ) { return get_post( $id ); } /** * Internal method that returns a optin based on slug. * * @since 1.0.0 * * @param string $slug The optin slug used to retrieve a optin. * @return array|bool Array of optin data or false if none found. */ public function get_optin_by_slug( $slug ) { return get_page_by_path( $slug, OBJECT, 'omapi' ); } /** * Internal method that returns all optins created on the site. * * @since 1.0.0 * * @param array $args Array of args to modify the query for retreiving optins. * @return array|bool Array of optin data or false if none found. */ public function get_optins( $args = array() ) { $optins = get_posts( wp_parse_args( $args, array( 'no_found_rows' => true, 'nopaging' => true, 'post_type' => 'omapi', 'posts_per_page' => -1, 'update_post_term_cache' => false, ) ) ); if ( empty( $optins ) ) { return false; } // Return the optin data. return $optins; } /** * Returns the main option for the plugin. * * @since 1.0.0 * * @return array The main option array for the plugin. */ public function get_option( $key = '', $subkey = '', $default = false ) { $option = get_option( 'optin_monster_api' ); if ( ! empty( $key ) && ! empty( $subkey ) ) { return isset( $option[ $key ][ $subkey ] ) ? $option[ $key ][ $subkey ] : $default; } else if ( ! empty( $key ) ) { return isset( $option[ $key ] ) ? $option[ $key ] : $default; } else { return $option; } } /** * Returns the API credentials for OptinMonster. * * @since 1.0.0 * * @return array|bool $creds The user's API creds for OptinMonster. */ public function get_api_credentials() { // Prepare variables. $option = $this->get_option(); $key = false; $user = false; $apikey = false; // Attempt to grab the new API Key if ( empty( $option['api']['apikey'] ) ) { if ( defined( 'OPTINMONSTER_REST_API_LICENSE_KEY' ) ) { $apikey = OPTINMONSTER_REST_API_LICENSE_KEY; } } else { $apikey = $option['api']['apikey']; } // Attempt to grab the Legacy API key and API user. if ( empty( $option['api']['key'] ) ) { if ( defined( 'OPTINMONSTER_API_LICENSE_KEY' ) ) { $key = OPTINMONSTER_API_LICENSE_KEY; } } else { $key = $option['api']['key']; } if ( empty( $option['api']['user'] ) ) { if ( defined( 'OPTINMONSTER_API_USER' ) ) { $user = OPTINMONSTER_API_USER; } } else { $user = $option['api']['user']; } // Check if we have any of the authentication data if ( ! $apikey ) { // Do we at least have Legacy API Key and User if ( ! $key || ! $user ) { return false; } } // Return the API credentials. return apply_filters( 'optin_monster_api_creds', array( 'key' => $key, 'user' => $user, 'apikey' => $apikey, ) ); } /** * Check to see if we have any optins to migrate to the SaaS * * @since 1.0.0 * * @return bool */ public function can_migrate() { if ( false == ( $old_optins = get_transient( '_om_old_optins' ) ) ) { $args = array( 'post_type' => 'optin', 'posts_per_page' => -1, ); $old_optins = get_posts( $args ); set_transient( '_om_old_optins', $old_optins, DAY_IN_SECONDS ); } if ( empty( $old_optins ) ) { return false; } return true; } /** * Check for legacy Optin_Monster class * * @since 1.1.5 * * @return bool */ public function is_legacy_active() { if( class_exists( 'Optin_Monster' ) ) { return true; } return false; } /** * Check if the main WooCommerce class is active. * * @since 1.1.9 * * @return bool */ public function is_woocommerce_active() { if (class_exists( 'WooCommerce' ) ) { return true; } return false; } /** * Check to see if Mailpoet is active. * * @since 1.2.3 * * @return bool */ public function is_mailpoet_active() { return ( class_exists( 'WYSIJA_object' ) || class_exists( '\\MailPoet\\Config\\Initializer' ) ); } /** * Returns possible API key error flag. * * @since 1.0.0 * * @return bool True if there are API key errors, false otherwise. */ public function get_api_key_errors() { $option = $this->get_option(); return isset( $option['is_expired'] ) && $option['is_expired'] || isset( $option['is_disabled'] ) && $option['is_disabled'] || isset( $option['is_invalid'] ) && $option['is_invalid']; } /** * Retrieves the proper default view for the OptinMonster settings page. * * @since 1.0.0 * * @return string $view The default view for the OptinMonster settings page. */ public function get_view() { return $this->get_api_credentials() ? 'optins' : 'api'; } /** * Loads the default plugin options. * * @since 1.0.0 * * @return array Array of default plugin options. */ public static function default_options() { $options = array( 'api' => array(), 'optins' => array(), 'is_expired' => false, 'is_disabled' => false, 'is_invalid' => false, 'welcome' => array( 'status' => 'none', //none, welcomed 'review' => 'ask', //ask, asked, dismissed 'version' => '1141', //base to check against ) ); return apply_filters( 'optin_monster_api_default_options', $options ); } /** * PRS-0 compliant autoloader. * * @since 1.0.0 * * @param string $classname The classname to check with the autoloader. */ public static function autoload( $classname ) { // Return early if not the proper classname. if ( 'OMAPI' !== mb_substr( $classname, 0, 5 ) ) { return; } // Check if the file exists. If so, load the file. $filename = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . str_replace( '_', DIRECTORY_SEPARATOR, $classname ) . '.php'; if ( file_exists( $filename ) ) { require $filename; } } /** * Returns the singleton instance of the class. * * @since 1.0.0 * * @return OMAPI */ public static function get_instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof OMAPI ) ) { self::$instance = new OMAPI(); } return self::$instance; } } register_activation_hook( __FILE__, 'optin_monster_api_activation_hook' ); /** * Fired when the plugin is activated. * * @since 1.0.0 * * @global int $wp_version The version of WordPress for this install. * @global object $wpdb The WordPress database object. * @param boolean $network_wide True if WPMU superadmin uses "Network Activate" action, false otherwise. */ function optin_monster_api_activation_hook( $network_wide ) { global $wp_version; if ( version_compare( $wp_version, '3.5.1', '<' ) && ! defined( 'OPTINMONSTER_FORCE_ACTIVATION' ) ) { deactivate_plugins( plugin_basename( __FILE__ ) ); wp_die( sprintf( __( 'Sorry, but your version of WordPress does not meet OptinMonster\'s required version of 3.5.1 to run properly. The plugin has been deactivated. Click here to return to the Dashboard.', 'optin-monster-api' ), get_admin_url() ) ); } $instance = OMAPI::get_instance(); global $wpdb; if ( is_multisite() && $network_wide ) { $site_list = $wpdb->get_results( "SELECT * FROM $wpdb->blogs ORDER BY blog_id" ); foreach ( (array) $site_list as $site ) { switch_to_blog( $site->blog_id ); // Set default option. $option = get_option( 'optin_monster_api' ); if ( ! $option || empty( $option ) ) { update_option( 'optin_monster_api', OMAPI::default_options() ); } restore_current_blog(); } } else { // Set default option. $option = get_option( 'optin_monster_api' ); if ( ! $option || empty( $option ) ) { update_option( 'optin_monster_api', OMAPI::default_options() ); } } } register_uninstall_hook( __FILE__, 'optin_monster_api_uninstall_hook' ); /** * Fired when the plugin is uninstalled. * * @since 1.0.0 * * @global object $wpdb The WordPress database object. */ function optin_monster_api_uninstall_hook() { $instance = OMAPI::get_instance(); global $wpdb; if ( is_multisite() ) { $site_list = $wpdb->get_results( "SELECT * FROM $wpdb->blogs ORDER BY blog_id" ); foreach ( (array) $site_list as $site ) { switch_to_blog( $site->blog_id ); delete_option( 'optin_monster_api' ); restore_current_blog(); } } else { delete_option( 'optin_monster_api' ); } } // Load the plugin. $optin_monster_api = OMAPI::get_instance(); // Conditionally load the template tag. if ( ! function_exists( 'optin_monster' ) ) { /** * Primary template tag for outputting OptinMonster optins in templates. * * @since 1.0.0 * * @param int $id The ID of the optin to load. * @param string $type The type of field to query. * @param array $args Associative array of args to be passed. * @param bool $return Flag to echo or return the optin HTML. */ function optin_monster( $id, $type = 'id', $args = array(), $return = false ) { // If we have args, build them into a shortcode format. $args_string = ''; if ( ! empty( $args ) ) { foreach ( (array) $args as $key => $value ) { $args_string .= ' ' . $key . '="' . $value . '"'; } } // Build the shortcode. $shortcode = ! empty( $args_string ) ? '[optin-monster ' . $type . '="' . $id . '"' . $args_string . ']' : '[optin-monster ' . $type . '="' . $id . '"]'; // Return or echo the shortcode output. if ( $return ) { return do_shortcode( $shortcode ); } else { echo do_shortcode( $shortcode ); } } } // Backwards compat for the v1 template tag. if ( ! function_exists( 'optin_monster_tag' ) ) { /** * Primary template tag for outputting OptinMonster optins in templates (v1). * * @since 1.0.0 * * @param int $string The post name of the optin to load. * @param bool $return Flag to echo or return the optin HTML. */ function optin_monster_tag( $id, $return = false ) { // Return the v2 template tag. return optin_monster( $id, 'slug', array(), $return ); } }
Warning: Cannot modify header information - headers already sent by (output started at /home/r121112082215/public_html/wp-content/plugins/optinmonster/optin-monster-wp-api.php:649) in /home/r121112082215/public_html/wp-includes/pluggable.php on line 1216