Yohohohohohooho | Sanrei Aya
Sanrei Aya


Server : LiteSpeed
System : Linux barito.iixcp.rumahweb.net 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64
User : elvh3918 ( 1528)
PHP Version : 8.2.31
Disable Function : mail
Directory :  /home/elvh3918/public_html/pmm/app/Http/Controllers/Admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/elvh3918/public_html/pmm/app/Http/Controllers/Admin/UserController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules;
use Illuminate\Support\Facades\DB;
use App\Models\Model_Has_Role;
use App\Models\Model_Has_Permission;
use App\Models\VW_Permission_View;
use App\Models\User;
use App\Models\Master\Customer;
use Spatie\Permission\Models\Role as SpatieRole;
use App\Models\Bussiness;
use App\Models\Master\Tenant;
use Carbon\Carbon;

class UserController extends Controller
{
    private function call_sendMail()
    {
        return "App\Http\Controllers\Mail\Customer\CustomerLoginMailController";
    }

    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $breadcrumbs = [
            ['link' => "dashboard", 'name' => "Dashboard"], ['link' => "admin.users.index", 'name' => "Users"]
        ];

        $query = User::with('roles', 'model')->get();
        return view('content.admin.users.index', compact('query'), ['breadcrumbs' => $breadcrumbs]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        $breadcrumbs = [
            ['link' => "dashboard", 'name' => "Dashboard"], ['link' => "admin.users.index", 'name' => "Users"], ['link' => "admin.users.create", 'name' => "Create User"]
        ];
        
        $buss = Bussiness::select(['id', 'name', 'is_head', DB::raw("'App\\\Models\\\Bussiness' AS model")])->where('is_active', '=', 1)->orderBy('name')->get();
        $tenant = Tenant::select(['id', 'name', DB::raw("'App\\\Models\\\Master\\\Tenant' AS model")])->where('is_active', '=', 1)->orderBy('name')->get();

        $roles = SpatieRole::where('is_active', '=', 1)->orderBy('name')->get();
        $permissions = VW_Permission_View::whereIn('project', ['admin', config('app.project_app')])->get();
        $users = User::with('roles', 'user_has_permissions.permissions')->get();
        return view('content.admin.users.create', compact('roles', 'permissions', 'users', 'buss', 'tenant'), ['breadcrumbs' => $breadcrumbs]);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $validator = Validator::make(Request::all(), [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
            'password' => ['required', Rules\Password::defaults()],
        ]);

        if ($validator->fails()) {
            return redirect()->route('admin.users.create')->withErrors($validator)->withInput()->with('message', 'input failed');
        }

        DB::beginTransaction();
        try {
            $myString = explode(',', Request::get('tenant'));
            $model_type = $myString[1];
            $model_id = $myString[0];

            $user = User::create([
                'name' => Request::get('name'),
                'email' => Request::get('email'),
                'password' => Request::get('password'),
                'email_verified_at' => Carbon::now(),
                'model_type' => $model_type,
                'model_id' => $model_id,
                'is_active' => Request::get('is_active') != null ? 1: 0,
            ]);
    
            // set role
            if (Request::get('roles')) {
                foreach (Request::get('roles') as $key => $value) {
                    Model_Has_Role::create([
                        'role_id' => $value,
                        'model_type' => 'App\Models\User',
                        'model_id' => $user->id,
                    ]);
                }    
            } else {
                // set default admin
                $role = SpatieRole::where('name', '=', 'admin')->first();
                if ($role) {
                    Model_Has_Role::create([
                        'role_id' => $role->id,
                        'model_type' => 'App\Models\User',
                        'model_id' => $user->id,
                    ]);
                }
            }
    
            // set permissions
            foreach (Request::get('temps') as $key => $value) {
                foreach ($value as $key2 => $value2) {
                    Model_Has_Permission::create([
                        'permission_id' => $key2,
                        'model_type' => 'App\Models\User',
                        'model_id' => $user->id,
                    ]);
                }
            }

            DB::commit();
            return redirect()->route('admin.users.index')->with('message', 'store success');
        } catch (\Exception $e) {
            DB::rollBack();
            return redirect()->route('admin.users.create')->withErrors($validator)->withInput()->with('message', 'store error');
        }
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(User $user)
    {
        $breadcrumbs = [
            ['link' => "dashboard", 'name' => "Dashboard"], ['link' => "admin.users.index", 'name' => "Users"], ['link' => "admin/users/edit/$user->id", 'name' => "Edit User"]
        ];

        $model_id = $user->model_id;
        $model_type = $user->model_type;
        if ($user->model_type == "App\Models\Master\Customer") {
            $model_id = $user->load('model')->model ? $user->load('model')->model->tenant_id : 0;
            $model_type = 'App\Models\Master\Tenant';
        }

        $query = [
            'id' => $user->id,
            'name' => $user->name,
            'email' => $user->email,
            'tenant' => $model_id . ',' . $model_type,
            'is_active' => $user->is_active,
            'roles' => $user->roles->pluck('id'),
            'permissions' => $user->permissions->pluck('id'),
        ];

        $buss = Bussiness::select(['id', 'name', 'is_head', DB::raw("'App\\\Models\\\Bussiness' AS model")])->where('is_active', '=', 1)->orderBy('name')->get();
        $tenant = Tenant::select(['id', 'name', DB::raw("'App\\\Models\\\Master\\\Tenant' AS model")])->where('is_active', '=', 1)->orderBy('name')->get();

        $roles = SpatieRole::orderBy('name')->get();
        $permissions = VW_Permission_View::whereIn('project', ['admin', config('app.project_app')])->get();
        $users = User::with('roles', 'user_has_permissions.permissions')->get();
        return view('content.admin.users.edit', compact('query', 'roles', 'permissions', 'users', 'buss', 'tenant'), ['breadcrumbs' => $breadcrumbs]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, User $user)
    {
        if (Request::get('is_update_password') == null) {
            $validator = Validator::make(Request::all(), [
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($user->id)],
            ]);
        } else {
            $validator = Validator::make(Request::all(), [
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($user->id)],
                'password' => ['required', Rules\Password::defaults()],
            ]);
        }

        if ($validator->fails()) {
            return redirect()->route('admin.users.edit', $user->id)->withErrors($validator)->withInput()->with('message', 'input failed');
        }

        if ($user->model_type == "App\Models\Master\Customer") {
            $customer = $user->load('model')->model;

            if (Request::get('is_update_password') == null) {
                $validator = Validator::make(Request::all(), [
                    'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(Customer::class)->ignore($customer->id)],
                ]);
            } else {
                $validator = Validator::make(Request::all(), [
                    'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(Customer::class)->ignore($customer->id)],
                ]);
            }

            if ($validator->fails()) {
                return redirect()->route('admin.users.edit', $user->id)->withErrors($validator)->withInput()->with('message', 'input failed, email already used in customer');
            }
        }

        DB::beginTransaction();
        try {
            $myString = explode(',', Request::get('tenant'));
            $model_type = $myString[1];
            $model_id = $myString[0];

            if ($user->model_type == "App\Models\Master\Customer") {
                $user->update([
                    'name' => Request::get('name'),
                    'email' => Request::get('email'),
                    'is_active' => Request::get('is_active') != null ? 1: 0,
                ]);

                $customer->update([
                    'name' => Request::get('name'),
                    'email' => Request::get('email'),
                    'tenant_id' => $model_id,
                ]);
            } else {
                $user->update([
                    'name' => Request::get('name'),
                    'email' => Request::get('email'),
                    'model_type' => $model_type,
                    'model_id' => $model_id,
                    'is_active' => Request::get('is_active') != null ? 1: 0,
                ]);
            }

            if (Request::get('is_update_password') != null) {
                $user->update([
                    'password' => Request::get('password'),
                ]);
            }

            // reset
            Model_Has_Role::where('model_id', '=', $user->id)->delete();

            if (Request::get('roles')) {
                // re - insert
                foreach (Request::get('roles') as $key => $value) {
                    Model_Has_Role::create([
                        'role_id' => $value,
                        'model_type' => 'App\Models\User',
                        'model_id' => $user->id,
                    ]);
                } 
            } else {
                // set default admin
                $role = SpatieRole::where('name', '=', 'admin')->first();
                if ($role) {
                    Model_Has_Role::create([
                        'role_id' => $role->id,
                        'model_type' => 'App\Models\User',
                        'model_id' => $user->id,
                    ]);
                }
            }
    
            // reset
            Model_Has_Permission::where('model_id', '=', $user->id)->delete();

            // re - insert
            if (Request::get('temps')) {
                foreach (Request::get('temps') as $key => $value) {
                    foreach ($value as $key2 => $value2) {
                        Model_Has_Permission::create([
                            'permission_id' => $key2,
                            'model_type' => 'App\Models\User',
                            'model_id' => $user->id,
                        ]);
                    }
                }
            }

            DB::commit();

            if (Request::get('is_update_password') != null) {
                if ($user->model_type == "App\Models\Master\Customer") {
                    // send mail
                    app($this->call_sendMail())->send($customer, Request::get('password'));
                }
            }

            return redirect()->route('admin.users.index')->with('message', 'update success');
        } catch (\Exception $e) {
            DB::rollBack();
            return redirect()->route('admin.users.edit', $user->id)->withErrors($validator)->withInput()->with('message', 'update error');
        }
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(User $user)
    {
        DB::beginTransaction();
        try {
            $user->delete();
    
            DB::commit();
            return redirect()->route('admin.users.index')->with('message', 'delete success');
        } catch (\Exception $e) {
            DB::rollBack();
            return redirect()->route('admin.users.index')->with('message', 'delete error');
        }
    }
}

Yohohohohohooho | Sanrei Aya