From 7e269e654371547eb5f5ff05e4ba033b926082a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Thu, 23 Oct 2025 15:27:58 -0300 Subject: [PATCH] Enhance settings form and model: Added support for date and datetime types in SettingForm with corresponding fields and visibility logic. Updated Setting model to handle new value types and modified migration to include date and datetime in the type enum. Enhanced localization files to support new type labels in both English and Turkish. --- .../Settings/Schemas/SettingForm.php | 39 ++++++++++++++++++- app/Models/Setting.php | 20 ++++++++++ ..._date_datetime_types_to_settings_table.php | 28 +++++++++++++ lang/en/settings.php | 2 + lang/tr/settings.php | 2 + 5 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 database/migrations/2025_10_23_182459_add_date_datetime_types_to_settings_table.php diff --git a/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php b/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php index bd582c0..ce7704f 100644 --- a/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php +++ b/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php @@ -7,6 +7,8 @@ use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Forms\Components\FileUpload; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\DatePicker; use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; @@ -56,6 +58,8 @@ class SettingForm 'array' => __('settings.type_array'), 'json' => __('settings.type_json'), 'file' => __('settings.type_file'), + 'date' => __('settings.type_date'), + 'datetime' => __('settings.type_datetime'), ]) ->live() ->afterStateUpdated(fn (Set $set) => $set('value', null)), @@ -80,10 +84,10 @@ class SettingForm ->label(__('settings.value')) ->helperText(__('settings.value_helper')) ->required() - ->visible(fn (Get $get) => !in_array($get('type'), ['boolean', 'file'])) + ->visible(fn (Get $get) => !in_array($get('type'), ['boolean', 'file', 'date', 'datetime'])) ->rows(fn (Get $get) => $get('type') === 'text' ? 5 : 3) ->formatStateUsing(function ($state, $record) { - if ($record && $record->type !== 'boolean' && $record->type !== 'file') { + if ($record && !in_array($record->type, ['boolean', 'file', 'date', 'datetime'])) { return $record->value; } return $state; @@ -120,6 +124,37 @@ class SettingForm }) ->columnSpanFull(), + DatePicker::make('value_date') + ->label(__('settings.value')) + ->helperText(__('settings.value_helper')) + ->required() + ->visible(fn (Get $get) => $get('type') === 'date') + ->displayFormat('d/m/Y') + ->format('Y-m-d') + ->formatStateUsing(function ($state, $record) { + if ($record && $record->type === 'date') { + return $record->value; + } + return $state; + }) + ->columnSpanFull(), + + DateTimePicker::make('value_datetime') + ->label(__('settings.value')) + ->helperText(__('settings.value_helper')) + ->required() + ->visible(fn (Get $get) => $get('type') === 'datetime') + ->displayFormat('d/m/Y H:i') + ->format('Y-m-d H:i:s') + ->seconds(false) + ->formatStateUsing(function ($state, $record) { + if ($record && $record->type === 'datetime') { + return $record->value; + } + return $state; + }) + ->columnSpanFull(), + Toggle::make('is_active') ->label(__('settings.is_active')) ->helperText(__('settings.is_active_helper')) diff --git a/app/Models/Setting.php b/app/Models/Setting.php index e1caafa..cd23e6c 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -16,6 +16,8 @@ class Setting extends Model 'value_text', 'value_boolean', 'value_file', + 'value_date', + 'value_datetime', 'type', 'group', 'label', @@ -59,6 +61,22 @@ class Setting extends Model $this->attributes['value'] = $value; } + /** + * Set value from different field names + */ + public function setValueDateAttribute($value) + { + $this->attributes['value'] = $value; + } + + /** + * Set value from different field names + */ + public function setValueDatetimeAttribute($value) + { + $this->attributes['value'] = $value; + } + /** * Get setting by key */ @@ -101,6 +119,8 @@ class Setting extends Model 'float' => (float) $value, 'array', 'json' => json_decode($value, true), 'file' => $value, // File path as string + 'date' => $value, // Date as string (Y-m-d format) + 'datetime' => $value, // DateTime as string (Y-m-d H:i:s format) default => $value, }; } diff --git a/database/migrations/2025_10_23_182459_add_date_datetime_types_to_settings_table.php b/database/migrations/2025_10_23_182459_add_date_datetime_types_to_settings_table.php new file mode 100644 index 0000000..fe31a22 --- /dev/null +++ b/database/migrations/2025_10_23_182459_add_date_datetime_types_to_settings_table.php @@ -0,0 +1,28 @@ +enum('type', ['string', 'text', 'boolean', 'integer', 'float', 'array', 'json', 'file', 'date', 'datetime'])->default('string')->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('settings', function (Blueprint $table) { + $table->enum('type', ['string', 'text', 'boolean', 'integer', 'float', 'array', 'json', 'file'])->default('string')->change(); + }); + } +}; diff --git a/lang/en/settings.php b/lang/en/settings.php index 6892f77..a195c98 100644 --- a/lang/en/settings.php +++ b/lang/en/settings.php @@ -60,6 +60,8 @@ return [ 'type_array' => 'Array', 'type_json' => 'JSON', 'type_file' => 'File', + 'type_date' => 'Date', + 'type_datetime' => 'Date & Time', // Groups 'group_general' => 'General', diff --git a/lang/tr/settings.php b/lang/tr/settings.php index 112b24c..312453a 100644 --- a/lang/tr/settings.php +++ b/lang/tr/settings.php @@ -60,6 +60,8 @@ return [ 'type_array' => 'Dizi', 'type_json' => 'JSON', 'type_file' => 'Dosya', + 'type_date' => 'Tarih', + 'type_datetime' => 'Tarih ve Saat', // Groups 'group_general' => 'Genel',