1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeaunamespace Cron; 4*37748cd8SNickeau 5*37748cd8SNickeauuse DateTime; 6*37748cd8SNickeau 7*37748cd8SNickeau 8*37748cd8SNickeau/** 9*37748cd8SNickeau * Minutes field. Allows: * , / - 10*37748cd8SNickeau */ 11*37748cd8SNickeauclass MinutesField extends AbstractField 12*37748cd8SNickeau{ 13*37748cd8SNickeau public function isSatisfiedBy(DateTime $date, $value) 14*37748cd8SNickeau { 15*37748cd8SNickeau return $this->isSatisfied($date->format('i'), $value); 16*37748cd8SNickeau } 17*37748cd8SNickeau 18*37748cd8SNickeau public function increment(DateTime $date, $invert = false, $parts = null) 19*37748cd8SNickeau { 20*37748cd8SNickeau if (is_null($parts)) { 21*37748cd8SNickeau if ($invert) { 22*37748cd8SNickeau $date->modify('-1 minute'); 23*37748cd8SNickeau } else { 24*37748cd8SNickeau $date->modify('+1 minute'); 25*37748cd8SNickeau } 26*37748cd8SNickeau return $this; 27*37748cd8SNickeau } 28*37748cd8SNickeau 29*37748cd8SNickeau $parts = strpos($parts, ',') !== false ? explode(',', $parts) : array($parts); 30*37748cd8SNickeau $minutes = array(); 31*37748cd8SNickeau foreach ($parts as $part) { 32*37748cd8SNickeau $minutes = array_merge($minutes, $this->getRangeForExpression($part, 59)); 33*37748cd8SNickeau } 34*37748cd8SNickeau 35*37748cd8SNickeau $current_minute = $date->format('i'); 36*37748cd8SNickeau $position = $invert ? count($minutes) - 1 : 0; 37*37748cd8SNickeau if (count($minutes) > 1) { 38*37748cd8SNickeau for ($i = 0; $i < count($minutes) - 1; $i++) { 39*37748cd8SNickeau if ((!$invert && $current_minute >= $minutes[$i] && $current_minute < $minutes[$i + 1]) || 40*37748cd8SNickeau ($invert && $current_minute > $minutes[$i] && $current_minute <= $minutes[$i + 1])) { 41*37748cd8SNickeau $position = $invert ? $i : $i + 1; 42*37748cd8SNickeau break; 43*37748cd8SNickeau } 44*37748cd8SNickeau } 45*37748cd8SNickeau } 46*37748cd8SNickeau 47*37748cd8SNickeau if ((!$invert && $current_minute >= $minutes[$position]) || ($invert && $current_minute <= $minutes[$position])) { 48*37748cd8SNickeau $date->modify(($invert ? '-' : '+') . '1 hour'); 49*37748cd8SNickeau $date->setTime($date->format('H'), $invert ? 59 : 0); 50*37748cd8SNickeau } 51*37748cd8SNickeau else { 52*37748cd8SNickeau $date->setTime($date->format('H'), $minutes[$position]); 53*37748cd8SNickeau } 54*37748cd8SNickeau 55*37748cd8SNickeau return $this; 56*37748cd8SNickeau } 57*37748cd8SNickeau 58*37748cd8SNickeau public function validate($value) 59*37748cd8SNickeau { 60*37748cd8SNickeau return (bool) preg_match('/^[\*,\/\-0-9]+$/', $value); 61*37748cd8SNickeau } 62*37748cd8SNickeau} 63