Cron.php in Anti Spam by CleanTalk 9.1.x
File
src/lib/Cleantalk/Common/Cron.php
View source
<?php
namespace Cleantalk\Common;
abstract class Cron {
public $debug = false;
protected $tasks = array();
protected $tasks_completed = array();
protected $cron_option_name;
protected $task_execution_min_interval;
protected $cron_execution_min_interval;
public function __construct($cron_option_name = 'cleantalk_cron', $task_execution_min_interval = 120, $cron_execution_min_interval = 600) {
$this->cron_option_name = $cron_option_name;
$this->task_execution_min_interval = $task_execution_min_interval;
$this->cron_execution_min_interval = $cron_execution_min_interval;
if (time() - $this
->getCronLastStart() > $this->cron_execution_min_interval) {
$this->tasks = $this
->getTasks();
}
}
public abstract function getCronLastStart();
public abstract function setCronLastStart();
public abstract function saveTasks($tasks);
public abstract function getTasks();
public function addTask($task, $handler, $period, $first_call = null, $params = array()) {
$first_call = !$first_call ? time() + $period : $first_call;
if (isset($this->tasks[$task])) {
return false;
}
$this->tasks[$task] = array(
'handler' => $handler,
'next_call' => $first_call,
'period' => $period,
'params' => $params,
);
return $this
->saveTasks($this->tasks);
}
public function removeTask($task) {
if (!isset($this->tasks[$task])) {
return false;
}
unset($this->tasks[$task]);
return $this
->saveTasks($this->tasks);
}
public function updateTask($task, $handler, $period, $first_call = null, $params = array()) {
$this
->removeTask($task);
return $this
->addTask($task, $handler, $period, $first_call, $params);
}
public function getCronOptionName() {
return $this->cron_option_name;
}
public function checkTasks() {
if (empty($this->tasks)) {
return false;
}
$tasks_to_run = array();
foreach ($this->tasks as $task => &$task_data) {
if (!isset($task_data['processing'], $task_data['last_call']) || $task_data['processing'] === true && time() - $task_data['last_call'] > $this->task_execution_min_interval) {
$task_data['processing'] = false;
$task_data['last_call'] = 0;
}
if ($task_data['processing'] === false && $task_data['next_call'] <= time()) {
$task_data['processing'] = true;
$task_data['last_call'] = time();
$tasks_to_run[] = $task;
}
if (!isset($task_data['params'])) {
$task_data['params'] = array();
}
}
unset($task_data);
$this
->saveTasks($this->tasks);
return $tasks_to_run;
}
public function runTasks($tasks) {
if (empty($tasks)) {
return;
}
if (!$this
->setCronLastStart()) {
return;
}
foreach ($tasks as $task) {
if (is_callable($this->tasks[$task]['handler'])) {
if ($this->debug) {
error_log(var_export('Task ' . $task . ' will be run.', 1));
}
$result = call_user_func_array($this->tasks[$task]['handler'], isset($this->tasks[$task]['params']) ? $this->tasks[$task]['params'] : array());
if ($this->debug) {
error_log(var_export('Result:', 1));
error_log(var_export($result, 1));
}
if (empty($result['error'])) {
$this->tasks_completed[$task] = true;
if ($this->tasks[$task]['period'] == 0) {
unset($this->tasks[$task]);
}
else {
$this->tasks[$task]['next_call'] = time() + $this->tasks[$task]['period'];
}
}
else {
$this->tasks_completed[$task] = false;
$this->tasks[$task]['next_call'] = time() + $this->tasks[$task]['period'] / 4;
}
}
else {
$this->tasks_completed[$task] = false;
}
}
$this
->saveTasks($this->tasks);
return $this->tasks_completed;
}
}
Classes
Name |
Description |
Cron |
CleanTalk Cron class |