⚝
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
/
Kelompok
/
Controllers
/
Edit File: Kelompok.php
<?php namespace Modules\Kelompok\Controllers; use App\Controllers\BaseController; use Ramsey\Uuid\Uuid; use PhpOffice\PhpSpreadsheet\Reader\Xlsx; use PhpOffice\PhpSpreadsheet\Reader\Xls; class Kelompok extends BaseController { public function index() { $data['title'] = 'Kelompok Mahasiswa'; $data['li_1'] = 'Daftar Kelompok'; $data['body'] = 'Modules\Kelompok\Views\list.php'; $data['table'] = $this->db->table('kelompok') ->select('nama, id_kelompok') ->groupBy('nama') ->groupBy('id_kelompok') ->get()->getResult(); return view('template', $data); } public function verifikasi(){ $file = $this->request->getFile('file'); // 1. Validasi Awal: File harus ada dan valid if (!$file || !$file->isValid()) { session()->setFlashdata('error', 'Silakan pilih file Excel yang valid.'); return redirect()->back(); } // 2. Tentukan Reader (Xlsx atau Xls) $extension = $file->getClientExtension(); if ($extension === 'xlsx') { $reader = new Xlsx(); } elseif ($extension === 'xls') { $reader = new Xls(); } else { session()->setFlashdata('error', 'Format file harus .xls atau .xlsx'); return redirect()->back(); } // 3. Baca File Excel $spreadsheet = $reader->load($file->getTempName()); $sheetData = $spreadsheet->getActiveSheet()->toArray(); // Ambil header (baris pertama) jika perlu, lalu hapus dari array utama // array_shift akan membuat index array mulai dari 0 untuk data baris ke-2 array_shift($sheetData); if (empty($sheetData)) { session()->setFlashdata('error', 'File Excel tidak memiliki data.'); return redirect()->back(); } // 4. Mapping Awal & Ambil Daftar NIM untuk pengecekan database $cleanData = []; $daftarNim = []; foreach ($sheetData as $row) { $nim = isset($row[1]) ? trim($row[1]) : ''; if (empty($nim)) { continue; // Skip jika kolom NIM kosong } $cleanData[] = [ 'no' => $row[0], 'nim' => $nim, 'nama' => $row[2] ?? '', 'id' => null, // Placeholder ID 'status' => '' // Placeholder Status ]; $daftarNim[] = $nim; } // 5. Cek ke Database (Hanya 1x Query untuk semua NIM) // Kita ambil ID dan NIM untuk dicocokkan $mhsTerdaftar = $this->db->table('mhs') ->select('id, nim') ->whereIn('nim', $daftarNim) ->get() ->getResultArray(); // Ubah hasil query menjadi associative array agar pencarian cepat // Format: ['20.1.1946' => 125, '20.1.2076' => 126] $mappingMhs = []; foreach ($mhsTerdaftar as $m) { $mappingMhs[$m['nim']] = $m['id']; } // 6. Sinkronisasi Status dan ID ke dalam CleanData foreach ($cleanData as &$item) { if (isset($mappingMhs[$item['nim']])) { $item['status'] = 'OK'; $item['id'] = $mappingMhs[$item['nim']]; // Masukkan ID dari DB } else { $item['status'] = 'NIM Tidak ditemukan'; $item['id'] = null; } } unset($item); // Putus referensi loop // 7. Kirim data ke View $data['table'] = $cleanData; $data['title'] = 'Kelompok Mahasiswa'; $data['li_1'] = 'Daftar Kelompok'; $data['body'] = 'Modules\Kelompok\Views\verifikasi.php'; return view('template', $data); echo '<pre>'; print_r($data['table']); echo '</pre>'; } public function add(){ $p = $this->request->getPost(); $rules = [ 'nama_kelompok' => [ 'label' => 'Nama Kelompok', 'rules' => 'required', 'errors' => [ 'required' => '{field} tidak boleh kosong.', ], ], ]; if (! $this->validateData($p,$rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->to(base_url('kelompok')); } $id_kelompok = Uuid::uuid4()->toString(); foreach ($p['id_mhs'] as $key) { $id = Uuid::uuid4()->toString(); $d[] = [ 'id' => $id, 'nama' => $p['nama_kelompok'], 'id_mhs' => $key, 'id_kelompok' => $id_kelompok ]; } $this->db->table('kelompok')->insertBatch($d); session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect()->to(base_url('kelompok')); echo '<pre>'; print_r($d); echo '</pre>'; } public function get($id){ $dt = $this->db->table('kelompok') ->select('kelompok.*, mhs.nama as nm_mhs, mhs.jurusan, mhs.nim') ->join('mhs', 'kelompok.id_mhs = mhs.id') ->where('id_kelompok', $id) ->get()->getResult(); $t = ''; $no = 1; foreach ($dt as $k) { $t .= '<tr> <td>'.$no++.'</td> <td>'.$k->nim.'</td> <td>'.$k->nm_mhs.'</td> <td>'.jur($k->jurusan).'</td> <td align="center"><a class="btn btn-sm btn-danger" onclick="hapus(`kelompok/hapusAnggota/'.dc($k->id).'`)">Hapus</a></td> </tr>'; } return $this->response->setJSON([ 'status' => 'success', 'table' => $t ]); } public function hapusAnggota($id){ $this->db->table('kelompok')->where('id', enc($id))->delete(); session()->setFlashData(success('Berhasil Mengapus Data' )); return redirect()->back(); } public function hapusKelompok($id){ $this->db->table('kelompok')->where('id_kelompok', enc($id))->delete(); session()->setFlashData(success('Berhasil Mengapus Data' )); return redirect()->back(); } }
Simpan