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',