Upload files to "api"

This commit is contained in:
2026-06-02 03:13:49 +00:00
parent 9763625d13
commit d45bcee067
5 changed files with 511 additions and 0 deletions
+104
View File
@@ -0,0 +1,104 @@
<?php
require_once __DIR__ . '/_helpers.php';
api_require_login();
$method = $_SERVER['REQUEST_METHOD'];
$user = current_user();
$role = current_role();
function allowed_value($value, array $allowed, string $default): string
{
$v = clean_string($value);
return in_array($v, $allowed, true) ? $v : $default;
}
if ($method === 'GET') {
$where = [];
$params = [];
if ($role === 'masyarakat') {
$where[] = 'lm.pelapor_id = ?';
$params[] = $user['id'];
} elseif ($role === 'rumah_ibadah' && !empty($user['rumah_ibadah_id'])) {
$where[] = '(k.rumah_ibadah_id = ? OR lm.pelapor_id = ?)';
$params[] = (int)$user['rumah_ibadah_id'];
$params[] = $user['id'];
}
$sql = 'SELECT lm.*, k.nama_kk, k.status_bantuan, r.nama AS nama_rumah_ibadah, u.nama AS nama_pelapor
FROM laporan_musibah lm
LEFT JOIN keluarga k ON k.id = lm.keluarga_id
LEFT JOIN rumah_ibadah r ON r.id = k.rumah_ibadah_id
LEFT JOIN users u ON u.id = lm.pelapor_id';
if ($where) $sql .= ' WHERE ' . implode(' AND ', $where);
$sql .= ' ORDER BY FIELD(lm.tingkat_urgensi, "Darurat", "Tinggi", "Sedang", "Rendah"), lm.created_at DESC';
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
json_response(['success' => true, 'data' => $stmt->fetchAll()]);
}
if ($method === 'POST') {
$data = get_json_input();
required_fields($data, ['jenis_musibah','tingkat_urgensi','tanggal_kejadian','deskripsi']);
$keluargaId = clean_int($data['keluarga_id'] ?? 0);
$alamat = clean_string($data['alamat'] ?? '');
$lat = $data['lat'] ?? '';
$lng = $data['lng'] ?? '';
if ($keluargaId > 0) {
$stmtKel = $pdo->prepare('SELECT id, alamat, lat, lng FROM keluarga WHERE id = ? LIMIT 1');
$stmtKel->execute([$keluargaId]);
$kel = $stmtKel->fetch();
if (!$kel) json_response(['success' => false, 'message' => 'Data keluarga tidak ditemukan.'], 404);
if ($alamat === '') $alamat = $kel['alamat'];
if ($lat === '' || $lng === '') {
$lat = $kel['lat'];
$lng = $kel['lng'];
}
}
if ($alamat === '' || $lat === '' || $lng === '') {
json_response(['success' => false, 'message' => 'Pilih keluarga terdata atau tentukan lokasi kejadian pada peta.'], 422);
}
$stmt = $pdo->prepare('INSERT INTO laporan_musibah
(keluarga_id, pelapor_id, jenis_musibah, tingkat_urgensi, tanggal_kejadian, alamat, lat, lng, deskripsi, kebutuhan_mendesak, status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "Baru")');
$stmt->execute([
$keluargaId > 0 ? $keluargaId : null,
$user['id'],
allowed_value($data['jenis_musibah'], ['Kebakaran','Banjir','Sakit Mendesak','Kehilangan Pekerjaan','Kematian Tulang Punggung Keluarga','Rumah Rusak','Lainnya'], 'Lainnya'),
allowed_value($data['tingkat_urgensi'], ['Rendah','Sedang','Tinggi','Darurat'], 'Sedang'),
clean_string($data['tanggal_kejadian']),
$alamat,
clean_float($lat),
clean_float($lng),
clean_string($data['deskripsi']),
clean_string($data['kebutuhan_mendesak'] ?? '')
]);
json_response(['success' => true, 'message' => 'Laporan musibah berhasil dikirim dan masuk antrian tindak lanjut.', 'id' => $pdo->lastInsertId()], 201);
}
if ($method === 'PUT') {
api_require_role(['admin','dinas','relawan','rumah_ibadah']);
$data = get_json_input();
required_fields($data, ['id','status']);
$id = clean_int($data['id']);
$status = allowed_value($data['status'], ['Baru','Diverifikasi','Diproses','Ditindaklanjuti','Selesai','Ditolak'], 'Baru');
$tindak = clean_string($data['tindak_lanjut'] ?? '');
if ($role === 'rumah_ibadah') {
$stmtCheck = $pdo->prepare('SELECT lm.id FROM laporan_musibah lm LEFT JOIN keluarga k ON k.id = lm.keluarga_id WHERE lm.id = ? AND (k.rumah_ibadah_id = ? OR lm.pelapor_id = ?)');
$stmtCheck->execute([$id, (int)($user['rumah_ibadah_id'] ?? 0), (int)$user['id']]);
if (!$stmtCheck->fetch()) json_response(['success' => false, 'message' => 'Akses laporan musibah ditolak.'], 403);
}
$stmt = $pdo->prepare('UPDATE laporan_musibah SET status = ?, tindak_lanjut = CONCAT(COALESCE(tindak_lanjut, ""), ?), handled_by = ?, updated_at = NOW() WHERE id = ?');
$tambahan = $tindak !== '' ? "\n[" . date('Y-m-d H:i') . "] " . $tindak : '';
$stmt->execute([$status, $tambahan, $user['id'], $id]);
json_response(['success' => true, 'message' => 'Status laporan musibah berhasil diperbarui.']);
}
json_response(['success' => false, 'message' => 'Method tidak didukung.'], 405);