241 lines
7.9 KiB
PHP
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()
|
|
]);
|
|
}
|
|
}
|
|
}
|