SliderPosition::class, 'type' => SliderType::class ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'title_color' => HtmlColor::class, 'title_color_bg' => HtmlColor::class, 'subtitle_color' => HtmlColor::class, 'subtitle_color_bg' => HtmlColor::class, 'link_color' => HtmlColor::class, 'link_color_bg' => HtmlColor::class, 'link_new_tab' => 'bool', 'status' => 'bool', 'publish_at' => 'datetime', 'unpublish_at' => 'datetime' ]; /** * Perform any actions required after the model boots. * * @return void */ protected static function booted() { static::creating(function (self $model) { ToolboxHelper::assertNoInternalBoUrls('link', $model->link); $model->picture = ToolboxHelper::storeImage($model, $model->picture); $model->order = self::whereType($model->type)->max('order') ?? 0; if (!$model->status) { $model->publish_at = null; } else { $model->unpublish_at = null; } }); static::updating(function (self $model) { ToolboxHelper::assertNoInternalBoUrls('link', $model->link); if ($model->picture != $model->getOriginal('picture')) { $model->picture = ToolboxHelper::storeImage($model, $model->picture); } // * If status changed if (\boolval($model->getOriginal('status')) !== $model->status) { if ($model->status) { $model->publish_at = null; Session::flash('info', trans('Le slider est à présent publié')); } else { $model->unpublish_at = null; Session::flash('warning', trans('Le slider est à présent dépublié')); } } }); static::updated(function (self $model) { if ($model->picture != $model->getOriginal('picture')) { $model->picture = ToolboxHelper::removeOldImage($model, 'picture'); } }); static::deleting(function (self $model) { ToolboxHelper::removeImage($model, 'picture'); }); } // * METHODS /** * updated_at_date getter * * @return string */ public function getUpdatedAtDateAttribute(): string { return (new NiceDate())->get($this, 'updated_at', $this->updated_at, []); } }