77 lines
2.7 KiB
PHP
77 lines
2.7 KiB
PHP
<?php
|
|
/**
|
|
* ambil_user.php
|
|
* Mengambil daftar akun untuk tabel kelola akun di dashboard.
|
|
* Filter: role, status_akun, keyword.
|
|
*/
|
|
require_once __DIR__ . '/auth.php';
|
|
require_login(true);
|
|
require_role(['super_admin', 'admin_rumah_ibadah'], true);
|
|
|
|
$actor = current_user();
|
|
$actorRole = $actor['role'];
|
|
$filterRole = getv('role', 'semua');
|
|
$status = getv('status_akun', 'semua');
|
|
$keyword = clean_text(getv('keyword', ''), 100);
|
|
|
|
$where = [];
|
|
$types = '';
|
|
$params = [];
|
|
|
|
if ($actorRole === 'super_admin') {
|
|
// Super admin mengelola akun admin rumah ibadah dan penerima saja.
|
|
$where[] = "u.role IN ('admin_rumah_ibadah','penerima')";
|
|
if (in_array($filterRole, ['admin_rumah_ibadah', 'penerima'], true)) {
|
|
$where[] = "u.role=?";
|
|
$types .= 's';
|
|
$params[] = $filterRole;
|
|
}
|
|
} else {
|
|
// Admin rumah ibadah hanya mengelola akun penerima.
|
|
$where[] = "u.role='penerima'";
|
|
|
|
// Jika admin punya lebih dari satu rumah ibadah, semua ID rumah ibadah miliknya harus ikut terbaca.
|
|
// Akun penerima tanpa titik tetap ditampilkan agar bisa dipakai saat tambah penerima.
|
|
$ids = get_admin_rumah_ibadah_ids((int)$actor['id'], true);
|
|
if (!empty($ids)) {
|
|
$in = build_in_condition('pb.rumah_ibadah_id', $ids, $types, $params);
|
|
$where[] = "(pb.id IS NULL OR $in)";
|
|
} else {
|
|
$where[] = "pb.id IS NULL";
|
|
}
|
|
}
|
|
|
|
if (in_array($status, ['aktif', 'nonaktif'], true)) {
|
|
$where[] = "u.status_akun=?";
|
|
$types .= 's';
|
|
$params[] = $status;
|
|
}
|
|
if ($keyword !== '') {
|
|
$where[] = "(u.nama LIKE ? OR u.username LIKE ?)";
|
|
$kw = '%' . $keyword . '%';
|
|
$types .= 'ss';
|
|
$params[] = $kw;
|
|
$params[] = $kw;
|
|
}
|
|
|
|
$sql = "SELECT
|
|
u.id, u.nama, u.username, u.role, u.status_akun, u.created_at, u.updated_at,
|
|
COUNT(DISTINCT pb.id) AS jumlah_titik_penerima,
|
|
COUNT(DISTINCT ri.id) AS jumlah_rumah_ibadah,
|
|
GROUP_CONCAT(DISTINCT ri.nama_rumah_ibadah SEPARATOR ', ') AS rumah_ibadah_dikelola,
|
|
GROUP_CONCAT(DISTINCT rpb.nama_rumah_ibadah SEPARATOR ', ') AS rumah_ibadah_penerima
|
|
FROM users u
|
|
LEFT JOIN penerima_bantuan pb ON pb.user_id=u.id AND COALESCE(pb.status_hapus,'normal')<>'disetujui'
|
|
LEFT JOIN rumah_ibadah rpb ON rpb.id=pb.rumah_ibadah_id
|
|
LEFT JOIN rumah_ibadah ri ON ri.user_id=u.id AND COALESCE(ri.status_hapus,'normal')<>'disetujui'
|
|
WHERE " . implode(' AND ', $where) . "
|
|
GROUP BY u.id
|
|
ORDER BY u.updated_at DESC, u.id DESC";
|
|
$stmt = $koneksi->prepare($sql);
|
|
if (!$stmt) json_response('err', 'Query daftar akun gagal: ' . $koneksi->error, [], 500);
|
|
if ($types) stmt_bind($stmt, $types, $params);
|
|
$rows = fetch_all_stmt($stmt);
|
|
|
|
json_response('ok', 'Daftar akun berhasil diambil.', $rows);
|
|
?>
|