Deploy WebGIS 01-05 dengan Docker
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?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);
|
||||
?>
|
||||
Reference in New Issue
Block a user