diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index bf5fc25..f1df43b 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -7,6 +7,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Yajra\DataTables\Facades\DataTables; use App\Models\ActivitiesAttended; +use Illuminate\Support\Facades\Storage; class AdminController extends Controller { @@ -22,6 +23,89 @@ class AdminController extends Controller return view('admin.activities-attended-responses'); } + public function edit($id) + { + $response = ActivitiesAttended::findOrFail($id); + return view('admin.activities-attended.edit', compact('response')); + } + + public function update(Request $request, $id) + { + $response = ActivitiesAttended::findOrFail($id); + + // Validate the request data + $validated = $request->validate([ + 'title' => 'required|string', + 'organising_institute' => 'required|string', + 'address' => 'required|string', + 'start_date' => 'required|date', + 'start_time' => 'required|date_format:H:i', + 'end_date' => 'required|date', + 'end_time' => 'required|date_format:H:i', + 'num_days' => 'required|integer', + 'activity_type' => 'required|string', + 'category' => 'required|string', + 'level' => 'required|string', + 'proof' => 'nullable|mimes:jpg,jpeg,png,pdf,doc,docx,zip', + ]); + + // Combine start date and time + $startDateTime = date('Y-m-d H:i:s', strtotime("{$validated['start_date']} {$validated['start_time']}")); + $endDateTime = date('Y-m-d H:i:s', strtotime("{$validated['end_date']} {$validated['end_time']}")); + + // Handle the file upload if a new file is provided + if ($request->hasFile('proof')) { + // Delete old file if exists + if ($response->proof && Storage::disk('public')->exists($response->proof)) { + Storage::disk('public')->delete($response->proof); + } + + // Extract year from start_date + $year = date('Y', strtotime($validated['start_date'])); + $username = $response->user->name; + + $originalName = $request->file('proof')->getClientOriginalName(); + $fileName = $username . '_' . $originalName; + + // Create path structure: year/faculty_name + $folderPath = 'proofs/' . $year . '/' . $username; + + // Store file in the specified path + $proofPath = $request->file('proof')->storeAs($folderPath, $fileName, 'public'); + + $response->proof = $proofPath; + } + + // Update other fields + $response->title = $validated['title']; + $response->organising_institute = $validated['organising_institute']; + $response->address = $validated['address']; + $response->start_date = $startDateTime; + $response->end_date = $endDateTime; + $response->num_days = $validated['num_days']; + $response->activity_type = $validated['activity_type']; + $response->category = $validated['category']; + $response->level = $validated['level']; + + $response->save(); + + return redirect()->route('admin.ActivitiesAttendedResponses')->with('status', 'Response updated successfully'); + } + + public function destroy($id) + { + $response = ActivitiesAttended::findOrFail($id); + + // Delete the file if it exists + if ($response->proof && Storage::disk('public')->exists($response->proof)) { + Storage::disk('public')->delete($response->proof); + } + + $response->delete(); + + return response()->json(['success' => 'Record deleted successfully']); + } + public function getActivitiesAttendedResponses() { $responses = ActivitiesAttended::with('user', 'department'); @@ -47,9 +131,14 @@ class AdminController extends Controller }) ->addColumn('action', function ($response) { $viewButton = $response->proof - ? 'View' + ? 'View' : 'No Proof'; - return $viewButton; + + $editButton = 'Edit'; + + $deleteButton = ''; + + return $viewButton . ' ' . $editButton . ' ' . $deleteButton; }) ->rawColumns(['action']) ->make(true); diff --git a/resources/views/admin/activities-attended-responses.blade.php b/resources/views/admin/activities-attended-responses.blade.php index 8b71715..a720c1d 100644 --- a/resources/views/admin/activities-attended-responses.blade.php +++ b/resources/views/admin/activities-attended-responses.blade.php @@ -58,13 +58,10 @@ --> +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 3a3fc91..580506b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -41,6 +41,13 @@ Route::middleware(['auth', CheckRole::class . ':Admin'])->group(function () { Route::get('/admin', [AdminController::class, 'index'])->name('admin.dashboard'); Route::get('/admin/ActivitiesAttendedResponses', [AdminController::class, 'viewActivitiesAttendedResponses'])->name('admin.ActivitiesAttendedResponses'); Route::get('/admin/ActivitiesAttendedResponses/data', [AdminController::class, 'getActivitiesAttendedResponses'])->name('admin.ActivitiesAttendedResponses.data'); + // In your routes file (web.php) + // Route::get('/admin/activities-attended/{id}/edit', 'Admin\ActivitiesAttendedController@edit')->name('admin.ActivitiesAttended.edit'); + // Route::put('/admin/activities-attended/{id}', 'Admin\ActivitiesAttendedController@update')->name('admin.ActivitiesAttended.update'); + // Route::delete('/admin/activities-attended/{id}', 'Admin\ActivitiesAttendedController@destroy')->name('admin.ActivitiesAttended.destroy'); + Route::get('/admin/activities-attended/{id}/edit', [AdminController::class, 'edit'])->name('admin.ActivitiesAttended.edit'); + Route::put('/admin/activities-attended/{id}', [AdminController::class, 'update'])->name('admin.ActivitiesAttended.update'); + Route::delete('/admin/activities-attended/{id}', [AdminController::class, 'destroy'])->name('admin.ActivitiesAttended.destroy'); }); // Coordinator routes