File "ActionScheduler_DataController.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/packages/action-scheduler/classes/ActionScheduler_DataController.php
File size: 3.29 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

use Action_Scheduler\Migration\Controller;
class ActionScheduler_DataController
{
    const DATASTORE_CLASS = 'ActionScheduler_DBStore';
    const LOGGER_CLASS = 'ActionScheduler_DBLogger';
    const STATUS_FLAG = 'action_scheduler_migration_status';
    const STATUS_COMPLETE = 'complete';
    const MIN_PHP_VERSION = '5.5';
    private static $instance;
    private static $sleep_time = 0;
    private static $free_ticks = 50;
    public static function dependencies_met()
    {
        $php_support = version_compare(PHP_VERSION, self::MIN_PHP_VERSION, '>=');
        return $php_support && apply_filters('action_scheduler_migration_dependencies_met', true);
    }
    public static function is_migration_complete()
    {
        return get_option(self::STATUS_FLAG) === self::STATUS_COMPLETE;
    }
    public static function mark_migration_complete()
    {
        update_option(self::STATUS_FLAG, self::STATUS_COMPLETE);
    }
    public static function mark_migration_incomplete()
    {
        delete_option(self::STATUS_FLAG);
    }
    public static function set_store_class($class)
    {
        return self::DATASTORE_CLASS;
    }
    public static function set_logger_class($class)
    {
        return self::LOGGER_CLASS;
    }
    public static function set_sleep_time($sleep_time)
    {
        self::$sleep_time = (int) $sleep_time;
    }
    public static function set_free_ticks($free_ticks)
    {
        self::$free_ticks = (int) $free_ticks;
    }
    public static function maybe_free_memory($ticks)
    {
        if (self::$free_ticks && 0 === $ticks % self::$free_ticks) {
            self::free_memory();
        }
    }
    public static function free_memory()
    {
        if (0 < self::$sleep_time) {
            \WP_CLI::warning(sprintf(_n('Stopped the insanity for %d second', 'Stopped the insanity for %d seconds', self::$sleep_time, 'woocommerce'), self::$sleep_time));
            sleep(self::$sleep_time);
        }
        \WP_CLI::warning(__('Attempting to reduce used memory...', 'woocommerce'));
        global $wpdb, $wp_object_cache;
        $wpdb->queries = array();
        if (!is_a($wp_object_cache, 'WP_Object_Cache')) {
            return;
        }
        $wp_object_cache->group_ops = array();
        $wp_object_cache->stats = array();
        $wp_object_cache->memcache_debug = array();
        $wp_object_cache->cache = array();
        if (is_callable(array($wp_object_cache, '__remoteset'))) {
            call_user_func(array($wp_object_cache, '__remoteset'));
        }
    }
    public static function init()
    {
        if (self::is_migration_complete()) {
            add_filter('action_scheduler_store_class', array('ActionScheduler_DataController', 'set_store_class'), 100);
            add_filter('action_scheduler_logger_class', array('ActionScheduler_DataController', 'set_logger_class'), 100);
            add_action('deactivate_plugin', array('ActionScheduler_DataController', 'mark_migration_incomplete'));
        } elseif (self::dependencies_met()) {
            Controller::init();
        }
        add_action('action_scheduler/progress_tick', array('ActionScheduler_DataController', 'maybe_free_memory'));
    }
    public static function instance()
    {
        if (!isset(self::$instance)) {
            self::$instance = new static();
        }
        return self::$instance;
    }
}