⚝
One Hat Cyber Team
⚝
Your IP:
192.168.31.6
Server IP:
192.168.1.11
Server:
Linux pams 6.1.0-29-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.123-1 (2025-01-02) x86_64
PHP Version:
8.2.28
Buat File
|
Buat Folder
Upload File
Eksekusi
Dir :
~
/
var
/
www
/
apik
/
modules
/
Absen
/
Controllers
/
Edit File: Absen.php
<?php namespace Modules\Absen\Controllers; use App\Controllers\BaseController; use Ramsey\Uuid\Uuid; class Absen extends BaseController { public function index() { return "OK"; } public function struktur(){ $data['title'] = 'Absen Struktur'; $data['li_1'] = 'Daftar Absen Struktur'; $data['body'] = 'Modules\Absen\Views\struktur.php'; return view('template', $data); } public function syncAbsenStrukturBc($bulan, $tahun){ $url = link_api().'/api/syncAbsenStruktur'; $data = ['bulan'=> $bulan, 'tahun' => $tahun]; $absen = json_decode(api_siak($url, $data), true); // 4. Transformasi/Mapping Data Absen berdasarkan [id_fp][tanggal] // Contoh hasil: $mapAbsen['21'][1] = ['jenis' => '1', 'waktu' => '09:02:53'] $mapAbsen = []; foreach ($absen['absen'] as $row) { $idFp = $row['id_fp']; $tanggal = (int) date('j', strtotime($row['waktu'])); // Mengambil angka tanggal (1-31) $jam = date('H:i:s', strtotime($row['waktu'])); // Simpan status absen per ID Fingerprint per Tanggal $mapAbsen[$idFp][$tanggal] = [ 'jenis' => $row['jenis'], // 1: Masuk, 0: Keluar (atau kustomisasi Anda) 'waktu' => $jam ]; } // 5. Penggabungan Data Struktur + Absensi $resultData = []; foreach ($absen['struktur'] as $s) { $idFp = $s['id']; // Menggunakan ID Struktur sebagai pencocokan id_fp // Hilangkan karakter newline (\n) pada nama pegawai jika ada $namaClean = str_replace(["\r", "\n"], ' ', $s['nama']); $resultData[] = [ 'id' => $s['id'], 'nama' => trim($namaClean), 'kontak' => $s['kontak'], // Gabungkan data absen jika cocok dengan id_fp, jika tidak ada kirim array kosong 'absen' => $mapAbsen[$idFp] ?? (object)[] ]; } // 6. Return Response JSON return $this->response->setJSON([ 'status' => 200, 'message' => 'Data absensi berhasil dimuat', 'bulan' => $bulan, 'tahun' => $tahun, 'data' => $resultData ]); /* echo '<pre>'; print_r($absen); echo '</pre>'; */ } public function syncAbsenStruktur($bulan, $tahun){ $url = link_api().'/api/syncAbsenStruktur'; $data = ['bulan'=> $bulan, 'tahun' => $tahun]; $absen = json_decode(api_siak($url, $data), true); // 4. Transformasi/Mapping Data Absen berdasarkan [id_fp][tanggal] $mapAbsen = []; foreach ($absen['absen'] as $row) { $idFp = $row['id_fp']; $tanggal = (int) date('j', strtotime($row['waktu'])); // Mengambil angka tanggal (1-31) $jam = date('H:i:s', strtotime($row['waktu'])); // Cek apakah tanggal ini sudah memiliki data absen untuk pegawai tersebut if (!isset($mapAbsen[$idFp][$tanggal])) { // Jika belum, set jam pertama kali terbaca sebagai 'datang' dan 'pulang' $mapAbsen[$idFp][$tanggal] = [ 'datang' => $jam, 'pulang' => $jam ]; } else { // Jika sudah ada, bandingkan untuk mencari waktu terendah (masuk) if ($jam < $mapAbsen[$idFp][$tanggal]['datang']) { $mapAbsen[$idFp][$tanggal]['datang'] = $jam; } // Bandingkan untuk mencari waktu tertinggi (pulang) if ($jam > $mapAbsen[$idFp][$tanggal]['pulang']) { $mapAbsen[$idFp][$tanggal]['pulang'] = $jam; } } } // 5. Penggabungan Data Struktur + Absensi $resultData = []; foreach ($absen['struktur'] as $s) { $idFp = $s['id']; // Menggunakan ID Struktur sebagai pencocokan id_fp // Hilangkan karakter newline (\n) pada nama pegawai jika ada $namaClean = str_replace(["\r", "\n"], ' ', $s['nama']); $resultData[] = [ 'id' => $s['id'], 'nama' => trim($namaClean), 'kontak' => $s['kontak'], // Gabungkan data absen jika cocok dengan id_fp, jika tidak ada kirim object kosong 'absen' => $mapAbsen[$idFp] ?? (object)[] ]; } // 6. Return Response JSON return $this->response->setJSON([ 'status' => 200, 'message' => 'Data absensi berhasil dimuat', 'bulan' => $bulan, 'tahun' => $tahun, 'data' => $resultData ]); } }
Simpan