Files
sccs_laravel/app/Http/Controllers/UsersController.php
2025-11-04 16:23:40 +05:00

241 lines
7.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\City;
use App\Models\Country;
use App\Models\Course;
use App\Models\Profile;
use App\Models\State;
use App\Models\User;
use App\Models\UserSetting;
use App\Traits\ImageHelper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rules\Password;
class UsersController extends Controller
{
use ImageHelper;
public function index()
{
$pageConfigs = [
'pageHeader' => true,
'showMenu' => true
];
$breadcrumbs = [['link' => '/', 'name' => 'Home'], ['name' => 'Students']];
$createUrl = [['url' => 'create', 'name' => "Create", 'slug' => 'students']];
$users = User::where('role', 'STUDENT')->latest()->paginate(15);
return view('content.users.index', [
'breadcrumbs' => $breadcrumbs,
'pageConfigs' => $pageConfigs,
'createUrl' => $createUrl,
'users' => $users
]);
}
public function search(Request $request)
{
$pageConfigs = [
'pageHeader' => true,
'showMenu' => true
];
$breadcrumbs = [['link' => '/', 'name' => 'Home'], ['name' => 'Students']];
$createUrl = [['url' => 'create', 'name' => "Create", 'slug' => 'students']];
$users = User::where('role', 'STUDENT')
->where('name', 'like', "%{$request->search}%")
->orWhere('father_name', 'like', "%{$request->search}%")
->orWhere('email', 'like', "%{$request->search}%")
->orWhere('phone', 'like', "%{$request->search}%")
->orWhere('cnic', 'like', "%{$request->search}%")
->latest()
->paginate(15);
return view('content.users.index', [
'breadcrumbs' => $breadcrumbs,
'pageConfigs' => $pageConfigs,
'createUrl' => $createUrl,
'users' => $users
]);
}
public function create()
{
//
$pageConfigs = [
'pageHeader' => true,
'showMenu' => true
];
$breadcrumbs = [['link' => '/admin/students', 'name' => 'Students'], ['name' => 'Add']];
return view('content.users.create', [
'pageConfigs' => $pageConfigs,
'breadcrumbs' => $breadcrumbs
]);
}
public function store(Request $request)
{
$request->validate([
'fullName' => ['required', 'min: 3'],
'fatherName' => ['required', 'min: 3'],
'email' => ['required', 'email', 'unique:users'],
'phone' => ['required'],
'password' => ['required', 'confirmed', Password::min(8)],
'cnic' => ['nullable', 'integer', 'digits:13'],
'dob' => ['nullable'],
'address' => ['nullable'],
'gender' => ['required'],
'notes' => ['nullable'],
'profileImage' => ['required', 'image'],
]);
try {
DB::beginTransaction();
$user = new User();
$user->name = $request->fullName;
$user->father_name = $request->fatherName;
$user->email = $request->email;
$user->phone = $request->phone;
$user->dob = $request->dob;
$user->gender = $request->gender;
$user->cnic = $request->cnic;
$user->address = $request->address;
$user->notes = $request->notes;
$user->password = Hash::make($request->password);
$user->email_verified_at = now();
$user->save();
if ($request->profileImage) {
$prefix = 'profile';
$profileImagePath = $this->uploadFile($request->profileImage, $prefix, false);
$user->picture = $profileImagePath;
$user->save();
}
DB::commit();
return redirect()->route('students.index')->with([
'success' => "Student created successfully"
]);
} catch (\Throwable $exception) {
DB::rollBack();
report($exception);
Log::info($exception);
return redirect()->back()->with([
'error' => $exception->getMessage()
]);
}
}
public function edit(User $student)
{
$pageConfigs = [
'pageHeader' => true,
'showMenu' => true
];
$breadcrumbs = [['link' => '/admin/students', 'name' => 'Students'], ['name' => 'Edit']];
$courses = Course::where('student_id', $student->id)->get();
return view('content.users.edit', [
'pageConfigs' => $pageConfigs,
'breadcrumbs' => $breadcrumbs,
'user' => $student,
'courses' => $courses
]);
}
public function update(Request $request, User $student)
{
$request->validate([
'fullName' => ['required', 'min: 3'],
'fatherName' => ['required', 'min: 3'],
'email' => ['required', 'email'],
'phone' => ['required'],
'status' => ['required'],
'password' => ['nullable', 'confirmed', Password::min(8)],
'cnic' => ['nullable', 'numeric', 'digits:13'],
'dob' => ['nullable'],
'address' => ['nullable'],
'gender' => ['required'],
'notes' => ['nullable'],
'profileImage' => ['nullable', 'image'],
]);
try {
DB::beginTransaction();
$student->name = $request->fullName;
$student->father_name = $request->fatherName;
$student->email = $request->email;
$student->phone = $request->phone;
$student->dob = $request->dob;
$student->gender = $request->gender;
$student->cnic = $request->cnic;
$student->address = $request->address;
$student->notes = $request->notes;
$student->status = $request->status;
if ($request->password) {
$student->password = Hash::make($request->password);
}
if ($request->hasFile('profileImage')) {
$prefix = 'profileImage';
$bannerImagePath = $this->updateFile($request->profileImage, $student->picture, $prefix, false);
$student->picture = $bannerImagePath;
}
$student->update();
DB::commit();
return redirect()->back()->with([
'success' => "Student updated successfully"
]);
} catch (\Throwable $exception) {
DB::rollBack();
return redirect()->back()->with([
'error' => $exception->getMessage()
]);
}
}
public function destroy(User $student)
{
try {
DB::beginTransaction();
if ($student->courses->count() > 0) {
foreach ($student->courses as $course) {
if ($course->allTransactions->count() > 0) {
foreach ($course->allTransactions as $transaction){
$transaction->delete();
}
}
$course->delete();
}
// return redirect()->back()->with([
// 'error' => 'Please delete all the records that are related to this Student.'
// ]);
}
if ($student->picture) {
$this->deleteFile($student->picture);
}
$student->delete();
DB::commit();
return redirect()->back()->with([
'success' => "Student deleted successfully"
]);
} catch (\Throwable $exception) {
DB::rollBack();
return redirect()->back()->with([
'error' => $exception->getMessage()
]);
}
}
}