Root/
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 | <?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 ( '-' , $value , 2)); 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 ( '/' , $value , 2)); $stepSize = isset( $parts [1]) ? $parts [1] : 0; if (( $parts [0] == '*' || $parts [0] === '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 && 0 === $stepSize ) { return false; } for ( $i = $offset ; $i <= $to ; $i += $stepSize ) { if ( $i == $dateValue ) { return true; } } return false; } } |