Spaces:
Sleeping
Sleeping
processmaker-community / processmaker-files /vendor /mtdowling /cron-expression /src /Cron /AbstractField.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]) ? (int) $parts[1] : 0; | |
| if ($stepSize === 0) { | |
| return false; | |
| } | |
| if (($parts[0] == '*' || $parts[0] === '0')) { | |
| 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; | |
| } | |
| /** | |
| * 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('/', $expression, 2)); | |
| $stepSize = isset($range[1]) ? $range[1] : 0; | |
| $range = $range[0]; | |
| $range = explode('-', $range, 2); | |
| $offset = $range[0]; | |
| $to = isset($range[1]) ? $range[1] : $max; | |
| } | |
| $offset = $offset == '*' ? 0 : $offset; | |
| for ($i = $offset; $i <= $to; $i += $stepSize) { | |
| $values[] = $i; | |
| } | |
| sort($values); | |
| } | |
| else { | |
| $values = array($expression); | |
| } | |
| return $values; | |
| } | |
| } | |