Jacek Kowalski
2012-06-25 847d7cb0adee736f1a7f7f18fea514ce7babd614
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
// Skrypt aktualizujący dane pobierane okresowo.
 
define('MAINSTAR', ' '."\033".'[1;37m*'.' ');
define('NORMAL', "\033".'[0m');
define('STAR', '    '."\033".'[1;34m*'."\033".'[0m ');
define('OK', "\033[55G\033[32m".'[  OK  ]'."\033[0m\n");
define('NOT', "\033[55G\033[33m".'[  OK  ]'."\033[0m\n");
define('FAIL', "\033[55G\033[31m".'[ FAIL ]'."\033[0m\n");
 
echo "\033".'[1;37;44m   Bot GG - Skrypt aktualizujący ('.date('d.m.Y H:i:s').')'."\033".'[K'."\033".'[0m'."\n\n";
 
function crontab_field($field, $number) {
    $field = explode(',', $field);
    foreach($field as $one) {
        $mod = FALSE;
        $range_start = 0;
        $range_stop = 0;
        
        if(($pos=strpos($one, '/'))!==FALSE) {
            $mod = (int)substr($one, $pos+1);
            if($mod==0) {
                continue;
            }
            $one = substr($one, 0, $pos);
        }
        
        if($one != '*') {
            if(($pos=strpos($one, '-'))!==FALSE) {
                $range_start = (int)substr($one, 0, $pos);
                $range_stop = (int)substr($one, $pos+1);
            }
            else
            {
                $range_start = $one;
                $range_stop = $one;
            }
            
            if($range_start > $number OR $range_stop < $number) {
                continue;
            }
        }
        
        if($mod && ($number-$range_start)%$mod != 0) {
            continue;
        }
        
        return TRUE;
    }
    
    return FALSE;
}
 
function crontab_match($line) {
    $parts = preg_split('/[\40\t]+/', $line, 6);
    // Minutes part - skip
    
    // Hour part
    if(!crontab_field($parts[1], date('H'))) {
        return FALSE;
    }
    
    // Day part
    if(!crontab_field($parts[2], date('j'))) {
        return FALSE;
    }
    
    // Month part
    if(!crontab_field($parts[3], date('n'))) {
        return FALSE;
    }
    
    // Weekday part
    if(!crontab_field($parts[4], date('w'))) {
        return FALSE;
    }
    
    return $parts[5];
}
 
function launch($file) {
    return include($file);
}
 
function crontab_parse($dir) {
    chdir($dir);
    
    $done = FALSE;
    
    $file = file('crontab');
    foreach($file as $line) {
        $line = trim($line);
        if(empty($line) || substr($line, 0, 1)=='#') continue;
        
        $ret = crontab_match($line);
        if($ret) {
            if(!$done)
                echo "\n";
            launch($ret);
            $done = TRUE;
        }
    }
    
    if(!$done) {
        echo NOT;
    }
    
    chdir('..');
}
 
chdir(dirname(__FILE__));
 
$dirs = glob('./*', GLOB_ONLYDIR);
foreach($dirs as $dir) {
    if(file_exists($dir.'/crontab')) {
        echo MAINSTAR.'Moduł '.basename($dir).NORMAL;
        crontab_parse($dir);
    }
}
 
echo "\n";
?>