MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
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
        );
    }*/
}