⚝
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
/
pusaka
/
modules
/
Ebook
/
Controllers
/
Edit File: Ebook.php
<?php namespace Modules\Ebook\Controllers; use App\Controllers\BaseController; use Ramsey\Uuid\Uuid; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\Style\Color; use PhpOffice\PhpSpreadsheet\Style\Fill; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Reader\Exception; class Ebook extends BaseController { public function index() { $data['title'] = 'Ebook'; $data['li_1'] = 'Daftar Ebook'; $data['body'] = 'Modules\Ebook\Views\list.php'; $data['table'] = $this->db->table('ebook')->get()->getResult(); return view('template', $data); } public function add(){ $p = $this->request->getPost(); $rules = [ 'judul' => [ 'label' => 'Judul Buku', // Mengizinkan Huruf (A-z), Spasi, Titik (.), dan Koma (,) 'rules' => 'required|regex_match[/^[a-zA-Z\s.,]*$/]|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'penulis' => [ 'label' => 'Penulis Buku', 'rules' => 'required|regex_match[/^[a-zA-Z\s.,]*$/]|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'penerbit' => [ 'label' => 'Penertbit', 'rules' => 'required|regex_match[/^[a-zA-Z\s.,]*$/]|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'tahun' => [ 'label' => 'Tahun Terbit', 'rules' => 'required|numeric|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'numeric' => '{field} hanya boleh berisi angka.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'kode' => [ 'label' => 'Kode Buku', 'rules' => 'required|numeric|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'numeric' => '{field} hanya boleh berisi angka.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'prodi' => [ 'label' => 'Program Studi', 'rules' => 'required|in_list[0,1,2,3,4,5,6,7,8,99]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'in_list' => '{field} Pilih Klasifikasi Buku.', ], ], 'jenis' => [ 'label' => 'Jenis Buku', 'rules' => 'required|in_list[1,2]', 'errors' => [ 'required' => '{field} tidak boleh kosong (belum memilih file).', 'in_list' => 'Pilih Jenis File Dulu.', ], ], ]; if (! $this->validateData($p,$rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->to(base_url('admin/ebook')); } $id = Uuid::uuid4()->toString(); $d = [ 'id' => $id, 'kode' => $p['kode'], 'judul' => $p['judul'], 'penulis' => $p['penulis'], 'penerbit' => $p['penerbit'], 'tahun' => $p['tahun'], 'prodi' => $p['prodi'], 'jenis' => $p['jenis'] ]; if($this->db->table('ebook')->insert($d)){ session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect('ebook'); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect('ebook'); } } public function delete($id = null){ $dt = $this->db->table('ebook')->where('id', enc($id)); $d = $dt->get()->getRow(); deleteFile($d->file_cover); deleteFile($d->file_ebook); if($dt->where('id', enc($id))->delete()){ session()->setFlashData(success('Berhasil Mengapus Data')); return redirect()->to(base_url('admin/ebook')); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect()->to(base_url('admin/ebook')); } } public function get($id = null){ $d = $this->db->table('ebook')->where('id', enc($id))->get()->getRow(); return json_encode($d); } public function edit(){ $p = $this->request->getPost(); $rules = [ 'judul' => [ 'label' => 'Judul Buku', // Mengizinkan Huruf (A-z), Spasi, Titik (.), dan Koma (,) 'rules' => 'required|regex_match[/^[a-zA-Z\s.,]*$/]|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'penulis' => [ 'label' => 'Penulis Buku', 'rules' => 'required|regex_match[/^[a-zA-Z\s.,]*$/]|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'penerbit' => [ 'label' => 'Penertbit', 'rules' => 'required|regex_match[/^[a-zA-Z\s.,]*$/]|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'tahun' => [ 'label' => 'Tahun Terbit', 'rules' => 'required|numeric|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'numeric' => '{field} hanya boleh berisi angka.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'kode' => [ 'label' => 'Kode Buku', 'rules' => 'required|numeric|min_length[3]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'numeric' => '{field} hanya boleh berisi angka.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', ], ], 'prodi' => [ 'label' => 'Program Studi', 'rules' => 'required|in_list[0,1,2,3,4,5,6,7,8]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'in_list' => '{field} Pilih Klasifikasi Buku.', ], ], 'jenis' => [ 'label' => 'Jenis Buku', 'rules' => 'required|in_list[1,2]', 'errors' => [ 'required' => '{field} tidak boleh kosong (belum memilih file).', 'in_list' => 'Pilih Jenis File Dulu.', ], ], ]; if (! $this->validateData($p,$rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->to(base_url('admin/ebook')); } $d = [ 'kode' => $p['kode'], 'judul' => $p['judul'], 'penulis' => $p['penulis'], 'penerbit' => $p['penerbit'], 'tahun' => $p['tahun'], 'prodi' => $p['prodi'], 'jenis' => $p['jenis'] ]; if($this->db->table('ebook')->where('id', enc($p['data_id']))->update($d)){ session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect()->to(base_url('admin/ebook')); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect()->to(base_url('admin/ebook')); } } public function upload(){ $rules = [ 'file' => [ 'label' => 'File Upload', // PASTIKAN: Nama field 'file' ada di dalam ext_in[] 'rules' => 'uploaded[file]|ext_in[file,pdf]', 'errors' => [ 'uploaded' => '{field} tidak boleh kosong (belum memilih file).', 'ext_in' => 'Format {field} tidak valid. Hanya diperbolehkan PDF.', ], ], 'jenis' => [ 'label' => 'Jenis File', 'rules' => 'required|in_list[1,2]', 'errors' => [ 'required' => '{field} tidak boleh kosong (belum memilih file).', 'in_list' => 'Pilih Jenis File Dulu.', ], ] ]; if (! $this->validate($rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->to(base_url('admin/ebook')); } $p = $this->request->getPost(); $file = $this->request->getFile('file'); $db = $this->db->table('ebook'); $d = $db->where('id', enc($p['id_ebook']))->get()->getRow(); if($p['jenis'] == '1'){ $dir = 'upload/cover/'; $jenis = 'file_cover'; deleteFile($d->file_cover); }else{ $dir = 'upload/ebook/'; $jenis = 'file_ebook'; deleteFile($d->file_ebook); } $newName = $file->getRandomName(); if ($file->move(ROOTPATH . 'public/' . $dir, $newName)) { $db->where('id', enc($p['id_ebook']))->update([$jenis => $dir.$newName]); session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect()->to(base_url('admin/ebook')); }else{ session()->setFlashData(gagal('Gagal Memindahkan File')); return redirect()->to(base_url('admin/ebook')); } } public function verifikasiInput() { // 1. Ambil file dari request $file = $this->request->getFile('file'); if (!$file || !$file->isValid() || $file->hasMoved()) { // Cek apakah ada file yang diupload dan valid session()->setFlashData(gagal('Silakan pilih file Excel yang valid.')); return redirect()->back(); } // Cek ekstensi file $ext = $file->getClientExtension(); if ($ext !== 'xlsx' && $ext !== 'xls') { session()->setFlashData(gagal('Format file harus .xlsx atau .xls.')); return redirect()->back(); } // 2. Tentukan Reader berdasarkan ekstensi file $reader = IOFactory::createReaderForFile($file->getTempName()); try { // 3. Muat file ke objek Spreadsheet $spreadsheet = $reader->load($file->getTempName()); $sheet = $spreadsheet->getActiveSheet(); // Dapatkan baris terakhir yang memiliki data $highestRow = $sheet->getHighestRow(); $dataBuku = []; // Asumsi: Data Tagihan dimulai dari BARIS ke-7 (setelah header di baris 6) $startRow = 4; // Loop dari baris data pertama hingga baris terakhir for ($row = $startRow; $row <= $highestRow; $row++) { // Ambil data dari kolom yang sesuai: // Kolom B = NIM, Kolom C = Nama, Kolom D = Tagihan $kode = $sheet->getCell('B' . $row)->getValue(); $judul = $sheet->getCell('C' . $row)->getValue(); $penulis = $sheet->getCell('D' . $row)->getValue(); $penerbit = $sheet->getCell('E' . $row)->getValue(); $tahun = $sheet->getCell('F' . $row)->getValue(); $prodi = $sheet->getCell('G' . $row)->getValue(); $dataBuku[] = [ 'kode' => $kode, 'judul' => $judul, 'penulis' => $penulis, 'penerbit' => $penerbit, 'tahun' => $tahun, 'prodi' => $prodi, ]; } $p = $this->request->getPost(); $data['title'] = 'Verifikasi Buku'; $data['body'] = 'Modules\Ebook\Views\verifikasi.php'; $data['table'] = $dataBuku; $data['jb'] = $p['jenis']; return view('template', $data); } catch (Exception $e) { // Tangani error jika file tidak bisa dibaca session()->setFlashData(gagal('Gagal membaca file Excel: ' . $e->getMessage())); return redirect()->back(); } } public function addXls(){ $p = $this->request->getPost(); for($i=0; $i<count($p['kode']); $i++){ $id = Uuid::uuid4()->toString(); $dataBuku[] = [ 'id' => $id, 'kode' => $p['kode'][$i], 'judul' => $p['judul'][$i], 'penulis' => $p['penulis'][$i], 'penerbit' => $p['penerbit'][$i], 'tahun' => $p['tahun'][$i], 'prodi' => $p['prodi'][$i], 'jenis' => $p['jenis'], ]; } $this->db->table('ebook')->insertBatch($dataBuku); session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect()->to(base_url('admin/ebook')); } }
Simpan