Example #1
0
 /**
  * Check the record.
  * @param array $entrie
  * @param DateTime $time
  * @return boolean
  */
 public static function check($entrie, $time)
 {
     $time = Config::formatTime($time);
     foreach ($time as $type => $value) {
         if ($type == 'year') {
             continue;
         }
         if (($type == 'month' || $type == 'dow') && is_string($entrie[$type]) && array_key_exists($entrie[$type], Config::$txtToInt[$type])) {
             $entrie[$type] = Config::$txtToInt[$type][$entrie[$type]];
         }
         // example: *
         if ($entrie[$type] == '*') {
             continue;
         }
         // example: 23
         if (is_numeric($entrie[$type]) && (int) $entrie[$type] <= Config::$maximum[$type] && $value == (int) $entrie[$type]) {
             continue;
         }
         // example: */15
         if (preg_match("/^\\*\\/(\\d+)\$/", $entrie[$type], $out)) {
             if (is_numeric($out[1]) && (int) $out[1] <= Config::$maximum[$type] && $value % (int) $out[1] == 0) {
                 continue;
             }
         }
         // example: 5-15
         if (preg_match("/^(\\d+)\\-(\\d+)\$/", $entrie[$type], $out)) {
             if (is_numeric($out[1]) && is_numeric($out[2]) && (int) $out[1] <= Config::$maximum[$type] && $out[2] <= Config::$maximum[$type] && $out[2] > $out[1] && $value >= $out[1] && $value <= $out[2]) {
                 continue;
             }
         }
         // example: 5-15/2
         if (preg_match("/^(\\d+)\\-(\\d+)\\/(\\d+)\$/", $entrie[$type], $out)) {
             if (is_numeric($out[1]) && is_numeric($out[2]) && is_numeric($out[3]) && (int) $out[1] <= Config::$maximum[$type] && $out[2] <= Config::$maximum[$type] && $out[3] <= Config::$maximum[$type] && $out[2] > $out[1] && $value >= $out[1] && $value <= $out[2] && $value % (int) $out[3] == 0) {
                 continue;
             }
         }
         // example: 5,7,12
         $out = explode(',', $entrie[$type]);
         if (count($out) > 1 && in_array($value, $out)) {
             $key = array_search($value, $out);
             if (is_numeric($out[$key]) && (int) $out[$key] <= Config::$maximum[$type]) {
                 continue;
             }
         }
         return false;
     }
     return true;
 }