/** * Hooks upgrade function to init. * * @since 1.2 */ public static function init() { self::$active_version = get_option(WC_Subscriptions_Admin::$option_prefix . '_active_version', '0'); self::$is_wc_version_2 = version_compare(get_option('woocommerce_db_version'), '2.0', '>='); self::$about_page_url = admin_url('index.php?page=wcs-about&wcs-updated=true'); $version_out_of_date = version_compare(self::$active_version, WC_Subscriptions::$version, '<'); // Set the cron lock on every request with an out of date version, regardless of authentication level, as we can only lock cron for up to 10 minutes at a time, but we need to keep it locked until the upgrade is complete, regardless of who is browing the site if ($version_out_of_date) { self::set_cron_lock(); } if (isset($_POST['action']) && 'wcs_upgrade' == $_POST['action']) { // We're checking for CSRF in ajax_upgrade add_action('wp_ajax_wcs_upgrade', __CLASS__ . '::ajax_upgrade', 10); } elseif (@current_user_can('activate_plugins')) { if (isset($_GET['wcs_upgrade_step']) || $version_out_of_date) { $is_upgrading = get_option('wc_subscriptions_is_upgrading', false); // Check if we've exceeded the 2 minute upgrade window we use for blocking upgrades (we could seemingly use transients here to get the check for free if transients were guaranteed to exist: http://journal.rmccue.io/296/youre-using-transients-wrong/) if (false !== $is_upgrading && $is_upgrading < gmdate('U')) { $is_upgrading = false; delete_option('wc_subscriptions_is_upgrading'); } if (false !== $is_upgrading) { add_action('init', __CLASS__ . '::upgrade_in_progress_notice', 11); } else { // Run upgrades as soon as admin hits site add_action('wp_loaded', __CLASS__ . '::upgrade', 11); } } elseif (is_admin() && isset($_GET['page']) && 'wcs-about' == $_GET['page']) { add_action('admin_menu', __CLASS__ . '::updated_welcome_page'); } } // While the upgrade is in progress, we need to block PayPal IPN messages to avoid renewals failing to process add_action('woocommerce_api_wc_gateway_paypal', __CLASS__ . '::maybe_block_paypal_ipn', 0); }
/** * Hooks upgrade function to init. * * @since 1.2 */ public static function init() { self::$active_version = get_option(WC_Subscriptions_Admin::$option_prefix . '_active_version', '0'); if ('true' == get_transient('wc_subscriptions_is_upgrading')) { self::upgrade_in_progress_notice(); } elseif (isset($_GET['wcs_upgrade_step']) || version_compare(self::$active_version, WC_Subscriptions::$version, '<')) { // Run updates as soon as admin hits site if (@current_user_can('activate_plugins')) { add_action('init', __CLASS__ . '::upgrade', 1); } } // Maybe upgrade to WC 2.0 data structure (after WC has run it's upgrader) self::$is_wc_version_2 = version_compare(get_option('woocommerce_db_version'), '2.0', '>='); self::$updated_to_wc_2_0 = get_option('wcs_updated_to_wc_2_0', 'false'); if (self::$is_wc_version_2 && 'true' != self::$updated_to_wc_2_0) { if (@current_user_can('update_plugins')) { add_action('init', __CLASS__ . '::upgrade_to_latest_wc', 2); } else { add_action('admin_init', __CLASS__ . '::upgrade_to_latest_wc', 2); } } }