%PDF- %PDF-
Direktori : /var/www/pn/beta/64801_wp-content/plugins/wysija-newsletters/helpers/ |
Current File : /var/www/pn/beta/64801_wp-content/plugins/wysija-newsletters/helpers/cron.php |
<?php defined('WYSIJA') or die('Restricted access'); class WYSIJA_help_cron extends WYSIJA_object{ var $report=false; function __construct(){ parent::__construct(); } /** * the cron tasks are being run for a certain number of processes (all queue, bounce etc..) * @return void */ function run() { @ini_set('max_execution_time',0); $model_config = WYSIJA::get('config','model'); $running = false; if(!$model_config->getValue('cron_manual')){ return; } // get the param from where you want $report = $process = false; if(isset($_REQUEST['process']) && $_REQUEST['process']){ $process = $_REQUEST['process']; }elseif(!isset($_SERVER['REQUEST_URI']) && isset($_SERVER['SHELL']) && isset($_SERVER['argv'][2]) && $_SERVER['argv'][2]){ $process = $_SERVER['argv'][2]; } if(isset($_REQUEST['report']) && $_REQUEST['report']){ $this->report = $_REQUEST['report']; }elseif(!isset($_SERVER['REQUEST_URI']) && isset($_SERVER['SHELL']) && isset($_SERVER['argv'][3]) && $_SERVER['argv'][3]){ $this->report = $_SERVER['argv'][3]; } if( !empty($process) ){ //include the needed parts of wp plus wysija if(isset($_REQUEST[WYSIJA_CRON]) || ( isset($_SERVER['argv'][1]) && $_SERVER['argv'][1]==WYSIJA_CRON )) echo ''; else{ wp_die("<h2>" . 'Invalid token' . "</h2>", "MailPoet CRON error", array( 'response' => 404, 'back_link' => false )); } $cron_schedules = get_option('wysija_schedules'); $processes = array(); if(strpos($process, ',')!==false){ $processes = explode(',', $process); }else $processes[] = $process; $allProcesses = array('queue','bounce','daily','weekly','monthly'); foreach($processes as $scheduleprocess){ if($scheduleprocess!='all'){ if( in_array( $scheduleprocess, $allProcesses ) ){ $this->check_scheduled_task($cron_schedules,$scheduleprocess); }else{ wp_die("<h2>" . 'Invalid process' . "</h2>", "MailPoet CRON error", array( 'response' => 404, 'back_link' => false )); } }else{ foreach($allProcesses as $processNK){ $this->check_scheduled_task($cron_schedules,$processNK); } if($this->report) echo 'processed : All<br/>'; if(!isset($_REQUEST['silent'])) echo 'MailPoet\'s cron is ready. Simply setup a CRON job on your server (cpanel or other) to trigger this page.'; exit; } } }else{ wp_die("<h2>" . 'Missing process' . "</h2>", "MailPoet CRON error", array( 'response' => 404, 'back_link' => false )); } if(!isset($_REQUEST['silent'])) echo '"MailPoet\'s cron is ready. Simply setup a CRON job on your server (cpanel or other) to trigger this page.' ; if($process) exit; } /** * check that one scheduled task is ready to be executed * @param type $cron_schedules list of recorded cron schedules * @param type $processNK what to process queue, bounce etc... */ function check_scheduled_task($cron_schedules,$processNK){ $helper_toolbox = WYSIJA::get('toolbox','helper'); $time_passed = $time_left = 0; $run_scheduled = true; $extra_text = $multisite_prefix = ''; // this is to display a different message whether we're dealing with bounce or not. if($processNK == 'bounce'){ $model_config = WYSIJA::get( 'config' , 'model' ); // if premium is activated we launch the premium function $multisite_prefix = ''; if(is_multisite()){ $multisite_prefix = 'ms_'; } // we don't process the bounce automatically unless the option is ticked if(!(defined('WYSIJANLP') && $model_config->getValue( $multisite_prefix . 'bounce_process_auto' )) ){ $extra_text = ' (bounce handling not activated)'; $run_scheduled=false; } } // calculate the time passed processing a scheduled task if(!empty($cron_schedules[$processNK]['running'])){ $time_passed = time()- $cron_schedules[$processNK]['running']; $time_passed = $helper_toolbox->duration_string($time_passed,true,2,5); }else{ $time_left = $cron_schedules[$processNK]['next_schedule'] - time(); $time_left = $helper_toolbox->duration_string($time_left,true,2,5); } if($run_scheduled && $cron_schedules[$processNK]['next_schedule'] < time() && !$cron_schedules[$processNK]['running']){ if($this->report) echo 'exec process '.$processNK.'<br/>'; $this->run_scheduled_task($processNK); }else{ if($this->report){ if($time_passed) $text_time = ' running since : '.$time_passed; else $text_time = ' next run : '.$time_left; if(!empty($extra_text)) $text_time = $extra_text; echo 'skip process <strong>'.$processNK.'</strong>'.$text_time.'<br/>'; } } } /** * run process if it's not detected as already running * @param type $process * @return type */ function run_scheduled_task($process = 'queue'){ //first let's make sure that the process asked to be run is not already running $scheduled_times = WYSIJA::get_cron_schedule($process); $processes = WYSIJA::get_cron_frequencies(); $process_frequency = $processes[$process]; // check if the scheduled task is already being processed, // we consider it timed out once the started running time plus the frequency has been passed if(!empty($scheduled_times['running']) && ($scheduled_times['running'] + $process_frequency) > time()){ if($this->report) echo 'already running : '.$process.'<br/>'; return; } // set schedule as running WYSIJA::set_cron_schedule($process,0,time()); // execute schedule switch($process){ case 'queue': // check if there are any scheduled newsletters ready for action WYSIJA::check_scheduled_newsletters(); // if premium is activated we execute the premium cron process if(defined('WYSIJANLP')){ $helper_premium = WYSIJA::get('premium', 'helper', false, WYSIJANLP); $helper_premium->croned_queue_process(); }else{ // run the standard queue process no scheduled tasks will be check since it has already been checked above WYSIJA::croned_queue(false); } break; case 'bounce': $helper_premium = WYSIJA::get('premium', 'helper', false, WYSIJANLP); $model_config = WYSIJA::get( 'config' , 'model' ); // if premium is activated we launch the premium function if(is_multisite()){ $multisite_prefix='ms_'; } // we don't process the bounce automatically unless the option is ticked if(defined('WYSIJANLP') && $model_config->getValue( $multisite_prefix . 'bounce_process_auto' )){ $helper_premium->croned_bounce(); }else{ $process .= ' (bounce handling not activated)'; } break; case 'daily': WYSIJA::croned_daily(); break; case 'weekly': if(defined('WYSIJANLP')){ $helper_premium = WYSIJA::get('premium', 'helper', false, WYSIJANLP); $helper_premium->croned_weekly(); } WYSIJA::croned_weekly(); break; case 'monthly': WYSIJA::croned_monthly(); break; } // set next_schedule details WYSIJA::set_cron_schedule($process); if($this->report) echo 'processed : '.$process.'<br/>'; } }