dikplhd/app/Http/Controllers/Management/AksesController.php

345 lines
13 KiB
PHP

<?php
namespace App\Http\Controllers\Management;
use App\Http\Controllers\Controller;
// use App\Exceptions\\GeneralException;
use Illuminate\Http\Request;
use App\Models\Master\AccessMenu;
use App\Models\Master\Menu;
use App\Models\Master\Group;
class AksesController extends Controller
{
protected $title = 'Hak Akses User';
protected $template = 'modules.management.role.akses';
protected $route = 'modules.management.role.akses';
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
public function getRoute($prefix = '*'): string
{
return $this->route.'.'.$prefix;
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
permission('is_update', $this->getRoute(), false, 'module');
$id = decode_id($request->group_id);
// dd($id);
$_read = [];
if ($request->has('is_read')) {
foreach ($request->input('is_read') as $val) {
$_read[] = ['ms_menu_id' => $val];
}
}
$_create = [];
if ($request->has('is_create')) {
foreach ($request->input('is_create') as $val) {
$_create[] = ['ms_menu_id' => $val];
}
}
$_update = [];
if ($request->has('is_update')) {
foreach ($request->input('is_update') as $val) {
$_update[] = ['ms_menu_id' => $val];
}
}
$_delete = [];
if ($request->has('is_delete')) {
foreach ($request->input('is_delete') as $val) {
$_delete[] = ['ms_menu_id' => $val];
}
}
$_download = [];
if ($request->has('is_download')) {
foreach ($request->input('is_download') as $val) {
$_download[] = ['ms_menu_id' => $val];
}
}
$merged = array_merge($_read, $_create, $_update, $_delete, $_download);
$result = [];
foreach ($merged as $key => $data) {
$access = trimId($data['ms_menu_id']);
$module = Menu::find($access[1]);
if (isset($result[$access[1]])) {
$result[$access[1]][$access[0]] = 1;
} else {
$result[$access[1]] = ['ms_menu_id' => intval($access[1]), $access[0] => 1, 'ms_group_id' => intval($id), 'module' => $module->module, 'menu_group' => $request->input('menu_group')];
}
}
/**
* Merge all privileges into json
*/
$group = Group::find(intval($id));
if ($merged) {
$current = AccessMenu::where('menu_group',$request->input('menu_group'))->where('ms_group_id',intval($id))->get();
$insert = null;
if ($current->count() > 0) {
$deletedRows = AccessMenu::where('menu_group',$request->input('menu_group'))->where('ms_group_id',intval($id))->delete();
if ($deletedRows) {
foreach ($result as $val) {
$insert = AccessMenu::create($val);
}
}
} else {
foreach ($result as $val) {
$insert = AccessMenu::create($val);
}
}
if ($insert) {
logActivity($request, __('Edit',['val' => strtolower(__('module.group.access.title',['val' => $group->name]))]));
return redirect('management/role/')->with('message', __('Berhasil Update Data'))
->with('type', 'success');
} else {
return redirect()->back()->with('message', __('Maaf Terjadi Kesalahan'))
->with('type', 'invalid');
}
} else {
$current = AccessMenu::where('menu_group',$request->input('menu_group'))->where('ms_group_id', intval($id))->count();
if ($current > 0) {
AccessMenu::where('menu_group', $request->input('menu_group'))->where('ms_group_id', intval($id))->delete();
logActivity($request, __('Delete',['val' => strtolower(__('Title',['val' => $group->name]))]));
return redirect('management/role/')->with('message', __('Berhasil Update Data'))
->with('type', 'success');
} else {
return redirect()->back()->with('message', __('Maaf Terjadi Kesalahan'))
->with('type', 'invalid');
}
}
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$data['key'] = decode_id($id);
$data['id'] = decode_id($id);
$data['group'] = Group::where('MsGroupId',decode_id($id))->first();
$data['breadcrumbs'] = [
['name' => 'Dashboard','url' => url('dashboard')],
['name' => 'Management & Akses Role'],
['name' => 'Data Role','url' => url('management/role/')],
['name' => 'Role '.$data['group']->name,'active' => true],
];
$data['type'] = 'sidebar';
// $data['groupMenus'] = Menu::where('status',true)->get();
$data['menu'] = $this->getMenu($data['key'], $data['type']);
$data['title'] = $this->title.' '.$data['group']->name;
$data['route'] = $this->route;
return view($this->template.'.form',$data);
}
public function getMenuByParentPosition($id, $type, $active = [1])
{
return Menu::where('parent_id', '=', $id)
->where('menu_type', '=', $type)
->whereIn('status', $active)
->orderBy('ordering')
->get();
}
public function getParentByType($type)
{
return Menu::where('parent_id', '=', 0)
->where('menu_type', '=', $type)
->orderBy('ordering')
->get();
}
public function getMenuByParent($id, $active = [1])
{
return Menu::where('parent_id', '=', $id)
->whereIn('status', $active)
->orderBy('ordering')
->get();
}
/**
* @param $id
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|null|object
*/
public function getActiveById($id)
{
return Menu::where('ms_menu_id', '=' , $id)
->where('status', '=' , true)
->first();
}
/**
* Get all active menu by menu position
*
* @param $type
* @return mixed
*/
public function getActiveByPosition($type)
{
return Menu::where('menu_type', '=' , $type)
->where('status', '=' , true)
->orderBy('ordering')
->get();
}
/**
* @param $type
* @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model[]
*/
public function getParentByTypeStatus($type)
{
return Menu::where('parent_id', '=', 0)
->where('menu_type', '=', $type)
->where('status','=',true)
->orderBy('ordering')
->get();
}
public function getMenu($id, $type)
{
$parent = $this->getMenuByParentPosition(0,$type);
$_parent = [];
foreach ($parent as $row) {
$lev1 = $this->getMenuByParent($row->MsMenuId);
$_lev1 = [];
foreach ($lev1 as $l1) {
$lev2 = $this->getMenuByParent($l1->MsMenuId);
$_lev2 = [];
foreach ($lev2 as $l2) {
$lev3 = $this->getMenuByParent($l2->MsMenuId);
$_lev3 = [];
foreach ($lev3 as $l3) {
$lev4 = $this->getMenuByParent($l3->MsMenuId);
$_lev4 = [];
foreach ($lev4 as $l4) {
$lev4Access = AccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $l4->MsMenuId)->first();
$_lev4[] = [
'id' => $l4->MsMenuId,
'title' => $l4->title,
'ordering' => $l4->ordering,
'checked' => [
"is_create" => $lev4Access ? $lev4Access->is_create : 0,
"is_read" => $lev4Access ? $lev4Access->is_read : 0,
"is_update" => $lev4Access ? $lev4Access->is_update : 0,
"is_delete" => $lev4Access ? $lev4Access->is_delete : 0,
"is_download" => $lev4Access ? $lev4Access->is_download : 0,
]
];
}
$lev3Access = AccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $l3->MsMenuId)->first();
$_lev3[] = [
'id' => $l3->MsMenuId,
'title' => $l3->title . (!!$l3->meta_title?" ##Meta: ". $l3->meta_title:""),
'ordering' => $l3->ordering,
'level4' => $_lev4,
'checked' => [
"is_create" => $lev3Access ? $lev3Access->is_create : 0,
"is_read" => $lev3Access ? $lev3Access->is_read : 0,
"is_update" => $lev3Access ? $lev3Access->is_update : 0,
"is_delete" => $lev3Access ? $lev3Access->is_delete : 0,
"is_download" => $lev3Access ? $lev3Access->is_download : 0,
]
];
}
$lev2Access = AccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $l2->MsMenuId)->first();
$_lev2[] = [
'id' => $l2->MsMenuId,
'title' => $l2->title . " (".(!!$l2->meta_title?$l2->meta_title."@":""). "url:" . $l2->url.")",
'ordering' => $l2->ordering,
'level3' => $_lev3,
'checked' => [
"is_create" => $lev2Access ? $lev2Access->is_create : 0,
"is_read" => $lev2Access ? $lev2Access->is_read : 0,
"is_update" => $lev2Access ? $lev2Access->is_update : 0,
"is_delete" => $lev2Access ? $lev2Access->is_delete : 0,
"is_download" => $lev2Access ? $lev2Access->is_download : 0,
]
];
}
$lev1Access = AccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $l1->MsMenuId)->first();
$_lev1[] = [
'id' => $l1->MsMenuId,
'title' => $l1->title,
'ordering' => $l1->ordering,
'level2' => $_lev2,
'checked' => [
"is_create" => $lev1Access ? $lev1Access->is_create : 0,
"is_read" => $lev1Access ? $lev1Access->is_read : 0,
"is_update" => $lev1Access ? $lev1Access->is_update : 0,
"is_delete" => $lev1Access ? $lev1Access->is_delete : 0,
"is_download" => $lev1Access ? $lev1Access->is_download : 0,
]
];
}
$parentAccess = AccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $row->MsMenuId)->first();
$_parent[] = [
'id' => $row->MsMenuId,
'title' => $row->title,
'ordering' => $row->ordering,
'level1' => $_lev1,
'checked' => [
"is_create" => $parentAccess ? $parentAccess->is_create : 0,
"is_read" => $parentAccess ? $parentAccess->is_read : 0,
"is_update" => $parentAccess ? $parentAccess->is_update : 0,
"is_delete" => $parentAccess ? $parentAccess->is_delete : 0,
"is_download" => $parentAccess ? $parentAccess->is_download : 0,
]
];
}
return $_parent;
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}