1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
function sys_maintenance() |
4
|
|
|
{ |
5
|
|
|
global $config; |
6
|
|
|
|
7
|
|
|
$bashing_time_limit = SN_TIME_NOW - $config->fleet_bashing_scope; |
8
|
|
|
|
9
|
|
|
// TODO: Move here some cleaning procedures from admin/maintenance.php |
10
|
|
|
// TODO: Add description of operation to log it |
11
|
|
|
$queries = array( |
12
|
|
|
// Cleaning outdated records from bashing table |
13
|
|
|
array('query' => "DELETE FROM `{{bashing}}` WHERE bashing_time < {$bashing_time_limit};", 'result' => false, 'error' => '', 'affected_rows' => 0), |
14
|
|
|
// Cleaning ACS table from empty records |
15
|
|
|
array('query' => 'DELETE FROM `{{aks}}` WHERE `id` NOT IN (SELECT DISTINCT `fleet_group` FROM `{{fleets}}`);', 'result' => false, 'error' => '', 'affected_rows' => 0), |
16
|
|
|
// Cleaning destroyed planets & moons which outlives it's time |
17
|
|
|
array('query' => "DELETE FROM `{{planets}}` WHERE `id_owner` = 0 AND `destruyed` < UNIX_TIMESTAMP();", 'result' => false, 'error' => '', 'affected_rows' => 0), |
18
|
|
|
); |
19
|
|
|
|
20
|
|
|
foreach($queries as &$query) |
21
|
|
|
{ |
22
|
|
|
$query['result'] = doquery($query['query']); |
|
|
|
|
23
|
|
|
$query['error'] = SN::$db->db_error(); |
24
|
|
|
$query['affected_rows'] = SN::$db->db_affected_rows(); |
25
|
|
|
} |
26
|
|
|
|
27
|
|
|
return $queries; |
28
|
|
|
} |
29
|
|
|
|
30
|
|
|
// define('SCHEDULER_PREG2', '/^(?:(\w\@))?(?:(?:(?:(?:(?:(\d*)-)?(\d*)-)?(?:(\d*)\ ))?(?:(\d*):))?(?:(\d*):))?(\d*)?$/i'); |
31
|
|
|
|
32
|
|
|
// format: [<m|w|d|h|m|s>@]<time> |
33
|
|
|
// first param: m - monthly, w - weekly, d - daily, h - hourly, i - minutly, s - secondly |
34
|
|
|
// second param: [<months>-[<days|weeks> [<hours>:[<minutes>:]]]<seconds> |
35
|
|
|
// valid: '10' - runtime every 10 s |
36
|
|
|
// valid: '05:' or '05:00' - runtime every 5 m |
37
|
|
|
// valid: '02::' or '02:00:' or '02:00:00' - runtime every 2 h |
38
|
|
|
// etc |
39
|
|
|
|
40
|
|
|
/* |
41
|
|
|
* Формат |
42
|
|
|
* |
43
|
|
|
* 1. Y-M-D H:I:S - указывает раз в сколько времени должна запускаться задача и где Y, M, D, H, I, S - соответственно количество лет, месяцев, дней, часов, минут, секунд, определяющих интервал |
44
|
|
|
* TODO: 2. [<m|w|d|h|m|s>@]<time> |
45
|
|
|
*/ |
46
|
|
|
|
47
|
|
|
function sys_schedule_get_prev_run($scheduleList, $recorded_run = SN_TIME_NOW, $return_next_run = false) |
48
|
|
|
{ |
49
|
|
|
static $date_part_names_reverse = array('seconds', 'minutes', 'hours', 'days', 'months', 'years',); |
50
|
|
|
|
51
|
|
|
$possible_schedules = array(); |
52
|
|
|
|
53
|
|
|
$recorded_run = strtotime($recorded_run); |
54
|
|
|
|
55
|
|
|
$prev_run_array = getdate($recorded_run); |
56
|
|
|
$prev_run_array = array($prev_run_array['seconds'],$prev_run_array['minutes'],$prev_run_array['hours'],$prev_run_array['mday'],$prev_run_array['mon'],$prev_run_array['year']); |
57
|
|
|
$today_array = getdate(SN_TIME_NOW); |
58
|
|
|
$today_array = array($today_array['seconds'],$today_array['minutes'],$today_array['hours'],$today_array['mday'],$today_array['mon'],$today_array['year']); |
59
|
|
|
$scheduleList = explode(',', $scheduleList); |
60
|
|
|
array_walk($scheduleList, function(&$schedule) use ($prev_run_array, $today_array, $date_part_names_reverse, &$possible_schedules) { |
61
|
|
|
$schedule = array('schedule_array' => array_reverse(explode(':', trim($schedule)))); |
62
|
|
|
|
63
|
|
|
$interval = $date_part_names_reverse[count($schedule['schedule_array'])]; |
64
|
|
|
|
65
|
|
|
foreach($prev_run_array as $index => $date_part) { |
66
|
|
|
$schedule['array']['recorded'][$index] = isset($schedule['schedule_array'][$index]) ? intval($schedule['schedule_array'][$index]) : $date_part; |
67
|
|
|
$schedule['array']['now'][$index] = isset($schedule['schedule_array'][$index]) ? intval($schedule['schedule_array'][$index]) : $today_array[$index]; |
68
|
|
|
} |
69
|
|
|
if($schedule['array']['recorded'] == $schedule['array']['now']) { |
70
|
|
|
unset($schedule['array']['now']); |
71
|
|
|
} |
72
|
|
|
|
73
|
|
|
foreach($schedule['array'] as $name => $array) { |
74
|
|
|
$schedule['string'][$name] = "{$array[5]}-{$array[4]}-{$array[3]} {$array[2]}:{$array[1]}:{$array[0]}"; |
75
|
|
|
$schedule['string'][$name . '_next'] = $schedule['string'][$name] . ' +1 ' . $interval; |
76
|
|
|
$schedule['string'][$name . '_prev'] = $schedule['string'][$name] . ' -1 ' . $interval; |
77
|
|
|
} |
78
|
|
|
|
79
|
|
|
foreach($schedule['string'] as $string) { |
80
|
|
|
$timestamp = strtotime($string); |
81
|
|
|
$schedule['timestamp'][$timestamp] = $possible_schedules[$timestamp] = date(FMT_DATE_TIME_SQL, strtotime($string)); |
82
|
|
|
} |
83
|
|
|
}); |
84
|
|
|
|
85
|
|
|
ksort($possible_schedules); |
86
|
|
|
|
87
|
|
|
$prev_run = 0; |
88
|
|
|
$next_run = 0; |
89
|
|
|
foreach($possible_schedules as $timestamp => $string_date) { |
90
|
|
|
$prev_run = SN_TIME_NOW >= $timestamp ? $timestamp : $prev_run; |
91
|
|
|
$next_run = SN_TIME_NOW < $timestamp && !$next_run ? $timestamp : $next_run; |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
return $return_next_run ? $next_run : $prev_run; |
95
|
|
|
} |
96
|
|
|
|