From 525c4f0f8eed32da70f03081d12d7f7b63537cfe Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 10 Apr 2020 20:04:14 -0500 Subject: [PATCH] use Eloquent mutators/accessors --- app/Models/AlertSchedule.php | 52 +++++++++++++------ config/app.php | 1 + .../2020_04_08_172357_alert_schedule_utc.php | 2 +- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/app/Models/AlertSchedule.php b/app/Models/AlertSchedule.php index bd1cb3a411..0c5ba125e8 100644 --- a/app/Models/AlertSchedule.php +++ b/app/Models/AlertSchedule.php @@ -27,34 +27,45 @@ namespace App\Models; use Carbon\Carbon; use Carbon\CarbonImmutable; +use Date; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; class AlertSchedule extends Model { - /** @property Carbon start */ public $timestamps = false; protected $table = 'alert_schedule'; protected $primaryKey = 'schedule_id'; - protected $casts = [ - 'start' => 'datetime', - 'end' => 'datetime', - ]; protected $appends = ['start_recurring_dt', 'end_recurring_dt', 'start_recurring_hr', 'end_recurring_hr']; + private $timezone; - private $array = [ - 'start_recurring_dt' => $schedule->recurring == 0 ? '' : $start->toDateString(), - 'end_recurring_dt' => $schedule->recurring == 0 || $end->year == 9000 ? '' : $end->toDateString(), - 'start_recurring_hr' => $schedule->recurring == 0 ? '' : $start->toTimeString('minute'), - 'end_recurring_hr' => $schedule->recurring == 0 ? '' : $end->toTimeString('minute'), - 'recurring_day' => $schedule->recurring == 0 ? '' : str_replace($days['from'], $days['to'], $schedule->recurring_day), - ]; + public function __construct(array $attributes = []) + { + parent::__construct($attributes); + $this->timezone = config('app.timezone'); + } // ---- Accessors/Mutators ---- + public function getStartAttribute() { + return Date::parse($this->attributes['start'], 'UTC')->tz($this->timezone); + } + + public function setStartAttribute($start) { + $this->attributes['start'] = $this->fromDateTime(Date::parse($start)->tz('UTC')); + } + + public function getEndAttribute() { + return Date::parse($this->attributes['end'], 'UTC')->tz($this->timezone); + } + + public function setEndAttribute($end) { + $this->attributes['end'] = $this->fromDateTime(Date::parse($end)->tz('UTC')); + } + public function getStartRecurringDtAttribute() { - return $this->start->tz()->toDateString(); + return $this->start->toDateString(); } public function getStartRecurringHrAttribute() { @@ -70,8 +81,19 @@ class AlertSchedule extends Model } public function setStartRecurringDtAttribute($date) { - $date = Carbon::parse($date); - $this->attributes['start']->set + $this->start = $this->start->setDateFrom(Date::parse($date, $this->timezone)); + } + + public function setStartRecurringHrAttribute($time) { + $this->start = $this->start->setTimeFrom(Date::parse($time, $this->timezone)); + } + + public function setEndRecurringDtAttribute($date) { + $this->end = $this->end->setDateFrom(Date::parse($date ?: '9000-09-09', $this->timezone)); + } + + public function setEndRecurringHrAttribute($time) { + $this->end = $this->end->setTimeFrom(Date::parse($time, $this->timezone)); } // ---- Query scopes ---- diff --git a/config/app.php b/config/app.php index ac063164a8..8aeb765d4f 100644 --- a/config/app.php +++ b/config/app.php @@ -212,6 +212,7 @@ return [ 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'Date' => Illuminate\Support\Facades\Date::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, diff --git a/database/migrations/2020_04_08_172357_alert_schedule_utc.php b/database/migrations/2020_04_08_172357_alert_schedule_utc.php index c10a98a255..ce16eff5d5 100644 --- a/database/migrations/2020_04_08_172357_alert_schedule_utc.php +++ b/database/migrations/2020_04_08_172357_alert_schedule_utc.php @@ -14,7 +14,7 @@ class AlertScheduleUtc extends Migration { DB::table('alert_schedule')->update([ 'start' => DB::raw("CONVERT_TZ(IF(`recurring` = 1, STR_TO_DATE(CONCAT(start_recurring_dt, ' ', start_recurring_hr), '%Y-%m-%d %H:%i:%s'), start), @@global.time_zone, '+00:00')"), - 'end' => DB::raw("CONVERT_TZ(IF(`recurring` = 1, STR_TO_DATE(CONCAT(IFNULL(end_recurring_dt, '9000-9-9'), ' ', end_recurring_hr), '%Y-%m-%d %H:%i:%s'), end), @@global.time_zone, '+00:00')"), + 'end' => DB::raw("CONVERT_TZ(IF(`recurring` = 1, STR_TO_DATE(CONCAT(IFNULL(end_recurring_dt, '9000-09-09'), ' ', end_recurring_hr), '%Y-%m-%d %H:%i:%s'), end), @@global.time_zone, '+00:00')"), 'recurring_day' => DB::raw('REPLACE(recurring_day, 0, 7)'), // convert to RFC N date format ]);