HCE Project DC service web UI  0.2
Hierarchical Cluster Engine DC service web UI
 All Classes Namespaces Files Functions Variables Pages
AbstractField.php
Go to the documentation of this file.
1 <?php
2 
8 abstract class AbstractField implements FieldInterface
9 {
18  public function isSatisfied($dateValue, $value)
19  {
20  if ($this->isIncrementsOfRanges($value)) {
21  return $this->isInIncrementsOfRanges($dateValue, $value);
22  } elseif ($this->isRange($value)) {
23  return $this->isInRange($dateValue, $value);
24  }
25 
26  return $value == '*' || $dateValue == $value;
27  }
28 
36  public function isRange($value)
37  {
38  return strpos($value, '-') !== false;
39  }
40 
48  public function isIncrementsOfRanges($value)
49  {
50  return strpos($value, '/') !== false;
51  }
52 
61  public function isInRange($dateValue, $value)
62  {
63  $parts = array_map('trim', explode('-', $value, 2));
64 
65  return $dateValue >= $parts[0] && $dateValue <= $parts[1];
66  }
67 
76  public function isInIncrementsOfRanges($dateValue, $value)
77  {
78  $parts = array_map('trim', explode('/', $value, 2));
79  $stepSize = isset($parts[1]) ? $parts[1] : 0;
80  if ($parts[0] == '*' || $parts[0] == 0) {
81  return (int) $dateValue % $stepSize == 0;
82  }
83 
84  $range = explode('-', $parts[0], 2);
85  $offset = $range[0];
86  $to = isset($range[1]) ? $range[1] : $dateValue;
87  // Ensure that the date value is within the range
88  if ($dateValue < $offset || $dateValue > $to) {
89  return false;
90  }
91 
92  for ($i = $offset; $i <= $to; $i += $stepSize) {
93  if ($i == $dateValue) {
94  return true;
95  }
96  }
97 
98  return false;
99  }
100 }