*/ 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'); }); } /** @return \Illuminate\Database\Eloquent\Casts\Attribute */ protected function planificatedStatus(): Attribute { return Attribute::get(fn (): bool => DatesHelper::isIn($this->date_start, $this->date_end)); } private static function manageFields(self $model): void { $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); if (is_null($model->order)) { // @phpstan-ignore argument.type $model->order = intval(self::query()->max('order')); } } 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( 'La publication est modifiée en concordance avec les dates enregistrées. Pour modifier l\'état de publication, veuillez modifier ou enlever les dates correspondantes.' )); } } #[\Override] protected function casts(): array { return [ 'link_new_tab' => 'bool', 'connected' => 'bool', 'status' => 'bool', 'order' => 'int', 'date_start' => 'datetime', 'date_end' => 'datetime', ]; } }