From 63d1292bf80d88be40eec7695c1a59f29e6609c5 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Mon, 24 Sep 2018 14:19:13 +0200 Subject: Added EventConfig model --- src/Models/EventConfig.php | 93 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 src/Models/EventConfig.php (limited to 'src') diff --git a/src/Models/EventConfig.php b/src/Models/EventConfig.php new file mode 100644 index 00000000..e2f832cb --- /dev/null +++ b/src/Models/EventConfig.php @@ -0,0 +1,93 @@ + 'date', + 'event_start' => 'date', + 'event_end' => 'date', + 'teardown_end' => 'date', + ]; + + /** @var bool It could be interesting to know when a value changed the last time */ + public $timestamps = true; + + /** + * Value accessor + * + * @param mixed $value + * @return mixed + */ + public function getValueAttribute($value) + { + $value = $this->fromJson($value); + + /** @see \Illuminate\Database\Eloquent\Concerns\HasAttributes::castAttribute */ + if (!empty($value)) { + switch ($this->getValueCast($this->name)) { + case 'date': + return Carbon::createFromFormat('Y-m-d', $value) + ->setTime(0, 0); + case 'datetime': + return Carbon::createFromFormat(Carbon::ISO8601, $value); + } + } + + return $value; + } + + /** + * Value mutator + * + * @param mixed $value + * @return static + */ + public function setValueAttribute($value) + { + if (!empty($value)) { + switch ($this->getValueCast($this->name)) { + case 'date': + /** @var Carbon $value */ + $value = $value->toDateString(); + break; + case 'datetime': + /** @var Carbon $value */ + $value = $value->toIso8601String(); + break; + } + } + + $value = $this->castAttributeAsJson('value', $value); + $this->attributes['value'] = $value; + + return $this; + } + + /** + * Check if the value has to be casted + * + * @param string $value + * @return string|null + */ + protected function getValueCast($value) + { + return isset($this->valueCasts[$value]) ? $this->valueCasts[$value] : null; + } +} -- cgit v1.2.3-54-g00ecf