File "CronController.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/resmushit-image-optimizer/classes/Controller/CronController.php
File size: 4.85 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Resmush\Controller;
use \reSmushitUI as reSmushitUI;
use \reSmushit as reSmushit;
use \Resmush\ShortPixelLogger\ShortPixelLogger as Log;
if (! defined('ABSPATH')) {
exit; // Exit if accessed directly.
}
class CronController
{
protected static $instance;
protected $doing_cron = false;
public static function getInstance()
{
if (is_null(self::$instance))
self::$instance = new static();
return self::$instance;
}
public function __construct()
{
$this->initHooks();
$this->checkSchedule();
}
protected function initHooks()
{
add_action('update_option_resmushit_cron', array($this,'on_cron_activation'), 100, 2);
add_filter( 'cron_schedules', array($this,'add_cron_interval') );
add_action('resmushit_optimize', array($this,'cron_process') );
add_action('update_option_resmushit_remove_unsmushed', array($this,'on_remove_unsmushed_change'), 100, 2);
}
protected function checkSchedule()
{
if(! get_option('resmushit_cron') || get_option('resmushit_cron') === 0) {
if (wp_next_scheduled ( 'resmushit_optimize' )) {
wp_clear_scheduled_hook('resmushit_optimize');
}
} else {
if (! wp_next_scheduled ( 'resmushit_optimize' )) {
wp_schedule_event(time(), 'resmushit_interval', 'resmushit_optimize');
}
}
}
/**
* Trigger when the cron are activated for the first time
* @param mixed old value for cron_activation option
* @param mixed new value for cron_activation option
*/
public function on_cron_activation($old_value, $value) {
if($value == 1 && (!get_option('resmushit_cron_firstactivation') || get_option('resmushit_cron_firstactivation') === 0)) {
update_option( 'resmushit_cron_firstactivation', time() );
}
}
/**
* Declare a new time interval to run Cron
* @param array $schedules
* @return array
*/
public function add_cron_interval( $schedules ) {
$schedules['resmushit_interval'] = array(
'interval' => RESMUSHIT_CRON_FREQUENCY,
'display' => esc_html__( __('Every', 'resmushit-image-optimizer') . ' ' . time_elapsed_string(RESMUSHIT_CRON_FREQUENCY) ),
);
return $schedules;
}
public function doing_cron()
{
return $this->doing_cron;
}
/**
* Declare a new crontask for optimization bulk
*/
public function cron_process() {
$this->doing_cron = true;
if((time() - get_option('resmushit_cron_lastaction')) < RESMUSHIT_CRON_TIMEOUT) {
Log::addWarn('Another CRON process is running, process aborted.');
return FALSE;
}
update_option( 'resmushit_cron_lastrun', time() );
update_option( 'resmushit_cron_lastaction', time() );
// required if launch through wp-cron.php
include_once( ABSPATH . 'wp-admin/includes/image.php' );
add_filter('wp_generate_attachment_metadata', array(\Resmush()->process(), 'process_images'), 10, 2);
Log::addDebug('Gathering unoptimized pictures from CRON');
$unoptimized_pictures = json_decode(reSmushit::getNonOptimizedPictures(TRUE));
Log::addDebug('Found ' . count($unoptimized_pictures->nonoptimized) . ' attachments');
foreach($unoptimized_pictures->nonoptimized as $el) {
if (wp_next_scheduled ( 'resmushit_optimize' )) {
//avoid to collapse two crons
wp_unschedule_event(wp_next_scheduled('resmushit_optimize'), 'resmushit_optimize');
}
Log::addDebug('CRON Processing attachments #' . $el->ID);
update_option( 'resmushit_cron_lastaction', time() );
reSmushit::revert((int)$el->ID);
}
}
/**
* Return the RESMUSHIT CRON status according to last_execution variables
* @return string
*/
public function get_cron_status() {
if(get_option('resmushit_cron') == 0) {
return 'DISABLED';
}
if(!defined('DISABLE_WP_CRON') OR DISABLE_WP_CRON == false) {
return 'MISCONFIGURED';
}
if(get_option('resmushit_cron_lastrun') == 0 && (time() - get_option('resmushit_cron_firstactivation') > 2*RESMUSHIT_CRON_FREQUENCY)) {
return 'NEVER_RUN';
}
if(get_option('resmushit_cron_lastrun') != 0 && (time() - get_option('resmushit_cron_lastrun') > 2*RESMUSHIT_CRON_FREQUENCY)) {
return 'NO_LATELY_RUN';
}
return 'OK';
}
/**
* Trigger when the cron are activated for the first time
* @param mixed old value for cron_activation option
* @param mixed new value for cron_activation option
*/
public function on_remove_unsmushed_change($old_value, $value) {
$old_value = (boolean)$old_value;
$value = (boolean)$value;
if($old_value == $value) {
return TRUE;
} else {
//if remove backup is activated
if($value === TRUE) {
if(!resmushit::hasAlreadyRunOnce()) {
update_option( 'resmushit_has_no_backup_files', 1);
} else {
update_option( 'resmushit_has_no_backup_files', 0);
}
} else {
update_option( 'resmushit_has_no_backup_files', 0);
}
}
}
} // class