update patch 1

This commit is contained in:
fiqhpratama
2024-12-02 01:18:34 +07:00
parent 453d9bb470
commit 25026b0a85
3380 changed files with 103529 additions and 363623 deletions
@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Http\Requests\AdminRequest;
use App\Models\Admin;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Role;
class AdminsController extends Controller
{
public function index(): Renderable
{
$this->checkAuthorization(auth()->user(), ['admin.view']);
$pageInfo = [
'title' => 'User Access List',
'sub_title' => 'List User Access System',
'path' => url()->current()
];
return view('backend.pages.admins.index', [
'admins' => Admin::all(),
'pageInfo' => $pageInfo
]);
}
public function create(): Renderable
{
$this->checkAuthorization(auth()->user(), ['admin.create']);
$pageInfo = [
'title' => 'Create User Access',
'sub_title' => 'Create new User',
'path' => url()->current()
];
return view('backend.pages.admins.create', [
'roles' => Role::all(),
'pageInfo' => $pageInfo
]);
}
public function store(AdminRequest $request): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['admin.create']);
$admin = new Admin();
$admin->name = $request->name;
$admin->password = Hash::make($request->password);
$admin->username = $request->username;
$admin->email = $request->email;
$admin->save();
if ($request->roles) {
$admin->assignRole($request->roles);
}
session()->flash('success', __('Admin has been created.'));
return redirect()->route('admin.admins.index');
}
public function edit(int $id): Renderable
{
$this->checkAuthorization(auth()->user(), ['admin.edit']);
$pageInfo = [
'title' => 'Edit User Access',
'sub_title' => 'Update User Access data',
'path' => url()->current()
];
$admin = Admin::findOrFail($id);
return view('backend.pages.admins.edit', [
'admin' => $admin,
'roles' => Role::all(),
'pageInfo' => $pageInfo
]);
}
public function update(AdminRequest $request, int $id): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['admin.edit']);
$admin = Admin::findOrFail($id);
$admin->name = $request->name;
$admin->email = $request->email;
$admin->username = $request->username;
if ($request->password) {
$admin->password = Hash::make($request->password);
}
$admin->save();
$admin->roles()->detach();
if ($request->roles) {
$admin->assignRole($request->roles);
}
session()->flash('success', 'Admin has been updated.');
return back();
}
public function destroy(int $id): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['admin.delete']);
$admin = Admin::findOrFail($id);
$admin->delete();
session()->flash('success', 'Admin has been deleted.');
return back();
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
}
@@ -0,0 +1,119 @@
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Exception;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo;
/**
* show login form for admin guard
*
* @return void
*/
public function showLoginForm()
{
return view('backend.auth.login');
}
protected function redirectTo()
{
if (Auth::guard('admin')->check()) {
// Redirect admins to their dashboard
return RouteServiceProvider::ADMIN_DASHBOARD;
}
if (Auth::guard('web')->check()) {
// Redirect users to the home page
return redirect()->route('trx_order_elevation.index');
}
// Default redirection (optional)
return '/login';
}
/**
* login admin
*
* @param Request $request
* @return void
*/
public function login(Request $request)
{
// Validate Login Data
$request->validate([
'email' => 'required|max:50',
'password' => 'required',
]);
// Attempt to login
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'admin');
return redirect()->route('admin.dashboard');
} else if (Auth::guard('admin')->attempt(['username' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'admin');
return redirect()->route('admin.dashboard');
}else if (Auth::guard('web')->attempt(['username' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'web');
return redirect()->route('admin.dashboard');
}else if (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'web');
return redirect()->route('admin.dashboard');
}
// error
session()->flash('error', 'Invalid email and password..');
return back();
}
/**
* logout admin guard
*
* @return void
*/
public function logout()
{
try{
Auth::guard('admin')->logout();
return redirect()->route('admin.login');
}catch (Exception $e) {
Auth::guard('web')->logout();
return redirect()->route('admin.login');
}
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
}
@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Models\Admin;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class DashboardController extends Controller
{
public function index()
{
return view(
'backend.pages.dashboard.index',
[
'total_admins' => Admin::count(),
'total_roles' => Role::count(),
'total_permissions' => Permission::count(),
]
);
}
}
@@ -0,0 +1,109 @@
<?php
namespace App\Http\Controllers\Backend;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class MenuRoleController extends Controller
{
public function index($roleId)
{
// Ambil semua data dari tabel menus
$menus = DB::table('menus')
->orderBy('parent_id', 'ASC')
->orderBy('order', 'ASC')
->get();
$savedMenuIds = DB::table('role_menu')
->where('role_id', $roleId)
->pluck('menu_id')
->toArray();
// Jika $savedMenuIds null, set ke array kosong
if (is_null($savedMenuIds)) {
$savedMenuIds = [];
}
// Membentuk struktur tree
$menuTree = $this->buildTree($menus, $savedMenuIds);
$pageInfo = [
'title' => 'Assign Role Menu',
'sub_title' => 'Assign Role in Menu',
'path' => url()->current()
];
return view('backend.pages.menurole.index', [
'menuTree' => $menuTree,
'pageInfo' => $pageInfo,
'role_id' => $roleId
]);
}
private function buildTree($menus, $savedMenuIds, $parentId = 0)
{
$tree = [];
foreach ($menus as $menu) {
if ($menu->parent_id == $parentId) {
$children = $this->buildTree($menus, $savedMenuIds, $menu->id);
$node = [
'id' => $menu->id,
'text' => $menu->title,
'attributes' => ['url' => $menu->url],
'checked' => in_array($menu->id, $savedMenuIds)
];
if ($children) {
$node['children'] = $children;
}
$tree[] = $node;
}
}
return $tree;
}
public function saveMenu(Request $request)
{
$request->validate([
'menu_ids' => 'required',
'role_id' => 'required|integer'
]);
$selectedMenuIds = json_decode($request->input('menu_ids', '[]'));
$roleId = $request->input('role_id');
DB::beginTransaction();
try {
DB::table('role_menu')->where('role_id', $roleId)->delete();
$dataToInsert = [];
foreach ($selectedMenuIds as $menuId) {
$results = DB::select('SELECT parent_id FROM menus WHERE id = ?', [$menuId]);
if($results[0]->parent_id){ //jika memiliki parent_id, insert juga
$dataToInsert[] = [
'menu_id' => $results[0]->parent_id,
'role_id' => $roleId
];
}
$dataToInsert[] = [
'menu_id' => $menuId,
'role_id' => $roleId
];
}
$dataToInsert = array_unique(array_map('serialize', $dataToInsert));
$dataToInsert = array_map('unserialize', $dataToInsert);
DB::table('role_menu')->insert($dataToInsert);
DB::commit();
return response()->json(['success' => true], 200);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['success' => false, 'error' => $e->getMessage()], 500);
}
}
}
@@ -0,0 +1,124 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
use App\User;
use App\Http\Controllers\Controller;
use App\Http\Requests\RoleRequest;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\RedirectResponse;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
class RolesController extends Controller
{
public function index(): Renderable
{
$this->checkAuthorization(auth()->user(), ['role.view']);
$pageInfo = [
'title' => 'List Roles',
'sub_title' => 'List All User Roles',
'path' => url()->current()
];
return view('backend.pages.roles.index', [
'roles' => Role::all(), 'pageInfo' => $pageInfo
]);
}
public function create(): Renderable
{
$this->checkAuthorization(auth()->user(), ['role.create']);
$pageInfo = [
'title' => 'Create Roles',
'sub_title' => 'Create User Roles',
'path' => url()->current()
];
return view('backend.pages.roles.create', [
'all_permissions' => Permission::all(),
'permission_groups' => User::getpermissionGroups(),
'pageInfo' => $pageInfo
]);
}
public function store(RoleRequest $request): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['role.create']);
// Process Data.
$role = Role::create(['name' => $request->name, 'guard_name' => 'admin']);
// $role = DB::table('roles')->where('name', $request->name)->first();
$permissions = $request->input('permissions');
if (!empty($permissions)) {
$role->syncPermissions($permissions);
}
session()->flash('success', 'Role has been created.');
return redirect()->route('admin.roles.index');
}
public function edit(int $id): Renderable|RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['role.edit']);
$role = Role::findById($id, 'admin');
if (!$role) {
session()->flash('error', 'Role not found.');
return back();
}
$pageInfo = [
'title' => 'Create Roles',
'sub_title' => 'Create User Roles',
'path' => url()->current()
];
return view('backend.pages.roles.edit', [
'role' => $role,
'all_permissions' => Permission::all(),
'permission_groups' => User::getpermissionGroups(),
'pageInfo' => $pageInfo
]);
}
public function update(RoleRequest $request, int $id): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['role.edit']);
$role = Role::findById($id, 'admin');
if (!$role) {
session()->flash('error', 'Role not found.');
return back();
}
$permissions = $request->input('permissions');
if (!empty($permissions)) {
$role->name = $request->name;
$role->save();
$role->syncPermissions($permissions);
}
session()->flash('success', 'Role has been updated.');
return back();
}
public function destroy(int $id): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['role.delete']);
$role = Role::findById($id, 'admin');
if (!$role) {
session()->flash('error', 'Role not found.');
return back();
}
$role->delete();
session()->flash('success', 'Role has been deleted.');
return redirect()->route('admin.roles.index');
}
}