Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class PrimitiveTime extends ComplexPrimitive
00016 {
00017 const HOURS = PrimitiveTimestamp::HOURS;
00018 const MINUTES = PrimitiveTimestamp::MINUTES;
00019 const SECONDS = PrimitiveTimestamp::SECONDS;
00020
00025 public function setValue( $time)
00026 {
00027 Assert::isTrue($time instanceof Time);
00028
00029 $this->value = $time;
00030
00031 return $this;
00032 }
00033
00038 public function setMin( $time)
00039 {
00040 Assert::isTrue($time instanceof Time);
00041
00042 $this->min = $time;
00043
00044 return $this;
00045 }
00046
00051 public function setMax( $time)
00052 {
00053 Assert::isTrue($time instanceof Time);
00054
00055 $this->max = $time;
00056
00057 return $this;
00058 }
00059
00064 public function setDefault( $time)
00065 {
00066 Assert::isTrue($time instanceof Time);
00067
00068 $this->default = $time;
00069
00070 return $this;
00071 }
00072
00073 public function importSingle($scope)
00074 {
00075 if (!BasePrimitive::import($scope))
00076 return null;
00077
00078 try {
00079 $time = new Time($scope[$this->name]);
00080 } catch (WrongArgumentException $e) {
00081 return false;
00082 }
00083
00084 if ($this->checkLimits($time)) {
00085 $this->value = $time;
00086
00087 return true;
00088 }
00089
00090 return false;
00091 }
00092
00093 public function isEmpty($scope)
00094 {
00095 if ($this->getState()->isFalse())
00096 return $this->isMarriedEmpty($scope);
00097
00098 return empty($scope[$this->name]);
00099 }
00100
00101 public function importMarried($scope)
00102 {
00103 if (
00104 BasePrimitive::import($scope)
00105 && is_array($scope[$this->name])
00106 && !$this->isMarriedEmpty($scope)
00107 ) {
00108 $this->raw = $scope[$this->name];
00109 $this->imported = true;
00110
00111 $hours = $minutes = $seconds = 0;
00112
00113 if (isset($scope[$this->name][self::HOURS]))
00114 $hours = (int) $scope[$this->name][self::HOURS];
00115
00116 if (isset($scope[$this->name][self::MINUTES]))
00117 $minutes = (int) $scope[$this->name][self::MINUTES];
00118
00119 if (isset($scope[$this->name][self::SECONDS]))
00120 $seconds = (int) $scope[$this->name][self::SECONDS];
00121
00122 try {
00123 $time = new Time($hours.':'.$minutes.':'.$seconds);
00124 } catch (WrongArgumentException $e) {
00125 return false;
00126 }
00127
00128 if ($this->checkLimits($time)) {
00129 $this->value = $time;
00130
00131 return true;
00132 }
00133 }
00134
00135 return false;
00136 }
00137
00138 public function import($scope)
00139 {
00140 if ($this->isEmpty($scope)) {
00141 $this->value = null;
00142 $this->raw = null;
00143 return null;
00144 }
00145
00146 return parent::import($scope);
00147 }
00148
00149 public function importValue($value)
00150 {
00151 if ($value)
00152 Assert::isTrue($value instanceof Time);
00153 else
00154 return parent::importValue(null);
00155
00156 return
00157 $this->importSingle(
00158 array($this->getName() => $value->toFullString())
00159 );
00160 }
00161
00162 private function isMarriedEmpty($scope)
00163 {
00164 return empty($scope[$this->name][self::HOURS])
00165 || empty($scope[$this->name][self::MINUTES])
00166 || empty($scope[$this->name][self::SECONDS]);
00167 }
00168
00169 private function checkLimits(Time $time)
00170 {
00171 return
00172 !($this->min && $this->min->toSeconds() > $time->toSeconds())
00173 && !($this->max && $this->max->toSeconds() < $time->toSeconds());
00174 }
00175 }
00176 ?>