SliderElementPosition::class, 'picture_position_mobile' => SliderElementPosition::class, 'type' => SliderType::class ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'title_color' => RgbaColorNullable::class, 'title_color_bg' => RgbaColorNullable::class, 'subtitle_color' => RgbaColorNullable::class, 'subtitle_color_bg' => RgbaColorNullable::class, 'link_color' => RgbaColorNullable::class, 'link_color_hover' => RgbaColorNullable::class, 'link_color_bg' => RgbaColorNullable::class, 'link_color_bg_hover' => RgbaColorNullable::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 = FileStorageHelper::storeFile($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 = FileStorageHelper::storeFile($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 = FileStorageHelper::removeOldFile($model, 'picture'); } }); static::deleting(function (self $model) { FileStorageHelper::removeFile($model, 'picture'); }); } // * METHODS }