Files
freeu-project/app/Http/Controllers/Admin/AdminProfileController.php
2024-07-03 11:36:57 +05:30

417 lines
11 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use DataTables;
use Mail;
use App\Mail\sendEmailOTP;
use App\Mail\UpdatePasswordMail;
class AdminProfileController extends Controller
{
public function viewProfile()
{
$data = User::find(auth()->user()->id);
return view('Admin.Pages.manage_sub_admin.edit_admin_profile', compact('data'));
}
public function sendOtpOnMail(Request $request)
{
// dd($request->all());
$validator = validator::make($request->all(),['new_email'=>'required|unique:users,email'],['requreid'=>'Email field is required.','unique'=>'Email should be unique.']);
$validateMessage = validationErrorMessage($validator);
if($validateMessage)
{
return response()->json(['status'=>400,'message'=>$validateMessage]);
}
$OTP = rand(1000,9999);
Mail::to($request->new_email)->send(new sendEmailOTP($OTP));
session()->forget(['email_update_otp','old_email','new_email']);
session()->put('email_update_otp',$OTP);
session()->put('old_email',$request->old_email);
session()->put('new_email',$request->new_email);
if(session()->has('email_update_otp') || session()->has('old_email') || session()->has('new_email'))
{
return response()->json(['status'=>200,'message'=>"OTP has been send to your mail."]);
}
return response()->json(['status'=>400,'message'=>"Error in sending OTP."]);
}
public function verifyEmailOtp(Request $request)
{
$otp = session()->get('email_update_otp');
$old_email = session()->get('old_email');
$new_email = session()->get('new_email');
// dd($new_email,$old_email);
if(!$otp && !$old_email && !$new_email)
{
return response()->json(['status'=>400,'message'=>'Enter your email again.']);
}
if((int)$otp != (int)$request->email_otp)
{
return response()->json(['status'=>400,'message'=>'OTP not matched.']);
}
$updated = User::where('email',$old_email)->update(['email'=>$new_email]);
if($updated)
{
return response()->json(['status'=>200,'message'=>'Email updated successfully']);
}
}
public function getUsers(Request $request)
{
if ($request->ajax()) {
$data = User::where(['role' => 0, 'status' => 1])->get();
// dd($data);
return Datatables::of($data)
->addIndexColumn()
->addColumn('action', function ($row) {
$actionBtn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>';
return $actionBtn;
})
->rawColumns(['action'])
// ->editColumn('name',function($row){
// return '<div class="text-center">' . $row->name . '</div>';
// })
// ->editColumn('email',function($row){
// return '<div class="text-center">' . $row->email . '</div>';
// })
// ->editColumn('password',function($row){
// return '<div class="text-center">' . $row->password . '</div>';
// })
// ->addColumn('edit',function ($row){
// $email = $row->email;
// $password = $row->password;
// $editBtn = '<a class="action_icon edit_button" href="#" data-toggle="modal" data-target="#exampleModal" data-email="'.$email.'" data-password="'.$password.'">
// <svg class="svg-inline--fa fa-pen-to-square" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="pen-to-square" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg=""><path fill="currentColor" d="M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.8 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z"></path></svg><!-- <i class="fa-solid fa-pen-to-square"></i> Font Awesome fontawesome.com -->
// </a>';
// return $editBtn;
// })
// ->rawColumns(['name','email','password','edit'])
->make(true);
}
// return view('Admin.edit_admin_profile');
}
public function editProfile(Request $request)
{
$validator = Validator::make($request->all(), [
'update_id' => 'required',
'name' => [
'required',
// 'regex:/^[a-zA-Z\s]+$/',
],
'email' => [
'required',
// 'regex/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/',
],
'mobile_number' => [
'required',
'min:10',
'max:12',
// 'regex:regex:/^(\+\d{1,3}[- ]?)?\d{10,12}$/',
],
'profile_image' => [
'mimes:jpeg,png,jpg,gif,svg',
'max:2048',
],
], [
'required' => 'This :attribute field is required',
'mobile_number.min' => 'Mobile number should be minimum 10 digits',
'mobile_number.max' => 'Mobile number should be maxmium 12 digits',
'profile_image.mimes' => "Image accepts only jpeg,png,jpg,gif,svg",
'profile_image.max' => "Image size not more than 2mb",
'name.regex' => 'This :attribute contain only alphabets',
'email.regex' => 'Enter valid email address',
'mobile_number.regex' => 'Mobile number contain only digits',
]);
$validationMessage = validationErrorMessage($validator);
if ($validationMessage) {
return response()->json(
[
'status' => 400,
'message' => $validationMessage
]
);
}
$uploadImage = $request->has('profile_image') ? $this->uploadProfileImage(Auth::user()->id, $request->profile_image) : Auth::user()->getRawOriginal('profile_image');
$data = User::where('id', Auth::user()->id)->update([
'name' => $request->name,
'email' => $request->email,
'contact_number' => $request->mobile_number,
'profile_image' => $uploadImage,
]);
if ($data) {
return response()->json(
[
'status' => 200,
'message' => "Profile update successfull"
]
);
}
return response()->json(
[
'status' => 204,
'message' => 'Profile not updated, Something error!'
]
);
}
public function uploadProfileImage($id, $image)
{
$user = User::where('id', $id)->first();
if (\Storage::exists($user->profile_image)) {
\Storage::delete($user->profile_image);
}
$fileName = time() . Auth::user()->id . '.' . $image->extension();
$image->move(public_path('/uploads/profile/img'), $fileName);
return $fileName;
}
public function UpdatePassword(Request $request)
{
$validator = Validator::make($request->all(), [
'current_password' => 'required',
'password' => ['required', 'min:8', 'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%@]).*$/', 'confirmed']
// 'confirm_password' => 'required_with:new_password|same:new_password|required',
], [
'required' => 'The :attribute field is required',
'same' => 'The :attribute must contain the same password',
'min' => 'The :attribute field must be 8 characters minimum',
'regex' => 'The :attribute field must contain at least 1 uppercase letter and symbol and also a number',
'confirmed' => 'Password does not match'
]);
$validationMessage = validationErrorMessage($validator);
if ($validationMessage) {
return response()->json(['status' => 400, 'message' => $validationMessage]);
}
$user = User::find(Auth::user()->id);
if (Hash::check($request->current_password, $user->password)) {
$updatePassword = User::where('id', $request->updateId)->update([
'password' => bcrypt($request->password),
]);
if ($updatePassword) {
Session::flush();
\Auth::logout();
return response()->json(['status' => 200, 'message' => "Password update successfull"]);
} else {
return response()->json(['status' => 204, 'message' => 'Password not updated, Something error!']);
}
}
return response()->json(['status' => 204, 'message' => 'Password not matched!']);
}
public function viewUsersProfile()
{
$check = checkSidebarAccess('update-user-password');
if (!$check) {
abort(404);
}
$users = User::where(['role' => false, 'status' => true])->get();
return view('Admin.Pages.manage_sub_admin.update_user_password', compact('users'));
}
public function updateUsersProfile(Request $request)
{
// dd($request->all());
$validate = Validator::make($request->all(), [
'password' => 'required|min:8',
'confirm_password' => 'required_with:password|same:password|min:8',
], [
'required' => "This field is required",
'password.confirmed' => "Password not matched",
]);
if ($validate->fails()) {
return response()->json(
[
"status" => 400,
"message" => $validate->errors(),
]
);
}
$email = $request->email;
$newPassword = $request->password;
$userData = User::where('email', $email)->first();
if ($userData->password == $newPassword) {
return response()->json([
'status' => 201,
'message' => "Password matched same",
]);
} else {
$updatePassword = User::where('email', $email)->update([
'password' => bcrypt($newPassword),
]);
if ($updatePassword) {
Mail::to($email)->send(new UpdatePasswordMail($newPassword));
return response()->json([
'status' => 200,
'message' => "Password update successfully",
]);
}
return response()->json([
'status' => 201,
'message' => "Password not updated",
]);
}
}
}