|
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/ |
<?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');
}
}
}