*/ use HasFactory; use HasOrder; use HasStatus; #[\Override] protected static function booted() { static::creating(function (self $model): void { self::manageFields($model); self::makeStatusSense($model); }); static::updating(function (self $model): void { self::manageFields($model); self::makeStatusSense($model); }); static::deleting(function (self $model): void { FileStorageHelper::removeFile($model, 'picture'); }); } public function isVisible(): bool { return DatesHelper::isIn($this->date_start, $this->date_end); } /** @return \Illuminate\Database\Eloquent\Casts\Attribute */ protected function planificatedStatus(): Attribute { return Attribute::get(fn (): bool => $this->isVisible()); } private static function manageFields(self $model): void { $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); if ($model->order === null) { $max = self::query()->max('order'); $model->order = is_scalar($max) ? intval($max) + 1 : 1; } } private static function makeStatusSense(self $model): void { $actualStatus = $model->status; $model->status = $model->planificatedStatus; if ($actualStatus !== $model->status) { resolve(Session::class)->flash('bo.info', \trans( 'The publication status is updated according to the scheduled dates. ' . 'To change the publication status, please edit or remove the corresponding dates.' )); } } #[\Override] protected function casts(): array { return [ 'link_new_tab' => 'bool', 'connected' => 'bool', 'status' => 'bool', 'order' => 'int', 'date_start' => 'datetime', 'date_end' => 'datetime', ]; } }