feat: hapus akun wali murid — tombol Hapus + konfirmasi Swal, hapus user + tautan anak + perangkat (data siswa aman)
This commit is contained in:
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin;
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\ParentStudent;
|
use App\Models\ParentStudent;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
|
||||||
@@ -45,4 +46,19 @@ class WaliMuridController extends Controller
|
|||||||
|
|
||||||
return view('parents.index', compact('users', 'total', 'totalAktif', 'pending', 'baruMingguIni'));
|
return view('parents.index', compact('users', 'total', 'totalAktif', 'pending', 'baruMingguIni'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hapus akun wali murid beserta tautan anak & perangkatnya.
|
||||||
|
* Hanya akun role=parent yang boleh dihapus lewat sini.
|
||||||
|
*/
|
||||||
|
public function destroy(int $userId): RedirectResponse
|
||||||
|
{
|
||||||
|
$user = User::where('role', 'parent')->findOrFail($userId);
|
||||||
|
|
||||||
|
$user->parentDevices()->delete();
|
||||||
|
$user->parentStudents()->delete();
|
||||||
|
$user->delete();
|
||||||
|
|
||||||
|
return back()->with('success', 'Akun wali "' . $user->name . '" beserta tautan & perangkatnya telah dihapus.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -254,11 +254,18 @@
|
|||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="px-6 py-4 text-right">
|
<td class="px-6 py-4 text-right">
|
||||||
<button onclick="resetWaliPassword({{ $user->id }}, '{{ addslashes($user->name) }}')"
|
<div class="flex items-center justify-end gap-2">
|
||||||
class="inline-flex items-center gap-2 px-3.5 py-2 rounded-xl bg-gradient-to-r from-amber-400 to-orange-500 text-white text-xs font-bold shadow-md shadow-amber-500/30 hover:shadow-lg hover:-translate-y-0.5 hover:brightness-105 transition-all"
|
<button onclick="resetWaliPassword({{ $user->id }}, '{{ addslashes($user->name) }}')"
|
||||||
title="Set password baru">
|
class="inline-flex items-center gap-2 px-3.5 py-2 rounded-xl bg-gradient-to-r from-amber-400 to-orange-500 text-white text-xs font-bold shadow-md shadow-amber-500/30 hover:shadow-lg hover:-translate-y-0.5 hover:brightness-105 transition-all"
|
||||||
<i class="fa-solid fa-key"></i> Reset Password
|
title="Set password baru">
|
||||||
</button>
|
<i class="fa-solid fa-key"></i> Reset Password
|
||||||
|
</button>
|
||||||
|
<button onclick="deleteWali({{ $user->id }}, '{{ addslashes($user->name) }}')"
|
||||||
|
class="inline-flex items-center gap-2 px-3.5 py-2 rounded-xl bg-gradient-to-r from-rose-500 to-red-600 text-white text-xs font-bold shadow-md shadow-rose-500/30 hover:shadow-lg hover:-translate-y-0.5 hover:brightness-105 transition-all"
|
||||||
|
title="Hapus akun wali">
|
||||||
|
<i class="fa-solid fa-trash-can"></i> Hapus
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
@@ -274,6 +281,31 @@
|
|||||||
|
|
||||||
@push('scripts')
|
@push('scripts')
|
||||||
<script>
|
<script>
|
||||||
|
function deleteWali(userId, userName) {
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Hapus akun ' + userName + '?',
|
||||||
|
html: 'Akun wali, <b>tautan putra/putri</b>, dan <b>data perangkat</b> akan dihapus permanen dari database.<br><br>Data siswa <b>tidak</b> ikut terhapus.',
|
||||||
|
icon: 'warning',
|
||||||
|
confirmButtonText: '<i class="fa-solid fa-trash-can"></i> Ya, Hapus',
|
||||||
|
showCancelButton: true,
|
||||||
|
cancelButtonText: 'Batal',
|
||||||
|
confirmButtonColor: '#e11d48',
|
||||||
|
}).then((result) => {
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
fetch('{{ url('parents') }}/' + userId, {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
||||||
|
'Accept': 'application/json',
|
||||||
|
},
|
||||||
|
}).then(r => {
|
||||||
|
if (r.redirected) window.location.href = r.url;
|
||||||
|
else location.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function resetWaliPassword(userId, userName) {
|
function resetWaliPassword(userId, userName) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Reset Password — ' + userName,
|
title: 'Reset Password — ' + userName,
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ Route::middleware('auth')->group(function () {
|
|||||||
|
|
||||||
Route::middleware('permission:parents-verify')->group(function () {
|
Route::middleware('permission:parents-verify')->group(function () {
|
||||||
Route::get('/parents', [\App\Http\Controllers\Admin\WaliMuridController::class, 'index'])->name('parents.index');
|
Route::get('/parents', [\App\Http\Controllers\Admin\WaliMuridController::class, 'index'])->name('parents.index');
|
||||||
|
Route::delete('/parents/{user}', [\App\Http\Controllers\Admin\WaliMuridController::class, 'destroy'])->name('parents.destroy');
|
||||||
Route::get('/parents/verification', [\App\Http\Controllers\Admin\ParentVerificationController::class, 'index'])->name('parents.verification');
|
Route::get('/parents/verification', [\App\Http\Controllers\Admin\ParentVerificationController::class, 'index'])->name('parents.verification');
|
||||||
Route::post('/parents/verification/{link}/approve', [\App\Http\Controllers\Admin\ParentVerificationController::class, 'approve'])->name('parents.verification.approve');
|
Route::post('/parents/verification/{link}/approve', [\App\Http\Controllers\Admin\ParentVerificationController::class, 'approve'])->name('parents.verification.approve');
|
||||||
Route::post('/parents/verification/{link}/reject', [\App\Http\Controllers\Admin\ParentVerificationController::class, 'reject'])->name('parents.verification.reject');
|
Route::post('/parents/verification/{link}/reject', [\App\Http\Controllers\Admin\ParentVerificationController::class, 'reject'])->name('parents.verification.reject');
|
||||||
|
|||||||
Reference in New Issue
Block a user