diff --git a/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php b/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php index 6269957..bd582c0 100644 --- a/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php +++ b/app/Filament/Admin/Resources/Settings/Schemas/SettingForm.php @@ -6,6 +6,7 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; +use Filament\Forms\Components\FileUpload; use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; @@ -54,6 +55,7 @@ class SettingForm 'float' => __('settings.type_float'), 'array' => __('settings.type_array'), 'json' => __('settings.type_json'), + 'file' => __('settings.type_file'), ]) ->live() ->afterStateUpdated(fn (Set $set) => $set('value', null)), @@ -78,10 +80,10 @@ class SettingForm ->label(__('settings.value')) ->helperText(__('settings.value_helper')) ->required() - ->visible(fn (Get $get) => !in_array($get('type'), ['boolean'])) + ->visible(fn (Get $get) => !in_array($get('type'), ['boolean', 'file'])) ->rows(fn (Get $get) => $get('type') === 'text' ? 5 : 3) ->formatStateUsing(function ($state, $record) { - if ($record && $record->type !== 'boolean') { + if ($record && $record->type !== 'boolean' && $record->type !== 'file') { return $record->value; } return $state; @@ -101,6 +103,23 @@ class SettingForm }) ->columnSpanFull(), + FileUpload::make('value_file') + ->label(__('settings.value')) + ->helperText(__('settings.value_helper')) + ->required() + ->visible(fn (Get $get) => $get('type') === 'file') + ->disk('public') + ->directory('settings') + ->acceptedFileTypes(['image/*', 'application/pdf', 'text/*']) + ->maxSize(10240) // 10MB + ->formatStateUsing(function ($state, $record) { + if ($record && $record->type === 'file') { + 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 569bb53..e1caafa 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -15,6 +15,7 @@ class Setting extends Model 'value', 'value_text', 'value_boolean', + 'value_file', 'type', 'group', 'label', @@ -50,6 +51,14 @@ class Setting extends Model $this->attributes['value'] = $value ? '1' : '0'; } + /** + * Set value from different field names + */ + public function setValueFileAttribute($value) + { + $this->attributes['value'] = $value; + } + /** * Get setting by key */ @@ -91,6 +100,7 @@ class Setting extends Model 'integer' => (int) $value, 'float' => (float) $value, 'array', 'json' => json_decode($value, true), + 'file' => $value, // File path as string default => $value, }; } diff --git a/database/migrations/2025_10_23_181906_add_file_type_to_settings_table.php b/database/migrations/2025_10_23_181906_add_file_type_to_settings_table.php new file mode 100644 index 0000000..babec9b --- /dev/null +++ b/database/migrations/2025_10_23_181906_add_file_type_to_settings_table.php @@ -0,0 +1,28 @@ +enum('type', ['string', 'text', 'boolean', 'integer', 'float', 'array', 'json', 'file'])->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'])->default('string')->change(); + }); + } +}; diff --git a/lang/en/settings.php b/lang/en/settings.php index d64d7cd..6892f77 100644 --- a/lang/en/settings.php +++ b/lang/en/settings.php @@ -59,6 +59,7 @@ return [ 'type_float' => 'Float', 'type_array' => 'Array', 'type_json' => 'JSON', + 'type_file' => 'File', // Groups 'group_general' => 'General', diff --git a/lang/tr/settings.php b/lang/tr/settings.php index 4861cfa..112b24c 100644 --- a/lang/tr/settings.php +++ b/lang/tr/settings.php @@ -59,6 +59,7 @@ return [ 'type_float' => 'Ondalıklı Sayı', 'type_array' => 'Dizi', 'type_json' => 'JSON', + 'type_file' => 'Dosya', // Groups 'group_general' => 'Genel',