/var/www/hkosl.com/littleark/webadmin/libraies/mtdowling/cron-expression/src/Cron/AbstractField.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
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php

namespace Cron;

/**
 * Abstract CRON expression field
 */
abstract class AbstractField implements FieldInterface
{
    
/**
     * Check to see if a field is satisfied by a value
     *
     * @param string $dateValue Date value to check
     * @param string $value     Value to test
     *
     * @return bool
     */
    
public function isSatisfied($dateValue$value)
    {
        if (
$this->isIncrementsOfRanges($value)) {
            return 
$this->isInIncrementsOfRanges($dateValue$value);
        } elseif (
$this->isRange($value)) {
            return 
$this->isInRange($dateValue$value);
        }

        return 
$value == '*' || $dateValue == $value;
    }

    
/**
     * Check if a value is a range
     *
     * @param string $value Value to test
     *
     * @return bool
     */
    
public function isRange($value)
    {
        return 
strpos($value'-') !== false;
    }

    
/**
     * Check if a value is an increments of ranges
     *
     * @param string $value Value to test
     *
     * @return bool
     */
    
public function isIncrementsOfRanges($value)
    {
        return 
strpos($value'/') !== false;
    }

    
/**
     * Test if a value is within a range
     *
     * @param string $dateValue Set date value
     * @param string $value     Value to test
     *
     * @return bool
     */
    
public function isInRange($dateValue$value)
    {
        
$parts array_map('trim'explode('-'$value2));

        return 
$dateValue >= $parts[0] && $dateValue <= $parts[1];
    }

    
/**
     * Test if a value is within an increments of ranges (offset[-to]/step size)
     *
     * @param string $dateValue Set date value
     * @param string $value     Value to test
     *
     * @return bool
     */
    
public function isInIncrementsOfRanges($dateValue$value)
    {
        
$parts array_map('trim'explode('/'$value2));
        
$stepSize = isset($parts[1]) ? $parts[1] : 0;
        if ((
$parts[0] == '*' || $parts[0] === '0') && !== $stepSize) {
            return (int) 
$dateValue $stepSize == 0;
        }

        
$range explode('-'$parts[0], 2);
        
$offset $range[0];
        
$to = isset($range[1]) ? $range[1] : $dateValue;
        
// Ensure that the date value is within the range
        
if ($dateValue $offset || $dateValue $to) {
            return 
false;
        }

        if (
$dateValue $offset && === $stepSize) {
          return 
false;
        }

        for (
$i $offset$i <= $to$i+= $stepSize) {
            if (
$i == $dateValue) {
                return 
true;
            }
        }

        return 
false;
    }

    
/**
     * Returns a range of values for the given cron expression
     *
     * @param string $expression The expression to evaluate
     * @param int $max           Maximum offset for range
     *
     * @return array
     */
    
public function getRangeForExpression($expression$max)
    {
        
$values = array();

        if (
$this->isRange($expression) || $this->isIncrementsOfRanges($expression)) {
            if (!
$this->isIncrementsOfRanges($expression)) {
                list (
$offset$to) = explode('-'$expression);
                
$stepSize 1;
            }
            else {
                
$range array_map('trim'explode('/'$expression2));
                
$stepSize = isset($range[1]) ? $range[1] : 0;
                
$range $range[0];
                
$range explode('-'$range2);
                
$offset $range[0];
                
$to = isset($range[1]) ? $range[1] : $max;
            }
            
$offset $offset == '*' $offset;
            for (
$i $offset$i <= $to$i += $stepSize) {
                
$values[] = $i;
            }
            
sort($values);
        }
        else {
            
$values = array($expression);
        }

        return 
$values;
    }

}