From 76081f0e8571e25509b5c274d379b4b8d5e10bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Mon, 1 Jun 2026 07:53:59 +0300 Subject: [PATCH] feat: implement internship form upload functionality for interns with database migration and UI integration --- .../Schemas/CareerApplicationForm.php | 7 ++ app/Http/Controllers/CareerController.php | 34 ++++++ app/Models/CareerApplication.php | 1 + ...form_path_to_career_applications_table.php | 28 +++++ .../front/career/intern_dashboard.blade.php | 112 ++++++++++++++++++ routes/web.php | 1 + 6 files changed, 183 insertions(+) create mode 100644 database/migrations/2026_06_01_045241_add_to_be_signed_internship_form_path_to_career_applications_table.php diff --git a/app/Filament/Admin/Resources/CareerApplications/Schemas/CareerApplicationForm.php b/app/Filament/Admin/Resources/CareerApplications/Schemas/CareerApplicationForm.php index 8fcfa2f..0d8b2c3 100644 --- a/app/Filament/Admin/Resources/CareerApplications/Schemas/CareerApplicationForm.php +++ b/app/Filament/Admin/Resources/CareerApplications/Schemas/CareerApplicationForm.php @@ -80,6 +80,13 @@ class CareerApplicationForm ->action(fn (Set $set) => $set('password', Str::random(12))) ), + FileUpload::make('to_be_signed_internship_form_path') + ->label('İmzalanacak Staj Formu (Stajyerden)') + ->disk('public') + ->directory('to_be_signed_interns') + ->downloadable() + ->nullable(), + FileUpload::make('signed_internship_form_path') ->label('İmzalı Staj Formu') ->disk('public') diff --git a/app/Http/Controllers/CareerController.php b/app/Http/Controllers/CareerController.php index 4f9eff5..69cd9fd 100644 --- a/app/Http/Controllers/CareerController.php +++ b/app/Http/Controllers/CareerController.php @@ -128,6 +128,40 @@ class CareerController extends Controller ]); } + public function uploadInternshipForm(Request $request) + { + if (!session()->has('intern_id')) { + return redirect()->route('intern.login')->with('error', 'Lütfen önce giriş yapın.'); + } + + $request->validate([ + 'internship_form' => 'required|file|mimes:pdf,docx,jpg,png,jpeg|max:51200', + ], [ + 'internship_form.required' => 'Lütfen bir dosya seçin.', + 'internship_form.file' => 'Yüklenen öğe geçerli bir dosya olmalıdır.', + 'internship_form.mimes' => 'Yalnızca PDF, DOCX, JPG ve PNG formatındaki dosyalar kabul edilir.', + 'internship_form.max' => 'Dosya boyutu en fazla 50MB olabilir.', + ]); + + $intern = CareerApplication::findOrFail(session('intern_id')); + + if ($request->hasFile('internship_form')) { + // Delete old file if exists + if ($intern->to_be_signed_internship_form_path) { + Storage::disk('public')->delete($intern->to_be_signed_internship_form_path); + } + + $path = $request->file('internship_form')->store('to_be_signed_interns', 'public'); + $intern->update([ + 'to_be_signed_internship_form_path' => $path + ]); + + return redirect()->back()->with('success', 'İmzalanacak staj formunuz başarıyla yüklendi.'); + } + + return redirect()->back()->with('error', 'Dosya yüklenirken bir hata oluştu.'); + } + public function internLogout() { session()->forget('intern_id'); diff --git a/app/Models/CareerApplication.php b/app/Models/CareerApplication.php index 20ff4bb..b8630c6 100644 --- a/app/Models/CareerApplication.php +++ b/app/Models/CareerApplication.php @@ -24,6 +24,7 @@ class CareerApplication extends Model 'username', 'password', 'signed_internship_form_path', + 'to_be_signed_internship_form_path', ]; /** diff --git a/database/migrations/2026_06_01_045241_add_to_be_signed_internship_form_path_to_career_applications_table.php b/database/migrations/2026_06_01_045241_add_to_be_signed_internship_form_path_to_career_applications_table.php new file mode 100644 index 0000000..44757bf --- /dev/null +++ b/database/migrations/2026_06_01_045241_add_to_be_signed_internship_form_path_to_career_applications_table.php @@ -0,0 +1,28 @@ +string('to_be_signed_internship_form_path')->nullable()->after('signed_internship_form_path'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('career_applications', function (Blueprint $table) { + $table->dropColumn('to_be_signed_internship_form_path'); + }); + } +}; diff --git a/resources/views/front/career/intern_dashboard.blade.php b/resources/views/front/career/intern_dashboard.blade.php index 6934597..fbf4b19 100644 --- a/resources/views/front/career/intern_dashboard.blade.php +++ b/resources/views/front/career/intern_dashboard.blade.php @@ -21,6 +21,35 @@ + + @if(session('success')) +
+ + {{ session('success') }} +
+ @endif + + @if(session('error')) +
+ + {{ session('error') }} +
+ @endif + + @if($errors->any()) +
+
+ + Lütfen aşağıdaki hataları düzeltin: +
+ +
+ @endif +
@@ -87,6 +116,64 @@ @endif
+ +
+
+
+
+ +
+
+

İmzalanacak Staj Formu

+ @if($intern->to_be_signed_internship_form_path) +

Staj formunuz başarıyla yüklendi. İmza işlemleri için hazır.

+ @else +

İmzalanmasını istediğiniz staj formunu buradan yükleyebilirsiniz.

+ @endif +
+
+ +
+ @if($intern->to_be_signed_internship_form_path) + + + Görüntüle + + + @else + + @endif +
+
+ + +
+
+ @csrf +
+ + +

Dosya Seçin veya Sürükleyin

+

PDF, DOCX, JPG veya PNG (Maks. 50MB)

+

+
+ +
+ +
+
+
+
+
@@ -128,6 +215,31 @@ @push('styles') +