request->getVar('keywords'); if (isset($keywords)) { $totalnya = $m_siswa->total_cari($keywords); $title = 'Hasil pencarian: ' . $keywords . ' - ' . $totalnya->total . ' ditemukan'; $page = (int) ($this->request->getGet('page') ?? 1); $perPage = 10; $total = $totalnya->total; $pager_links = $pager->makeLinks($page, $perPage, $total, 'bootstrap_pagination'); $page = ($this->request->getGet('page')) ? ($this->request->getGet('page') - 1) * $perPage : 0; $siswa = $m_siswa->paginasi_cari($keywords, $perPage, $page); } else { $totalnya = $m_siswa->total(); $title = 'Data Master Siswa (' . $totalnya->total . ')'; $page = (int) ($this->request->getGet('page') ?? 1); $perPage = 10; $total = $totalnya->total; $pager_links = $pager->makeLinks($page, $perPage, $total, 'bootstrap_pagination'); $page = ($this->request->getGet('page')) ? ($this->request->getGet('page') - 1) * $perPage : 0; $siswa = $m_siswa->paginasi($perPage, $page); } $data = [ 'title' => $title, 'siswa' => $siswa, 'pagination' => $pager_links, 'content' => 'admin/siswa/index' ]; echo view('admin/layout/wrapper', $data); } public function tambah() { $m_siswa = new Siswa_model(); $siswa = $m_siswa->last_id(); $urutan = ($siswa) ? $siswa->id_siswa + 1 : 1; // Validasi form $rules = [ 'nama_siswa' => 'required', 'nis' => 'required', 'jenis_kelamin' => 'required', 'kategori' => 'required', 'status_siswa' => 'required', 'id_tahun' => 'required', 'id_kelas' => 'required', 'telepon' => 'required', 'email' => 'required|valid_email', // Validasi untuk orang tua dan wali 'nama_ayah' => 'permit_empty', 'telepon_ayah' => 'permit_empty', 'nama_ibu' => 'permit_empty', 'telepon_ibu' => 'permit_empty', // Validasi untuk wali jika orang tua tidak diisi 'nama_wali' => 'permit_empty', 'telepon_wali' => 'permit_empty', ]; // Pesan error yang lebih jelas $messages = [ 'required' => '{field} wajib diisi.', 'valid_email' => 'Harap masukkan alamat email yang valid.', 'permit_empty' => 'Kolom ini bisa dibiarkan kosong, tetapi jika orang tua tidak diisi, kolom wali harus diisi.', 'required_without' => '{field} harus diisi jika {param} tidak diisi.', ]; // Jika form disubmit dan validasi berhasil if ($this->request->getMethod() === 'post' && $this->validate($rules, $messages)) { // Proses password dan slug otomatis $hashedPassword = password_hash($this->request->getPost('nis'), PASSWORD_DEFAULT); $slug_siswa = $this->createSlug($this->request->getPost('nama_siswa')); // Memeriksa apakah orang tua dan wali kosong $nama_ayah = $this->request->getPost('nama_ayah'); $telepon_ayah = $this->request->getPost('telepon_ayah'); $nama_ibu = $this->request->getPost('nama_ibu'); $telepon_ibu = $this->request->getPost('telepon_ibu'); $nama_wali = $this->request->getPost('nama_wali'); $telepon_wali = $this->request->getPost('telepon_wali'); // Validasi kondisi orang tua dan wali if (empty($nama_ayah) && empty($nama_ibu) && empty($nama_wali)) { $this->session->setFlashdata('error', 'Jika nama ayah dan ibu kosong, maka nama wali wajib diisi.'); return redirect()->back()->withInput(); } if (empty($telepon_ayah) && empty($telepon_ibu) && empty($telepon_wali)) { $this->session->setFlashdata('error', 'Jika telepon ayah dan ibu kosong, maka telepon wali wajib diisi.'); return redirect()->back()->withInput(); } // Persiapkan data yang akan disimpan $data = [ 'nama_siswa' => $this->request->getPost('nama_siswa'), 'slug_siswa' => $slug_siswa, 'nis' => $this->request->getPost('nis'), 'password' => $hashedPassword, 'jenis_kelamin' => $this->request->getPost('jenis_kelamin'), 'kategori' => $this->request->getPost('kategori'), 'telepon' => $this->request->getPost('telepon'), 'email' => $this->request->getPost('email'), 'status_siswa' => $this->request->getPost('status_siswa'), 'id_tahun' => $this->request->getPost('id_tahun'), 'id_kelas' => $this->request->getPost('id_kelas'), 'nama_ayah' => $this->request->getPost('nama_ayah'), 'telepon_ayah' => $this->request->getPost('telepon_ayah'), 'nama_ibu' => $this->request->getPost('nama_ibu'), 'telepon_ibu' => $this->request->getPost('telepon_ibu'), 'nama_wali' => $this->request->getPost('nama_wali'), 'telepon_wali' => $this->request->getPost('telepon_wali'), ]; // Menyimpan data siswa ke database if ($m_siswa->insert($data)) { $this->session->setFlashdata('sukses', 'Data siswa telah ditambah'); } else { $this->session->setFlashdata('error', 'Terjadi kesalahan, data tidak bisa ditambahkan'); } return redirect()->to(base_url('admin/siswa')); } else { // Jika form tidak valid, tampilkan kembali form dengan error $data = [ 'title' => 'Tambah Data Siswa', 'siswa' => $siswa, 'urutan' => $urutan, 'content' => 'admin/siswa/tambah' ]; echo view('admin/layout/wrapper', $data); } } // Fungsi untuk edit data siswa public function edit($id_siswa) { $m_siswa = new Siswa_model(); $siswa = $m_siswa->detail($id_siswa); if ($this->request->getMethod() === 'post' && $this->validate([ 'nama_siswa' => 'required', 'gambar' => [ 'ext_in[gambar,jpg,jpeg,gif,png,svg]', 'max_size[gambar,4096]', ], ])) { // Penanganan unggah gambar (update) $gambar = $this->request->getFile('gambar'); if ($gambar && $gambar->isValid() && !$gambar->hasMoved()) { $namabaru = $gambar->getRandomName(); $gambar->move(WRITEPATH . 'uploads', $namabaru); // Simpan file di folder "uploads" } else { // Jika tidak ada gambar baru yang diunggah, gunakan gambar lama $namabaru = $siswa->gambar; // Ambil gambar lama jika tidak ada gambar baru } // Membuat slug otomatis jika slug kosong $slug_siswa = $siswa->slug_siswa; if (empty($slug_siswa)) { $slug_siswa = $this->createSlug($this->request->getPost('nama_siswa')); // Jika slug kosong, buat slug } // Menangkap data jenis pembiayaan $jenis_pembiayaan = $this->request->getPost('jenis_pembiayaan'); // Menyimpan perubahan data $data = [ 'nama_siswa' => $this->request->getPost('nama_siswa'), 'slug_siswa' => $slug_siswa, // Masukkan slug_siswa 'nis' => $this->request->getPost('nis'), 'jenis_kelamin' => $this->request->getPost('jenis_kelamin'), 'telepon' => $this->request->getPost('telepon'), 'email' => $this->request->getPost('email'), 'gambar' => $namabaru, // Simpan nama gambar 'status_siswa' => $this->request->getPost('status_siswa'), 'id_tahun' => $this->request->getPost('id_tahun'), 'id_kelas' => $this->request->getPost('id_kelas'), 'nama_ayah' => $this->request->getPost('nama_ayah'), 'telepon_ayah' => $this->request->getPost('telepon_ayah'), 'nama_ibu' => $this->request->getPost('nama_ibu'), 'telepon_ibu' => $this->request->getPost('telepon_ibu'), 'kategori' => $jenis_pembiayaan, // Menyimpan jenis pembiayaan ]; // Menyimpan data ke database if ($m_siswa->update($id_siswa, $data)) { $this->session->setFlashdata('sukses', 'Data telah disimpan'); } else { $this->session->setFlashdata('error', 'Terjadi kesalahan, data tidak bisa disimpan'); } return redirect()->to(base_url('admin/siswa')); } else { // Kirim data ke view untuk menampilkan form edit dengan data yang sudah ada $data = [ 'title' => 'Edit Siswa: ' . $siswa->nama_siswa, 'siswa' => $siswa, 'content' => 'admin/siswa/edit' ]; echo view('admin/layout/wrapper', $data); } } public function import() { $m_siswa = new Siswa_model(); $m_kelas = new Kelas_model(); $m_tahun = new Tahun_model(); $kelas = $m_kelas->listing(); $tahun = $m_tahun->listing(); if ($this->request->getMethod() === 'post' && $this->validate([ 'ID_USER' => 'required', 'id_kelas' => 'required', 'id_tahun' => 'required', 'file_excel' => [ 'ext_in[file_excel,xlsx,xls,csv]', 'max_size[file_excel,4096]', ], ])) { $id_kelas = $this->request->getPost('id_kelas'); $id_tahun = $this->request->getPost('id_tahun'); $file = $this->request->getFile('file_excel'); $filename = $file->getRandomName(); $file->move(WRITEPATH . '../assets/upload/file/', $filename); $filepath = WRITEPATH . '../assets/upload/file/' . $filename; $ext = $file->getClientExtension(); // Pilih reader berdasarkan ekstensi file if ($ext == 'csv') { $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Csv'); } elseif ($ext == 'xls') { $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xls'); } else { // xlsx $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); } $reader->setReadDataOnly(true); $spreadsheet = $reader->load($filepath); $worksheet = $spreadsheet->getActiveSheet(); $i = 1; foreach ($worksheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $cells = []; foreach ($cellIterator as $cell) { $cells[] = $cell->getValue(); } if ($i > 1) { // Lewati header if (empty($cells[1])) { $i++; continue; } $data = [ 'id_tahun' => $id_tahun, 'id_kelas' => $id_kelas, 'kode_siswa' => null, 'slug_siswa' => null, 'kategori' => $cells[0], 'nis' => $cells[1], 'nama_siswa' => $cells[2], 'telepon' => $cells[3], 'email' => $cells[4], 'password' => password_hash($cells[1], PASSWORD_DEFAULT), 'password_hint' => null, 'jenis_kelamin' => $cells[5], 'isi' => $cells[6], 'nama_ayah' => $cells[7], 'nama_ibu' => $cells[8], 'telepon_ayah' => $cells[9], 'telepon_ibu' => $cells[10], 'kelompok' => null, 'gambar' => null, 'status_siswa' => 'Aktif', 'tanggal_baca' => null, 'tanggal_post' => date('Y-m-d H:i:s'), 'tanggal' => date('Y-m-d H:i:s'), ]; $m_siswa->insert($data); } $i++; } $this->session->setFlashdata('sukses', 'Data siswa berhasil diimpor.'); return redirect()->to(base_url('admin/siswa')); } else { $data = [ 'title' => 'Import Data Siswa', 'kelas' => $kelas, 'tahun' => $tahun, 'content' => 'admin/siswa/import' ]; echo view('admin/layout/wrapper', $data); } } public function proses() { $m_siswa = new Siswa_model(); $request = service('request'); $submit = $request->getPost('submit'); $id_siswa = $request->getPost('id_siswa'); if (empty($id_siswa)) { $this->session->setFlashdata('warning', 'Tidak ada siswa yang dipilih.'); return redirect()->to(base_url('admin/siswa')); } if ($submit === 'delete') { // Proses hapus banyak siswa foreach ($id_siswa as $id) { $m_siswa->delete($id); } $this->session->setFlashdata('sukses', 'Beberapa data siswa berhasil dihapus.'); } elseif ($submit === 'update') { // Update status siswa $status = $request->getPost('status_siswa'); foreach ($id_siswa as $id) { $m_siswa->update($id, ['status_siswa' => $status]); } $this->session->setFlashdata('sukses', 'Status siswa berhasil diperbarui.'); } return redirect()->to(base_url('admin/siswa')); } // Delete public function delete($id_siswa) { $m_siswa = new Siswa_model(); $data = ['id_siswa' => $id_siswa]; $m_siswa->delete($data); $this->session->setFlashdata('sukses', 'Data telah dihapus'); return redirect()->to(base_url('admin/siswa')); } }