diff --git a/app/Http/Controllers/Api/TourismController.php b/app/Http/Controllers/Api/TourismController.php index 3a20e69..5a2a50c 100644 --- a/app/Http/Controllers/Api/TourismController.php +++ b/app/Http/Controllers/Api/TourismController.php @@ -39,7 +39,7 @@ class TourismController extends Controller $tourisms->village_name = $village ? $village->village_name : null; $district = DB::table('districts')->where('district_code', $tourisms->district_code)->first(); - $tourisms->district_name = $village ? $village->village_name : null; + $tourisms->district_name = $district ? $district->district_name : null; return $tourisms; }); diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index c5fff64..abffb5a 100644 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -11,6 +11,7 @@ use App\Traits\GlobalApiResponse; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; class UsersController extends Controller { diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php index 9b638b8..4164ee6 100755 --- a/app/Http/Controllers/Auth/AuthenticatedSessionController.php +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -38,8 +38,6 @@ class AuthenticatedSessionController extends Controller // Buat token untuk API $token = $user->createToken(env('APP_KEY'))->plainTextToken; - - // Simpan token di session (bisa digunakan di JavaScript) session(['api_token' => $token]); return redirect()->intended(RouteServiceProvider::HOME); diff --git a/app/Http/Controllers/BusinessOrIndustriesController.php b/app/Http/Controllers/BusinessOrIndustriesController.php index b2d5b92..4252c35 100644 --- a/app/Http/Controllers/BusinessOrIndustriesController.php +++ b/app/Http/Controllers/BusinessOrIndustriesController.php @@ -4,15 +4,36 @@ namespace App\Http\Controllers; use App\Models\BusinessOrIndustry; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; class BusinessOrIndustriesController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - return view('business-industries.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + return view('business-industries.index', compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/CustomersController.php b/app/Http/Controllers/CustomersController.php index 9c0c8ec..d7c7793 100644 --- a/app/Http/Controllers/CustomersController.php +++ b/app/Http/Controllers/CustomersController.php @@ -4,12 +4,33 @@ namespace App\Http\Controllers; use App\Models\Customer; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; class CustomersController extends Controller { - public function index() + public function index(Request $request) { - return view('customers.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + + return view('customers.index', compact('creator', 'updater', 'destroyer')); } public function create() { diff --git a/app/Http/Controllers/Data/AdvertisementController.php b/app/Http/Controllers/Data/AdvertisementController.php index 8140ad2..65275f9 100644 --- a/app/Http/Controllers/Data/AdvertisementController.php +++ b/app/Http/Controllers/Data/AdvertisementController.php @@ -6,15 +6,36 @@ use App\Http\Controllers\Controller; use App\Models\Advertisement; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; class AdvertisementController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - return view('data.advertisements.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + + return view('data.advertisements.index', compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/Data/SpatialPlanningController.php b/app/Http/Controllers/Data/SpatialPlanningController.php index cfbb1f2..09c8b9b 100644 --- a/app/Http/Controllers/Data/SpatialPlanningController.php +++ b/app/Http/Controllers/Data/SpatialPlanningController.php @@ -5,15 +5,37 @@ namespace App\Http\Controllers\Data; use App\Http\Controllers\Controller; use App\Models\SpatialPlanning; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; class SpatialPlanningController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - return view('data.spatialPlannings.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + + return view('data.spatialPlannings.index', compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/Data/TourismController.php b/app/Http/Controllers/Data/TourismController.php index a36f11e..0809eef 100644 --- a/app/Http/Controllers/Data/TourismController.php +++ b/app/Http/Controllers/Data/TourismController.php @@ -6,15 +6,35 @@ use App\Http\Controllers\Controller; use App\Models\Tourism; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; class TourismController extends Controller { /** * Display a listing of the resource */ - public function index() + public function index(Request $request) { - return view('data.tourisms.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + return view('data.tourisms.index', compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/Data/UmkmController.php b/app/Http/Controllers/Data/UmkmController.php index 01bdef8..27f2cf3 100644 --- a/app/Http/Controllers/Data/UmkmController.php +++ b/app/Http/Controllers/Data/UmkmController.php @@ -6,15 +6,35 @@ use App\Http\Controllers\Controller; use App\Models\Umkm; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; class UmkmController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - return view('data.umkm.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + return view('data.umkm.index', compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/DataSettingController.php b/app/Http/Controllers/DataSettingController.php index 1ed4ab4..9d69e13 100644 --- a/app/Http/Controllers/DataSettingController.php +++ b/app/Http/Controllers/DataSettingController.php @@ -8,15 +8,36 @@ use Exception; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Http\Request as IndexRequest; class DataSettingController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(IndexRequest $request) { - return view("data-settings.index"); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + return view("data-settings.index", compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/Master/UsersController.php b/app/Http/Controllers/Master/UsersController.php index 2e50f99..5fa9a60 100644 --- a/app/Http/Controllers/Master/UsersController.php +++ b/app/Http/Controllers/Master/UsersController.php @@ -13,6 +13,7 @@ use Illuminate\Support\Facades\Hash; use App\Models\User; use App\Traits\GlobalApiResponse; use Illuminate\Auth\Events\Registered; +use Illuminate\Support\Facades\Auth; class UsersController extends Controller { @@ -21,9 +22,29 @@ class UsersController extends Controller $users = User::all(); return $this->resSuccess($users); } - public function index(){ + public function index(Request $request){ + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + $users = User::paginate(); - return view('master.users.index', compact('users')); + return view('master.users.index', compact('users', 'creator', 'updater', 'destroyer')); } public function create(){ $roles = Role::all(); diff --git a/app/Http/Controllers/MenusController.php b/app/Http/Controllers/MenusController.php index 0550a35..caf8446 100644 --- a/app/Http/Controllers/MenusController.php +++ b/app/Http/Controllers/MenusController.php @@ -6,15 +6,36 @@ use App\Http\Requests\MenuRequest; use App\Models\Menu; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; class MenusController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - return view('menus.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + + return view('menus.index', compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/RequestAssignment/PbgTaskController.php b/app/Http/Controllers/RequestAssignment/PbgTaskController.php index b19b8f7..830fa64 100644 --- a/app/Http/Controllers/RequestAssignment/PbgTaskController.php +++ b/app/Http/Controllers/RequestAssignment/PbgTaskController.php @@ -5,15 +5,37 @@ namespace App\Http\Controllers\RequestAssignment; use App\Http\Controllers\Controller; use App\Models\PbgTask; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Auth; class PbgTaskController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - return view('pbg_task.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + + return view('pbg_task.index', compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/RolesController.php b/app/Http/Controllers/RolesController.php index ceff492..2547ef1 100644 --- a/app/Http/Controllers/RolesController.php +++ b/app/Http/Controllers/RolesController.php @@ -10,15 +10,36 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\Auth; class RolesController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - return view("roles.index"); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + + return view("roles.index", compact('creator', 'updater', 'destroyer')); } /** diff --git a/app/Http/Controllers/Settings/SyncronizeController.php b/app/Http/Controllers/Settings/SyncronizeController.php index f50d5a5..dba436d 100644 --- a/app/Http/Controllers/Settings/SyncronizeController.php +++ b/app/Http/Controllers/Settings/SyncronizeController.php @@ -13,7 +13,27 @@ class SyncronizeController extends Controller $this->service_simbg = $service_simbg; } public function index(Request $request){ - return view('settings.syncronize.index'); + $menuId = $request->query('menu_id'); + $user = Auth::user(); + $userId = $user->id; + + // Ambil role_id yang dimiliki user + $roleIds = DB::table('user_role') + ->where('user_id', $userId) + ->pluck('role_id'); + + // Ambil data akses berdasarkan role_id dan menu_id + $roleAccess = DB::table('role_menu') + ->whereIn('role_id', $roleIds) + ->where('menu_id', $menuId) + ->first(); + + // Pastikan roleAccess tidak null sebelum mengakses properti + $creator = $roleAccess->allow_create ?? 0; + $updater = $roleAccess->allow_update ?? 0; + $destroyer = $roleAccess->allow_destroy ?? 0; + + return view('settings.syncronize.index', compact('creator', 'updater', 'destroyer')); } public function syncPbgTask(){ diff --git a/resources/js/business-industries/index.js b/resources/js/business-industries/index.js index 53c0ed2..81409f6 100644 --- a/resources/js/business-industries/index.js +++ b/resources/js/business-industries/index.js @@ -31,6 +31,11 @@ class BusinessIndustries { let tableContainer = document.getElementById( "table-business-industries" ); + + tableContainer.innerHTML = ""; + let canUpdate = tableContainer.getAttribute("data-updater") === "1"; + let canDelete = tableContainer.getAttribute("data-destroyer") === "1"; + // Create a new Grid.js instance only if it doesn't exist this.table = new Grid({ columns: [ @@ -50,17 +55,30 @@ class BusinessIndustries { { name: "Created", width: "180px" }, { name: "Action", - formatter: (cell) => - gridjs.html(` -
- - - - -
- `), + formatter: (cell) => { + + let buttons = `
`; + + if (canUpdate) { + buttons += ` + + + + `; + } + + if (canDelete) { + buttons += ` + + `; + } + + buttons += `
`; + + return gridjs.html(buttons); + }, }, ], pagination: { diff --git a/resources/js/customers/index.js b/resources/js/customers/index.js index ac75c35..a19bced 100644 --- a/resources/js/customers/index.js +++ b/resources/js/customers/index.js @@ -28,6 +28,10 @@ class Customers { initTableCustomers() { let tableContainer = document.getElementById("table-customers"); // Create a new Grid.js instance only if it doesn't exist + + tableContainer.innerHTML = ""; + let canUpdate = tableContainer.getAttribute("data-updater") === "1"; + let canDelete = tableContainer.getAttribute("data-destroyer") === "1"; this.table = new Grid({ columns: [ "ID", @@ -39,17 +43,31 @@ class Customers { "Longitude", { name: "Action", - formatter: (cell) => - gridjs.html(` -
- - - - -
- `), + formatter: (cell) => { + let buttons = ""; + + if (canUpdate) { + buttons += ` + + + + `; + } + + if (canDelete) { + buttons += ` + + `; + } + + if (!canUpdate && !canDelete) { + buttons = `No Privilege`; + } + + return gridjs.html(`
${buttons}
`); + }, }, ], pagination: { diff --git a/resources/js/data-settings/index.js b/resources/js/data-settings/index.js index b4344e5..33e515e 100644 --- a/resources/js/data-settings/index.js +++ b/resources/js/data-settings/index.js @@ -29,6 +29,10 @@ class DataSettings { initTableDataSettings() { let tableContainer = document.getElementById("table-data-settings"); + + tableContainer.innerHTML = ""; + let canUpdate = tableContainer.getAttribute("data-updater") === "1"; + let canDelete = tableContainer.getAttribute("data-destroyer") === "1" // Create a new Grid.js instance only if it doesn't exist this.table = new Grid({ columns: [ @@ -40,16 +44,29 @@ class DataSettings { name: "Actions", width: "120px", formatter: function (cell) { - return gridjs.html(` -
+ let buttons = ""; + + if (canUpdate) { + buttons += ` - -
- `); + `; + } + + if (!canUpdate && !canDelete) { + buttons = `No Privilege`; + } + + return gridjs.html(`
${buttons}
`); }, }, ], diff --git a/resources/js/data/advertisements/data-advertisements.js b/resources/js/data/advertisements/data-advertisements.js index bade5e5..ce7c0cc 100644 --- a/resources/js/data/advertisements/data-advertisements.js +++ b/resources/js/data/advertisements/data-advertisements.js @@ -4,6 +4,11 @@ import "gridjs/dist/gridjs.umd.js"; import GlobalConfig from "../../global-config.js"; import GeneralTable from "../../table-generator.js"; +// Ambil hak akses dari data-attribute +const tableElement = document.getElementById("reklame-data-table"); +const canUpdate = tableElement.getAttribute("data-updater") === "1"; +const canDelete = tableElement.getAttribute("data-destroyer") === "1"; + const dataAdvertisementsColumns = [ "No", "Nama Wajib Pajak", @@ -17,21 +22,39 @@ const dataAdvertisementsColumns = [ "Kontak", { name: "Actions", - widht: "120px", + width: "120px", formatter: function(cell, row) { const id = row.cells[10].data; const model = "data/advertisements"; - return gridjs.html(` -
+ + let actionButtons = '
'; + let hasPrivilege = false; + + // Tampilkan tombol Edit jika user punya akses update + if (canUpdate) { + hasPrivilege = true; + actionButtons += ` + + `; + } + + // Tampilkan tombol Delete jika user punya akses delete + if (canDelete) { + hasPrivilege = true; + actionButtons += ` -
- `); + data-id="${id}"> + + `; + } + + actionButtons += '
'; + + // Jika tidak memiliki akses, tampilkan teks "No Privilege" + return gridjs.html(hasPrivilege ? actionButtons : 'No Privilege'); } } ]; diff --git a/resources/js/data/spatialPlannings/data-spatialPlannings.js b/resources/js/data/spatialPlannings/data-spatialPlannings.js index b766e32..cba1aa2 100644 --- a/resources/js/data/spatialPlannings/data-spatialPlannings.js +++ b/resources/js/data/spatialPlannings/data-spatialPlannings.js @@ -4,6 +4,11 @@ import "gridjs/dist/gridjs.umd.js"; import GlobalConfig from "../../global-config.js"; import GeneralTable from "../../table-generator.js"; +// Ambil hak akses dari data-attribute +const tableElement = document.getElementById("spatial-planning-data-table"); +const canUpdate = tableElement.getAttribute("data-updater") === "1"; +const canDelete = tableElement.getAttribute("data-destroyer") === "1"; + const dataSpatialPlanningColumns = [ "No", "Nama", @@ -19,18 +24,35 @@ const dataSpatialPlanningColumns = [ formatter: function (cell, row) { const id = row.cells[8].data; const model = "data/spatial-plannings"; - return gridjs.html(` -
+ + let actionButtons = '
'; + let hasPrivilege = false; + + // Tampilkan tombol Edit jika user punya akses update + if (canUpdate) { + hasPrivilege = true; + actionButtons += ` - + + `; + } + + // Tampilkan tombol Delete jika user punya akses delete + if (canDelete) { + hasPrivilege = true; + actionButtons += ` -
- `); + + `; + } + + actionButtons += '
'; + + // Jika tidak memiliki akses, tampilkan teks "No Privilege" + return gridjs.html(hasPrivilege ? actionButtons : 'No Privilege'); }, }, ]; diff --git a/resources/js/data/tourisms/data-tourisms.js b/resources/js/data/tourisms/data-tourisms.js index 728cba1..0106273 100644 --- a/resources/js/data/tourisms/data-tourisms.js +++ b/resources/js/data/tourisms/data-tourisms.js @@ -3,6 +3,14 @@ import gridjs from "gridjs/dist/gridjs.umd.js"; import "gridjs/dist/gridjs.umd.js"; import GlobalConfig from "../../global-config.js"; import GeneralTable from "../../table-generator.js"; +import L from "leaflet"; +import "leaflet/dist/leaflet.css"; + +// Ambil hak akses dari data-attribute +const tableElement = document.getElementById("tourisms-data-table"); +const canView = "1"; +const canUpdate = tableElement.getAttribute("data-updater") === "1"; +const canDelete = tableElement.getAttribute("data-destroyer") === "1"; const dataTourismsColumns = [ "No", @@ -21,26 +29,49 @@ const dataTourismsColumns = [ widht: "120px", formatter: function (cell, row) { const id = row.cells[11].data; + const district = row.cells[4].data; const long = row.cells[9].data; const lat = row.cells[10].data; const model = "data/tourisms"; - return gridjs.html(` -
- - - + + let actionButtons = '
'; + let hasPrivilege = false; + + // Tampilkan tombol View jika user punya akses view + if (canView) { + hasPrivilege = true; + actionButtons += ` + ` + } + // Tampilkan tombol Edit jika user punya akses update + if (canUpdate) { + hasPrivilege = true; + actionButtons += ` + `; + } + + // Tampilkan tombol Delete jika user punya akses delete + if (canDelete) { + hasPrivilege = true; + actionButtons += ` -
- `); - }, + + ` + } + + actionButtons += '
'; + // Jika tidak memiliki akses, tampilkan teks "No Privilege" + return gridjs.html(hasPrivilege ? actionButtons : 'No Privilege'); + } }, ]; @@ -74,24 +105,117 @@ document.addEventListener("DOMContentLoaded", () => { table.init(); // Event listener untuk tombol "View" yang memunculkan modal + // document.addEventListener("click", function (e) { + // if (e.target && e.target.classList.contains("btn-view")) { + // const long = e.target.getAttribute("data-long"); + // const lat = e.target.getAttribute("data-lat"); + + // // Menyiapkan URL iframe dengan koordinat yang didapatkan + // const iframeSrc = `https://www.google.com/maps?q=${lat},${long}&hl=es;z=14&output=embed`; + + // // Menemukan modal dan iframe di dalam modal + // const modal = document.querySelector(".modalGMaps"); + // const iframe = modal.querySelector("iframe"); + + // // Set src iframe untuk menampilkan peta dengan koordinat yang relevan + // iframe.src = iframeSrc; + + // // Menampilkan modal + // var modalInstance = new bootstrap.Modal(modal); + // modalInstance.show(); + // } + // }); + + let map; + let geoLayer; + // Event listener untuk tombol "View" yang memunculkan modal dengan Leaflet document.addEventListener("click", function (e) { if (e.target && e.target.classList.contains("btn-view")) { - const long = e.target.getAttribute("data-long"); - const lat = e.target.getAttribute("data-lat"); + const long = parseFloat(e.target.getAttribute("data-long")); + const lat = parseFloat(e.target.getAttribute("data-lat")); + const district = e.target.getAttribute("data-district"); - // Menyiapkan URL iframe dengan koordinat yang didapatkan - const iframeSrc = `https://www.google.com/maps?q=${lat},${long}&hl=es;z=14&output=embed`; - - // Menemukan modal dan iframe di dalam modal const modal = document.querySelector(".modalGMaps"); - const iframe = modal.querySelector("iframe"); - - // Set src iframe untuk menampilkan peta dengan koordinat yang relevan - iframe.src = iframeSrc; - - // Menampilkan modal var modalInstance = new bootstrap.Modal(modal); modalInstance.show(); + + setTimeout(() => { + if (!map) { + map = L.map("map").setView([lat, long], 14); + + // Tambahkan tile layer (peta dasar) + L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { + attribution: '© OpenStreetMap contributors' + }).addTo(map); + } else { + map.setView([lat, long], 14); + } + + if (geoLayer) { + map.removeLayer(geoLayer); + } + + // Tambahkan marker untuk lokasi + L.marker([lat, long]).addTo(map) + .bindPopup(`${district}
Lat: ${lat}, Long: ${long}`) + .openPopup(); + + // Tambahkan GeoJSON ke dalam peta + fetch(`/storage/maps/tourisms/${district.toUpperCase()}.json`) + .then((res) => res.json()) + .then((geojson) => { + let colorMapping = { + BJ: "rgb(235, 30, 30)", + BA: "rgb(151, 219, 242)", + CA: "rgb(70, 70, 165)", + "P-2": "rgb(230, 255, 75)", + HL: "rgb(50, 95, 40)", + HPT: "rgb(75, 155, 55)", + HP: "rgb(125, 180, 55)", + W: "rgb(255, 165, 255)", + PTL: "rgb(0, 255, 205)", + "IK-2": "rgb(130, 185, 210)", + "P-3": "rgb(175, 175, 55)", + PS: "rgb(5, 215, 215)", + PD: "rgb(235, 155, 60)", + PK: "rgb(245, 155, 30)", + HK: "rgb(155, 0, 255)", + KPI: "rgb(105, 0, 0)", + MBT: "rgb(95, 115, 145)", + "P-4": "rgb(185, 235, 185)", + TB: "rgb(70, 150, 255)", + "P-1": "rgb(200, 245, 70)", + TR: "rgb(215, 55, 0)", + THR: "rgb(185, 165, 255)", + TWA: "rgb(210, 190, 255)", + }; + var geoLayer = L.geoJSON(geojson, { + style: function (feature) { + let htmlString = feature.properties.description.toString(); + let match = htmlString.match( + /Kode Zona<\/td>\s*(.*?)<\/td>/ + ); + + let color_code = match[1]; + return { + color: colorMapping[color_code], + fillColor: colorMapping[color_code] || "#cccccc", + fillOpacity: 0.6, + weight: 1.5, + }; + }, + onEachFeature: function(feature, layer) { + if (feature.properties && feature.properties.name) { + layer.bindPopup(feature.properties.name); + } + }, + }).addTo(map); + map.fitBounds(geoLayer.getBounds()); + }) + .catch((error) => { + console.error("Error loading GeoJSON:", error); + }); + }, 500); } }); }); diff --git a/resources/js/data/umkm/data-umkm.js b/resources/js/data/umkm/data-umkm.js index e3f70c5..b087b0d 100644 --- a/resources/js/data/umkm/data-umkm.js +++ b/resources/js/data/umkm/data-umkm.js @@ -3,6 +3,11 @@ import "gridjs/dist/gridjs.umd.js"; import GlobalConfig from "../../global-config.js"; import GeneralTable from "../../table-generator.js"; +// Ambil hak akses dari data-attribute +const tableElement = document.getElementById("umkm-data-table"); +const canUpdate = tableElement.getAttribute("data-updater") === "1"; +const canDelete = tableElement.getAttribute("data-destroyer") === "1"; + const dataUMKMColumns = [ "No", "Nama Usaha", @@ -29,17 +34,35 @@ const dataUMKMColumns = [ formatter: function(cell, row) { const id = row.cells[19].data; const model = "data/umkm"; - return gridjs.html(` -
+ + let actionButtons = '
'; + let hasPrivilege = false; + + // Tampilkan tombol Edit jika user punya akses update + if (canUpdate) { + hasPrivilege = true; + actionButtons += ` + + `; + } + + // Tampilkan tombol Delete jika user punya akses delete + if (canDelete) { + hasPrivilege = true; + actionButtons += ` -
- `); + data-id="${id}"> + + `; + } + + actionButtons += '
'; + + // Jika tidak memiliki akses, tampilkan teks "No Privilege" + return gridjs.html(hasPrivilege ? actionButtons : 'No Privilege'); } } ]; diff --git a/resources/js/master/users/users.js b/resources/js/master/users/users.js index 9f9a903..3707809 100644 --- a/resources/js/master/users/users.js +++ b/resources/js/master/users/users.js @@ -9,6 +9,12 @@ class UsersTable { } initTableUsers() { + let tableContainer = document.getElementById( + "table-users" + ); + + tableContainer.innerHTML = ""; + let canUpdate = tableContainer.getAttribute("data-updater") === "1"; new Grid({ columns: [ "ID", @@ -20,14 +26,18 @@ class UsersTable { "Roles", { name: "Action", - formatter: (cell) => - gridjs.html(` + formatter: (cell) =>{ + if (!canUpdate) { + return gridjs.html(`No Privilege`); + } + return gridjs.html(`
- `), + `); + }, }, ], pagination: { diff --git a/resources/js/menus/index.js b/resources/js/menus/index.js index 7bf5ff7..1755cd3 100644 --- a/resources/js/menus/index.js +++ b/resources/js/menus/index.js @@ -28,35 +28,9 @@ class Menus { initTableMenus() { let tableContainer = document.getElementById("table-menus"); - // if (this.table) { - // // If table exists, update its data instead of recreating - // this.table - // .updateConfig({ - // server: { - // url: `${GlobalConfig.apiHost}/api/menus`, - // credentials: "include", - // headers: { - // Authorization: `Bearer ${document - // .querySelector('meta[name="api-token"]') - // .getAttribute("content")}`, - // "Content-Type": "application/json", - // }, - // then: (data) => - // data.data.map((item) => [ - // item.id, - // item.name, - // item.url, - // item.icon, - // item.parent_id, - // item.sort_order, - // item.id, - // ]), - // total: (data) => data.total, - // }, - // }) - // .forceRender(); - // return; - // } + tableContainer.innerHTML = ""; + let canUpdate = tableContainer.getAttribute("data-updater") === "1"; + let canDelete = tableContainer.getAttribute("data-destroyer") === "1"; this.table = new Grid({ columns: [ @@ -68,18 +42,33 @@ class Menus { "Sort Order", { name: "Action", - formatter: (cell) => - gridjs.html(` -
- - - - -
- `), + formatter: (cell) => { + let buttons = `
`; + + if (canUpdate) { + buttons += ` + + + + `; + } + + if (canDelete) { + buttons += ` + + `; + } + + if (!canUpdate && !canDelete) { + buttons += `No Privilege`; + } + + buttons += `
`; + + return gridjs.html(buttons); + }, }, ], pagination: { diff --git a/resources/js/pbg-task/index.js b/resources/js/pbg-task/index.js index 031812a..3b91531 100644 --- a/resources/js/pbg-task/index.js +++ b/resources/js/pbg-task/index.js @@ -9,6 +9,11 @@ class PbgTasks { } initTableRequestAssignment() { + let tableContainer = document.getElementById("table-pbg-tasks"); + + // Pastikan kontainer kosong sebelum merender ulang Grid.js + tableContainer.innerHTML = ""; + let canUpdate = tableContainer.getAttribute("data-updater") === "1"; new Grid({ columns: [ "ID", @@ -24,13 +29,24 @@ class PbgTasks { { name: "Action", formatter: function (cell) { + let tableContainer = document.getElementById("table-pbg-tasks"); + let canUpdate = tableContainer.getAttribute("data-updater") === "1"; + + if (!canUpdate) { + return gridjs.html(` + No Privilege + `); + } + return gridjs.html(`
- Detail + Detail +
`); }, - }, + } ], search: { server: { diff --git a/resources/js/roles/index.js b/resources/js/roles/index.js index 68d1235..9baa86a 100644 --- a/resources/js/roles/index.js +++ b/resources/js/roles/index.js @@ -27,6 +27,10 @@ class Roles { initTableRoles() { let tableContainer = document.getElementById("table-roles"); + + tableContainer.innerHTML = ""; + let canUpdate = tableContainer.getAttribute("data-updater") === "1"; + let canDelete = tableContainer.getAttribute("data-destroyer") === "1"; // Create a new Grid.js instance only if it doesn't exist this.table = new gridjs.Grid({ columns: [ @@ -34,22 +38,38 @@ class Roles { "Name", "Description", { - name: "Action", - formatter: (cell) => - gridjs.html(` -
- - - - - Role Menu - - -
- `), + name: "Action", + formatter: (cell) => { + let buttons = `
`; + + if (canUpdate) { + buttons += ` + + + + + Role Menu + + `; + } + + if (canDelete) { + buttons += ` + + `; + } + + if (!canUpdate && !canDelete) { + buttons += `No Privilege`; + } + + buttons += `
`; + + return gridjs.html(buttons); }, + }, ], pagination: { limit: 50, diff --git a/resources/js/table-generator.js b/resources/js/table-generator.js index 6314113..f5d3caf 100644 --- a/resources/js/table-generator.js +++ b/resources/js/table-generator.js @@ -12,6 +12,11 @@ class GeneralTable { } init() { + const tableContainer = document.getElementById(this.tableId); + + // Kosongkan container sebelum render ulang + tableContainer.innerHTML = ""; + const table = new Grid({ columns: this.columns, search: this.options.search || { @@ -42,8 +47,8 @@ class GeneralTable { total: (data) => data.meta.total, }, }); - - table.render(document.getElementById(this.tableId)); + + table.render(tableContainer); this.handleActions(); } diff --git a/resources/views/business-industries/index.blade.php b/resources/views/business-industries/index.blade.php index 4dca21c..edab41c 100644 --- a/resources/views/business-industries/index.blade.php +++ b/resources/views/business-industries/index.blade.php @@ -15,9 +15,14 @@
- Upload + @if ($creator) + Upload + @endif +
+
-
diff --git a/resources/views/customers/index.blade.php b/resources/views/customers/index.blade.php index bab6ebf..22c20a5 100644 --- a/resources/views/customers/index.blade.php +++ b/resources/views/customers/index.blade.php @@ -15,10 +15,15 @@
- Create - Upload + @if ($creator) + Create + Upload + @endif +
+
-
diff --git a/resources/views/data-settings/index.blade.php b/resources/views/data-settings/index.blade.php index 8d3d09c..ec005aa 100644 --- a/resources/views/data-settings/index.blade.php +++ b/resources/views/data-settings/index.blade.php @@ -15,9 +15,14 @@
- Create + @if ($creator) + Create + @endif +
+
-
diff --git a/resources/views/data/advertisements/index.blade.php b/resources/views/data/advertisements/index.blade.php index da7898b..dfab65a 100644 --- a/resources/views/data/advertisements/index.blade.php +++ b/resources/views/data/advertisements/index.blade.php @@ -16,16 +16,21 @@
- - + @if ($creator) + + + @endif
-
+
+
diff --git a/resources/views/data/spatialPlannings/index.blade.php b/resources/views/data/spatialPlannings/index.blade.php index da2e4b0..b7a18b3 100644 --- a/resources/views/data/spatialPlannings/index.blade.php +++ b/resources/views/data/spatialPlannings/index.blade.php @@ -14,16 +14,21 @@
- - + @if ($creator) + + + @endif
-
+
+
diff --git a/resources/views/data/tourisms/index.blade.php b/resources/views/data/tourisms/index.blade.php index a17452e..c5687d6 100644 --- a/resources/views/data/tourisms/index.blade.php +++ b/resources/views/data/tourisms/index.blade.php @@ -14,16 +14,21 @@
- - + @if ($creator) + + + @endif
-
+
+
@@ -39,14 +44,15 @@ aria-label="Close"> diff --git a/resources/views/data/umkm/index.blade.php b/resources/views/data/umkm/index.blade.php index 6f8977d..8ab20d8 100644 --- a/resources/views/data/umkm/index.blade.php +++ b/resources/views/data/umkm/index.blade.php @@ -14,16 +14,21 @@
- - + @if ($creator) + + + @endif
-
+
+
diff --git a/resources/views/layouts/partials/sidebar.blade.php b/resources/views/layouts/partials/sidebar.blade.php index d796620..44c710e 100644 --- a/resources/views/layouts/partials/sidebar.blade.php +++ b/resources/views/layouts/partials/sidebar.blade.php @@ -56,9 +56,13 @@ +
@for ($i = 0; $i < 20; $i++)
@endfor + @for ($i = 0; $i < 20; $i++) +
+ @endfor
\ No newline at end of file diff --git a/resources/views/master/users/index.blade.php b/resources/views/master/users/index.blade.php index 193f81f..09a3e44 100644 --- a/resources/views/master/users/index.blade.php +++ b/resources/views/master/users/index.blade.php @@ -13,11 +13,16 @@
- - Create - + @if ($creator) + + Create + + @endif +
+
-
diff --git a/resources/views/menus/index.blade.php b/resources/views/menus/index.blade.php index 5884013..f7ea0b4 100644 --- a/resources/views/menus/index.blade.php +++ b/resources/views/menus/index.blade.php @@ -16,10 +16,15 @@
- Create + @if ($creator) + Create + @endif
-
+
+
diff --git a/resources/views/pbg_task/index.blade.php b/resources/views/pbg_task/index.blade.php index c650ea0..db1cdcd 100644 --- a/resources/views/pbg_task/index.blade.php +++ b/resources/views/pbg_task/index.blade.php @@ -13,9 +13,14 @@
- Create + @if ($creator) + Create + @endif +
+
-
diff --git a/resources/views/roles/index.blade.php b/resources/views/roles/index.blade.php index 42d4684..66090b4 100644 --- a/resources/views/roles/index.blade.php +++ b/resources/views/roles/index.blade.php @@ -16,9 +16,14 @@
- Create + @if ($creator) + Create + @endif +
+
-
diff --git a/resources/views/settings/syncronize/index.blade.php b/resources/views/settings/syncronize/index.blade.php index 8287666..2511709 100644 --- a/resources/views/settings/syncronize/index.blade.php +++ b/resources/views/settings/syncronize/index.blade.php @@ -13,10 +13,12 @@
- + @if ($creator) + + @endif