diff --git a/app/Http/Controllers/Admins/Users/RoleController.php b/app/Http/Controllers/Admins/Users/RoleController.php index cd3eeeb..202d25f 100644 --- a/app/Http/Controllers/Admins/Users/RoleController.php +++ b/app/Http/Controllers/Admins/Users/RoleController.php @@ -29,7 +29,7 @@ class RoleController extends Controller // call table user with pagination $datas = Role::latest()->paginate(10); - return view('pages.admins.roles.index', compact('datas')); + return view('pages.admin.roles.index', compact('datas')); } /** @@ -38,7 +38,7 @@ class RoleController extends Controller public function create() { $permissions = Permission::all()->groupBy('group_name'); - return view('pages.admins.roles.create', compact('permissions')); + return view('pages.admin.roles.create', compact('permissions')); } /** @@ -48,36 +48,28 @@ class RoleController extends Controller { // validation $rules = array( - 'name' => 'required', - 'email' => 'required|email', - 'password' => 'required|min:8' + 'name' => 'required|unique:roles', + 'permission' => 'required|min:8', ); $validator = Validator::make($request->all(), $rules); // check validation if ($validator->fails()) { - return Redirect::to('admin/roles/create') + return Redirect::to('roles/create') ->withErrors($validator) ->withInput($request->except('password')); } else { // create new account - $user = Role::create([ - 'name' => $request->name, - 'email' => $request->email, - 'password' => bcrypt($request->password), - ]); - - // Create role for user - $role = Role::findOrFail($request->role); // Pengunjung - $user->assignRole($role); + $role = Role::create(['name' => $request->input('name')]); + $role->syncPermissions($request->get('permission')); // Create Session message Session::flash('roles-message', [ 'type' => 'success', - 'msg' => 'Anda berhasil menambahkan data!' + 'msg' => 'Berhasil menambah data!' ]); - return Redirect::to('admin/roles'); + return Redirect::to('roles'); } } @@ -100,7 +92,7 @@ class RoleController extends Controller $permissions = Permission::get()->groupBy('group_name'); // call view pages - return view('pages.admins.roles.edit', compact('role', 'permissions', 'rolePermissions')); + return view('pages.admin.roles.edit', compact('role', 'permissions', 'rolePermissions')); } /** @@ -110,14 +102,14 @@ class RoleController extends Controller { // validation $rules = array( - 'name' => 'required|min:5', + 'name' => 'required|unique:roles,name,' . $id . ',id', 'permission' => 'required|min:8', ); $validator = Validator::make($request->all(), $rules); // process the login if ($validator->fails()) { - return Redirect::to('admin/roles/edit/' . $id) + return Redirect::to('roles/edit/' . $id) ->withErrors($validator) ->withInput(); } else { @@ -129,10 +121,10 @@ class RoleController extends Controller // Create Session message Session::flash('roles-message', [ 'type' => 'success', - 'msg' => 'Anda berhasil mengubah data!' + 'msg' => 'Berhasil mengubah data!' ]); - return Redirect::to('admin/roles'); + return Redirect::to('roles'); } } diff --git a/app/Http/Controllers/Admins/Users/UserController.php b/app/Http/Controllers/Admins/Users/UserController.php index 5df0297..a6c254d 100644 --- a/app/Http/Controllers/Admins/Users/UserController.php +++ b/app/Http/Controllers/Admins/Users/UserController.php @@ -42,8 +42,8 @@ class UserController extends Controller }) ->addColumn('action', function ($users) { return ' - - + + '; }) ->addColumn('updated_atnya', function ($users) { @@ -130,45 +130,54 @@ class UserController extends Controller public function update(Request $request, string $id) { // validation - $rules = array( - 'name' => 'required|min:5', - 'password' => 'required|min:8', - ); - $validator = Validator::make($request->all(), $rules); + $validator = Validator::make($request->all(), [ + 'name_edit' => 'required', + 'email_edit' => 'required|email|unique:users,email,' . $id, + 'role_id_edit' => 'required' + ], [ + 'name_edit.required' => 'Nama tidak boleh kosong!', + 'email_edit.required' => 'Email tidak boleh kosong!', + 'email_edit.email' => 'Email tidak valid!', + 'email_edit.unique' => 'Email sudah terdaftar!', + 'role_id.required' => 'Role tidak boleh kosong!', + ]); - // process the login + // check validation if ($validator->fails()) { - return Redirect::to('admin/users/edit/' . $id) - ->withErrors($validator) - ->withInput($request->except('password')); - } else { + return ResponseFormatter::error($validator->errors()->first()); + } + + try { + DB::beginTransaction(); + // create new account $user = User::findOrFail($id); - if (!$user) { - // Create Session message - Session::flash('users-message', [ - 'type' => 'warning', - 'msg' => 'Data pengguna tidak ditemukan!' - ]); - - return Redirect::to('admin/users'); - } $user->update([ - 'name' => $request->name, - 'password' => bcrypt($request->password), + 'name' => $request->name_edit, + 'email' => $request->email_edit, ]); - // Update role for user - $user->removeRole($user->roles[0]->name); - $user->assignRole($request->role); + // Password change + if ($request->password_edit) { + $user->update([ + 'password' => bcrypt($request->password_edit), + ]); + } - // Create Session message - Session::flash('users-message', [ - 'type' => 'success', - 'msg' => 'Anda berhasil mengubah data!' - ]); + // Delete role for user + $user->roles()->detach(); - return Redirect::to('admin/users'); + // Assing role for user + foreach ($request->role_id_edit as $key => $value) { + $role = Role::findOrFail($value); // Pengunjung + $user->assignRole($role); + } + + DB::commit(); + return ResponseFormatter::success($user, "User berhasil diubah"); + } catch (\Throwable $th) { + DB::rollBack(); + return ResponseFormatter::error($th->getMessage()); } } @@ -177,29 +186,17 @@ class UserController extends Controller */ public function destroy(string $id) { - // get data from role - $role = Role::findOrFail($id); + // get data from user + $user = User::findOrFail($id); - // check role - if (!$role) { - // Create Session message - Session::flash('roles-message', [ - 'type' => 'warning', - 'msg' => 'Data pengguna tidak ditemukan!' - ]); - - return Redirect::to('admin/roles'); + // check user + if (!$user) { + return ResponseFormatter::error("Data pengguna tidak ditemukan!"); } - // delete role - $role->delete(); + // delete user + $user->delete(); - // Create Session message - Session::flash('roles-message', [ - 'type' => 'success', - 'msg' => 'Anda berhasil menghapus data!' - ]); - - return Redirect::to('admin/roles'); + return ResponseFormatter::success(null, "User berhasil dihapus!"); } } diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index d4fbe8c..dd51464 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -36,6 +36,7 @@ @can('users.index', auth()->user())
  • Setting User
  • +
  • Setting Role
  • @endcan diff --git a/resources/views/pages/admin/roles/create.blade.php b/resources/views/pages/admin/roles/create.blade.php index d37250d..909e3f2 100644 --- a/resources/views/pages/admin/roles/create.blade.php +++ b/resources/views/pages/admin/roles/create.blade.php @@ -1,36 +1,38 @@ -@extends('layouts.app') -@section('title', 'Tambah Roles Akses') -@section('content') - -
    -
    -
    -
    -

    Tambah Roles & Permission

    - +@extends('layouts.base') + +@section('content-header') +
    +
    +
    +
    +

    Master Data

    +
    +
    +
    - +@endsection -
    -
    +@section('content') +
    +
    -
    -

    Tambah Pengguna

    -
    - -   refresh routes - +
    +
    +
    +

    Tambah Role

    + +
    + +
    @@ -55,10 +57,13 @@
    -
    Assign Permissions
    -
    Check All Permission
    - + +
    Assign Permissions +
    +
    Check All Permission + +
    +
    @foreach ($permissions as $key => $permission)
    @@ -102,8 +107,7 @@
    -@stop - +@endsection @push('scripts') + +@endpush diff --git a/resources/views/pages/admin/users/index.blade.php b/resources/views/pages/admin/users/index.blade.php index 6e119f7..7c3b6d4 100644 --- a/resources/views/pages/admin/users/index.blade.php +++ b/resources/views/pages/admin/users/index.blade.php @@ -118,7 +118,7 @@
    @@ -307,6 +276,16 @@ } }) + $('#konfirmasi-password-input_edit').on('keyup', function() { + if ($('#password-input_edit').val() == $('#konfirmasi-password-input_edit').val()) { + $('#konfirmasi-password-input_edit').removeClass('is-invalid') + $('#konfirmasi-password-input_edit').addClass('is-valid') + } else { + $('#konfirmasi-password-input_edit').removeClass('is-valid') + $('#konfirmasi-password-input_edit').addClass('is-invalid') + } + }) + $(document).ready(function() { // ajax tambah user @@ -335,89 +314,75 @@ // ajax edit user $(document).on('click', '.btn-edit-user', function() { - var id = $(this).attr('data-id') + var data = JSON.parse($(this).attr('data-user')); + $('#user-name_edit').val(data.name) + $('#user-email_edit').val(data.email) + $('.edit_select2').val(data.role.map(x => x.id)).trigger('change') + $('#modal-default-edit').modal('show') + $('#form-edit-user').on('submit', function(e) { + // disable button submit + $('#simpan-form-tambah').attr('disabled', true) + + e.preventDefault(); + $.ajax({ + url: "{{ url('users/update') }}" + '/' + data.id, + type: "PUT", + dataType: "json", + data: $(this).serialize(), + cache: false, + async: false, + success: function(response) { + // enable button submit on interval 1 detik + setTimeout(function() { + $('#simpan-form-tambah').attr('disabled', false) + }, 500); + toastr.success(response.meta.message) + $('#modal-default-edit').modal('hide') + $('#form-edit-user')[0].reset() + $('.edit_select2').val(null).trigger('change') + $('#konfirmasi-password-input_edit').removeClass('is-valid') + $('#tabelku').DataTable().ajax.reload() + }, + error: function(response) { + // enable button submit on interval 1 detik + setTimeout(function() { + $('#simpan-form-tambah').attr('disabled', false) + }, 500); + toastr.error(response.responseJSON.meta.message) + } + }) + }) + }) + + // ajax hapus user + $(document).on('click', '.btn-hapus-user', function() { + var data = JSON.parse($(this).attr('data-user')); + var dataAppend = '

    Apakah anda yakin ingin menghapus user ' + data.name + + ' email ' + + data.email + ' ?

    '; + $('#title-terhapus').html(dataAppend); + $('.button-hapus').attr('data-id', data.id); + $('#modal-default-hapus').modal('show'); + }) + + $(document).on('click', '.button-hapus', function() { + var id = $(this).attr('data-id'); $.ajax({ - url: "{{ url('users') }}" + '/' + id + '/edit', - type: "GET", + url: "{{ url('users/delete') }}" + '/' + id, + type: "DELETE", dataType: "json", + cache: false, + async: false, success: function(response) { - console.log(response); - var user = response.data.user; - $('#modal-default-edit').modal('show') - $('#user-name_edit').val(user.name) - $('#user-email_edit').val(user.email) - - // set value select2 - var roles = user.role; - var role_id = []; - $.each(roles, function(key, value) { - role_id.push(value.id) - }) - $('.edit_select2').val(role_id).trigger('change') - - $('#form-edit-user').on('submit', function(e) { - e.preventDefault(); - $.ajax({ - url: "{{ url('users') }}" + '/' + id, - type: "POST", - dataType: "json", - data: $(this).serialize(), - cache: false, - async: false, - success: function(response) { - toastr.success(response.meta.message) - $('#modal-default-edit').modal('hide') - $('#form-edit-user')[0].reset() - $('.edit_select2').val(null).trigger( - 'change') - $('#konfirmasi-password-input_edit') - .removeClass('is-valid') - $('#tabelku').DataTable().ajax.reload() - }, - error: function(response) { - toastr.error(response.responseJSON.meta - .message) - } - }) - }) + toastr.success(response.meta.message) + $('#modal-default-hapus').modal('hide') + $('#tabelku').DataTable().ajax.reload() }, error: function(response) { toastr.error(response.responseJSON.meta.message) } }) }) - - // ajax hapus user - $(document).on('click', '.btn-hapus-user', function() { - var id = $(this).attr('data-id') - Swal.fire({ - title: 'Apakah anda yakin?', - text: "Data user akan dihapus secara permanen!", - icon: 'warning', - showCancelButton: true, - confirmButtonColor: '#007bff', - cancelButtonColor: '#dc3545', - confirmButtonText: 'Ya, hapus!', - cancelButtonText: 'Batal' - }).then((result) => { - if (result.isConfirmed) { - $.ajax({ - url: "{{ url('admin/users') }}" + '/' + id, - type: "POST", - data: { - '_method': 'DELETE' - }, - success: function(response) { - toastr.success(response.meta.message) - $('#tabelku').DataTable().ajax.reload() - }, - error: function(response) { - toastr.error(response.responseJSON.meta.message) - } - }) - } - }) - }) }) @endpush