-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathCronManager.php
66 lines (51 loc) · 1.46 KB
/
CronManager.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
class CronManager {
private static $_crontasks = [];
private static $_init = false;
public static function newTask($name) {
if (self::$_init == false)
self::loadTasks();
if (self::isCreated($name))
throw new \LogicException("Task `$name` already registered!");
$CronTask = new \CronTask($name);
$CronTask->setData([]);
self::$_crontasks[$name];
return $CronTask;
}
public static function run($TaskPerRun, $StepsPerRun) {
if (self::$_init == false)
self::loadTasks();
$TaskExecuted = 0;
foreach (self::$_crontasks as $Task) {
if (!$Task->requiredToRun())
continue;
$Task->run($StepsPerRun);
$TaskExecuted++;
if ($TaskPerRun != 0 && $TaskExecuted >= $TaskPerRun)
break;
}
}
public static function requiredToRun() {
if (self::$_init == false)
self::loadTasks();
foreach (self::$_crontasks as $Task)
if ($Task->requiredToRun())
return true;
return false;
}
public static function isCreated($name) {
if (self::$_init == false)
self::loadTasks();
return isset(self::$_crontasks[$name]);
}
private static function loadTasks() {
$DB = \DatabaseManager::GetConnection();
$Data = $DB->Query('SELECT * FROM `{{prefix}}cron`');
foreach ($Data->All() as $Row) {
$Task = \CronTask::initFromData($Row);
self::$_crontasks[$Row['name']] = $Task;
}
$Data->EndData();
self::$_init = true;
}
}