1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace JhFlexiTime\Options; |
4
|
|
|
|
5
|
|
|
use Zend\Stdlib\AbstractOptions; |
6
|
|
|
|
7
|
|
|
/** |
8
|
|
|
* Class BookingOptions |
9
|
|
|
* @package JhFlexiTime\Options |
10
|
|
|
* @author Aydin Hassan <[email protected]> |
11
|
|
|
*/ |
12
|
|
|
class BookingOptions extends AbstractOptions implements BookingOptionsInterface |
13
|
|
|
{ |
14
|
|
|
|
15
|
|
|
/** |
16
|
|
|
* @var false|string |
17
|
|
|
*/ |
18
|
|
|
protected $minStartTime = false; |
19
|
|
|
|
20
|
|
|
/** |
21
|
|
|
* @var false|string |
22
|
|
|
*/ |
23
|
|
|
protected $maxStartTime = false; |
24
|
|
|
|
25
|
|
|
/** |
26
|
|
|
* @var false|string |
27
|
|
|
*/ |
28
|
|
|
protected $minEndTime = false; |
29
|
|
|
|
30
|
|
|
/** |
31
|
|
|
* @var false|string |
32
|
|
|
*/ |
33
|
|
|
protected $maxEndTime = false; |
34
|
|
|
|
35
|
|
|
/** |
36
|
|
|
* @return bool|string |
37
|
|
|
*/ |
38
|
|
|
public function getMinStartTime() |
39
|
|
|
{ |
40
|
|
|
return $this->minStartTime; |
41
|
|
|
} |
42
|
|
|
|
43
|
|
|
/** |
44
|
|
|
* @return bool|string |
45
|
|
|
*/ |
46
|
|
|
public function getMaxStartTime() |
47
|
|
|
{ |
48
|
|
|
return $this->maxStartTime; |
49
|
|
|
} |
50
|
|
|
|
51
|
|
|
/** |
52
|
|
|
* @return bool|string |
53
|
|
|
*/ |
54
|
|
|
public function getMinEndTime() |
55
|
|
|
{ |
56
|
|
|
return $this->minEndTime; |
57
|
|
|
} |
58
|
|
|
|
59
|
|
|
/** |
60
|
|
|
* @return bool|string |
61
|
|
|
*/ |
62
|
|
|
public function getMaxEndTime() |
63
|
|
|
{ |
64
|
|
|
return $this->maxEndTime; |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
/** |
68
|
|
|
* @param string $key |
69
|
|
|
* @param string|false $value |
70
|
|
|
* @throws \InvalidArgumentException |
71
|
|
|
* @throws \BadMethodCallException |
72
|
|
|
*/ |
73
|
|
|
public function __set($key, $value) |
74
|
|
|
{ |
75
|
|
|
$property = lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $key)))); |
76
|
|
|
if (property_exists($this, $property)) { |
77
|
|
|
|
78
|
|
|
if ($this->validateTime($value)) { |
|
|
|
|
79
|
|
|
$this->$property = $value; |
80
|
|
|
} else { |
81
|
|
|
throw new \InvalidArgumentException(sprintf("%s should be a 24 hour time in the format HH:MM", $key)); |
82
|
|
|
} |
83
|
|
|
} else { |
84
|
|
|
throw new \BadMethodCallException( |
85
|
|
|
sprintf('The option "%s" is not a valid property', $key) |
86
|
|
|
); |
87
|
|
|
} |
88
|
|
|
} |
89
|
|
|
|
90
|
|
|
/** |
91
|
|
|
* @param string $time |
92
|
|
|
* @return bool |
93
|
|
|
*/ |
94
|
|
|
public function validateTime($time) |
95
|
|
|
{ |
96
|
|
|
if ($time === false) { |
97
|
|
|
return true; |
98
|
|
|
} |
99
|
|
|
|
100
|
|
|
if (preg_match("/(2[0-3]|[01][0-9]):[0-5][0-9]/", $time)) { |
101
|
|
|
return true; |
102
|
|
|
} |
103
|
|
|
|
104
|
|
|
return false; |
105
|
|
|
} |
106
|
|
|
} |
107
|
|
|
|
This check looks at variables that have been passed in as parameters and are passed out again to other methods.
If the outgoing method call has stricter type requirements than the method itself, an issue is raised.
An additional type check may prevent trouble.