. */ if ( ! defined( 'ABSPATH' ) ) { exit; } #[AllowDynamicProperties] final class BWFAN_Core { /** * @var BWFAN_Core */ private static $_instance = null; private static $_registered_entity = array( 'active' => array(), 'inactive' => array(), ); /** * @var BWFAN_Admin */ public $admin; /** * @var BWFAN_Public */ public $public; /** * @var BWFAN_Load_Integrations */ public $integration; /** * @var BWFAN_Load_Sources */ public $sources; /** * @var BWFAN_Rules_Loader */ public $rules; /** * @var BWFAN_Shortcodes */ public $shortcodes; /** * @var BWFAN_Logger */ public $logger; /** * @var BWFAN_Merge_Tag_Loader */ public $merge_tags; public $native_connectors; /** * @var BWFAN_Automations */ public $automations; /** * @var BWFAN_Automation_V2 */ public $automations_v2; /** * @var BWFAN_Tasks */ public $tasks; /** * @var BWFAN_Logs */ public $logs; /** * @var BWFAN_Abandoned_Cart */ public $abandoned; /** * @var BWFAN_WooFunnels_Support */ public $support; /** * @var BWFAN_Email_Conversations */ public $conversations; /** * @var BWFAN_Conversation */ public $conversation; /** * @var BWFAN_Conversions */ public $conversions; /** * @var BWFAN_Connectors */ public $connectors; /** * @var BWFAN_Load_Custom_Search */ public $custom_search; /** * @var BWFAN_Subscribe_Link_Handler */ public $subscribe_link_handler; public $wfco_admin; public $db; public $bwfan_api; public $bwfan_recipe; public $automations_v2_contact; public $exporter; private function __construct() { add_filter( 'wfco_include_connector', function () { return true; } ); /** * Load important variables and constants */ $this->define_plugin_properties(); /** * Load dependency classes like bwfan-functions.php */ $this->load_dependencies_support(); /** * Initiates and loads WooFunnels start file */ $this->load_woofunnels_core_classes(); /** * Loads common file */ $this->load_commons(); } /** * Defining constants */ public function define_plugin_properties() { define( 'BWFAN_VERSION', '3.6.4.2' ); define( 'BWFAN_MIN_PRO_VERSION', '3.6.4' ); define( 'BWFAN_MIN_WC_VERSION', '5.0' ); define( 'BWFAN_SLUG', 'bwfan' ); define( 'BWFAN_FULL_NAME', 'FunnelKit Automations' ); define( 'BWFAN_BWF_VERSION', '1.10.12.71' ); define( 'BWFAN_PLUGIN_FILE', __FILE__ ); define( 'BWFAN_PLUGIN_DIR', __DIR__ ); define( 'BWFAN_TEMPLATE_DIR', plugin_dir_path( BWFAN_PLUGIN_FILE ) . 'templates' ); define( 'BWFAN_SINGLE_EXPORT_DIR', wp_upload_dir()['basedir'] . '/funnelkit/fka-single-export' ); $plugin_url = untrailingslashit( plugin_dir_url( BWFAN_PLUGIN_FILE ) ); if ( is_ssl() ) { $plugin_url = preg_replace( "/^http:/i", "https:", $plugin_url ); } define( 'BWFAN_PLUGIN_URL', $plugin_url ); define( 'BWFAN_PLUGIN_BASENAME', plugin_basename( __FILE__ ) ); define( 'BWFAN_DB_VERSION', '1.0' ); ( ! defined( 'BWFCRM_REACT_ENVIRONMENT' ) ) ? define( 'BWFCRM_REACT_ENVIRONMENT', 1 ) : ''; define( 'BWFAN_REACT_PROD_URL', BWFAN_PLUGIN_URL . '/admin/frontend/dist' ); if ( ! defined( 'BWFAN_IS_DEV' ) ) { define( 'BWFAN_IS_DEV', false ); } ( defined( 'BWFAN_IS_DEV' ) && true === BWFAN_IS_DEV ) ? define( 'BWFAN_VERSION_DEV', time() ) : define( 'BWFAN_VERSION_DEV', BWFAN_VERSION ); } /** * Setting up event Dependency Classes */ public function load_dependencies_support() { require BWFAN_PLUGIN_DIR . '/includes/bwfan-functions.php'; require BWFAN_PLUGIN_DIR . '/includes/bwfan-options.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-plugin-dependency.php'; add_action( 'admin_notices', array( $this, 'maybe_show_old_pro_notice' ), 1 ); } public function load_woofunnels_core_classes() { /** Setting Up WooFunnels Core */ require_once( BWFAN_PLUGIN_DIR . '/start.php' ); } public function load_commons() { require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-phone-number.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-common.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-woofunnel-support.php'; require BWFAN_PLUGIN_DIR . '/libraries/action-scheduler/action-scheduler.php'; BWFAN_Common::init(); /** * Loads common hooks */ $this->load_hooks(); } public function load_hooks() { /** Initialize Localization */ add_action( 'init', array( $this, 'localization' ) ); add_action( 'plugins_loaded', array( $this, 'load_classes' ), 1 ); add_action( 'plugins_loaded', array( $this, 'define_api_basename' ) ); /** Redirecting Plugin to the settings page after activation */ add_action( 'activated_plugin', array( $this, 'redirect_on_activation' ) ); /** Initializing Action Schedule WooFunnels Custom Table */ add_action( 'action_scheduler_pre_init', array( $this, 'initiate_as_ct' ), 1 ); /** Loading API's */ add_action( 'rest_api_init', array( $this, 'bwfan_load_apis' ) ); /** Loading CLI */ if ( version_compare( PHP_VERSION, '5.3', '>' ) ) { add_action( 'plugins_loaded', array( $this, 'load_cli' ), 20 ); } } public static function get_instance() { if ( null === self::$_instance ) { self::$_instance = new self; } return self::$_instance; } public static function register( $short_name, $class, $overrides = null ) { /** Ignore classes that have been marked as inactive */ if ( in_array( $class, self::$_registered_entity['inactive'], true ) ) { return; } /** Mark classes as active. Override existing active classes if they are supposed to be overridden */ $index = array_search( $overrides, self::$_registered_entity['active'], true ); if ( false !== $index ) { self::$_registered_entity['active'][ $index ] = $class; } else { self::$_registered_entity['active'][ $short_name ] = $class; } /** Mark overridden classes as inactive. */ if ( ! empty( $overrides ) ) { self::$_registered_entity['inactive'][] = $overrides; } } /** * Admin notice if Pro older version active */ public function maybe_show_old_pro_notice() { if ( ! bwfan_is_autonami_pro_active() ) { return; } if ( version_compare( BWFAN_PRO_VERSION, BWFAN_MIN_PRO_VERSION, '>=' ) ) { return; } ?>

Warning! Old version of FunnelKit Automations Pro is detected. We strongly recommend to update the latest version of FunnelKit Automations Pro.', 'wp-marketing-automations' ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>

load_public(); /** * Loads all the admin */ if ( is_admin() ) { $this->load_admin(); } $this->register_abstract(); /** * Loads rule classes */ if ( bwfan_is_autonami_pro_active() ) { require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-rules.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-rules-loader.php'; } /** * Loads core classes */ require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-db.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-db-update.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-load-integrations.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-merge-tag-loader.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-load-sources.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-load-connectors.php'; require BWFAN_PLUGIN_DIR . '/compatibilities/class-bwfan-compatibilities.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-automations.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-tasks.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-logs.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-logger.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-dashboards.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-connectors.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-load-custom-search.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-recipe-loader.php'; /** Automation builder v2 */ require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-automation-v2.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-automation-v2-contact.php'; /** Subscribe link handler */ require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-subscribe-link-handler.php'; /** Remove duplicate contacts */ require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-dev-remove-cfields-duplicate-records.php'; if ( bwfan_is_woocommerce_active() ) { /** Load cart helper file */ require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-recoverable-carts.php'; } if ( bwfan_is_autonami_pro_active() ) { require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-dev-get-broadcast-timing.php'; /** Added export handler */ require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-exporter-handler.php'; } /** Load contact-related classes */ if ( BWFAN_Common::is_pro_3_0() ) { require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-contacts.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-lists.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-tag.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-fields.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-field-group.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-contact-notes.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-funnels.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-email-conversations.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-conversation.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-conversions.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-message.php'; require BWFAN_PLUGIN_DIR . '/includes/class-bwfcrm-automations.php'; } $this->register_controllers(); do_action( 'bwfan_before_register_modules' ); $this->register_modules(); // After including class now initialize all class or functions $this->register_classes(); } /** * Load all the API classes * * @return void */ public function bwfan_load_apis() { $rest_route = isset( $_GET['rest_route'] ) ? $_GET['rest_route'] : ''; // phpcs:ignore if ( empty( $rest_route ) ) { $rest_route = $_SERVER['REQUEST_URI']; // phpcs:ignore } if ( empty( $rest_route ) ) { return; } if ( false === strpos( $rest_route, BWFAN_API_NAMESPACE ) ) { return; } require_once BWFAN_PLUGIN_DIR . '/includes/class-bwfan-api-loader.php'; BWFAN_API_Loader::register_routes(); } public function load_public() { require BWFAN_PLUGIN_DIR . '/includes/class-bwfan-public.php'; } public function load_admin() { require BWFAN_PLUGIN_DIR . '/admin/class-bwfan-admin.php'; include_once( BWFAN_PLUGIN_DIR . '/admin/includes/class-bwfan-header.php' ); } private function register_abstract() { $abstract_path = BWFAN_PLUGIN_DIR . '/includes/abstracts'; foreach ( glob( $abstract_path . '/class-*.php' ) as $_field_filename ) { $file_data = pathinfo( $_field_filename ); if ( isset( $file_data['basename'] ) && 'index.php' === $file_data['basename'] ) { continue; } require_once( $_field_filename ); } } private function register_controllers() { $abstract_path = BWFAN_PLUGIN_DIR . '/includes/controllers'; foreach ( glob( $abstract_path . '/class-*.php' ) as $_field_filename ) { $file_data = pathinfo( $_field_filename ); if ( isset( $file_data['basename'] ) && 'index.php' === $file_data['basename'] ) { continue; } require_once( $_field_filename ); } } public function register_modules() { $integration_dir = BWFAN_PLUGIN_DIR . '/modules'; foreach ( glob( $integration_dir . '/*/class-*.php' ) as $_field_filename ) { require_once( $_field_filename ); } } public function register_classes() { $load_classes = self::get_registered_class(); if ( is_array( $load_classes ) && count( $load_classes ) > 0 ) { foreach ( $load_classes as $access_key => $class ) { if ( ! method_exists( $class, 'get_instance' ) ) { continue; } $this->{$access_key} = $class::get_instance(); } do_action( 'bwfan_loaded' ); } } public static function get_registered_class() { return self::$_registered_entity['active']; } public function localization() { load_plugin_textdomain( 'wp-marketing-automations', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' ); } /** * Added redirection on plugin activation * * @param $plugin */ public function redirect_on_activation( $plugin ) { if ( defined( 'WP_CLI' ) || ( plugin_basename( __FILE__ ) !== $plugin ) ) { return; } wp_safe_redirect( add_query_arg( array( 'page' => 'autonami', ), admin_url( 'admin.php' ) ) ); exit; } public function initiate_as_ct() { /** AS older data store */ $as_ct_files = glob( BWFAN_PLUGIN_DIR . '/libraries/action-scheduler-ct/*.php' ); foreach ( $as_ct_files as $file_name ) { if ( false !== strpos( $file_name, 'class-bwfan-as-ct-cli.php' ) ) { /** Will load when CLI to run */ continue; } require_once $file_name; } /** AS new data store */ $as_ct_files = glob( BWFAN_PLUGIN_DIR . '/libraries/action-scheduler-v2/*.php' ); foreach ( $as_ct_files as $file_name ) { if ( false !== strpos( $file_name, 'class-bwfan-as-ct-cli.php' ) ) { /** Will load when CLI to run */ continue; } require_once $file_name; } } public function load_cli() { if ( defined( 'WP_CLI' ) && WP_CLI ) { /** v1 cli command register */ require_once BWFAN_PLUGIN_DIR . '/libraries/action-scheduler-ct/class-bwfan-as-ct-cli.php'; WP_CLI::add_command( 'autonami-tasks', 'BWFAN_AS_CT_CLI' ); /** v2 cli command register */ require_once BWFAN_PLUGIN_DIR . '/libraries/action-scheduler-v2/class-bwfan-as-ct-cli.php'; WP_CLI::add_command( 'autonami-automation-contact', 'BWFAN_AS_CT_CLI' ); } } /** * to avoid unserialize of the current class */ public function __wakeup() { throw new ErrorException( 'BWFAN_Core can`t converted to string' ); } /** * to avoid serialize of the current class */ public function __sleep() { throw new ErrorException( 'BWFAN_Core can`t converted to string' ); } /** * To avoid cloning of current class */ protected function __clone() { } } if ( ! function_exists( 'BWFAN_Core' ) ) { /** * Global Common function to load all the classes * @return BWFAN_Core */ function BWFAN_Core() { //@codingStandardsIgnoreLine return BWFAN_Core::get_instance(); } } BWFAN_Core();