| Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/ |
| Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/MenuController.php |
<?php
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Http\Helpers\MenuHelper;
use App\Models\Backend\menu\backend\Menu;
use App\Models\Backend\menu\backend\RoleMapping;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class MenuController extends Controller
{
public function index(Request $request)
{
$search = $request->get('search');
$menus = Menu::query()
->when($search, fn ($query) => $query->where('menu_name', 'like', "%{$search}%")
->orWhere('menu_link', 'like', "%{$search}%"))
->orderBy('menu_parent_id')
->orderBy('menu_name')
->paginate(10)
->withQueryString();
$parentNames = Menu::whereIn('menu_id', $menus->pluck('menu_parent_id')->filter()->unique())
->pluck('menu_name', 'menu_id');
return view('backend.module.menu.backend.index', [
'menus' => $menus,
'search' => $search,
'parentNames' => $parentNames,
]);
}
public function create()
{
return view('backend.module.menu.backend.create', [
'parents' => Menu::dropdown(),
'routes' => Menu::getRoute(),
]);
}
public function store(Request $request)
{
Menu::create($this->validatedMenu($request));
MenuHelper::bustCache();
flash()->success('Backend menu created successfully.');
return redirect()->route('backend-menu.index');
}
public function edit($id)
{
return view('backend.module.menu.backend.edit', [
'menu' => Menu::findOrFail($id),
'parents' => Menu::dropdown(),
'routes' => Menu::getRoute(),
]);
}
public function update(Request $request, $id)
{
Menu::findOrFail($id)->update($this->validatedMenu($request));
MenuHelper::bustCache();
flash()->success('Backend menu updated successfully.');
return redirect()->route('backend-menu.index');
}
public function destroy($id)
{
Menu::findOrFail($id)->delete();
MenuHelper::bustCache();
flash()->success('Backend menu deleted successfully.');
return redirect()->route('backend-menu.index');
}
public function delete(Request $request)
{
Menu::findOrFail($request->integer('id'))->delete();
MenuHelper::bustCache();
return response()->json(['success' => true]);
}
public function roledelete($id)
{
RoleMapping::findOrFail($id)->delete();
MenuHelper::bustCache();
flash()->success('Role mapping deleted successfully.');
return back();
}
public function assignMenu(Request $request)
{
$role = $request->get('role_code');
if ($request->isMethod('post')) {
$data = $request->validate([
'role_code' => ['required', 'string'],
'menu_id' => ['required', 'integer', 'exists:backend_menu,menu_id'],
'parent_id' => ['nullable', 'integer'],
]);
$sort = RoleMapping::where('role_code', $data['role_code'])
->where('parent_id', $data['parent_id'] ?? 0)
->max('sort') + 1;
RoleMapping::create([
'role_code' => $data['role_code'],
'menu_id' => $data['menu_id'],
'parent_id' => $data['parent_id'] ?? 0,
'sort' => $sort,
'created_by' => (string) auth('admin')->id(),
'updated_by' => (string) auth('admin')->id(),
]);
MenuHelper::bustCache();
flash()->success('Menu assigned successfully.');
return redirect()->route('backend-menu.assign', ['role_code' => $data['role_code']]);
}
return view('backend.module.menu.backend.assign', [
'menus' => Menu::dropdown(),
'roles' => Menu::getRole(),
'role' => $role,
'assignedMenus' => $role ? RoleMapping::nestedmenu(0, $role, 0) : [],
]);
}
public function level($id, $role, $pos, $sort)
{
DB::transaction(function () use ($id, $role, $pos, $sort) {
$current = RoleMapping::findOrFail($id);
$targetSort = (int) $sort + ((string) $pos === 'up' ? -1 : 1);
$target = RoleMapping::where('role_code', $role)
->where('parent_id', $current->parent_id)
->where('sort', $targetSort)
->first();
if ($target) {
$target->update(['sort' => $current->sort]);
$current->update(['sort' => $targetSort]);
}
});
MenuHelper::bustCache();
flash()->success('Menu position updated successfully.');
return back();
}
public function stub()
{
return response()->json(MenuHelper::getMenu(), 200, [], JSON_PRETTY_PRINT);
}
public function disabled($id)
{
$menu = Menu::findOrFail($id);
$menu->update(['menu_status' => !$menu->menu_status]);
MenuHelper::bustCache();
flash()->success('Backend menu status updated successfully.');
return back();
}
private function validatedMenu(Request $request): array
{
$data = $request->validate([
'menu_name' => ['required', 'string', 'max:255'],
'menu_param' => ['nullable', 'string', 'max:255'],
'menu_class' => ['nullable', 'string', 'max:50'],
'menu_link' => ['nullable', 'string', 'max:255'],
'menu_active_route' => ['nullable', 'array'],
'menu_parent_id' => ['nullable', 'integer'],
'menu_status' => ['nullable', 'boolean'],
]);
$data['menu_active_route'] = $data['menu_active_route'] ?? [];
$data['menu_parent_id'] = $data['menu_parent_id'] ?? 0;
$data['menu_status'] = $request->boolean('menu_status');
return $data;
}
}