diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index a261086..6bc5b69 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use DB; use Storage; use App\User; use App\Couple; @@ -106,7 +107,12 @@ class UsersController extends Controller { $this->authorize('edit', $user); - return view('users.edit', compact('user')); + $replacementUsers = []; + if (request('action') == 'delete') { + $replacementUsers = User::where('gender_id', $user->gender_id)->pluck('nickname', 'id'); + } + + return view('users.edit', compact('user', 'replacementUsers')); } /** @@ -161,12 +167,40 @@ class UsersController extends Controller /** * Remove the specified User from storage. * - * @param \App\User $user + * @param \Illuminate\Http\Request $request + * @param \App\User $user + * * @return \Illuminate\Http\Response */ - public function destroy(User $user) + public function destroy(Request $request, User $user) { - // + $this->authorize('delete', $user); + + if ($request->has('replace_delete_button')) { + $attributes = $request->validate([ + 'replacement_user_id' => 'required|exists:users,id', + ], [ + 'replacement_user_id.required' => __('validation.user.replacement_user_id.required'), + ]); + + DB::beginTransaction(); + $this->replaceUserOnUsersTable($user->id, $attributes['replacement_user_id']); + $this->replaceUserOnCouplesTable($user->id, $attributes['replacement_user_id']); + $user->delete(); + DB::commit(); + + return redirect()->route('users.show', $attributes['replacement_user_id']); + } + + request()->validate([ + 'user_id' => 'required', + ]); + + if (request('user_id') == $user->id && $user->delete()) { + return redirect()->route('users.search'); + } + + return back(); } /** @@ -194,4 +228,38 @@ class UsersController extends Controller return back(); } + + /** + * Replace User Ids on users table. + * + * @param string $oldUserId + * @param string $replacementUserId + * + * @return void + */ + private function replaceUserOnUsersTable($oldUserId, $replacementUserId) + { + foreach (['father_id', 'mother_id', 'manager_id'] as $field) { + DB::table('users')->where($field, $oldUserId)->update([ + $field => $replacementUserId, + ]); + } + } + + /** + * Replace User Ids on couples table. + * + * @param string $oldUserId + * @param string $replacementUserId + * + * @return void + */ + private function replaceUserOnCouplesTable($oldUserId, $replacementUserId) + { + foreach (['husband_id', 'wife_id', 'manager_id'] as $field) { + DB::table('couples')->where($field, $oldUserId)->update([ + $field => $replacementUserId, + ]); + } + } } diff --git a/app/User.php b/app/User.php index 8255803..9a10f7e 100644 --- a/app/User.php +++ b/app/User.php @@ -2,9 +2,9 @@ namespace App; -use Illuminate\Foundation\Auth\User as Authenticatable; -use Illuminate\Notifications\Notifiable; use Ramsey\Uuid\Uuid; +use Illuminate\Notifications\Notifiable; +use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { @@ -218,4 +218,14 @@ class User extends Authenticatable { return $this->belongsTo(User::class); } + + public function managedUsers() + { + return $this->hasMany(User::class, 'manager_id'); + } + + public function managedCouples() + { + return $this->hasMany(Couple::class, 'manager_id'); + } } diff --git a/resources/lang/en/user.php b/resources/lang/en/user.php index 88de0e6..5a2bf49 100644 --- a/resources/lang/en/user.php +++ b/resources/lang/en/user.php @@ -19,14 +19,14 @@ return [ 'marriages' => 'Marriages', // Actions - 'edit' => 'Edit Profile', - 'set_father' => 'Set Father', - 'set_mother' => 'Set Mother', - 'set_parent' => 'Set Parent', - 'add_spouse' => 'Add Spouse', - 'add_wife' => 'Add Wife', - 'add_husband' => 'Add Husband', - 'add_child' => 'Add Child', + 'edit' => 'Edit Profile', + 'set_father' => 'Set Father', + 'set_mother' => 'Set Mother', + 'set_parent' => 'Set Parent', + 'add_spouse' => 'Add Spouse', + 'add_wife' => 'Add Wife', + 'add_husband' => 'Add Husband', + 'add_child' => 'Add Child', 'add_child_from_existing_couples' => 'Parent (select spouse of :name)', // Attributes @@ -49,4 +49,17 @@ return [ // Photo 'reupload_photo' => 'Re-upload Photo', 'update_photo' => 'Update Photo', -]; \ No newline at end of file + + // Deletion confirm attributes + 'delete' => 'Delete User', + 'delete_confirm' => 'Are you sure to delete this user?', + 'delete_confirm_button' => 'Yes, I am sure', + 'spouses_count' => 'Number of Spouse', + 'childs_count' => 'Number of Child', + 'managed_user' => 'Number of Managed Users', + 'managed_couple' => 'Number of Managed Couples', + 'replacement' => 'Replacement User', + 'replace_confirm' => 'Aree you sure replace then delete this user?', + 'replace_delete_text' => 'You must select other user as replacement.', + 'replace_delete_button' => 'Replace and Delete User', +]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index edc036d..43a1e7b 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -99,9 +99,9 @@ return [ | */ - 'custom' => [ - 'attribute-name' => [ - 'rule-name' => 'custom-message', + 'user' => [ + 'replacement_user_id' => [ + 'required' => 'Please select one.', ], ], diff --git a/resources/lang/id/user.php b/resources/lang/id/user.php index f417821..efa3977 100644 --- a/resources/lang/id/user.php +++ b/resources/lang/id/user.php @@ -19,14 +19,14 @@ return [ 'marriages' => 'Pernikahan', // Actions - 'edit' => 'Edit Profil', - 'set_father' => 'Set Ayah', - 'set_mother' => 'Set Ibu', - 'set_parent' => 'Set Orang Tua', - 'add_spouse' => 'Tambah Pasangan', - 'add_wife' => 'Tambah Isteri', - 'add_husband' => 'Tambah Suami', - 'add_child' => 'Tambah Anak', + 'edit' => 'Edit Profil', + 'set_father' => 'Set Ayah', + 'set_mother' => 'Set Ibu', + 'set_parent' => 'Set Orang Tua', + 'add_spouse' => 'Tambah Pasangan', + 'add_wife' => 'Tambah Isteri', + 'add_husband' => 'Tambah Suami', + 'add_child' => 'Tambah Anak', 'add_child_from_existing_couples' => 'Dari Pernikahan (pilih pasangan :name)', // Attributes @@ -49,4 +49,17 @@ return [ // Photo 'reupload_photo' => 'Upload ulang Foto', 'update_photo' => 'Update Foto', -]; \ No newline at end of file + + // Deletion confirm attributes + 'delete' => 'Hapus User', + 'delete_confirm' => 'Anda yakin akan menghapus user ini?', + 'delete_confirm_button' => 'Saya yakin hapus user ini', + 'spouses_count' => 'Jumlah Pasangan', + 'childs_count' => 'Jumlah Anak', + 'managed_user' => 'Jumlah User Dikelola', + 'managed_couple' => 'Jumlah Pasangan Dikelola', + 'replacement' => 'User Pengganti', + 'replace_confirm' => 'Anda yakin mengganti dan menghapus user ini?', + 'replace_delete_text' => 'Anda harus memilih user lain sebagai pengganti.', + 'replace_delete_button' => 'Ganti dan Hapus User', +]; diff --git a/resources/lang/id/validation.php b/resources/lang/id/validation.php index 0b825bb..8a0094d 100644 --- a/resources/lang/id/validation.php +++ b/resources/lang/id/validation.php @@ -99,9 +99,9 @@ return [ | */ - 'custom' => [ - 'attribute-name' => [ - 'rule-name' => 'custom-message', + 'user' => [ + 'replacement_user_id' => [ + 'required' => 'Wajib dipilih.', ], ], diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 22f39c9..956fed8 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -1,6 +1,56 @@ @extends('layouts.app') @section('content') +@if (request('action') == 'delete' && $user) + @can('delete', $user) +
+
+
+

{{ __('user.delete') }} : {{ $user->name }}

+
+ + + + + + + + + + +
{{ __('user.name') }}{{ $user->name }}
{{ __('user.nickname') }}{{ $user->nickname }}
{{ __('user.gender') }}{{ $user->gender }}
{{ __('user.father') }}{{ $user->father_id ? $user->father->name : '' }}
{{ __('user.mother') }}{{ $user->mother_id ? $user->mother->name : '' }}
{{ __('user.childs_count') }}{{ $dependentCount = $user->childs()->count() }}
{{ __('user.spouses_count') }}{{ $dependentCount += $user->marriages()->count() }}
{{ __('user.managed_user') }}{{ $dependentCount += $user->managedUsers()->count() }}
{{ __('user.managed_couple') }}{{ $dependentCount += $user->managedCouples()->count() }}
+ @if ($dependentCount) + {{ __('user.replace_delete_text') }} + {{ Form::open([ + 'route' => ['users.destroy', $user], + 'method' => 'delete', + 'onsubmit' => 'return confirm("'.__('user.replace_confirm').'")', + ]) }} + {!! FormField::select('replacement_user_id', $replacementUsers, [ + 'label' => false, + 'placeholder' => __('user.replacement'), + ]) !!} + {{ Form::submit(__('user.replace_delete_button'), [ + 'name' => 'replace_delete_button', + 'class' => 'btn btn-danger', + ]) }} + {{ link_to_route('users.edit', __('app.cancel'), [$user], ['class' => 'btn btn-default pull-right']) }} + {{ Form::close() }} + @else + {!! FormField::delete( + ['route' => ['users.destroy', $user]], + __('user.delete_confirm_button'), + ['class' => 'btn btn-danger'], + ['user_id' => $user->id] + ) !!} + {{ link_to_route('users.edit', __('app.cancel'), [$user], ['class' => 'btn btn-default']) }} + @endif +
+
+
+
+ @endcan +@else