⚝
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
/
miu
/
modules
/
Absen
/
Controllers
/
Viewing : Absen.php
<?php namespace Modules\Absen\Controllers; use App\Controllers\BaseController; use Ramsey\Uuid\Uuid; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use DateTime; class Absen extends BaseController { public function index() { $data['title'] = 'Absen'; $data['li_1'] = 'Rekap Absen'; $data['body'] = 'Modules\Absen\Views\list'; $data['kelas'] = $this->db->table('kelas')->where(['id_sp' => session('id_sp'), 'id_tp' => session('id_tp')])->get()->getResult(); $data['pd'] = $this->db->table('pd') ->select('pd.id, pd.nama, k.kelas, k.rombel') ->join('isi i', 'pd.id = i.id_pd') ->join('kelas k', 'k.id = i.id_kelas') ->where(['pd.id_sp' => session('id_sp'), 'k.id_tp' => session('id_tp')]) ->get()->getResult(); return view('template', $data); } public function absen(){ $rules = [ 'tgl' => [ 'label' => 'File Upload', 'rules' => 'required|valid_date', 'errors' => [ 'required' => 'Tanggal wajib diisi.', 'valid_date' => 'Format tanggal tidak valid.' ] ], 'nama' => [ 'label' => 'File Upload', 'rules' => 'required', 'errors' => [ 'required' => 'Pilih Jenis Siswa.', ] ], 'jenis' => [ 'label' => 'File Upload', 'rules' => 'required', 'errors' => [ 'required' => 'Pilih Jenis Izin.', ] ] ]; $p = $this->request->getPost(); if (! $this->validateData($p,$rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->back(); } $db = $this->db->table('izin_absen'); $id = Uuid::uuid4()->toString(); $data = [ "id" => $id, "id_pd" => $p['nama'], "jenis" => $p['jenis'], "tgl" => $p['tgl'], "id_sp" => session('id_sp'), ]; $db->insert($data); session()->setFlashData(success('Berhasil menambah Data ')); return redirect()->back(); } public function rekap(){ $p = $this->request->getPost(); $b = $this->db->table('isi')->select('pd.id, pd.nama') ->join('pd', 'isi.id_pd = pd.id') ->where('isi.id_kelas', $p['kelas']) ->where('pd.id_sp', session('id_sp')) ->where('isi.id_tp', session('id_tp')); $d = $b->get()->getResultArray(); $nis = array_column($d, 'id'); $tanggalDiperlukan = []; $tanggalSaatIni = new DateTime($p['mulai']); $tanggalAkhir = new DateTime($p['sampai']); $filter_tgl_akhir = clone($tanggalAkhir); $f_akhir = $filter_tgl_akhir->modify('+1 day'); //Cek Kehadiran $absen = $this->db->table('absen_siswa')->whereIn('id_pd', $nis)->where('tgl >', $p['mulai'])->where('tgl <=', $f_akhir->format('Y-m-d'))->get()->getResult(); foreach ($absen as $k) { $tgl = date('m-d', strtotime($k->tgl)); $status[$k->id_pd][$tgl] = 'H'; } //Cek Izin $izin = $this->db->table('izin_absen')->whereIn('id_pd', $nis)->where('tgl >', $p['mulai'])->where('tgl <=', $f_akhir->format('Y-m-d'))->get()->getResult(); foreach ($izin as $k) { $tgl = date('m-d', strtotime($k->tgl)); //$izin['options'] = array('-', 'Izin', 'Sakit', 'Alfa'); if($k->jenis == '1'){ $st = 'I'; }elseif($k->jenis == '2'){ $st = 'S'; }elseif($k->jenis == '3'){ $st = 'A'; }else{ $st = '-'; } $status[$k->id_pd][$tgl] = $st; } // 1. Buat daftar semua tanggal yang diperlukan sebagai kolom while ($tanggalSaatIni <= $tanggalAkhir) { $tgl = $tanggalSaatIni->format('Y-m-d'); $formatTgl = $tanggalSaatIni->format('m-d'); $tanggalDiperlukan[$tgl] = $formatTgl; $tanggalSaatIni->modify('+1 day'); } $html = '<table id="data-table" class="table table-bordered table-striped">'; // Header Tabel $html .= '<thead><tr>'; $html .= '<th align="center">Nama</th>'; foreach ($tanggalDiperlukan as $format) { $html .= '<th>' . $format . '</th>'; } $html .= '<th>Jml</th>'; // Kolom total $html .= '</tr></thead>'; // Isi Tabel $html .= '<tbody>'; foreach ($d as $k) { $jml[$k['id']] = 0; $html .= '<tr><td>'.$k['nama'].'</td>'; foreach ($tanggalDiperlukan as $format) { if(isset($status[$k['id']][$format])){ $html .= '<td>' . $status[$k['id']][$format] . '</td>'; $jml[$k['id']]++; }else{ $html .= '<td>-</td>'; } } $html .= '<td>'.$jml[$k['id']].'</td>'; $html .= '</tr>'; } $html .= '</tbody>'; $data = [ 'table' => $html ]; return $this->response->setJSON($data); } public function rekapharian($id){ $tgl = new DateTime(date('Y-m-d')); $builder = $this->db->table('absen_siswa a'); $builder->select('pd.nama AS nama_siswa, a.tgl, pd.id AS id_pd'); $builder->join('pd', 'a.id_pd = pd.id'); $builder->join('isi i', 'a.id_pd = i.id_pd'); $builder->join('kelas k', 'k.id = i.id_kelas'); $builder->where('a.tg', $tgl); $builder->where('pd.id_sp', $id); $builder->orderBy('pd.nama, a.tgl'); $dataAbsensi = $builder->get()->getResultArray(); return view('Modules\Absen\Views\rekap', $data); } public function form_siswa(){ $db = $this->db->table('absen_siswa'); $db->select('pd.nama, pd.nis, MAX(absen_siswa.tgl) as terakhir_absen'); $db->join('pd', 'absen_siswa.id_pd = pd.id'); $db->where(['pd.id_sp' => session('id_sp')]); $db->groupBy('absen_siswa.id_pd, pd.nama, pd.nis'); $db->orderBy('terakhir_absen', 'DESC'); $db->limit(100); $data['data'] = $db->get()->getResult();; return view('Modules\Absen\Views\siswa', $data); } public function act(){ $p = $this->request->getPost(); $rules = [ 'nis' => [ 'label' => 'ID Barcode Salah', // Tambahkan label di sini 'rules' => 'required|numeric|min_length[12]|max_length[13]', 'errors' => [ 'required' => '{field} wajib diisi.', 'numeric' => '{field} hanya boleh berisi angka.', 'min_length' => '{field} minimal {param} digit.', 'max_length' => '{field} maksimal {param} digit.', ] ], 'type' => [ 'label' => 'Type Absen', 'rules' => 'required|in_list[struktur,guru,siswa]', 'errors' => [ 'required' => '{field} wajib diisi.', 'in_list' => '{field} hanya bisa diisi dengan salah satu dari: struktur, guru, atau siswa.', ] ], ]; if (! $this->validateData($p,$rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->to(base_url('absen/siswa')); } $nis = substr($p['nis'], 0,env('panjang_nis')); $type = $p['type']; if($type == 'siswa'){ $cek = $this->db->table('pd')->where('nis', $nis)->get()->getRow(); if (!isset($cek->id)) { // Jika ID tidak ditemukan, kembalikan ke form dengan pesan error session()->setFlashdata(gagal('ID Barcode tidak ditemukan di database.')); return redirect()->back(); } $jenis = [1,2]; if (! in_array($p['jenis'], $jenis)) { session()->setFlashdata(gagal('Pilih Jenis Absen Dulu (Datang/Pulang).')); return redirect()->back(); } $cek_absen = $this->db->table('absen_siswa') ->where('id_pd', $cek->id) ->where('jenis', $p['jenis']) ->where("DATE(tgl) = '".date('Y-m-d')."'") // Menggunakan fungsi DATE() ->get(); $sudah_absen = $cek_absen->getRow(); if ($sudah_absen) { session()->setFlashdata(success(ucwords(strtolower($cek->nama)).' Sudah Absen')); return redirect()->back(); } $id = Uuid::uuid4()->toString(); $data = [ 'id' => $id, 'id_pd' => $cek->id, 'tgl' => date('Y-m-d H:i:s'), 'jenis' => $p['jenis'] ]; $input = $this->db->table('absen_siswa')->insert($data); if($p['jenis'] == '1'){ $jenis_pesan = 'Telah tiba disekolah'; $jenis_pesan2 = 'akan belajar'; }else{ $jenis_pesan2 = 'telah belajar'; $jenis_pesan = 'Telah Meninggalkan sekolah'; } $jadwal = $this->jadwal_pd($nis); $wa['number'] = no_wa($cek->kontak); // $wa['number'] = no_wa('085710401019'); $wa['sender'] = '6281398279393'; $wa['api_key'] = 't9WJG1zdVOAKgIS4XBQJDYiVAE4dbM'; $wa['message'] = 'Assalamualaikum Ayah/Bunda...... Tanggal '.date('d F Y').' Ananda *'.strtoupper($cek->nama).'* '.$jenis_pesan.' pada pukul '.date('H:i').' Hari ini ananda '.$jenis_pesan2.' '.$jadwal.'. Terima Kasih..... _Pesan ini dikirim secara oleh otomatis oleh sistem informasi pangkalan data '.ucwords(env('yys_name')).'_ '; $kirim_wa = send_wa($wa); session()->setFlashdata(success(ucwords(strtolower($cek->nama)).' Berhasil Absen')); return redirect()->back(); }else{ session()->setFlashdata(gagal('Feature Belum di Aktifkan')); return redirect()->back(); } } public function jenis_absen($id){ if($id != '0' || $id != ''){ session()->set('jenis_absen', $id); }else{ session()->remove('jenis_absen'); } return json_encode("OK"); } public function jadwal_pd($nis){ $hari_indonesia = [ 'Monday' => 'Senin', 'Tuesday' => 'Selasa', 'Wednesday' => 'Rabu', 'Thursday' => 'Kamis', 'Friday' => 'Jumat', 'Saturday' => 'Sabtu', 'Sunday' => 'Minggu' ]; $hari_inggris = date('l'); $hariIni = $hari_indonesia[$hari_inggris]; $kelas = $this->db->table('jadwal j'); $kelas->select('guru.nama as nama_guru, mapel.nama as nama_mapel'); $kelas->join('guru','j.id_guru = guru.id'); $kelas->join('mapel','j.id_mapel = mapel.id'); $kelas->join('kelas','j.id_kelas = kelas.id'); $kelas->join('isi','kelas.id = isi.id_kelas'); $kelas->join('pd','isi.id_pd = pd.id'); $kelas->where('pd.nis', $nis); $kelas->where('j.hari', $hariIni); $kelas->where('j.hari', $hariIni); $kelas->where('j.id_tp', session('id_tp')); $jadwal = $kelas->get()->getResult(); $out = ''; $i = 1; foreach ($jadwal as $key => $value) { if($i == count($jadwal) ){ $out .= 'dan '; } $out .= $value->nama_mapel.', '; $i++; } $out = rtrim($out, ', '); return $out; } }