MOON
Server: Apache
System: Linux 101-53-147-124.cprapid.com 4.18.0-553.121.1.el8_10.x86_64 #1 SMP Thu Apr 30 09:06:34 EDT 2026 x86_64
User: clientsoftwares (1005)
PHP: 8.2.30
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open
Upload Files
File: /home/clientsoftwares/www/advocate.clientsoftwares.com/app/Http/Controllers/UserController.php
<?php

namespace App\Http\Controllers;

use App\Models\Advocate;
use App\Models\Cases;
use App\Models\group;
use App\Models\Order;
use App\Models\Plan;
use App\Models\PointOfContacts;
use App\Models\User;
use App\Models\UserDetail;
use App\Models\Utility;
use Database\Seeders\UserSeeder;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Spatie\Permission\Models\Role;
use Lab404\Impersonate\Models\Impersonate;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {

        if (Auth::user()->can('manage member') || Auth::user()->can('manage user')) {

            $users = User::where('created_by', '=', Auth::user()->creatorId())->where('type','!=','advocate')->where('type', '!=', 'client')->where('type','!=','superAdminEmployee')->get();

            $user_details = UserDetail::get();

            return view('users.index', compact('users', 'user_details'));

        } else {
            return redirect()->back()->with('error', __('Permission Denied.'));

        }

    }

    public function userList()
    {

        if (Auth::user()->can('manage member') || Auth::user()->can('manage user')) {

            $users = User::where('created_by', '=', Auth::user()->creatorId())->where('type','!=','advocate')->where('type','!=','superAdminEmployee')->get();
            $user_details = UserDetail::get();

            return view('users.list', compact('users', 'user_details'));

        } else {
            return redirect()->back()->with('error', __('Permission Denied.'));

        }

    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $premission = [];
        if (\Auth::user()->super_admin_employee == 1) {
            $premission = json_decode(\Auth::user()->permission_json);
            $premission_arr = get_object_vars($premission);
        }
        if ((Auth::user()->can('create member') || Auth::user()->can('create user')) || (Auth::user()->super_admin_employee == 1 && in_array("create user", $premission_arr))) {
            $users = User::where('created_by', Auth::user()->creatorId())->orWhere('id', Auth::user()->id)->get()->pluck('referral_id', 'id');
            $roles = Role::where('created_by', Auth::user()->creatorId())->where('name', '!=', 'Advocate')->where('name', '!=', 'client')->get()->pluck('name', 'id');
            return view('users.create', compact('roles', 'users'));
        } else {
            return redirect()->back()->with('error', __('Permission Denied.'));
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        if (Auth::user()->can('create member') || Auth::user()->can('create user')) {

            if (Auth::user()->type == 'company') {
                $validator = Validator::make(
                    $request->all(), [
                        'name' => 'required|max:120',
                        'email' => 'required|email|unique:users',
                        'role' => 'required',
                    ]
                );

                if ($validator->fails()) {
                    $messages = $validator->getMessageBag();
                    return redirect()->back()->with('error', $messages->first());
                }

                $user = Auth::user();
                $plan = $user->getPlan();

                $total_user = User::where('type', '=', 'user')->where('type', '!=', 'client')->where('created_by', '=', $user->creatorId())->count();

                if ($total_user < $plan->max_users || $plan->max_users == -1) {

                    $enableLogin       = 0;
                    if(!empty($request->password_switch) && $request->password_switch == 'on')
                    {
                        $enableLogin   = 1;
                        $validator = \Validator::make(
                            $request->all(), ['password' => 'required|min:6']
                        );

                        if($validator->fails())
                        {
                            return redirect()->back()->with('error', $validator->errors()->first());
                        }
                    }
                    $userpassword               = $request->input('password');

                    $user = new User();
                    $user['name'] = $request->name;
                    $user['email'] = $request->email;
                    $user['password'] = !empty($userpassword) ? \Hash::make($userpassword) : null;
                    $user['lang'] = 'en';
                    $user['created_by'] = Auth::user()->creatorId();
                    $user['email_verified_at'] = date('Y-m-d H:i:s');
                    $user['is_enable_login'] = $enableLogin;

                    $role_r = Role::findById($request->role);
                    $user->assignRole($role_r);
                    $user['type'] = $role_r->name;

                    $user->save();

                    $detail = new UserDetail();
                    $detail->user_id = $user->id;
                    $detail->save();

                    return redirect()->route('users.index')->with('success', __('Member successfully created.'));
                } else {
                    return redirect()->route('users.index')->with('error', __('Your member limit is over, Please upgrade plan.'));
                }

            } else {

                $validator = Validator::make(
                    $request->all(), [
                        'name' => 'required|max:120',
                        'email' => 'required|email|unique:users',
                    ]
                );

                if ($validator->fails()) {
                    $messages = $validator->getMessageBag();
                    return redirect()->back()->with('error', $messages->first());
                }

                $enableLogin       = 0;
                if(!empty($request->password_switch) && $request->password_switch == 'on')
                {
                    $enableLogin   = 1;
                    $validator = \Validator::make(
                        $request->all(), ['password' => 'required|min:6']
                    );

                    if($validator->fails())
                    {
                        return redirect()->back()->with('error', $validator->errors()->first());
                    }
                }
                $userpassword               = $request->input('password');

                $user = new User();
                $user['name'] = $request->name;
                $user['email'] = $request->email;
                $user['password'] = !empty($userpassword) ? \Hash::make($userpassword) : null;
                $user['lang'] = 'en';
                $user['created_by'] = Auth::user()->creatorId();
                $user['plan'] = Plan::first()->id;
                $user['is_enable_login'] = $enableLogin;

                if (Utility::settings()['email_verification'] == 'off') {
                   $user['email_verified_at'] = date('Y-m-d H:i:s');
                }

                $role_r = Role::findByName('company');
                $user->assignRole($role_r);
                $user['type'] = 'company';

                $user->save();

                $detail = new UserDetail();
                $detail->user_id = $user->id;
                $detail->save();

                //create company default roles
                $user->MakeRole($user->id);

                return redirect()->route('users.index')->with('success', __('Member successfully created.'));

            }

        } else {
            return redirect()->back()->with('error', __('Permission Denied.'));

        }

    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($user_id)
    {
        if (Auth::user()->can('show member')) {

            $user_detail = UserDetail::where('user_id', $user_id)->first();

            if ($user_detail) {
                $data = explode(',', $user_detail->my_group);
                $my_groups = group::whereIn('id', $data)->get()->pluck('name');
                return view('users.view', compact('my_groups'));
            }
        } else {
            return redirect()->back()->with('error', __('Permission Denied.'));

        }
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {

        $user = User::find($id);
        $user_detail = UserDetail::where('user_id', $user->id)->first();
        $roles = Role::where('created_by', '=', $user->creatorId())->get()->pluck('name', 'id');
        $advocate = $contacts = [];
        $employee = [];
        $plan = [];
        $client = [];
        $members = [];
        $cases = [];
        $referances = User::where('created_by', Auth::user()->creatorId())->orWhere('id', Auth::user()->id)->get();
        if (Auth::user()->type == 'super admin') {
            $employee = User::where('created_by',$id)
                ->where('type', '!=', 'advocate')
                ->where('type', '!=', 'client')
                ->get();

            $plan = Plan::where('id', $user->plan)->first();
            $members = User::where('created_by', $id)->where('type', '!=', 'advocate')->where('type', '!=', 'client')->get();
            $client = User::where('created_by', $id)->where('type', '==', 'client')->get();
            $cases = Cases::where('created_by', $id)->get();
        }

        if (Auth::user()->type == 'advocate' ) {
            $advocate = Advocate::where('user_id', $user->id)->first();
            $contacts = PointOfContacts::where('advocate_id', $advocate->id)->get();
        }

        return view('users.edit', compact('user', 'referances', 'roles', 'user_detail', 'advocate', 'contacts', 'employee', 'plan', 'members', 'client', 'cases'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {

        $validator = Validator::make(
            $request->all(), [
                'name' => 'required|max:120',
                'email' => 'required|email',
            ]
        );
        if (!empty($request->mobile_number)) {

            $validator = Validator::make(
                $request->all(), [
                    'mobile_number' => 'required|numeric',
                ]
            );
        }

        if ($validator->fails()) {
            $messages = $validator->getMessageBag();

            return redirect()->back()->with('error', $messages->first());
        }

        $user = User::find($id);

        if ($user) {
            if (Auth::user()->type == 'advocate') {

                $adv = Advocate::where('user_id',$user->id)->first();

                if ($adv) {
                    if (!empty($request->point_of_contacts)) {
                        foreach ($request->point_of_contacts as $items) {
                            foreach ($items as $item) {

                                if (empty($item) && $item < 0) {
                                    $msg['flag'] = 'error';
                                    $msg['msg'] = __('Please enter your contacts');

                                    return redirect()->back()->with('error', $msg);
                                }

                            }
                            $validator = Validator::make(
                                $items, [
                                    'contact_name' => 'required',
                                    'contact_email' => 'required',
                                    'contact_phone' => 'required|numeric',
                                    'contact_designation' => 'required',
                                ]
                            );

                        }
                    }

                    if ($validator->fails()) {
                        $messages = $validator->getMessageBag();

                        return redirect()->back()->with('error', $messages->first());
                    }

                    $advocate = Advocate::find($adv->id);
                    $userAdd = $advocate->getAdvUser($advocate->user_id);

                    if ($userAdd->email != $request->email) {

                        $users = User::where('email',$request->email)->first();
                        if (!empty($users)) {
                            return redirect()->back()->with('error', __('Email address already exist.'));
                        }
                    }

                    $advocate['phone_number'] = !empty($request->phone_number) ? $request->phone_number : NULL;
                    $advocate['father_name'] = $request->father_name;
                    $advocate['age'] = !empty($request->age) ? $request->age : NULL;
                    $advocate['company_name'] = $request->company_name;
                    $advocate['website'] = $request->website;
                    $advocate['tin'] = $request->tin;
                    $advocate['gstin'] = $request->gstin;
                    $advocate['pan_number'] = $request->pan_number;
                    $advocate['hourly_rate'] = !empty($request->hourly_rate) ? $request->hourly_rate : NULL;
                    $advocate['ofc_address_line_1'] = $request->ofc_address_line_1;
                    $advocate['ofc_address_line_2'] = $request->name;
                    $advocate['ofc_country'] = $request->ofc_country;
                    $advocate['ofc_state'] = !empty($request->ofc_state) ? $request->ofc_state : NULL;
                    $advocate['ofc_city'] = $request->ofc_city;
                    $advocate['ofc_zip_code'] = !empty($request->ofc_zip_code) ? $request->ofc_zip_code : NULL;
                    $advocate['home_address_line_1'] = $request->home_address_line_1;
                    $advocate['home_address_line_2'] = $request->home_address_line_2;
                    $advocate['home_country'] = $request->home_country;
                    $advocate['home_state'] = $request->home_state;
                    $advocate['home_city'] = $request->home_city;
                    $advocate['home_zip_code'] = !empty($request->home_zip_code) ? $request->home_zip_code : NULL;
                    $advocate->save();

                    $userAdd->name = $request->name;
                    $userAdd->email = $request->email;

                    if ($request->hasFile('profile')) {
                        $filenameWithExt = $request->file('profile')->getClientOriginalName();
                        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
                        $extension = $request->file('profile')->getClientOriginalExtension();
                        $fileNameToStore = $filename . '_' . time() . '.' . $extension;
                        $dir = 'uploads/profile/';
                        $path = Utility::upload_file($request, 'profile', $fileNameToStore, $dir, []);

                        if ($path['flag'] == 1) {
                            $url = $path['url'];
                        } else {
                            return redirect()->route('users.index', Auth::user()->id)->with('error', __($path['msg']));
                        }

                        $userAdd->avatar = $fileNameToStore;
                    }

                    $userAdd->save();

                    foreach (json_decode($request->old_contacts,true) as $key => $value) {
                        $contacts = PointOfContacts::find($value['id']);
                        $contacts->delete();
                    }

                    if (!empty($request->point_of_contacts)) {
                        foreach ($request->point_of_contacts as $key => $value) {
                            $contacts = new PointOfContacts();

                            $contacts['advocate_id'] = $advocate->id;
                            $contacts['contact_name'] = $value['contact_name'];
                            $contacts['contact_email'] = $value['contact_email'];
                            $contacts['contact_phone'] = $value['contact_phone'];
                            $contacts['contact_designation'] = $value['contact_designation'];

                            $contacts->save();
                        }
                    }
                    return redirect()->back()->with('success', __('Successfully Updated!'));

                }else{
                    return redirect()->back()->with('error', __('Advocate not found.'));

                }


            }else{
                $user['name'] = $request->name;
                $user['email'] = $request->email;

                if ($request->hasFile('profile')) {
                    if (Auth::user()->type == 'super admin') {
                        $filenameWithExt = $request->file('profile')->getClientOriginalName();
                        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
                        $extension = $request->file('profile')->getClientOriginalExtension();
                        $fileNameToStore = $filename . '_' . time() . '.' . $extension;
                        $settings = Utility::Settings();
                        $url = '';
                        $dir = 'uploads/profile/';
                        $path = Utility::upload_file($request, 'profile', $fileNameToStore, $dir, []);

                        if ($path['flag'] == 1) {
                            $url = $path['url'];
                        } else {
                            return redirect()->route('users.index', Auth::user()->id)->with('error', __($path['msg']));
                        }

                        $user->avatar = $fileNameToStore;
                    }else{
                        $dir        = 'uploads/profile/';
                        $file_path = $dir.$user['avatar'];
                        $image_size = $request->file('profile')->getSize();

                        $result = Utility::updateStorageLimit(Auth::user()->creatorId(), $image_size);

                        if($result == 1) {

                            Utility::changeStorageLimit(Auth::user()->creatorId(), $file_path);
                            $filenameWithExt = $request->file('profile')->getClientOriginalName();
                            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
                            $extension = $request->file('profile')->getClientOriginalExtension();
                            $fileNameToStore = $filename . '_' . time() . '.' . $extension;
                            $settings = Utility::Settings();
                            $url = '';
                            $dir = 'uploads/profile/';
                            $path = Utility::upload_file($request, 'profile', $fileNameToStore, $dir, []);

                            if ($path['flag'] == 1) {
                                $url = $path['url'];
                            } else {
                                return redirect()->route('users.index', Auth::user()->id)->with('error', __($path['msg']));
                            }

                            $user->avatar = $fileNameToStore;
                        }
                    }


                }

                $user->update();

                $detail = UserDetail::where('user_id', $user->id)->first();

                $detail->mobile_number = !empty($request->mobile_number) ? $request->mobile_number : null;
                $detail->address = $request->address;
                $detail->city = $request->city;
                $detail->state = $request->state;
                $detail->zip_code = !empty($request->zip_code) ? $request->zip_code : null;
                $detail->landmark = $request->landmark;
                $detail->about = $request->about;

                $detail->save();
                if(Auth::user()->type == 'super admin'){
                    return redirect()->route('users.edit', Auth::user()->id)->with('success', __('Successfully Updated!'));
                }else if(Auth::user()->super_admin_employee == 1 || Auth::user()->type == 'client'){
                    return redirect()->back()->with('success', __('Profile updated.'));
                }

                return redirect()->route('users.index')->with('success', __('Successfully Updated!'));
            }


        } else {
            return redirect()->back()->with('error', __('Member not found.'));

        }



    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if (Auth::user()->can('delete member') || Auth::user()->can('delete user')) {
            $user = User::find($id);
            $detail = UserDetail::where('user_id', $user->id)->first();

            if ($user->created_by != Auth::user()->creatorId()) {
                return redirect()->back()->with('error', __('You can\'t delete yourself.'));
            } else {
                if ($user && $detail) {
                    $user->delete();
                    $detail->delete();
                    User::where('created_by',$user->id)->delete();
                    Advocate::where('created_by',$user->id)->delete();

                    $data = explode(',', $detail->my_group);
                    $my_groups = group::whereIn('id', $data)->get();

                    foreach ($my_groups as $key => $value) {
                        if (str_contains($value->members, $detail->user_id)) {
                            $value->members = trim($value->members, $detail->user_id);
                            $value->save();
                        }
                    }

                    return redirect()->back()->with('success', __('Member deleted successfully.'));
                }
            }
        } else {
            return redirect()->back()->with('error', __('Member not found.'));
        }
    }

    public function changeMemberPassword(Request $request, $id)
    {

        $validator = Validator::make(
            $request->all(),
            [
                'password' => 'required|same:confirm_password',
            ]
        );

        if ($validator->fails()) {
            $messages = $validator->getMessageBag();
            return redirect()->back()->with('error', $messages->first());
        }

        $objUser = User::find($id);
        $objUser->password = Hash::make($request->password);
        $objUser->save();

        return redirect()->back()->with('success', __('Password updated successfully.'));

    }

    public function companyPassword($id)
    {
        $eId   = Crypt::decrypt($id);
        $user  = User::find($eId);

        $employee = User::where('id', $eId)->first();

        return view('users.reset', compact('user', 'employee'));
    }

    public function upgradePlan($user_id)
    {
        $user  = User::find($user_id);
        $plans = Plan::get();
        $admin_payment_setting = Utility::settings();
        return view('users.plan', compact('user', 'plans','admin_payment_setting'));
    }

    public function activePlan($user_id, $plan_id)
    {
        $user       = User::find($user_id);
        $user->plan = $plan_id;
        $user->save();
        $assignPlan = $user->assignPlan($plan_id);
        $plan       = Plan::find($plan_id);

        if($assignPlan['is_success'] == true && !empty($plan))
        {
            $orderID = strtoupper(str_replace('.', '', uniqid('', true)));
            Order::create(
                [
                    'order_id' => $orderID,
                    'name' => null,
                    'card_number' => null,
                    'card_exp_month' => null,
                    'card_exp_year' => null,
                    'plan_name' => $plan->name,
                    'plan_id' => $plan->id,
                    'price' => $plan->price,
                    'price_currency' => env('CURRENCY'),
                    'txn_id' => '',
                    'payment_type' => __('Manually Upgrade By Super Admin'),
                    'payment_status' => 'succeeded',
                    'receipt' => null,
                    'user_id' => $user->id,
                ]
            );
        }

        return redirect()->back()->with('success', __('Plan successfully activated.'));
    }

    public function deactivatePlan($user_id, $plan_id)
    {
        $user       = User::find($user_id);
        $user->plan = $plan_id;
        $user->save();
        $assignPlan = $user->assignPlan($plan_id);
        $plan       = Plan::find($plan_id);

        if ($assignPlan['is_success'] == true && !empty($plan)) {
            return redirect()->back()->with('success', __('Plan successfully deactivated.'));
        } else {
            return redirect()->back()->with('error', __('Something went wrong.'));
        }
    }

    public function verify($user_id)
    {

        $user = User::where('id', $user_id)->first();
        if ($user) {
            $user->email_verified_at = date('Y-m-d H:i:s');
            $user->save();
            return redirect()->back()->with('success', __('Email verify!'));
        }
    }
    public function detail($user_id)
    {

        $user = User::where('id', $user_id)->first();
        $employee = User::where('created_by', '=', $user_id)
            ->where('type', '!=', 'client')
            ->get();
        $user_detail = UserDetail::where('user_id', $user->id)->first();
        $plan = Plan::where('id', $user->plan)->first();
        $members = User::where('created_by', $user_id)->where('type', '!=', 'advocate')->where('type', '!=', 'client')->get();
        $client = User::where('created_by', $user_id)->where('type', '==', 'client')->get();
        $cases = Cases::where('created_by', $user_id)->get();
        return view('users.detail', compact('user', 'user_detail', 'employee', 'plan', 'members', 'client', 'cases'));
    }

    public function LoginWithAdmin(Request $request, User $user,  $id)
    {

        $user = User::find($id);
        if ($user && auth()->check()) {
            auth()->user()->impersonate($user);
            return redirect('/dashboard');
        }


    }
    public function ExitAdmin(Request $request)
    {
        Auth::user()->leaveImpersonation($request->user());
        return redirect('/dashboard');
    }

    public function companyInfo(Request $request , $id)
    {
        $userData = User::where('created_by',$id)
                    ->where('type','!=','client')
                    ->where('type','!=','advocate')
                    ->where('type','!=','superAdminEmployee')
                    ->selectRaw('COUNT(*) as total_users, SUM(CASE WHEN is_disable = 0 THEN 1 ELSE 0 END) as disable_users, SUM(CASE WHEN is_disable = 1 THEN 1 ELSE 0 END) as active_users')
                    ->first();

        return view('users.companyinfo',compact('userData'  ,'id'));
    }


    public function userUnable(Request $request)
    {
        User::where('id', $request->id)->update(['is_disable' => $request->is_disable]);

        $userData = User::where('created_by',$request->company_id)->where('type','!=','client')->selectRaw('COUNT(*) as total_users, SUM(CASE WHEN is_disable = 0 THEN 1 ELSE 0 END) as disable_users, SUM(CASE WHEN is_disable = 1 THEN 1 ELSE 0 END) as active_users')->first();

        if($request->is_disable == 1){

            return response()->json(['success' => __('User successfully enable.'),'userData' => $userData]);

        }else
        {
            return response()->json(['success' => __('User successfully disable.'),'userData' => $userData]);
        }
    }

    public function LoginManage($id)
    {
        $eId        = Crypt::decrypt($id);
        $user = User::find($eId);
        if($user->is_enable_login == 1)
        {
            $user->is_enable_login = 0;
            $user->save();
            return redirect()->back()->with('success', __('User login disable successfully.'));
        }
        else
        {
            $user->is_enable_login = 1;
            $user->save();
            return redirect()->back()->with('success', __('User login enable successfully.'));
        }
    }

    public function userPassword($id)
    {
        $eId = Crypt::decrypt($id);
        $user = User::find($eId);

        return view('reset', compact('user'));

    }

    public function userPasswordReset(Request $request, $id)
    {
        $validator = \Validator::make(
            $request->all(), [
                'password' => 'required|confirmed|same:password_confirmation',
            ]
        );

        if ($validator->fails()) {
            $messages = $validator->getMessageBag();

            return redirect()->back()->with('error', $messages->first());
        }

        $user = User::where('id', $id)->first();
        $user->forceFill([
            'password' => Hash::make($request->password),
            'is_enable_login' => 1,
        ])->save();

        return redirect()->route('users.index')->with(
            'success', 'User Password successfully updated.'
        );

    }
}