Вход Регистрация
Файл: gapps/vendor/mtdowling/cron-expression/src/Cron/AbstractField.php
Строк: 122
<?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;
    }

}
Онлайн: 1
Реклама