345 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			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)
 | 
						|
    {
 | 
						|
        //
 | 
						|
    }
 | 
						|
}
 |