. * * @package WooCommerce Subscriptions * @author WooCommerce. * @since 1.0 */ require_once( __DIR__ . '/includes/class-wc-subscriptions-dependency-manager.php' ); $dependency_manager = new WC_Subscriptions_Dependency_Manager( WC_Subscriptions::$wc_minimum_supported_version ); // Check the dependencies before loading the plugin. If the dependencies are not met, display an admin notice and exit if ( ! $dependency_manager->has_valid_dependencies() ) { add_action( 'admin_notices', [ $dependency_manager, 'display_dependency_admin_notice' ] ); return; } /** * Declare plugin compatibility with WooCommerce HPOS. * * @since 4.9.0 */ add_action( 'before_woocommerce_init', function() { if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) { \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true ); } } ); // Subscribe to automated translations. add_action( 'woocommerce_translations_updates_for_woocommerce-subscriptions', '__return_true' ); // Load and set up the Autoloader $wcs_autoloader = wcs_init_autoloader(); /** * The main subscriptions class. * * @since 1.0 */ class WC_Subscriptions { /** @var string */ public static $name = 'subscription'; /** @var string */ public static $activation_transient = 'woocommerce_subscriptions_activated'; /** @var string */ public static $plugin_file = __FILE__; /** @var string */ public static $version = '6.3.1'; // WRCS: DEFINED_VERSION. /** @var string */ public static $wc_minimum_supported_version = '7.7'; /** @var WCS_Cache_Manager */ public static $cache; /** @var WCS_Autoloader */ protected static $autoloader; /** * Set up the class, including it's hooks & filters, when the file is loaded. * * @since 1.0 * * @param WCS_Autoloader $autoloader Autoloader instance. */ public static function init( $autoloader = null ) { $plugin = new WC_Subscriptions_Plugin( $autoloader ); self::$cache = $plugin->cache; self::$autoloader = $plugin->get_autoloader(); } /* * Plugin House Keeping */ /** * Called when WooCommerce is inactive or running and out-of-date version to display an inactive notice. * * @deprecated 5.0.0 * * @since 1.2 */ public static function woocommerce_inactive_notice() { _deprecated_function( __METHOD__, '5.0.0', 'WC_Subscriptions_Dependency_Manager::display_dependency_admin_notice' ); $dependency_manager = new WC_Subscriptions_Dependency_Manager( WC_Subscriptions::$wc_minimum_supported_version ); $dependency_manager->display_dependency_admin_notice(); } /* Deprecated Functions */ /** * Handle deprecation function calls. * * @since 4.0.0 * * @param string $function The name of the method being called. * @param array $arguments An array containing the parameters passed to the method. * * @return mixed The value returned from a deprecated function replacement or null. */ public static function __callStatic( $method, $arguments ) { static $deprecation_handler = null; // Initialise the handler if we dont have one already. if ( ! $deprecation_handler ) { $deprecation_handler = new WC_Subscriptions_Deprecation_Handler(); } if ( $deprecation_handler->is_deprecated( $method ) ) { $deprecation_handler->trigger_notice( $method ); return $deprecation_handler->call_replacement( $method, $arguments ); } else { // Trigger an error consistant with PHP if the function called doesn't exist. $class = __CLASS__; $trace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 1 ); $file = $trace[0]['file']; $line = $trace[0]['line']; trigger_error( "Call to undefined method $class::$method() in $file on line $line", E_USER_ERROR ); //phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped } } } /** * Add woocommerce_inbox_variant for the Remote Inbox Notification. * * P2 post can be found at https://wp.me/paJDYF-1uJ. */ if ( ! function_exists( 'add_woocommerce_inbox_variant' ) ) { function add_woocommerce_inbox_variant() { $config_name = 'woocommerce_inbox_variant_assignment'; if ( false === get_option( $config_name, false ) ) { update_option( $config_name, wp_rand( 1, 12 ) ); } } } add_action( 'woocommerce_subscriptions_upgraded', 'add_woocommerce_inbox_variant', 10 ); register_activation_hook( __FILE__, 'add_woocommerce_inbox_variant' ); /** * Load and set up the Autoloader * * If the `woocommerce-subscriptions-core` plugin is active, setup the autoloader using this plugin directory * as the base file path for loading subscription core classes. * * @since 4.0.0 * @return WCS_Autoloader */ function wcs_init_autoloader() { if ( ! function_exists( 'is_plugin_active' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $wcs_core_plugin_slug = 'woocommerce-subscriptions-core/woocommerce-subscriptions-core.php'; $is_wcs_core_active = ( isset( $_GET['action'], $_GET['plugin'] ) && 'activate' === $_GET['action'] && $wcs_core_plugin_slug === $_GET['plugin'] ) || is_plugin_active( $wcs_core_plugin_slug ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended $wcs_core_path = $is_wcs_core_active ? WP_PLUGIN_DIR . '/woocommerce-subscriptions-core/' : dirname( __FILE__ ) . '/vendor/woocommerce/subscriptions-core/'; require_once $wcs_core_path . 'includes/class-wcs-core-autoloader.php'; require_once dirname( __FILE__ ) . '/includes/class-wcs-autoloader.php'; $wcs_autoloader = new WCS_Autoloader( $wcs_core_path ); $wcs_autoloader->register(); return $wcs_autoloader; } WC_Subscriptions::init( $wcs_autoloader );