main-backend/php_code/app/Http/Controllers/UsersController.php
2026-06-21 14:00:47 +00:00

336 lines
12 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Utilities\ApiCalls;
use App\Utilities\SmsLibrary;
use Session;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\UserAccountsMail;
use App\Mail\PasswordResetMail;
use Illuminate\Support\Str;
use Illuminate\Validation\Rule;
use App\Rules\GhanaPhoneRule;
class UsersController extends Controller
{
public function index(){
$data = [
'page_title' => 'Users Page '
];
return view('users.index', $data);
}
public function reset(){
$data = [
'page_title' => 'Password Reset Page'
];
return view('user-auth.reset', $data);
}
public function check_reset_email(Request $request){
$url = "user_mgt/get_user_by_user_id.php";
$user_id = "34ba702b-18f8-4d85-948d-8c55e8500f32";
$data = json_encode([
'user_id' => "34ba702b-18f8-4d85-948d-8c55e8500f32",// $id,
'api_token' => env('LUPMISAPIKEY')// make the API token a constant
]);
$result = ApiCalls::CurlPost($data, $url);
$result = json_decode($result, true);
// dd($result);
$recipientEmail = $result['data']['email'];
$fullname = $result['data']['full_name'];
$phone = $result['data']['phone'];
//send reset link email
//baduhupir@mailinator.com
$reset_link = env('APP_URL') . "/reset-auth/" . $user_id;
Mail::to($recipientEmail)->send(new PasswordResetMail($fullname, $reset_link));
return redirect(url('reset-notice')); //get
// return redirect(url('new-password-form'));
}
public function reset_notice(Request $request){
return view('user-auth.email-notice');
}
public function show_new_passform(Request $request){
// code...show_new_passform
// dd('foo bar show new pass');
dump($request->all());
$data = [
'page_title' => 'New Password Form'
];
return view('user-auth.password', $data);
}
public function handle_reset(Request $request){
// code...show_new_passform
// dd('foo bar handle reset');
return redirect(url('reset-success')); //get
}
public function reset_success(Request $request){
// code...show_new_passform
// dd('foo bar handle reset');
$data = [
'page_title' => 'New Password Success'
];
return view('user-auth.password-success', $data);
}
public function edit($id){
$url = "user_mgt/get_user_by_user_id.php";
$data = json_encode([
'user_id' => $id,
'api_token' => env('LUPMISAPIKEY')// make the API token a constant
]);
$result = ApiCalls::CurlPost($data, $url);
$result = json_decode($result, true);
$data = [
'page_title' => 'User Edit'
];
if (request()->expectsJson()) {
return response()->json($result);
}
return view('users.edit', $data);
}
public function show($id){
$url = "user_mgt/get_user_by_user_id.php";
$data = json_encode([
'user_id' => $id,
'api_token' => env('LUPMISAPIKEY')// make the API token a constant
]);
$result = ApiCalls::CurlPost($data, $url);
$result = json_decode($result, true);
if (request()->expectsJson()) {
return response()->json($result);
}
$data = [
'page_title' => 'User Profile',
'user' => $result
];
return view('admin.user-show', $data);
}
public function getprofile_json(){
$user_id = session('current_user.user_id');
$url = "user_mgt/get_user_by_user_id.php";
// dd($user_id);
$data = json_encode([
'user_id' => $user_id,
'api_token' => env('LUPMISAPIKEY')// make the API token a constant
]);
$result = ApiCalls::CurlPost($data, $url);
$result = json_decode($result, true);
if ($result['success'] == true) {
// code...
return response()->json(['code' => 1, 'user_details' => $result['data']]);
}
else{
return response()->json(['code' => 3, 'msg' => 'Your request could not be handled at this time']);
}
}
public function store(Request $request){
$url = "user_mgt/add_usr_user.php";
$this->validate($request, [
'full_name' => 'required|string|max:255',
'username' => 'required|string|max:255|unique:users,username',
'ua_position' => 'required|string',
'allowed_apps'=> 'required|array',
'user_status' => 'required|string',
'gender' => 'required|in:male,female',
'districtid' => [
Rule::requiredIf(function () use ($request) {
return in_array($request->user_type, ['district_user', 'regional_luspa']);
}),
'integer'
],
'region_id' => [
Rule::requiredIf(function () use ($request) {
return in_array($request->user_type, ['regional_luspa']);
}),
'integer'
],
'user_type' => 'required|string',
'email' => 'required|email|unique:users,email',
'phone' => ['required', new GhanaPhoneRule],
], [
'full_name.required' => 'Please provide the full name.',
'username.required' => 'A username is required.',
'username.unique' => 'This username is already taken.',
'ua_position.required' => 'Position is mandatory.',
'allowed_apps.required'=> 'Select at least one application.',
'gender.required' => 'Gender is required.',
'district_id.required' => 'District must be selected.',
'region_id.required' => 'Region is required',
'user_type.required' => 'User type is required.',
'email.required' => 'Email address is required.',
'email.email' => 'Please enter a valid email address.',
'user_status.required' => 'Please select user status.',
'email.unique' => 'This email is already registered.',
'phone.required' => 'Phone number is required.',
]);
// Generate random password
$password = Str::random(10);
$data = json_encode([
'full_name' => $request['full_name'],
'username' => $request['username'],
'ua_position' => $request['ua_position'],
'email' => $request['email'],
'title' => $request['title'],
'allowed_apps' => implode(", ", $request['allowed_apps']),
'is_password_changed' => false,
'password_hint' => 'none',
'phone' => str_replace('+', '',$request['phone']),
'gender' => $request['gender'],
'user_type' => $request['user_type'],
'pass' => $password,
'is_disabled' => false,
'region_id' => $request['region_id'],
'district_id' => $request['districtid'],
'api_token' => env('LUPMISAPIKEY'),
]);
// dd($data);
$result = ApiCalls::CurlPost($data, $url);
$result = json_decode($result, true);
if ($result['success'] == false) {
return response()->json($result);
}
\Log::info("Your Password is $password");
Mail::to('recipient@example.com')->send(new UserAccountsMail($password, $request->username));
$sms_message = "Hello {$request->full_name}, your LUPMIS account has been successfully created\n";
$sms_message .= "Username: {$request->username}\n";
$sms_message .= "Password: $password\n";
$sms_message .= "Login URL: https://lupmis4luspa.org";
$sms_data = [
'recipient' => $request['phone'],
'message' => $sms_message
];
\Log::info("SMS Body : $sms_message");
if ($request->expectsJson()) {
return response()->json($result);
}
}
public function update(Request $request){
$url = "user_mgt/update_usr_user.php";
// return ['success' => true];
// dd($request->all());
$this->validate($request, [
'full_name' => 'required|string|max:255',
'username' => 'required|string|max:255|unique:users,username',
'ua_position' => 'required|string',
'allowed_apps'=> 'required|array',
'user_status' => 'required|string',
'gender' => 'required|in:male,female',
// 'districtid' => 'required|integer',
'districtid' => [
Rule::requiredIf(function () use ($request) {
return in_array($request->user_type, ['district_user']);
}),
'integer'
],
'region_id' => [
Rule::requiredIf(function () use ($request) {
return in_array($request->user_type, ['regional_luspa', 'national_luspa']);
}),
'integer'
],
'user_type' => 'required|string',
'email' => 'required|email|unique:users,email',
'phone' => ['required', new GhanaPhoneRule],
], [
'full_name.required' => 'Please provide the full name.',
'username.required' => 'A username is required.',
'username.unique' => 'This username is already taken.',
'ua_position.required' => 'Position is mandatory.',
'allowed_apps.required'=> 'Select at least one application.',
'gender.required' => 'Gender is required.',
'district_id.required' => 'District must be selected.',
'region_id.required' => 'Region is required',
'user_type.required' => 'User type is required.',
'user_status.required' => 'Please select user status.',
'email.required' => 'Email address is required.',
'email.email' => 'Please enter a valid email address.',
'email.unique' => 'This email is already registered.',
'phone.required' => 'Phone number is required.',
]);
$is_disabled = ($request->user_status == 'active') ? 'false' : 'true';
$user_data = [
'full_name' => $request['full_name'],
'username' => $request['username'],
'ua_position' => $request['ua_position'],
'user_id' => $request['user_id'],
'email' => $request['email'],
'title' => $request['title'],
'allowed_apps' => implode(", ", $request['allowed_apps']),
'phone' => str_replace('+', '',$request['phone']),
'gender' => $request['gender'],
'user_type' => $request['user_type'],
'api_token' => env('LUPMISAPIKEY'),
'is_disabled' => $is_disabled,
// 'region_id' => $request['region_id'],
'district_id' => $request['districtid'],
];
if ($request->has('expire_password')) {
$user_data['is_password_changed'] = 'NO';
}
$data = json_encode($user_data);
$result = ApiCalls::CurlPost($data, $url);
$result = json_decode($result, true);
// dd($result);
// return response()->json($result);
if ($request->expectsJson()) {
return response()->json($result);
}
}
public function profileupdate(Request $request){
$url = "user_mgt/update_usr_user.php";
// return ['success' => true];
// dd($request->all());
$user_data = [
'full_name' => $request['full_name'],
'username' => $request['username'],
'user_id' => $request['user_id'],
'email' => $request['email'],
'phone' => $request['phone'],
'gender' => $request['gender'],
'api_token' => env('LUPMISAPIKEY'),
];
if ($request->filled('password')) {
$user_data['password'] = $request->password;
}
$data = json_encode($user_data);
$result = ApiCalls::CurlPost($data, $url);
$result = json_decode($result, true);
if (request()->expectsJson()) {
return response()->json($result);
}
}
}