File: /home/imensosw/www/ezwork/app/Http/Controllers/UserController.php
<?php
/**
* UserController class file
*
* PHP Version 7.2
*
* @category Controller
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use DB ;
/**
* UserController class
*
* The class manage the User
*
* @category UserController
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
class UserController extends Controller
{
/**
* Index function gets list of all user and
* return the user list in json format.
*
* @param void
* @return json
*/
public function index(): \Illuminate\Http\JsonResponse
{
$users = User::all();
return response()->json(
[
'status' => 'success',
'users' => $users->toArray()
],
200
);
}
/**
* Show function show a user by id and return it in json format.
*
* @param \Illuminate\Http\Request request
* @return json
*/
public function show(Request $request): \Illuminate\Http\JsonResponse
{
$id = Auth::user()->id ;
$user = User::getUsers(['id' => $id]);
return response()->json(
[
'status' => 'success',
'user' => $user->toArray()
],
200
);
}
/**
* UpdateProfile function updates the user profile in the storage
* and return it in json format.
*
* @param \Illuminate\Http\Request request
* @return json
*/
public function updateProfile(Request $request): \Illuminate\Http\JsonResponse
{
$validator = Validator::make(
$request->all(),
[
'fname' => 'required',
'lname' => 'required',
'mobile_country_code_id' => 'required',
'mobile_no' => 'required|digits:10',
'whatup_country_code_id' => 'required_with:whatup_no',
'whatup_no' => 'nullable|required_with:whatup_country_code_id|digits:10',
'avatar' => 'nullable|image|max:2048',
'bio_data' => ['required','max:1000'],
'gender_id' => 'required',
'nationality_country_id' => 'required',
'residence_country_id' => 'required',
],
[
'fname.required' => 'Please enter first name!',
'lname.required' => 'Please enter last name!',
'mobile_country_code_id.required' => 'Select code!',
'mobile_no.required' => 'Please enter mobile no!',
'mobile_no.digits' => 'Mobile no must be 10 digit!',
'whatup_country_code_id.required_with' => 'Select code!',
'whatup_no.digits' => 'WhatsApp no must be 10 digit!',
'whatup_no.required_with' => 'Please enter WhatsApp no!',
'avatar.image' => 'Avatar must be an image!',
'avatar.image' => 'Avatar must be an image!',
'avatar.max' => 'Photo ID size must be less then 2 MB!',
'bio_data.required' => 'Please enter bio data!',
'bio_data.max' => 'Please enter upto 1000 characters!',
'gender_id.required' => 'Please select gender!',
'nationality_country_id.required' => 'Please select nationality!',
'residence_country_id.required' => 'Please select country!',
]
);
if ($validator->fails()) {
return response()->json(
[
'status' => 'error',
'message' => 'Please enter required data!.',
'errors' => $validator->errors()
],
422
);
}
DB::beginTransaction();
try {
$id = Auth::user()->id ;
$user = User::find($id);
$user->fname = $request->fname ;
$user->lname = $request->lname ;
$user->name = $request->fname . ' ' . $request->lname ;
$user->mobile_country_code_id = '' ;
if (trim($request->mobile_country_code_id) != '') {
$user->mobile_country_code_id = $request->mobile_country_code_id ;
}
$user->mobile_no = '' ;
if (trim($request->mobile_no) != '') {
$user->mobile_no = $request->mobile_no ;
}
$user->whatup_country_code_id = null ;
if (trim($request->whatup_country_code_id) != '') {
$user->whatup_country_code_id = $request->whatup_country_code_id ;
}
$user->whatup_no = '' ;
if (trim($request->whatup_no) != '') {
$user->whatup_no = $request->whatup_no ;
}
if ($request->avatar) {
$avatar = time() . '.' . $request->avatar->getClientOriginalExtension();
$user->avatar = $avatar ;
$request->avatar->move(public_path('avatar'), $avatar);
}
$user->save();
$data = ['user_id' => $id,'info_status' => 1];
$profile = \App\Models\Profile::where('user_id', $id)->first();
$skillCount = sizeOf(\App\Models\UserSkill::getUserSkills($user->id));
if ($skillCount > 0 && $profile->translator_status_id == 2) {
$data['translator_status_id'] = 3 ;
$userEvaluation = \App\Models\UserEvaluation::
select(DB::raw('max(user_evaluations.evaluation_status_id) AS evaluation_status_id'))
->join('evaluations', 'evaluations.id', '=', 'user_evaluations.evaluation_id')
->join(
'user_skill_pairs',
function ($join) use ($id) {
$join
->on('user_skill_pairs.from_language_id', '=', 'evaluations.from_language_id')
->on('user_skill_pairs.to_language_id', '=', 'evaluations.to_language_id')
->where('user_skill_pairs.user_id', '=', $id);
}
)
->where('user_evaluations.user_id', $id)
->groupBy('user_evaluations.user_id')->first();
if ($userEvaluation) {
$evaluation_status_id = $userEvaluation->evaluation_status_id ;
if ($evaluation_status_id == 4) {
$data['translator_status_id'] = 6 ;
} elseif ($evaluation_status_id == 3) {
$data['translator_status_id'] = 5 ;
} elseif ($evaluation_status_id == 2) {
$data['translator_status_id'] = 4 ;
} elseif ($evaluation_status_id == 1) {
$data['translator_status_id'] = 3 ;
}
}
}
$data['profile_status_id'] = 0 ;
$data['bio_data'] = '' ;
if (trim($request->bio_data) != '' && trim($request->bio_data) != 'null') {
$data['bio_data'] = $request->bio_data ;
}
$data['gender_id'] = null ;
if ($request->gender_id > 0) {
$data['gender_id'] = $request->gender_id ;
}
$data['nationality_country_id'] = null ;
if ($request->nationality_country_id > 0) {
$data['nationality_country_id'] = $request->nationality_country_id ;
}
$data['residence_country_id'] = null ;
if ($request->residence_country_id > 0) {
$data['residence_country_id'] = $request->residence_country_id ;
}
\App\Models\Profile::updateOrCreate(
['user_id' => $id],
$data
);
DB::commit();
$user = User::getUsers(['id' => $id]);
return response()->json(
[
'status' => 'success',
'message' => 'Profile updated successfully.',
'user' => $user
],
200
);
} catch (\Throwable $e) {
DB::rollback();
return response()->json(
[
'status' => 'error',
'showErrorPop' => true,
'message' => 'Error in update! Please try again.',
'errors' => $e
],
422
);
}
}
/**
* changePassword function changes the user password in the storage
* and return it in json format.
*
* @param \Illuminate\Http\Request request
* @return json
*/
public function changePassword(Request $request): \Illuminate\Http\JsonResponse
{
$pass = "error";
if ($request->old_password) {
if (Hash::check($request->old_password, Auth::user()->password)) {
$pass = "DONE";
$request->merge(['old_password' => "DONE"]);
}
}
$validator = Validator::make(
$request->all(),
[
'old_password' => ['required',"in:$pass"],
'password_confirmation' => 'required',
'password' =>
[
'required',
'min:8', // must be at least 8 characters in length
'regex:/[a-z]/', // must contain at least one lowercase letter
'regex:/[A-Z]/', // must contain at least one uppercase letter
'regex:/[0-9]/', // must contain at least one digit
'regex:/[@$!%*#?&]/', // must contain a special character
'confirmed',
// 'different:old_password'
],
],
[
'old_password.required' => 'Please enter old password!',
'old_password.in' => 'Please enter correct password!',
'password_confirmation.required' => 'Please enter confirm password!',
'password.required' => 'Please enter password!',
// 'password.different' => 'Please enter different password!',
'password.min' => 'Password must be min 8 character!',
'password.regex' => 'Password must have at least one lowercase, one uppercase,
one digit and a special character!',
'password.confirmed' => 'Password and confirm password does not match!',
]
);
if ($validator->fails()) {
return response()->json(
[
'status' => 'error',
'message' => 'Please enter required data!.',
'errors' => $validator->errors()
],
422
);
}
DB::beginTransaction();
try {
$id = Auth::user()->id ;
$password = Hash::make($request->password) ;
DB::table('users')->where('id', $id)->update(['password' => $password]);
DB::commit();
$user = User::getUsers(['id' => $id]);
return response()->json(
[
'status' => 'success',
'message' => 'Password updated successfully.',
'user' => $user
],
200
);
} catch (\Throwable $e) {
DB::rollback();
return response()->json(
[
'status' => 'error',
'showErrorPop' => true,
'message' => 'Error in update! Please try again.',
'errors' => $e,
],
422
);
}
}
/**
* GetUserProfileInfo function gets the profile info of specified user
* and return it in json format.
*
* @param void
* @return json
*/
public function getUserProfileInfo(): \Illuminate\Http\JsonResponse
{
$id = Auth::user()->id ;
$userProfile = User::
select("profiles.*", 'users.fname')
->leftJoin('profiles', 'profiles.user_id', '=', 'users.id')
->where('users.id', $id)->first();
return response()->json(
[
'status' => 'success',
'userProfile' => $userProfile
],
200
);
}
/*public function testapi(Request $request)
{
//$user = User::find($id);
return response()->json(
[
'status' => 'success',
'user' => "Inder patidar"
],
200
);
}*/
}