'error', 'message' => 'Akun pengelola tidak terhubung ke rumah ibadah manapun.']); exit; } $res = $conn->query("SELECT lat, lng, radius FROM rumah_ibadah WHERE id=$ibadah_id"); if (!$res || $res->num_rows === 0) { echo json_encode(['status' => 'error', 'message' => 'Rumah ibadah yang dikelola tidak ditemukan.']); exit; } $ibadahFilter = $res->fetch_assoc(); } $data = json_decode(file_get_contents("php://input")); if (is_array($data)) { $conn->begin_transaction(); $inserted = 0; $skipped = 0; $errors = []; foreach ($data as $item) { if (isset($item->lat) && isset($item->lng) && $item->lat !== '' && $item->lng !== '') { $nama = $conn->real_escape_string($item->nama ?? ''); $kategori = $conn->real_escape_string($item->kategori_bantuan ?? 'Makan'); $jumlah_jiwa = (int)($item->jumlah_jiwa ?? 1); $lat = (float)$item->lat; $lng = (float)$item->lng; // Jika pengelola, cek apakah item berada dalam radius ibadahnya if ($ibadahFilter !== null) { $R = 6371000; $lat1 = deg2rad((float)$ibadahFilter['lat']); $lat2 = deg2rad($lat); $dLat = $lat2 - $lat1; $dLng = deg2rad($lng - (float)$ibadahFilter['lng']); $a = sin($dLat/2)*sin($dLat/2) + cos($lat1)*cos($lat2)*sin($dLng/2)*sin($dLng/2); $dist = $R * 2 * atan2(sqrt($a), sqrt(1-$a)); if ($dist > (float)$ibadahFilter['radius']) { $skipped++; continue; // Lewati item di luar radius } } $query = "INSERT INTO penduduk_miskin (nama, kategori_bantuan, jumlah_jiwa, lat, lng) VALUES ('$nama', '$kategori', $jumlah_jiwa, $lat, $lng)"; if (!$conn->query($query)) { $errors[] = $conn->error; } else { $inserted++; } } } if (empty($errors) && $inserted > 0) { $conn->commit(); $msg = "Berhasil mengimpor $inserted data penduduk miskin."; if ($skipped > 0) $msg .= " ($skipped data di luar radius diabaikan.)"; echo json_encode(["status" => "success", "message" => $msg]); } else if ($inserted === 0) { $conn->rollback(); $msg = $skipped > 0 ? "Semua $skipped data berada di luar radius rumah ibadah Anda, tidak ada yang diimpor." : "Tidak ada data valid yang diimpor."; echo json_encode(["status" => "error", "message" => $msg]); } else { $conn->rollback(); echo json_encode(["status" => "error", "message" => "Gagal mengimpor beberapa data. Transaksi dibatalkan.", "errors" => $errors]); } } else { echo json_encode(["status" => "error", "message" => "Format data salah."]); } ?>